第1节 介绍
1.介绍
Bi-LSTM-CRF算法是目前最为流行的NER算法。
BiLSTM和CRF可以看做NER模型中的两个不同层
1.1 开始之前
假设我们有一个数据集,其中有两种实体类别:Person和Organization。对于每一个类别又分为开始单词和中间单词,所以就有了5种类别。
- B-Person (Person的第一个单词)
- I- Person (Person的中间单词)
- B-Organization (Organization的第一个单词)
- I-Organization (Organization的中间单词)
- O (其他实体)
比如 是包含5个单词的句子 .其中[ ]是Person实体, [ ] 是Organization实体,其他是“O”.
1.2 BiLSTM-CRF model
- 首先,句子x中的每一个单词都会被表示成一个向量,这个向量包含单词的character embedding 以及word embedding. 这里的character embedding随机初始化.word embedding通常来自一个预训练的word embedding文件. 所以的embeddings都会在训练过程中微调
- 然后,BiLSTM-CRF模型的输入是这些embeddings,输出是句子x的所以单词的预测标签.
我们需要知道BiLSTM这一层输出结果的意义
上图说明BiLSTM的输出是该单词对应每一个类别的scores。举例来说,对于
w0,BiLSTM节点的输出是1.5 (B-Person), 0.9 (I-Person), 0.1 (B-Organization), 0.08 (I-Organization) 以及0.05 (O). 这些score作为CRF layer的输入.
然后所有的BiLSTM blocks预测的score都会被喂到CRF layer. CRF layer中,在所有的label sequence选择预测得分最高的序列作为最佳答案.
1.3 如果没有CRF layer会怎么样
你可能会发现,如果没有CRF Layer,也可以只用BiLSTM来训练NER模型
由于每个word的BiLSTM的输出是labe得分情况. 可以选择每个单词中得分最高的label作为结果。
例如,对于单词 , “B-Person”得分最高(1.5), 因此可以选择“B-Person” 作为预测label.
尽管这里可以得到正确的预测结果,但是在有些如下面的情况中,
很显然,预测的labels是不对的。“I-Organization I-Person”以及 “B-Organization I-Person”.因为两个不同类别的中间词不可能挨着等等
1.4 CRF layer 可以学到训练集中的限制
CRF layer 可以对最终的预测labels添加一些限制来确保结果是有效的. 这些限制可以由CRF layer在训练过程中自动的训练数据集中学到.
这些限制可以是
- 句子的第一个单词应该是“B-“或 “O”,不可能是 “I-“
- “B-label1 I-label2 I-label3 I-…”, 在这个模式中, label1, label2, label3 应该是同一个实体label.例如 “B-Person I-Person”是可以的, “B-Person I-Organization” 无效
- “O I-label” 不合法。命名实体的开始应该是 “B-“ 而不是 “I-“
添加了这些限制之后,预测结果中的无效序列会大幅减少
小结
接下来会分析CRF loss function来解释为什么CRF layer 可以学到训练数据中的这些限制。
第二节 CRF 层
在CRF层的损失函数中有两种类型的score,这两种类型的score是CRF layer的关键部分.
2.1 Emission score
第一个是emission score,这些emission score来自于BiLSTM layer. 如下图所示比如
作为B-Person标签的得分是1.5.
为了方便,给一种label一个index
Label | Index |
---|---|
B-Person | 0 |
I-Person | 1 |
B-Organization | 2 |
I-Organization | 3 |
O | 4 |
使用 来表示emission score。i是单词的index, 是label的index。例如在上图中, 表示w1作为B-Organization的得分是 0.1.
2.2 Transition score
使用 来表示transition score。举例 表示标签转移B-Person -> I-Person的概率是0.9.因此。有了保存所有labels之间score矩阵。
加入START和END来使转移矩阵更加健壮。START表示句子的开始,END表示句子的结束。
这里有一个转移矩阵
我们可以看到转移矩阵可以学到一些有用的限制条件
- 句子的开始应该是 “B-“ 或 “O”,而不是 “I-“(从START到I-Person或I-Organization的得分非常低)
- “B-label1 I-label2 I-label3 I-…”, 在这个模式中, label1, label2, label3 应该是同一个实体label.例如 “B-Person I-Person”是可以的(例如 “B-Organization”到“I-Person” 仅仅是0.0003)
- “O I-label” 不合法( 的得分非常低)
那么如何得到 transition matrix呢
实际上 transition matrix是BiLSTM-CRF model的一个参数。在你开始训练模型之前,可以随机初始化。所有的random score会在训练过程中自动更新
说明CRF layer可以自己学习这些约束,不需要手动建立约束。矩阵会随着迭代过程更加合理。
2.3 CRF loss function
CRF loss function由真实路径得分和和所有可能路径的总分组成. 真实路劲应该具有在可能路径中有最高的分数。
例如数据中有下面的label:
Label | Index |
---|---|
B-Person | 0 |
I-Person | 1 |
B-Organization | 2 |
I-Organization | 3 |
O | 4 |
START | 5 |
END | 6 |
有一个有5个单词的句子,可能的路径可能是
- START B-Person B-Person B-Person B-Person B-Person END
- START B-Person I-Person B-Person B-Person B-Person ENDSTART B-Person I-Person B-Person B-Person B-Person END
- ……
- START B-Person I-Person O B-Organization O END10) START B-Person I-Person O B-Organization O END
- ……
- O O O O O O O
假设每一条路径有一个score ,一共有 N条路径,所以总得分是
假设第4条路径是真实路径,那么 应该在所有的可能路径中占据最大的比例
下面给出loss function。
在训练过程中,更新BiLSTM-CRF 的参数,使得真实路径的比重保持不断增加
现在的问题是:
- 如何定义一条路径的score
- 如何计算所有路径的总score
- 计算总score时,需要列出所有可能的路径吗?(不需要)
2.4 Real Path Score
显然在所有可能的路径中有一条真实的路径。
例如真实的路径是“START B-Person I-Person O B-Organization O END”. 其他不正确的路径有“START B-Person B-Organization O I-Person I-Person B-Person”.
是第i条路径的得分.
在训练过程中,crf loss function只需要两个score:真实路径的得分和其他可能路径的总得分.真实路径的得分在所有可能路径得分中的比重会不断增加。
真实路径得分是通过
计算得到
现在我们关注如何计算 .
以这条真实路径“START B-Person I-Person O B-Organization O END”来举个例子
- 这条句子中有5个单词
- 增加两个额外的单词来表示句子的开始和结束
- 由两个部分组成
Emission Score
- 表示第index个单词被标记为label的score
- 这些emission score来自于上一步BiLSTM的输出
- 对于 和 可以设为0
Transition Score
- 表示从label1到label2的Transition Score
- 这些score来自CRF layer。也就是说这是score是CRF layer的参数
现在我们计算出真实路径的得分 ,下面计算所有可能路径的score。
2.5 The total score of all the paths
这一部分是最难的一部分,最好拿出纸和笔跟着推导整个过程。
本节讨论如何计算所有可能路径的score和
。
最简单的方式是枚举所有的类型。但是效率太低,训练时间太长
第一步:回忆CRF Loss function
前面我们提到了CRF Loss function是
现在对LossFunction取个对数可以得到: