知识图谱可以简单理解为语义网络或多关系图——图结构
涉及技术
数据获取
- 爬虫抓取自己所需的数据——公开或半公开数据
- 数据库读取已有数据——业务数据
- API——第三方数据
所有的数据需要整合到MySQL之类的数据库中——数据持久化
数据预处理
- 数据清洗:去掉无关信息,提前做字段对齐(数据融合中要用到)
- 知识抽取:从非结构化文本抽取关键信息
- 消歧分析:实体统一——比较关键的步骤
导入数据到知识图谱
数据筛选——业务所需的知识
知识图谱设计——类似于数据库设计,需要耗费较多时间
批量导入——高效导入历史数据,此时数据已经处理为node-relationship 格式
MySQL -> MySQL Connector -> APOC -> Neo4j
- 可用neo4j数据库从MySQL中导入数据
- 可用APOC插件,可实现功能
- 索引管理:加快查找
- 图算法:PR 、中心算法 、社区检测
- 实用函数:域名提取,时间和日期,数字格式转换等
- 空间函数:地理编码、位置计算、空间与时间搜索等
- 数据集成:JSON、JDBC、CSV等数据加载——数据传导
- 图形重构:节点合并、属性规范化与分类等
- 虚拟节点/关系:创建虚拟图——类似于虚表
- Cypher操作:Cypher语句和脚本运行
- 触发器
增量导入——实时导入更新数据
- 基于Canal的数据库增量日志解析 Canal Server -> Canal Client -> Kafka producer
- 基于Kafka的实时分布式消息 Kafka producer -> Kafka -> Kafka consumer -> Neo4j Driver
应用层的搭建
基于业务需求在分布式或微服务平台上搭建数据模型 Neo4j -> Restful API 或 Spark Graph X
- 如抽取实体的相关特征,构建特征工程
- 基于特征工程用逻辑回归(常用于二分类问题)、GBDT、SVM、神经网络等方法搭建模型——更复杂的模型如DL,需要更多的数据。
- 定义目标函数:模型的实例化
- 优化目标函数:训练模型——梯度下降法(迭代比较低效),随机梯度下降法(参数更新只依赖一个样本,非常高效)
- 优化目标函数
- 模型评估:准确率(存在样本不均衡问题,两种错误代价相同问题)、AUC
- 微服务:将功能按进行细分,每个功能对应一个服务,运行在独立的进程,服务间采用轻量级的通信机制,通常是基于HTTP协议的RESTful API ——基于协议的通信方式,与语言无关。但是不要多度拆分