BERT-BiLSTM-CRF
BERT-BiLSTM-CRF模型分析
上学期搞大创的时候接触了NER相关的模型和知识,暑假终于有时间整理一下乐
首先先了解一下BERT-BiLSTM-CRF的应用场景,这种方法主要用于命名实体识别。简单来讲,就是在一段语料中抽出其中的名词进行划分。
先上例子,以提取公司企业和人物实体为例:
输入: {"text": "作为蔚来汽车的 a 轮投资人,刘二海已经是第二次见证李斌在纽交所敲钟,第一次是李斌创办的易车在纽交所上市。}
输出: {"label": {"person": {"刘二海": [13, 15]}, "org": {"蔚来汽车": [2,5]}}}
输入一段文本 text,输出的标签为句子中的organization 和 person 实体
需要明确的是,BERT-BiLSTM-CRF是有监督分类问题,训练语料一定要给出训练文本对应的标注。
那么我们如何从一段语料中“聪明地”获取实体并打上标签呢?
上模型!
模型框架
BERT-CRF 模型由 3 个模块组成。首先使用 BERT 模型获取字向量,提
取文本重要特征;之后由 BiLSTM 层对 BERT 的输出序列处理,通过双向 LSTM 计算输入隐藏信息;
在CRF层,结合 CRF 中的状态转移矩阵,根
据相邻之间标签得到一个全局最优序列。
BERT层
模型第一层是利用预训练的 BERT 语言模型初始化获取输入文本信息中的字向量记为
序列 E=(e1,e2,e3,⋯ ,en) , 所获取的字向量能够利用词与词之间的相互关
系
BERT 是一种自然语言处理预训练语言表征模型. BERT 能够计算词语之间的相互关系, 并利用所计算的关系调节权重提取文本中的重要特征, 利用自注意力机制的结构来进行预
训练, 基于所有层融合左右两侧语境来预训练深度双向表征, 比起以往的预训练模型, 它捕
捉到的是真正意义上的上下文信息, 并能够学习到连续文本片段之间的关系.
BiLSTM
想要知道BiLSTM是什么,需要先了解LSTM是干嘛的
LSTM 长短期记忆网络
是一种特殊的循环神经网络。RNN 网络主要包括输入层、隐藏层和输出层三部分组成,
隐藏层连接前后两层,这种特殊的结构,能让 RNN 网络具有一定的“记忆能力,能够有效
处理命名实体识别任务。
LSTM框架
LSTM模型可以理解为:现在有一串细胞代表着不同时刻的状态(C0,C1…Ct),他们是串联关系。在t时刻,你有三个输入,分别为上一细胞状态Ct-1、隐藏层ht-1和输入词Xt。在经过细胞Ct后,你将得到本细胞的隐藏信息ht和此时新的细胞状态Ct。
在每个细胞中具体有遗忘门,记忆门和输出门,让我们看看这些可爱的小细胞是如何工作的吧
计算过程
计算过程的思路就是,将遗忘信息和新的信息整合起来,得到有用的信息传递给下一细胞,同时丢弃无用信息。并在每一时刻输出隐层状态ht,ht相当于一个中间参数,参与到下一层的信息计算中。
计算遗忘门
输入:前一时刻隐藏状态ht-1,输入词Xt
输出:遗忘门的值ft
计算记忆门
输入:前一时刻隐藏状态ht-1,输入词Xt
输出:记忆门的值it,临时细胞状态Ct
更新细胞状态
输入:记忆门的值it,遗忘门的值ft,上一细胞状态Ct-1,临时细胞状态Ct
输出:当前细胞状态Ct
计算隐藏层
输入:前一时刻隐藏状态ht-1,输入词Xt ,当前细胞状态Ct
输出:隐层状态ht
一顿操作下来,我们得到了和原始句子一样长的隐层状态序列[h0,h1…hn-1]
BiLSTM框架
知道了LSTM的计算流程,他是从一个方向得到状态序列。进一步想,我们如果从两个方向(从左到右,从右到左)进行LSTM的运算,并将两个结果合并,是否能得到更全面的语义信息呢
SMART GUY!这就是BiLSTM的思路。
我们对一句话进行两个方向的LSTM计算,最后将两者捏在一起。这样每个词和前后的词都存在关联性,在ner中能表现出更好的性能。
CRF层
CRF 用来分割和标记序列数据, 根据输入的观察序列来预测对应的状态序列, 同时考
虑输入的当前状态特征和各个标签类别转移特征, 被广泛应用于 NER 的问题中.
如上图可知,BiLSTM层输出全文的向量表示后,得到这个词对应每个标签的权重。
CRF层会选取权重较高的标签,注意不是最高。他还会从训练数据中学习约束,确保选取标签的合理性。
CRF 层可以为最终预测的标签添加一些约束(如句子中第一个单词的标签应该以“B-”或“O”开头,而不是“I-”、“B-label1 I-label2 I-label3 I-…”,
在这个模式中,label1、label2、label3…应该是同一个命名实体标签),以减少无效预测标签序列的数量。这些约束可以在训练过程中由 CRF 层自动从训练数据集中学习。
约束可能是:
句子中第一个单词的标签应该以“B-”或“O”开头,而不是“I-” “B-label1 I-label2 I-label3 I-…”,在这个模式中,label1、label2、label3…应该是同一个命名实体标签。例如,“B-Person I-Person”有效,但“B-Person I-Organization”无效。
“O I-label”无效。一个命名实体的第一个标签应该以“B-”而不是“I-”开头,换句话说,有效模式应该是“O B-label
再回头梳理一遍模型IO原始输入:语句文本
BERT 层:输入:
①由原始文本利用 word2Vector 等算法得到的原始字向量
②文本向量:该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,
并与单字/词的语义信息相融合
③位置向量:刻画不同位置的字,对不同位置的字附加一个不同的向量加以区分输出:文本中各个字融合了全文语义信息后的向量表示
BiLSTM层:输入:BERT 模型的输出序列
输出:每个字对应的标签权重
CRF 层:输入:每个字对应的标签权重
输出:预测的标签序列
复习一下前面的图~
over