知识图谱
概念
知识图谱旨在利用图结构建模、识别和推断出事物之间的复杂关联关系和沉淀领域知识。本质上是一种大规模语义网络。
组成:
- 实体:客观存在的事物或抽象概念
- 关系:两个实体之间的某种关联 显然为了确定一种联系,我们需要一个三元组形式<节点,边,节点>,即为<实体,关系,实体>,因此知识图谱以三元组的形式保存。\
研究历程
起源于符号主义,从知识工程到知识图谱,克服了专家系统的缺点
大数据+知识图谱的特点:
- 更多实体信息
- 更加丰富的语义关系
- 更高的质量
- 友好的结构
应用场景
辅助搜索、辅助问答交互、辅助推荐系统、辅助大数据分析、辅助视觉理解……
构建与应用
知识抽取
从非结构化或半结构化的数据(如文本、网页、数据库等)中自动识别并提取出有意义的结构化知识的过程。是构建知识图谱的关键步骤。
实体抽取:从文本中抽取实体信息元素
方法:
- 基于人工设计的模板和规则匹配实体词:“动副形名”,利用文本之间的规则关系识别命名实体。
- 基于序列标注的机器学习方法(二分类问题,进行语义分析):
- 确定标签体系,定义什么是实体与非实体。
- 选择机器学习模型。
- 利用已知数据训练。
关系抽取:从文本中抽取出两个或多个实体之间的语义关系
方法:
- 基于模板的方法:借助语言本身的逻辑,使用触发词匹配的方法抽取关系。例如“同学”作为关键词,可以抽取出两个人物实体的关系(同学关系)。
- 基于监督学习的关系抽取:
- 预定义关系类别
- 人工标注数据
- 设计特征表示
- 选择分类方法
- 评估结果
- 监督学习关系提取起源与实例
- 基于特征函数+最大熵模型,解决传统方式中标注数据稀缺和实体检测模型推断带来的错误等问题
- 对于句子特征的处理:综合词汇特征(Lexical features,指与单词本身有关的信息,如词形、词性、词频等)、句法特征(Syntactic features,涉及句子的结构关系,如依存结构、短语结构、句法路径等)、语义特征(Semantic features,涉及词语或短语的意义,如词义角色、上下文含义、同义/反义关系等)
- 方法:首先构造关系种类,并以此作为分类根据进行构建多分类模型。然后利用某些方法(Parse Tree,Dependency Tree)来提取上述三种特征作为特征向量。利用交叉熵学习。
- 评估标准:
指标 | 含义 | 高值代表什么 |
---|---|---|
Precision | 预测为“关系”的结果中,有多少是对的 | 模型判断更准确 |
Recall | 所有真正的关系中,模型找出来了多少 | 模型更“全面” |
F1 | 综合考虑准确性和覆盖率 | 模型总体质量更好 |
事件抽取:从文本中获得发生的事情
事件抽取分为事件发现和分类、事件要素提取两个过程
知识表示
为了表示复杂的关系、事件等自然语言成分,我们引入了知识表示(KR)的概念。将抽取到或已有的知识,转化为一种可以被计算机理解、存储、推理和操作的形式(如图结构、逻辑语言等),进而进行推理等应用。
逻辑表示法
一阶谓词逻辑(经典逻辑),最常用也最精准 基本成分:
- 命题:具有真假意义的陈述句,分为命题常元与命题变元(真值是否固定)
- 逻辑联结词:易混淆 $\rightarrow$为蕴含,$P \rightarrow Q$为“如果P,则Q”
- 复合命题与原子命题的真值表
- 个题词:实体
- 谓词:关系(返回值为bool值,关系是否成立)
- 函数:已知实体描述新实体的映射(返回值为实体,无T/F概念,嵌入比较或谓词中才构成命题)
- 量词:存在、全称 形式演绎推理: 过程为命题符号化、等价变换为已有知识可推出的形式、利用逻辑蕴含式(已有知识)推出结论
- 自然演绎推理
- 归结演绎推理
产生式表示法
框架表示法
向量表示法
通过向量描述实体 怎么描述关系? 基于平移的模型: 自然语言空间中属性差别相近的实体,其词向量差在词向量空间中呈现平移不变性,受到启发,也许可以使用向量差作为关系的向量化表达。详见对于向量差作为实体关系的研究
GNN(图神经网络)
对于知识图谱的构建,我们看到需要在一张“图”中进行学习,那么对于这种数据结构,通常使用GNN
目标:学习节点的表示或全图的表示(包括节点自身的特征与图的连接特征)
表示:
$V$为节点集合
$A \in {0,1}^{|V|\times|V|}$ 为邻接矩阵( $A_{ij}$ 表示节点i,j存在边)
$X \in \mathbb{R}^{|V|\times d}$ 为节点特征矩阵
$v$为$V$中的节点,$N(v)$ 是$v$邻居节点的集合,$d$为特征维度
核心:聚合邻居节点的特征来学习中心节点的表示 $A\times X$即为最简单的一种方式,用中心节点所有邻居节点的特征和作为中心节点的表示。可见最关键的就是设计不同的聚合方式。
消息聚合
多层GNN
- 节点v的k-hop邻居:图中与 v 的最短路径长度恰好为 k 的所有节点。
- 每一层GNN就会聚合一层节点最近邻居(1-hop)的特征,多层堆叠之后,对于中心节点就可以聚合到k-hop邻居的特征
计算消息
- 消息可以理解为节点向外界传播的特征,计算时候需要考虑前向特征,自身特征,关系特征,综合后输出
节点传出消息的公式模型为
\(m_v^{(l)} = \sum_{u \in \mathcal{N}(v)} \text{Message}^{(l)}(h_v^{(l-1)}, h_u^{(l-1)}, e_{uv})\)
- $h_u^{(l-1)}$:邻居节点 $u$的上一层表示;
- $e_{uv}$:边的特征(如果有);
- $\text{Message}^{(l)}(\cdot)$:第 $l$ 层的消息函数;
- $m_v^{(l)}$:从所有邻居收集而来的消息(对所有邻居的消息求和、平均或最大)。
接收节点再通过更新函数(Update Function)结合节点自身的状态更新节点特征:
\(h_v^{(l)} = \text{Update}^{(l)}(h_v^{(l-1)}, m_v^{(l)})\)
排列不变性:
GNN不依赖节点顺序,下一个节点的邻居总是固定的