此前的研究
- 语法解析的错误会传递到模型中(parsing mistakes can introduce cascading errors)
- 手动特征工程的构建不具有泛化性(many of the hand-engineered rules do not generalize to new languages)
基本术语
参考链接1:https://blog.csdn.net/Answer3664/article/details/102942352
参考链接2:https://blog.csdn.net/weixin_44912159/article/details/106280699
- mention:可以理解为文档中的实体的不同指代(表述),它可以是代词、也可以是命名实体、还可以是名词短语,其实也可以理解成文档中所有实体,为了和entity加以区别。
- antecedent:可理解为前指,图中 “Sally” 和 “she ” 具有共指关系,它们都指向关于“Sally”这个人。“Sally” 在"she"前面,即“Sally” 是“she”的前指。
- coreferent:共指关系,如antecedent中所提。
- cluster:簇,类似于聚类中的簇,图中 “Sally” 和 “she ” 为一个簇, “John” 和 “him” 为一个簇。
- anaphoric:回指,回指表示的是抽象化的实体,图中“Sally” 是具体化的实体,“she"是抽象化实体,即“she” 是“Sally”的回指。
- non-anaphoric:没有回指,如"violin"只有具体化的实体,无抽象化的实体。
Task
- 一段文本
D
D
D 中含有
T
T
T 个单词,将这些单词分成
N
N
N 个 span 并用
i
i
i 进行索引,span(
i
i
i)的头尾索引使用START(
i
i
i)及END(
i
i
i)表示。
N = T ( T + 1 ) 2 N=\frac{T(T+1)}{2} N=2T(T+1)
所有的span依据START( i i i)排序,若START( i i i)相等则按END( i i i)排序。
# 例句 I need you. 有3个word
6种可能的子串:I |need |you |I need|I you |need you|
- 对于一个 span(
i
i
i)中的所有可能的antecedent
y
i
y_i
yi组成
γ
(
i
)
=
{
ε
,
1
,
.
.
.
,
i
−
1
}
\gamma(i)=\{\varepsilon, 1, ..., i-1\}
γ(i)={ε,1,...,i−1},
ε
\varepsilon
ε表示这个span不是一个mention或是一个mention但与之前所有span没有coreferent
(The dummy antecedent ε \varepsilon ε represents two possible scenarios: (1) the span is not an entity mention or (2) the span is an entity mention but it is not coreferent with any previous span)
Model
使用条件概率分布,使得最有可能的cluster概率最大
s
(
i
,
j
)
s(i,j)
s(i,j)表示span(
i
i
i)和span(
j
j
j)之间的共指得分(a pairwise score for a coreference
link between span
i
i
i and span
j
j
j in document
D
D
D)
s
(
i
,
j
)
s(i,j)
s(i,j)没有前指时为0
算法步骤
- 用向量表示每个单词 x i x_i xi,由预训练的word embedding 和一维 CNN 拼接而成
- 使用双向LSTM计算出每个span的向量表示 x ∗ x^* x∗
- 使用注意力机制(Attention Mechanism)对span中的单词进行学习,得到 x ^ \widehat{x} x
- 得到span的特征表示
g
i
=
[
x
S
T
A
R
T
(
i
)
∗
,
x
E
N
D
(
i
)
∗
,
x
^
i
,
ϕ
(
i
)
]
g_i =[x_{START(i)}^*, x_{END(i)}^*, \widehat{x}_i, \phi(i)]
gi=[xSTART(i)∗,xEND(i)∗,x
i,ϕ(i)],
ϕ
i
\phi{i}
ϕi表示span(
i
i
i)的大小(长度)
- 将
g
g
g 送入前馈神经网络(FFNN)计算得到
s
m
s_m
sm 和
s
a
s_a
sa
- s m ( i ) s_m(i) sm(i)表示span( i i i)是一个mention的一元得分
- s a ( i , j ) s_a(i, j) sa(i,j)表示span( j j j)时span( i i i)的antecedent的得分
- 通过公式 s ( i , j ) = s m ( i ) + s m ( j ) + s a ( i , j ) s(i, j) = s_m(i) + s_m(j) + s_a(i, j) s(i,j)=sm(i)+sm(j)+sa(i,j) 得出span( i i i)和span( j j j)之间的共指得分共指得分
- 由softmax函数得出 P ( y i ∣ D ) P(y_i|D) P(yi∣D),得到每个mention最有可能的antecedent
剪枝
计算完每个span的得分后,对得分高的保留,得分低的剪掉;对于保留下来的,每个span也只考虑指定个数的前指。降低计算量并保持不错的召回率。
结果
参考
[1] https://blog.csdn.net/weixin_44912159/article/details/106276874
[2] https://blog.csdn.net/weixin_44912159/article/details/106280699
[3] https://blog.csdn.net/Answer3664/article/details/102942352
[4] End-to-end Neural Coreference Resolution
[5] OntoNotes数据集
[6] 源码(tensorflow)
[7] PyTorch复现源码