知识图谱之实体分类
实体分类任务旨在根据相关资源判断实体语义所属的类别。
实体分类任务一般分成:细粒度实体分类和粗粒度实体分类。
下面主要介绍KNET(knoWledge-Attention Nerual Fine-granined Entity Typing)基于知识注意力机制的神经细粒度实体分类。
这种算法解决了无法建模实体提及与上下文的复杂关联以及无法将知识图谱的信息考虑在内的问题。
3 KNET 的整体框架
给定一个包含实体提及及其上下文的句子 s s s ,以及一组实体类型(分类体系)T \mathcal{T} T ,我们的模型旨在为这个实体提及预测每个类型的概率。
我们将句子 s s s 中的实体提及和左/右上下文词分别记为 m i , l i , r i m_i, l_i, r_i m i , l i , r i ,句子是一个词序列 s = { … , l 2 , l 1 , m 1 , m 2 , … , r 1 , r 2 , … } s = \{\ldots, l_2, l_1, m_1, m_2, \ldots, r_1, r_2, \ldots \} s = { … , l 2 , l 1 , m 1 , m 2 , … , r 1 , r 2 , … } 。对于每个词,我们用粗体表示其对应的词向量。对于每个实体提及,我们的模型构建一个特征向量 x \mathbf{x} x ,通过计算实体类型向量 y \mathbf{y} y 来推断每个类型的概率。
KNET 的框架由两部分组成:(1) 句子编码器(Sentence Encoder),将句子 s s s 编码为特征向量 x \mathbf{x} x ;(2) 类型预测器(Type Predictor),从 x \mathbf{x} x 计算 y \mathbf{y} y 来推断实体类型。
❓ 问题:这里说的实体提及以及上下文如何实现?
✅ 解答:
实体提及(Entity Mention) 是指文本中指向某个实体的具体词或短语。例如,在句子 “Gates and Allen co-founded Microsoft” 中,Gates、Allen 和 Microsoft 都是实体提及。
上下文(Context) 是指句子中围绕实体提及的其他词语,它们提供了判断实体类型的线索。
在 KNET 中的具体实现方式:
实体提及表示 :将实体提及包含的所有词的词向量求平均 ,得到一个固定维度的向量。
m = 1 n m ∑ i = 1 n m m i
\mathbf{m} = \frac{1}{n_m} \sum_{i=1}^{n_m} \mathbf{m}_i
m = n m 1 i = 1 ∑ n m m i
例如,“New York” 由两个词组成,将 New 和 York 的词向量相加后除以 2。
上下文表示 :使用双向 LSTM 分别读取实体提及左侧和右侧的上下文词,输出隐藏状态,再通过注意力机制 加权求和。
左侧上下文:… , l 3 , l 2 , l 1 \ldots, l_3, l_2, l_1 … , l 3 , l 2 , l 1
右侧上下文:r 1 , r 2 , r 3 , … r_1, r_2, r_3, \ldots r 1 , r 2 , r 3 , …
窗口大小 L L L 决定考虑多少个上下文词
特征拼接 :最终的特征向量 x \mathbf{x} x 是两者拼接:
x = [ m c ]
\mathbf{x} = \begin{bmatrix} \mathbf{m} \\ \mathbf{c} \end{bmatrix}
x = [ m c ]
❓ 问题:这个分类体系又是如何决定的?
✅ 解答:
分类体系(Taxonomy) 是指所有可能的实体类型构成的集合及其层次结构。
在 KNET 中的决定方式:
来源 :论文使用 Freebase 知识库中的类型体系。Freebase 包含数千种类型,如 /people/person、/location/city、/organization/company 等。
筛选与映射 :原始 Freebase 类型存在噪声(如 New York City 有 85 种类型),论文采取了以下处理:
只保留在 FB15K 数据集中至少有 50 个实例 的类型
手动将这些类型映射到一个 两层层次分类体系 ,共 74 种类型
层次结构示例 :
1 2 3 4 5 6 7 8 9 10 11 12 /person ├── /artist ├── /actor ├── /athlete └── /politician /location ├── /city ├── /country └── /river /organization ├── /company └── /government
两种数据集 :
WIKI-AUTO (自动标注):通过 Wikipedia 锚链接匹配 Freebase 实体,远程监督获取类型标签
WIKI-MAN (手动标注):随机选取 100 个实体提及,人工标注以确保准确性
❓ 问题:这里的实体类型向量又是什么意思?
✅ 解答:
实体类型向量 y \mathbf{y} y 是模型输出的概率分布向量 。
y \mathbf{y} y 的维度 等于分类体系中类型的总数(即 74)
y ( i ) \mathbf{y}^{(i)} y ( i ) 表示第 i i i 个类型的预测概率 ,即该实体提及属于第 i i i 个类型的可能性
每个值在 0 到 1 之间
计算方式 :
y = σ ( W y 1 tanh ( W y 2 x ) )
\mathbf{y} = \sigma \left( \mathbf{W}_{y1} \tanh \left( \mathbf{W}_{y2} \mathbf{x} \right) \right)
y = σ ( W y 1 tanh ( W y 2 x ) )
预测策略 :
如果某类型的概率 > 0.5 > 0.5 > 0.5 ,则预测为正
如果所有概率都 ≤ 0.5 \leq 0.5 ≤ 0.5 ,则选择概率最大的类型作为正
3.1 句子编码器
我们的模型通过神经网络将词向量转换为实体提及和上下文的表示。特征向量 x \mathbf{x} x 是实体提及表示 m \mathbf{m} m 和上下文表示 c \mathbf{c} c 的拼接:
x = [ m c ] . (1)
\mathbf{x} = \begin{bmatrix} \mathbf{m} \\ \mathbf{c} \end{bmatrix}. \tag{1}
x = [ m c ] . ( 1 ) 实体提及表示(Entity mention representation) 。遵循 Shimaoka 等人(2016)的方法,实体提及的表示 m \mathbf{m} m 简单地通过对实体提及词的词向量求平均来计算:
m = 1 n m ∑ i = 1 n m m i , (2)
\mathbf{m} = \frac{1}{n_m} \sum_{i=1}^{n_m} \mathbf{m}_i, \tag{2}
m = n m 1 i = 1 ∑ n m m i , ( 2 ) 其中 n m n_m n m 是实体提及的长度。简单的平均对于实体提及表示已经足够,因为实体提及通常由少量词组成(大多数情况下为 1 或 2 个),因此复杂模型(如 CNN 或 RNN)容易过拟合。
上下文表示(Context representation) 。使用双向 LSTM 和注意力机制来编码上下文表示。上下文词 { … , l 3 , l 2 , l 1 } \{\ldots, l_3, l_2, l_1\} { … , l 3 , l 2 , l 1 } 和 { r 1 , r 2 , r 3 , … } \{r_1, r_2, r_3, \ldots\} { r 1 , r 2 , r 3 , … } 的词向量被输入 LSTM,上下文表示 c \mathbf{c} c 是 LSTM 输出的加权和:
c = ∑ i = 1 L ( a i l [ h → i l h ← i l ] + a i r [ h → i r h ← i r ] ) ∑ i = 1 L a i l + a i r , (3)
\mathbf{c} = \frac{\sum_{i=1}^{L} \left( a_i^l \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^l \\ \overleftarrow{\mathbf{h}}_i^l \end{bmatrix} + a_i^r \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^r \\ \overleftarrow{\mathbf{h}}_i^r \end{bmatrix} \right)}{\sum_{i=1}^{L} a_i^l + a_i^r}, \tag{3}
c = ∑ i = 1 L a i l + a i r ∑ i = 1 L ( a i l [ h i l h i l ] + a i r [ h i r h i r ] ) , ( 3 ) 其中 h → i \overrightarrow{\mathbf{h}}_i h i 和 h ← i \overleftarrow{\mathbf{h}}_i h i 是双向 LSTM 的输出,箭头表示 LSTM 的方向。a i a_i a i 是对应的注意力分数,将在下一节详细介绍。上标 l l l 和 r r r 表示左或右上下文部分。L L L 是上下文词的窗口大小。
❓ 问题:上下文表示的那个 c \mathbf{c} c 的公式是如何来的?
✅ 解答:
第一步:双向 LSTM 编码
对于左侧上下文词序列 { l 1 , l 2 , … , l L } \{l_1, l_2, \ldots, l_L\} { l 1 , l 2 , … , l L } ,双向 LSTM 产生两个方向的隐藏状态:
前向(→):从左到右,捕获上文信息
后向(←):从右到左,捕获下文信息
将两者拼接:h i l = [ h → i l h ← i l ] \mathbf{h}_i^l = \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^l \\ \overleftarrow{\mathbf{h}}_i^l \end{bmatrix} h i l = [ h i l h i l ]
第二步:注意力加权
并不是所有上下文词对实体分类同等重要。注意力机制为每个词分配一个权重 a i a_i a i ,权重越大表示该词越重要。
第三步:加权求和与归一化
将所有词的加权向量表示相加,再除以权重之和(归一化),得到最终的上下文表示。
为什么这样设计?
双向 LSTM 能捕捉上下文词的完整语义(既看前文也看后文),注意力机制则能筛选出与当前实体最相关的词。
3.2 类型预测器
类型向量 y \mathbf{y} y 通过两层多层感知机(MLP)从句子向量 x \mathbf{x} x 计算得到。y \mathbf{y} y 的每个条目表示给定实体提及的该类型的预测概率:
y = σ ( W y 1 tanh ( W y 2 x ) ) , y ( i ) = p ( t ( i ) ∣ s , θ ) , (5)
\begin{aligned}
\mathbf{y} &= \sigma \left( \mathbf{W}_{y1} \tanh \left( \mathbf{W}_{y2} \mathbf{x} \right) \right), \\
\mathbf{y}^{(i)} &= p(t^{(i)} | s, \theta),
\end{aligned} \tag{5}
y y ( i ) = σ ( W y 1 tanh ( W y 2 x ) ) , = p ( t ( i ) ∣ s , θ ) , ( 5 ) 其中 θ \theta θ 表示我们模型的所有参数,σ \sigma σ 是 sigmoid 函数,W y 1 , W y 2 \mathbf{W}_{y1}, \mathbf{W}_{y2} W y 1 , W y 2 是 MLP 参数矩阵,t ( i ) t^{(i)} t ( i ) 表示为该实体预测的第 i i i 个类型。如果概率大于 0.5,则该类型被预测为正;如果没有一个大于 0.5,则将概率最大的类型视为正。
目标函数定义为所有实体提及上的逐元素交叉熵:
J ( θ ) = − ∑ i , j [ y ∗ ( j ) log y i ( j ) + ( 1 − y ∗ ( j ) ) log ( 1 − y i ( j ) ) ] , (6)
J(\theta) = -\sum_{i,j} \left[ \mathbf{y}^*(j) \log \mathbf{y}_i^{(j)} + (1 - \mathbf{y}^*(j)) \log (1 - \mathbf{y}_i^{(j)}) \right], \tag{6}
J ( θ ) = − i , j ∑ [ y ∗ ( j ) log y i ( j ) + ( 1 − y ∗ ( j )) log ( 1 − y i ( j ) ) ] , ( 6 ) 其中 y ∗ \mathbf{y}^* y ∗ 表示该提及的真实类型,y i ( j ) \mathbf{y}_i^{(j)} y i ( j ) 是向量 y i \mathbf{y}_i y i 的第 j j j 个条目。我们通过优化参数 θ \theta θ 来最大化 J J J 。
4 KNET 的注意力机制
注意力机制在我们的模型中起着重要作用。在本节中,我们介绍上下文表示中注意力 a i l a_i^l a i l 和 a i r a_i^r a i r 的设计,如公式 (3) 所示。注意力被期望同时考虑实体-上下文和实体-知识库的关联。在本文中,我们探索了三种注意力:
语义注意力(Semantic Attention, SA) :简单地将上下文表示本身作为注意力查询,由 Shimaoka 等人(2017)提出,将作为我们的基线方法。
提及注意力(Mention Attention, MA) :将实体提及表示 m \mathbf{m} m 作为注意力查询,期望捕捉实体与上下文信息之间的语义关联。
知识注意力(Knowledge Attention, KA) :将从外部知识库学习的实体表示作为注意力查询,期望捕捉实体-上下文和实体-知识库的语义关联。
注意力的具体描述如下。
4.1 语义注意力(SA)
Shimaoka 等人(2017)应用 MLP 来计算语义注意力:
a i S A = σ ( W S 1 tanh ( W S 2 [ h → i h ← i ] ) ) , (7)
a_i^{SA} = \sigma \left( \mathbf{W}_{S1} \tanh \left( \mathbf{W}_{S2} \begin{bmatrix} \overrightarrow{\mathbf{h}}_i \\ \overleftarrow{\mathbf{h}}_i \end{bmatrix} \right) \right), \tag{7}
a i S A = σ ( W S 1 tanh ( W S 2 [ h i h i ] ) ) , ( 7 ) 其中 W S 1 \mathbf{W}_{S1} W S 1 和 W S 2 \mathbf{W}_{S2} W S 2 是 MLP 参数矩阵。从这里开始,我们省略上标 l l l 和 r r r ,因为它们的计算方式相同。
我们注意到,所有实体共享用于计算 SA 的同一个 MLP。因此,为上下文词计算的注意力与所关注的实体无关。因此,SA 很难聚焦于那些与相应实体高度相关的上下文词。
4.2 提及注意力(MA)
为了考虑实体-上下文关联,很自然地将实体提及作为计算注意力时的注意力查询。形式上,给定公式 (2) 中提到的实体提及表示 m \mathbf{m} m ,我们如下计算注意力:
a i M A = f ( m W M A [ h → i T h ← i ] ) , (8)
a_i^{MA} = f \left( \mathbf{m} \mathbf{W}_{MA} \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^T \\ \overleftarrow{\mathbf{h}}_i \end{bmatrix} \right), \tag{8}
a i M A = f ( m W M A [ h i T h i ] ) , ( 8 ) 其中 W M A \mathbf{W}_{MA} W M A 是一个双线性参数矩阵,f ( ) f() f ( ) 是一个非线性函数。我们简单地选择二次函数 f ( x ) = x 2 f(x) = x^2 f ( x ) = x 2 ,它是正定的且易于求导(公式 (9) 也采用相同设置)。
4.3 知识注意力(KA)
知识库提供关于实体的丰富关系信息,这对实体分类很重要。我们使用最广泛使用的 KRL 方法 TransE(Bordes et al. 2013)将关系信息编码到实体嵌入中。
在训练过程中,某个实体提及对应的实体 e e e 是已知的,因此,类似于公式 (8),我们可以直接计算知识注意力:
a i K A = f ( e W K A [ h → i T h ← i ] ) , (9)
a_i^{KA} = f \left( \mathbf{e} \mathbf{W}_{KA} \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^T \\ \overleftarrow{\mathbf{h}}_i \end{bmatrix} \right), \tag{9}
a i K A = f ( e W K A [ h i T h i ] ) , ( 9 ) 其中 e \mathbf{e} e 是实体 m m m 的嵌入,W K A \mathbf{W}_{KA} W K A 是一个双线性参数矩阵。
❓ 问题:为何这三种注意力的公式的矩阵会有区别呢?
✅ 解答:
注意力类型
查询来源
矩阵
目的
语义注意力 (SA)
上下文自身
W S 1 , W S 2 \mathbf{W}_{S1}, \mathbf{W}_{S2} W S 1 , W S 2
学习词本身的语义重要性
提及注意力 (MA)
实体提及表示 m \mathbf{m} m
W M A \mathbf{W}_{MA} W M A
关注与实体提及相关的上下文词
知识注意力 (KA)
知识库嵌入 e \mathbf{e} e
W K A \mathbf{W}_{KA} W K A
关注与实体知识相关的上下文词
原因分析:
查询来源不同 :三种注意力的"查询"(Query)不同——SA 用上下文自身,MA 用实体提及,KA 用知识库嵌入。不同来源的信息需要不同的映射矩阵。
期望捕捉的关系不同 :
SA:捕捉词与词 的语义关系
MA:捕捉实体与上下文 的语义关系
KA:捕捉实体知识与上下文 的语义关系
矩阵维度匹配 :m \mathbf{m} m 、e \mathbf{e} e 和 LSTM 隐藏状态的维度可能不同,需要不同大小的矩阵进行线性变换。
参数独立性 :每个矩阵独立训练,学习各自的最优映射。
公式对比 :
SA:a i S A = σ ( W S 1 tanh ( W S 2 h i ) ) a_i^{SA} = \sigma(\mathbf{W}_{S1} \tanh(\mathbf{W}_{S2} \mathbf{h}_i)) a i S A = σ ( W S 1 tanh ( W S 2 h i ))
MA:a i M A = f ( m W M A h i ) a_i^{MA} = f(\mathbf{m} \mathbf{W}_{MA} \mathbf{h}_i) a i M A = f ( m W M A h i )
KA:a i K A = f ( e W K A h i ) a_i^{KA} = f(\mathbf{e} \mathbf{W}_{KA} \mathbf{h}_i) a i K A = f ( e W K A h i )
测试中的知识注意力(Knowledge Attention in Testing) 。与训练不同,在测试过程中有一个新的挑战:我们事先不知道知识库中哪个实体对应于某个实体提及(它甚至可能是知识库外的)。一个直接的解决方案是进行实体链接,但实体链接本身并不简单,并且会不可避免地引入错误。此外,实体链接对知识库外实体不起作用。
为了解决这一挑战,我们尝试使用文本信息重建实体嵌入。这些嵌入也在训练过程中学习。具体来说,对于实体 e e e 及其上下文句子 s s s ,我们使用单向 LSTM 将其左/右上下文编码为 c l \mathbf{c}_l c l 和 c r \mathbf{c}_r c r ,并进一步学习基于文本的表示 e ^ \hat{\mathbf{e}} e ^ :
e ^ = tanh ( W [ m c l c r ] ) , (10)
\hat{\mathbf{e}} = \tanh \left( \mathbf{W} \begin{bmatrix} \mathbf{m} \\ \mathbf{c}_l \\ \mathbf{c}_r \end{bmatrix} \right), \tag{10}
e ^ = tanh W m c l c r , ( 10 ) 其中 W \mathbf{W} W 是参数矩阵,m \mathbf{m} m 是公式 (2) 中的提及表示。注意,这里使用的 LSTM 与公式 (3) 中的不同,以防止干扰。为了桥接文本重建和基于知识库的表示,在训练过程中我们通过在目标函数 J J J (公式 (6))中添加一个额外组件来同时学习 e ^ \hat{\mathbf{e}} e ^ :
J K B ( θ ) = − ∑ ∣ ∣ e − e ^ ∣ ∣ 2 , (11)
J_{KB}(\theta) = -\sum ||\mathbf{e} - \hat{\mathbf{e}}||^2, \tag{11}
J K B ( θ ) = − ∑ ∣∣ e − e ^ ∣ ∣ 2 , ( 11 ) 其中求和覆盖训练集中的所有实体。这样,在测试过程中,我们可以直接使用公式 (10) 获得近似的实体嵌入,并使用公式 (9) 计算知识注意力。
❓ 问题:不太理解这里测试中的注意力为啥和前面不一样了呢?
✅ 解答:
训练时的 KA:
实体提及对应的知识库实体 e e e 是已知的 (训练数据已经链接好)
直接使用该实体的知识库嵌入 e \mathbf{e} e 计算注意力
测试时的 KA:
实体提及对应的知识库实体是未知的 (测试时只知道文本,不知道链接到哪个实体)
甚至可能遇到知识库外实体 (out-of-KB entities)
核心问题 :测试时不知道 e e e 的值!
解决方案:文本重建实体嵌入
训练时额外学习一个从文本到实体嵌入的映射,同时优化两个目标:
分类任务:J ( θ ) J(\theta) J ( θ ) —— 预测实体类型
重建任务:J K B ( θ ) = − ∑ ∣ ∣ e − e ^ ∣ ∣ 2 J_{KB}(\theta) = -\sum ||\mathbf{e} - \hat{\mathbf{e}}||^2 J K B ( θ ) = − ∑ ∣∣ e − e ^ ∣ ∣ 2 —— 让文本重建的嵌入接近知识库嵌入
测试时 :直接用文本重建嵌入 e ^ \hat{\mathbf{e}} e ^ 代替知识库嵌入 e \mathbf{e} e ,计算知识注意力。
总结差异 :
阶段
知识来源
注意力计算方式
训练
知识库实体嵌入 e \mathbf{e} e (已知)
a i K A = f ( e W K A h i ) a_i^{KA} = f(\mathbf{e} \mathbf{W}_{KA} \mathbf{h}_i) a i K A = f ( e W K A h i )
测试
文本重建嵌入 e ^ \hat{\mathbf{e}} e ^ (未知则重建)
a i K A = f ( e ^ W K A h i ) a_i^{KA} = f(\hat{\mathbf{e}} \mathbf{W}_{KA} \mathbf{h}_i) a i K A = f ( e ^ W K A h i )
带消歧的知识注意力(KA+D) 。很自然地,如果我们能通过实体提及的表面名称缩小候选实体的范围,我们就能获得更准确的信息。这些信息可以作为公式 (10) 构建的文本重建嵌入的补充。我们如下进行实体消歧:(1) 通过匹配知识库中实体的表面名称和实体提及,构建候选实体列表。(2) 计算文本重建嵌入 e ^ \hat{\mathbf{e}} e ^ 与知识库中候选实体表示之间的 L2 距离,选择距离最小的候选实体。如图 2 所示。
为了减轻不可避免的消歧错误带来的危害,我们为 L2 距离设置了一个阈值 α \alpha α 。对于选中的实体 e e e 及其 L2 距离 d d d ,如果 d d d 小于 α \alpha α ,这意味着我们可以对消歧结果有信心,我们选择 e \mathbf{e} e 来计算知识注意力。如果 d d d 大于 α \alpha α ,这意味着消歧过程可能是错误的,或者这是一个知识库外实体且知识库中没有相似实体,我们直接使用 e ^ \hat{\mathbf{e}} e ^ 。
❓ 问题:对带消歧的知识注意力进行详细地解释
✅ 解答:
1. 为什么需要消歧?
文本重建的嵌入 e ^ \hat{\mathbf{e}} e ^ 是近似 的,可能不够精确。如果能从知识库中找到精确匹配的实体嵌入 ,效果会更好。
2. 消歧流程
第一步:候选实体筛选
通过表面名称匹配 (Surface Name Matching),从知识库中找出所有名称与实体提及相同或相似的实体。
例如,实体提及 “Washington” 可能对应:
华盛顿市(location)
华盛顿州(location)
乔治·华盛顿(person)
第二步:嵌入相似度计算
计算文本重建嵌入 e ^ \hat{\mathbf{e}} e ^ 与每个候选实体嵌入 e j \mathbf{e}_j e j 之间的 L2 距离 :
d j = ∣ ∣ e ^ − e j ∣ ∣ 2
d_j = ||\hat{\mathbf{e}} - \mathbf{e}_j||_2
d j = ∣∣ e ^ − e j ∣ ∣ 2
选择距离最小的候选实体:
e ∗ = arg min e j ∈ Candidates ∣ ∣ e ^ − e j ∣ ∣ 2
e^* = \arg\min_{e_j \in \text{Candidates}} ||\hat{\mathbf{e}} - \mathbf{e}_j||_2
e ∗ = arg e j ∈ Candidates min ∣∣ e ^ − e j ∣ ∣ 2
第三步:阈值判断
设置阈值 α \alpha α ,判断消歧结果的可靠性:
如果 d < α d < \alpha d < α :有信心 → 使用知识库实体嵌入 e ∗ \mathbf{e}^* e ∗ 计算 KA
如果 d ≥ α d \geq \alpha d ≥ α :无信心 (可能是 out-of-KB 实体) → 直接使用文本重建嵌入 e ^ \hat{\mathbf{e}} e ^
3. 为什么有效?
场景
消歧结果
使用
效果
知识库内实体 + 清晰上下文
正确匹配
e \mathbf{e} e (精确)
最佳效果
知识库内实体 + 模糊上下文
可能错误
e ^ \hat{\mathbf{e}} e ^ (文本重建,有阈值保护)
避免错误传播
知识库外实体
无法匹配(距离大)
e ^ \hat{\mathbf{e}} e ^ (文本重建)
合理泛化
4. 阈值 α \alpha α 的权衡
实验结果表明(图 3):
α \alpha α 变化
Correct 子集
Erroneous 子集
增大
性能提升(更多使用精确嵌入)
性能下降(错误消歧被接受)
减小
性能略降(更多使用近似嵌入)
性能提升(错误消歧被拒绝)
论文最终选择 α = 0.55 \alpha = 0.55 α = 0.55 作为平衡点。
参考文献
Xin, J., Lin, Y., Liu, Z., & Sun, M. (2018). Improving Neural Fine-Grained Entity Typing with Knowledge Attention. In Proceedings of the AAAI Conference on Artificial Intelligence .
AI参与声明 :本文档在撰写过程中使用了AI辅助工具进行内容整理、格式优化与部分内容扩展。所有核心概念与公式推导均基于原始学术论文 Xin et al.(2018),并经人工校验与补充。
实体分类任务旨在根据相关资源判断实体语义所属的类别。
实体分类任务一般分成:细粒度实体分类和粗粒度实体分类。
下面主要介绍KNET(Knowledge-Attention Neural Fine-grained Entity Typing)——基于知识注意力机制的神经细粒度实体分类模型。
这种算法解决了两个核心问题:(1) 无法建模实体提及与上下文的复杂关联;(2) 无法将知识图谱的信息考虑在内。
一、实体提及与上下文:如何实现?
❓ 问题:这里说的实体提及以及上下文如何实现?
实体提及(Entity Mention) 是指文本中指向某个实体的具体词或短语。例如,在句子 “Gates and Allen co-founded Microsoft” 中,Gates、Allen 和 Microsoft 都是实体提及。
上下文(Context) 是指句子中围绕实体提及的其他词语,它们提供了判断实体类型的线索。
在 KNET 中的具体实现方式:
实体提及表示 :将实体提及包含的所有词的词向量求平均 ,得到一个固定维度的向量。
m = 1 n m ∑ i = 1 n m m i
\mathbf{m} = \frac{1}{n_m} \sum_{i=1}^{n_m} \mathbf{m}_i
m = n m 1 i = 1 ∑ n m m i
例如,“New York” 由两个词组成,将 New 和 York 的词向量相加后除以 2。
上下文表示 :使用双向 LSTM 分别读取实体提及左侧和右侧的上下文词,输出隐藏状态,再通过注意力机制 加权求和。
左侧上下文:… , l 3 , l 2 , l 1 \ldots, l_3, l_2, l_1 … , l 3 , l 2 , l 1
右侧上下文:r 1 , r 2 , r 3 , … r_1, r_2, r_3, \ldots r 1 , r 2 , r 3 , …
窗口大小 L L L 决定考虑多少个上下文词
特征拼接 :最终的特征向量 x \mathbf{x} x 是两者拼接:
x = [ m c ]
\mathbf{x} = \begin{bmatrix} \mathbf{m} \\ \mathbf{c} \end{bmatrix}
x = [ m c ]
二、分类体系:如何决定?
❓ 问题:这个分类体系又是如何决定的?
分类体系(Taxonomy) 是指所有可能的实体类型构成的集合及其层次结构。
在 KNET 中的决定方式:
来源 :论文使用 Freebase 知识库中的类型体系。Freebase 包含数千种类型,如 /people/person、/location/city、/organization/company 等。
筛选与映射 :原始 Freebase 类型存在噪声(如 New York City 有 85 种类型),论文采取了以下处理:
只保留在 FB15K 数据集中至少有 50 个实例 的类型
手动将这些类型映射到一个 两层层次分类体系 ,共 74 种类型
层次结构示例 :
1 2 3 4 5 6 7 8 9 10 11 12 /person ├── /artist ├── /actor ├── /athlete └── /politician /location ├── /city ├── /country └── /river /organization ├── /company └── /government
两种数据集 :
WIKI-AUTO (自动标注):通过 Wikipedia 锚链接匹配 Freebase 实体,远程监督获取类型标签
WIKI-MAN (手动标注):随机选取 100 个实体提及,人工标注以确保准确性
三、实体类型向量:是什么意思?
❓ 问题:这里的实体类型向量又是什么意思?
实体类型向量 y \mathbf{y} y 是模型输出的概率分布向量 。
y \mathbf{y} y 的维度 等于分类体系中类型的总数(即 74)
y ( i ) \mathbf{y}^{(i)} y ( i ) 表示第 i i i 个类型的预测概率 ,即该实体提及属于第 i i i 个类型的可能性
每个值在 0 到 1 之间,且所有值之和为 1(通过 sigmoid 函数保证)
计算方式 :
y = σ ( W y 1 tanh ( W y 2 x ) )
\mathbf{y} = \sigma \left( \mathbf{W}_{y1} \tanh \left( \mathbf{W}_{y2} \mathbf{x} \right) \right)
y = σ ( W y 1 tanh ( W y 2 x ) )
预测策略 :
如果某类型的概率 > 0.5 > 0.5 > 0.5 ,则预测为正
如果所有概率都 ≤ 0.5 \leq 0.5 ≤ 0.5 ,则选择概率最大的类型作为正
四、上下文表示公式详解
❓ 问题:上下文表示的那个 c c c 的公式是如何来的?
c = ∑ i = 1 L ( a i l [ h → i l h ← i l ] + a i r [ h → i r h ← i r ] ) ∑ i = 1 L a i l + a i r
\mathbf{c} = \frac{\sum_{i=1}^{L} \left( a_i^l \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^l \\ \overleftarrow{\mathbf{h}}_i^l \end{bmatrix} + a_i^r \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^r \\ \overleftarrow{\mathbf{h}}_i^r \end{bmatrix} \right)}{\sum_{i=1}^{L} a_i^l + a_i^r}
c = ∑ i = 1 L a i l + a i r ∑ i = 1 L ( a i l [ h i l h i l ] + a i r [ h i r h i r ] ) 公式推导详解
第一步:双向 LSTM 编码
对于左侧上下文词序列 { l 1 , l 2 , … , l L } \{l_1, l_2, \ldots, l_L\} { l 1 , l 2 , … , l L } ,双向 LSTM 产生两个方向的隐藏状态:
前向(→):从左到右,捕获上文信息
后向(←):从右到左,捕获下文信息
将两者拼接:h i l = [ h → i l h ← i l ] \mathbf{h}_i^l = \begin{bmatrix} \overrightarrow{\mathbf{h}}_i^l \\ \overleftarrow{\mathbf{h}}_i^l \end{bmatrix} h i l = [ h i l h i l ]
第二步:注意力加权
并不是所有上下文词对实体分类同等重要。注意力机制为每个词分配一个权重 a i a_i a i ,权重越大表示该词越重要。
第三步:加权求和与归一化
将所有词的加权向量表示相加,再除以权重之和(归一化),得到最终的上下文表示。
为什么这样设计?
双向 LSTM 能捕捉上下文词的完整语义(既看前文也看后文),注意力机制则能筛选出与当前实体最相关的词。
五、三种注意力公式的矩阵差异
❓ 问题:为何这三种注意力的公式的矩阵会有区别呢?
注意力类型
查询来源
矩阵
目的
语义注意力 (SA)
上下文自身
W S 1 , W S 2 \mathbf{W}_{S1}, \mathbf{W}_{S2} W S 1 , W S 2
学习词本身的语义重要性
提及注意力 (MA)
实体提及表示 m \mathbf{m} m
W M A \mathbf{W}_{MA} W M A
关注与实体提及相关的上下文词
知识注意力 (KA)
知识库嵌入 e \mathbf{e} e
W K A \mathbf{W}_{KA} W K A
关注与实体知识相关的上下文词
原因分析 :
查询来源不同 :三种注意力的“查询”(Query)不同——SA 用上下文自身,MA 用实体提及,KA 用知识库嵌入。不同来源的信息需要不同的映射矩阵。
期望捕捉的关系不同 :
SA:捕捉词与词 的语义关系
MA:捕捉实体与上下文 的语义关系
KA:捕捉实体知识与上下文 的语义关系
矩阵维度匹配 :m \mathbf{m} m 、e \mathbf{e} e 和 LSTM 隐藏状态的维度可能不同,需要不同大小的矩阵进行线性变换。
参数独立性 :每个矩阵独立训练,学习各自的最优映射。
公式对比 :
SA:a i S A = σ ( W S 1 tanh ( W S 2 h i ) ) a_i^{SA} = \sigma(\mathbf{W}_{S1} \tanh(\mathbf{W}_{S2} \mathbf{h}_i)) a i S A = σ ( W S 1 tanh ( W S 2 h i ))
MA:a i M A = f ( m W M A h i ) a_i^{MA} = f(\mathbf{m} \mathbf{W}_{MA} \mathbf{h}_i) a i M A = f ( m W M A h i )
KA:a i K A = f ( e W K A h i ) a_i^{KA} = f(\mathbf{e} \mathbf{W}_{KA} \mathbf{h}_i) a i K A = f ( e W K A h i )
六、测试中的知识注意力为什么不同?
❓ 问题:不太理解这里测试中的注意力为啥和前面不一样了呢?
训练时的 KA :
实体提及对应的知识库实体 e e e 是已知的 (训练数据已经链接好)
直接使用该实体的知识库嵌入 e \mathbf{e} e 计算注意力
测试时的 KA :
实体提及对应的知识库实体是未知的 (测试时只知道文本,不知道链接到哪个实体)
甚至可能遇到知识库外实体 (out-of-KB entities)
核心问题 :测试时不知道 e e e 的值!
解决方案:文本重建实体嵌入
训练时额外学习一个从文本到实体嵌入的映射:
e ^ = tanh ( W [ m c l c r ] )
\hat{\mathbf{e}} = \tanh \left( \mathbf{W} \begin{bmatrix} \mathbf{m} \\ \mathbf{c}_l \\ \mathbf{c}_r \end{bmatrix} \right)
e ^ = tanh W m c l c r 同时优化两个目标:
分类任务:J ( θ ) J(\theta) J ( θ ) —— 预测实体类型
重建任务:J K B ( θ ) = − ∑ ∣ ∣ e − e ^ ∣ ∣ 2 J_{KB}(\theta) = -\sum ||\mathbf{e} - \hat{\mathbf{e}}||^2 J K B ( θ ) = − ∑ ∣∣ e − e ^ ∣ ∣ 2 —— 让文本重建的嵌入接近知识库嵌入
测试时 :直接用文本重建嵌入 e ^ \hat{\mathbf{e}} e ^ 代替知识库嵌入 e \mathbf{e} e ,计算知识注意力。
总结差异 :
阶段
知识来源
注意力计算方式
训练
知识库实体嵌入 e \mathbf{e} e (已知)
a i K A = f ( e W K A h i ) a_i^{KA} = f(\mathbf{e} \mathbf{W}_{KA} \mathbf{h}_i) a i K A = f ( e W K A h i )
测试
文本重建嵌入 e ^ \hat{\mathbf{e}} e ^ (未知则重建)
a i K A = f ( e ^ W K A h i ) a_i^{KA} = f(\hat{\mathbf{e}} \mathbf{W}_{KA} \mathbf{h}_i) a i K A = f ( e ^ W K A h i )
七、带消歧的知识注意力(KA+D)
❓ 问题:对带消歧的知识注意力进行详细解释。
7.1 为什么需要消歧?
文本重建的嵌入 e ^ \hat{\mathbf{e}} e ^ 是近似 的,可能不够精确。如果能从知识库中找到精确匹配的实体嵌入 ,效果会更好。
7.2 消歧流程
第一步:候选实体筛选
通过表面名称匹配 (Surface Name Matching),从知识库中找出所有名称与实体提及相同或相似的实体。
例如,实体提及 “Washington” 可能对应:
华盛顿市(location)
华盛顿州(location)
乔治·华盛顿(person)
第二步:嵌入相似度计算
计算文本重建嵌入 e ^ \hat{\mathbf{e}} e ^ 与每个候选实体嵌入 e j \mathbf{e}_j e j 之间的 L2 距离 :
d j = ∣ ∣ e ^ − e j ∣ ∣ 2
d_j = ||\hat{\mathbf{e}} - \mathbf{e}_j||_2
d j = ∣∣ e ^ − e j ∣ ∣ 2 选择距离最小的候选实体:
e ∗ = arg min e j ∈ Candidates ∣ ∣ e ^ − e j ∣ ∣ 2
e^* = \arg\min_{e_j \in \text{Candidates}} ||\hat{\mathbf{e}} - \mathbf{e}_j||_2
e ∗ = arg e j ∈ Candidates min ∣∣ e ^ − e j ∣ ∣ 2
第三步:阈值判断
设置阈值 α \alpha α ,判断消歧结果的可靠性:
如果 d < α d < \alpha d < α :有信心 → 使用知识库实体嵌入 e ∗ \mathbf{e}^* e ∗ 计算 KA
如果 d ≥ α d \geq \alpha d ≥ α :无信心 (可能是 out-of-KB 实体) → 直接使用文本重建嵌入 e ^ \hat{\mathbf{e}} e ^
7.3 为什么有效?
场景
消歧结果
使用
效果
知识库内实体 + 清晰上下文
正确匹配
e \mathbf{e} e (精确)
最佳效果
知识库内实体 + 模糊上下文
可能错误
e ^ \hat{\mathbf{e}} e ^ (文本重建,有阈值保护)
避免错误传播
知识库外实体
无法匹配(距离大)
e ^ \hat{\mathbf{e}} e ^ (文本重建)
合理泛化
7.4 阈值 α \alpha α 的权衡
实验结果表明(图 3):
α \alpha α 变化
Correct 子集
Erroneous 子集
增大
性能提升(更多使用精确嵌入)
性能下降(错误消歧被接受)
减小
性能略降(更多使用近似嵌入)
性能提升(错误消歧被拒绝)
论文最终选择 α = 0.55 \alpha = 0.55 α = 0.55 作为平衡点。
参考文献
Xin, J., Lin, Y., Liu, Z., & Sun, M. (2018). Improving Neural Fine-Grained Entity Typing with Knowledge Attention. In Proceedings of the AAAI Conference on Artificial Intelligence .
AI参与声明 :本文档在撰写过程中使用了AI辅助工具进行内容整理、格式优化与部分内容扩展。所有核心概念与公式推导均基于原始学术论文 Xin et al.(2018),并经人工校验与补充。