句子大全

句子大全 > 句子大全

最通俗易懂的BiLSTM

句子大全 2015-10-22 01:02:49
相关推荐

在命名实体识别领域,基于神经网络的实现方法是非常流行和常用的。举个例子,该文讲述的用词嵌入和字嵌入的BiLSTM-CRF模型就是其中一种。我将以该模型为例解释CRF层的工作原理。

如果你不知道BiLSTM 和 CRF的实现细节,只需要记住他们是命名实体识别模型中两个不同的层。

开始之前

我们规定在数据集中有两类实体,人名和组织机构名称。所以,其实在我们的数据集中总共有5类标签:

B-Person (人名的开始部分)

I- Person (人名的中间部分)

B-Organization (组织机构的开始部分)

I-Organization (组织机构的中间部分)

O (非实体信息)

此外,x 是包含了5个单词的一句话(w0,w1,w2,w3,w4)。还有,在句子x中[w0,w1]是人名,[w3]是组织机构名称,其他都是“O”。

BiLSTM-CRF 模型

先来简要的介绍一下该模型。

如下图所示:

首先,句中的每个单词是一条包含词嵌入和字嵌入的词向量,词嵌入通常是事先训练好的,字嵌入则是随机初始化的。所有的嵌入都会随着训练的迭代过程被调整。

其次,BiLSTM-CRF的输入是词嵌入向量,输出是每个单词对应的预测标签。

尽管不需要了解BiLSTM的实现细节,但为了更好的理解CRF层,我们还是需要知道一下BiLSTM的输出到底是什么意思。

如上图所示,BiLSTM层的输入表示该单词对应各个类别的分数。如W0,BiLSTM节点的输出是1.5 (B-Person), 0.9 (I-Person), 0.1 (B-Organization), 0.08 (I-Organization) and 0.05 (O)。这些分数将会是CRF层的输入。

所有的经BiLSTM层输出的分数将作为CRF层的输入,类别序列中分数最高的类别就是我们预测的最终结果。

如果没有CRF层会是什么样

正如你所发现的,即使没有CRF层,我们照样可以训练一个基于BiLSTM的命名实体识别模型,如下图所示。

因为BiLSTM模型的结果是单词对应各类别的分数,我们可以选择分数最高的类别作为预测结果。如W0,“B-Person”的分数最高(1.5),那么我们可以选定“B-Person”作为预测结果。同样的,w1是“I-Person”, w2是“O”,w3是 “B-Organization” ,w4是 “O”。

尽管我们在该例子中得到了正确的结果,但实际情况并不总是这样。来看下面的例子。

显然,这次的分类结果并不准确。

CRF层可以学习到句子的约束条件

CRF层可以加入一些约束来保证最终预测结果是有效的。这些约束可以在训练数据时被CRF层自动学习得到。

可能的约束条件有:

句子的开头应该是“B-”或“O”,而不是“I-”。 “B-label1 I-label2 I-label3…”,在该模式中,类别1,2,3应该是同一种实体类别。比如,“B-Person I-Person” 是正确的,而“B-Person I-Organization”则是错误的。 “O I-label”是错误的,命名实体的开头应该是“B-”而不是“I-”。

有了这些有用的约束,错误的预测序列将会大大减少。

CRF 层

CRF层中的损失函数包括两种类型的分数,而理解这两类分数的计算是理解CRF的关键。

Emission score

第一个类型的分数是发射分数(状态分数)。这些状态分数来自BiLSTM层的输出。如下图所示,w0被预测为B-Person的分数是1.5.

为方便起见,我们给每个类别一个索引,如下表所示:

Xiyj代表状态分数,i是单词的位置索引,yj是类别的索引。根据上表,

表示单词w1被预测为B−Organization的分数是0.1。

转移分数

我们用tyiyj来表示转移分数。例如,tB−Person,I−Person=0.9表示从类别B−Person→I−Person的分数是0.9。因此,我们有一个所有类别间的转移分数矩阵。

为了使转移分数矩阵更具鲁棒性,我们加上START 和 END两类标签。START代表一个句子的开始(不是句子的第一个单词),END代表一个句子的结束。

下表是加上START和END标签的转移分数矩阵。

如上表格所示,转移矩阵已经学习到一些有用的约束条件:

句子的第一个单词应该是“B-” 或 “O”,而不是“I”。(从“START”- “I-Person 或 I-Organization”的转移分数很低) “B-label1 I-label2 I-label3…”,在该模式中,类别1,2,3应该是同一种实体类别。比如,“B-Person I-Person” 是正确的,而“B-Person I-Organization”则是错误的。(“B-Organization” - “I-Person”的分数很低) “O I-label”是错误的,命名实体的开头应该是“B-”而不是“I-”。

要怎样得到这个转移矩阵呢?

实际上,转移矩阵是BiLSTM-CRF模型的一个参数。在训练模型之前,你可以随机初始化转移矩阵的分数。这些分数将随着训练的迭代过程被更新,换句话说,CRF层可以自己学到这些约束条件。

CRF损失函数

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

每种可能的路径的分数为Pi,共有N条路径,则路径的总分是

,e是常数e。

如果第十条路径是真实路径,也就是说第十条是正确预测结果,那么第十条路径的分数应该是所有可能路径里得分最高的。

根据如下损失函数,在训练过程中,BiLSTM-CRF模型的参数值将随着训练过程的迭代不断更新,使得真实路径所占的比值越来越大。

现在的问题是:

怎么定义路径的分数? 怎么计算所有路径的总分? 当计算所有路径总分时,是否需要列举出所有可能的路径?(答案是不需要) 真实路径分数

阅读剩余内容
网友评论
相关内容
拓展阅读
最近更新