BiLSTM上的CRF,用命名实体识别任务来解释CRF
0 导读
看了很多的CRF的介绍和讲解,这个感觉是最清楚的,结合实际的应用场景,让你了解的用处和用法。
预备知识
你需要知道的唯一的事情是什么是命名实体识别,如果你不知道神经网络,CRF或任何其他知识,请不要担心,后面会做直观解释。
1.介绍
对于命名实体识别任务,基于神经网络的方法非常普遍。例如,这篇文章https://arxiv.org/abs/1603.01360提出了使用一个使用词和字嵌入的BiLSTM-CRF命名实体识别模型。下文将以本文中的模型为例来解释CRF是如何工作的。
如果你不知道BiLSTM和CRF的细节,请记住它们是命名实体识别中的两个不同层。
1.1 开始之前
我们假设,我们有一个数据集,其中有两个实体类型,Person和Organization。但是,事实上,在我们的数据集上,我们有5个标签:
- B-Person
- I-Person
- B-Organization
- I-Organization
- O
此外,x是包含5个单词的句子,w0,w1,w2,w3,w4。更重要的是,在句子x中,{w0,w1}是一个Person实体,[w3]是一个Organization实体,其他都是“O”。
1.2 BiLSTM-CRF模型
下文将对这个模型西做一个简单介绍。
如下图所示:
- 首先,将句子x中的每个单词表示为一个向量,其中包括单词的嵌入和字符的嵌入。字符嵌入式随机初始化的。词嵌入通常是一个预训练的词嵌入文件导入的。所有的嵌入将在训练过程中进行微调。
- 其次,BiLSTM-CRF模型的输入是这些嵌入,输出是句子x中的单词的预测标签。
-
虽然不需要知道BiLSTM层的细节,但是为了更容易的理解CRF层,我们需要知道BiLSTM层输出的意义是什么。
上图说明BiLSTM层的输出是每个标签的分数,例如,对于w0,BiLSTM节点的输出为1.5(B-Person)、0.9(I-Person)、0.1(B-Organization)、0.08(I-Organization)和0.05(O),这些分数将作为CRF层的输入。
然后,将BiLSTM层预测的所有分数输入CRF层,在CRF层中,选择预测得分最高的标签序列作为最佳答案。
1.3 如果没有CRF层会怎么样
你可能已经发现,即使没有CRF层,也就是说,我们可以训练一个BiLSTM命名实体识别模型,如下图所示:
因为每个单词的BiLSTM输出是标签的分数,我们可以选择每个单词得分最高的标签。
例如,对于w0,“B-Person”得分最高(1.5),因此我们可以选择“B-Person”作为其最佳预测标签。同样,我们可以为w1选择“I-Person”,为w2选择“O”,为w3选择“B-Organization”。为w4选择“O”。
虽然在这个例子中我们可以得到正确的句子x的标签,但是并不总是这样,再试一下下图图片中的例子。
显然这次的输出是无效的,“I-ORganization I-Person”和“B-Organization I-Person”。
1.4 CRF层可以训练数据中学习约束
CRF层可以向最终的预测标签添加一些约束,以确保它们是有效的。这些约束可以由CRF层再训练过程中从训练数据集自动学习。
约束条件可以是:
- 句子中第一和单词的标签应该以“B-”或“O”开头,而不是“I-”
- “N-label I-label2 I-label I-…”,在这个模式中,label1、label2、label3…应该是相同的命名实体标签。例如,“B-Person I-Person”是有效的,但是“B-Person I-Organization”是无效的。
- “O I-label”无效。一个命名实体的第一个标签应该以“B-”而不是“I-”开头,换句话说,有效模式应该是“O B-label”
- …
有了这些有用的约束,无效预测标签序列的数量将显著减少。
2. CRF层
在CRF层的损失函数中,我们有两种类型的分数。这两个分数是CRF层的关键概念。
2.1 Emission得分
第一个emission分数。这些emission分数来自BiLSTM。例如,如下图所示,标记为B-Person的w0的分数为1.5。
为方便起见,我们将给每一个标签一个索引号,如下图所示。
我们用
x
i
y
i
x_{iy_i}
xiyi来表示emission分数。i是word的索引,
y
i
y_i
yi是label的索引。如上图所示,
x
i
=
1
,
y
=
2
=
x
w
1
,
B
−
O
r
g
a
n
i
z
a
t
i
o
n
=
0.1
,
=
1
x_{i=1,y=2}=x_{w_{1,B-Organization}}=0.1,=1
xi=1,y=2=xw1,B−Organization=0.1,=1,即w1作为B-Oraganization的得分为0.1。
2.2 Transition得分
我们使用
t
y
i
y
j
t_{y_iy_j}
tyiyj来表示transition分数。例如,
t
B
−
P
e
r
s
o
n
,
I
−
P
e
r
s
o
n
=
0.9
t_{B-Person,I-Person}=0.9
tB−Person,I−Person=0.9表示标签的transition,B-Person —>I-Person得分为0.9.因此,我们有一个transition得分矩阵,它存储了所有标签之间的所有得分。
为了是transition评分矩阵更健壮,我们将添加另外两个标签,START和END。START是指一个句子的开头,而不是第一个单词。END代表一个句子的结尾。
下面是一个transition得分矩阵的例子,包括额外添加的START和END标签。
如上表所示,我们可以发现transition矩阵已经学习了一些有用的约束。
- 句子中第一个单词的标签应该以“B-”或“O”开头,而不是“I-”开头**(从“START”到“I-person”或I-Organization的分数非常低。)**
- “B-label1 I-label2 I-label3 I-…”,在这个模式中,label1、label2、label3…应该是相同的命名实体标签。例如,“B-Person I-Person”是有效的,但是“B-Person I-Organization”是无效的。(例如,从“B-Organization”到“I-Person”的分数只有0.0003,比其他分数低很多)
- O I-label”无效。一个被命名实体的第一个标签应该以“B-”而不是“I-”开头,换句话说,有效的模式应该是“O B-label”(同样,t_{O,I-Person}的分数非常小)
你可能想问一个关于矩阵的问题。在哪里或如何得到transition矩阵?
实际上,该矩阵是BiLSTM-CRF模型的一个参数。在训练模型之前,可以随机初始化矩阵中的所有transition分数。所有的随机分数将在你的训练过程中自动更新。换句话说,CRF层可以自己学习这些约束。我们不需要手动构建矩阵。随着训练迭代次数的增加,分数会逐渐趋于合理。
2.3 损失函数
CRF损失函数由真实路径得分和所有可能路径的总得分组成。在所有可能的路径中,真实路径的得分应该是最高的。
例如,如果我们的数据集中有如下表所示的这些标签:
我们还是有一个5个单词的句子。可能的路径是:
- 1)START B-Person B-Person B-Person B-Person B-Person END
- 2)START B-Person I-Person B-Person B-Person B-Person END
- …
- 10)START B-Person I-Person O B-Organization O END
- …
- N)O O O O O O O
2.4 实际路径得分
2.5所有可能的路径的得分
步骤2: 回忆一下Emission和Transition得分