专栏首页AI小白入门【NLP】一文完全搞懂序列标注算法

【NLP】一文完全搞懂序列标注算法

序列标注模型用到了长短期记忆网络(LSTM),条件随机场(CRF),Highway网络,本文循序渐进的介绍了序列标注算法,Be patience ! 跟着小编的文章完全搞懂序列标注算法吧。

1.目标

序列标注模型的目标是用实体或词性标记句子的每个单词,如下图:

其中PER标记的是人名,LOC标记的是位置,ORG标记的是组织。

算法原理来自论文Empower Sequence Labeling with Task-Aware Neural Language Model,论文所述的序列标注模型算法比大部分算法都要高级,文章将要介绍很多常用的理论,不仅仅应用在序列标注领域,该模型的一个特点是并行训练了语言模型,增强了序列标注的任务。

为了更好的理解序列标注模型,首先介绍几个概念:

2.需要理解的几个概念

  • 序列标注:标注句子中每个单词的实体或词性
  • 语言模型:语言模型是预测单词或字符序列中的下一个单词或字符,神经语言模型在文本生成、机器翻译、图像理解、光学字符识别等各种NLP任务中取得了令人印象深刻的结果。
  • 字符RNN:对文本中的单个字符进行RNN转换,在序列标注任务中,字符可以为单词的实体或属性提供重要线索,如形容词通常以”-y”或”-ul”结尾,位置通常以”-land”或”burg”结尾,因此编码句子中的字符信息是很有必要的。
  • 多任务学习(Multi-Task Learning):模型训练过程中包含了语言模型,语言模型为序列标注模型提供了额外的有用信息,即改善了序列标注模型。
  • 条件随机场(Conditional Random Fields):离散分类器根据某个单词预测其标注,条件随机场是根据该单词附近的单词标注来预测其标注,这是符合理论的,因为单词的标注不仅仅取决于当前的单词,还取决于该单词相邻的单词属性。
  • 维特比解码(Viterbi Decoding):我们使用了CRF输出每个单词的标记转移矩阵,然后通过维特比解码输出最优的标记序列。
  • Highway Networks(Highway网络):全连接层在任何神经网络结构中转换或提取不同位置特征的主要成分,如图像分类中,全连接层输出用于分类图像的特征,语言模型中,全连接层输出每一个类的概率。

3.算法模型框架

算法模型框架即LM-LSTM-CRF,LM-LSTM-CRF包含了三个模型:语言模型(LM),长短期记忆网络(LSTM),条件随机场(CRF)。语言模型的训练并行在长短期记忆网络和条件随机场组成的序列标记模型,组成多任务训练模型。

模型框架如下图:

上图右边的红色方框所展示的是序列标注模型的框架流程,下图细化了该模型流程,让大家有个宏观的理解:

下面一一介绍该模型框架的结构部分:

3.1 多任务学习(Multi -Task Learning)

由上表可知,在训练序列标注模型的同时也并行了语言模型训练,这样做的好处是使训练过程中获得了更多的信息,提高了序列标注模型的性能。

多任务学习的损失函数是各个任务损失函数的权值相加,如下式:

本文设置

等于1。

梯度下降法更新模型参数:

其中

为学习率。

3.2 字符LSTM

前向字符LSTM和后向字符LSTM都用于语言模型的单词预测,也用于序列标注模型的输入。

假设句子是dunston checks in <end>,前向字符LSTM的结构如下图:

后向字符LSTM结构图:

3.3 单词双向LSTM和条件随机场

单词双向LSTM和条件随机场用来预测序列标注模型每个单词的观测分数矩阵和转移分数矩阵之和。如下图:

若句子长度为L,单词标注种类数为m,那么每个单词标注转移分数矩阵的大小为(L,m,m),观测分数矩阵的大小为(L,m)。

条件随机场输出这两者之和的总分数,矩阵大小为(L,m,m),位置(k,i,j)的值等于

第k个单词第j个标记的观测分数与第k个单词前一个单词标注为i,后一个单词标注为j的观测分数之和。

比如句子dunston checks in <end>,如果标注种类数为5,总分数矩阵会是这样:

细心的读者可能发现,条件随机场不输出符号<start>的总分数,因为每个句子都是以<start>开头,计算<start>的观测分数和转移分数没有任何意义。

从上图也得到了两个小细节:

  • 给定前一个单词的标注为<start>,某个标注的转移分数表示该标注成为句子中第一个标注的可能性,比如句子通常以冠词(a,an,the)或名词,代词开头。
  • 给定后一个单词的标注为<end>,某个标注的转移分数表示该标注成为句子中最后一个标注的可能性。

我们现在知道了模型输出的矩阵总分数,如何计算当前模型的损失函数?

4.维特比损失(Viterbi loss)

若仅仅只有标注观测分数,那么小编推荐使用交叉熵损失函数去计算,若包含了转移矩阵分数,则用维特比损失算法。

还是用之前的总分数为例,如下图:

定义序列标注t的得分等于每个标注得分的总和,有:

若句子的真实标注为:tag2,tag3,tag3,<end>,则该序列标注的得分等于:4.85 + 6.79 + 3.85 +3.52 = 19.01。

因此,维特比损失定义为:

其中

表示真实的标注序列,T表示所有可能的标注序列。

简化上式得:

若经过多次迭代的反馈训练,得到单词最终的预测总分数,如何预测句子中最优的标注序列?

5.维特比解码(Viterbi Decoding

不管是什么句子,有两个标注我们是确定的:<start>和<end>标记,维特比预测最优标注序列的思想是:通过<start>去逐步累加每个单词的总分数,当更新到<end>标注时,由于<end>标注是确定的,然后通过<end>标注的总分数反向预测每个单词的最优序列。

通过一个来阐述这一思想,还是用之前每个单词的总分数为例:

第一个单词为dunston,前一个标注肯定为<start>,于是第一个单词的累加分数为:

第二个单词为checks,则第二个单词的累加分数为:

存储该单词所属每个标注的最大分数和前一个标注:

第三个单词为in,则第三个单词的累加分数为:

存储该单词所属每个标注的最大分数和前一个标注:

第四个单词为<end>符号,则第四个单词的累加分数为:

存储该单词所属每个标注的最大分数和前一个标注:

因为第四个单词为标注肯定为<end>,因此选择该标注最大分数时的前一个标注,由上图可知为tag3,然后重复该步骤,如下图:

由上图可知,最优标注序列为:<start>,<tag2>,<tag2>,<tag3>。

5.Highway Networks

语言模型和序列标注模型都用到了highway网络,该网络与偏差网络有点相似,偏差网络(residual networks)的输出等于将输入添加到转换后的输出,为数据流的转换创建路径。

偏差网络结构图:

若转换层个数等于1,转换函数为f(x),则有:

Highway网络与偏差网络有点相似,它使用sigmoid-activated门来确定输入和转换后输出的系数,因此Highway网络的输出为:

模型有三个地方要用到Highway网络:

  • Highway网络将前向字符LSTN的输出预测为下一个单词的分数
  • Highway网络将后向字符LSTN的输出预测为下一个单词的分数
  • 前向字符LSTM和后向字符LSTM的输出拼接起来,然后用Highway网络转换,并与单词的嵌入向量作为单词双向LSTM的输入。

结合字符前向LSTM,字符后向LSTM,双向单词LSTM以及条件随机场的介绍,序列标注算法模型结构图如下:

6.其他的序列标注模型简述

图(a)与本文介绍的模型很相似,但是该模型是单任务学习,即不包含语言模型。

图(b)是单任务学习,且没有利用句子的字符信息,该模型在工业界十分普及且性能较好。

图(c)是单任务学习,使用了线性层或Highway层代替条件随机场,即直接预测每个单词所属标记的分数,性能相比之前的模型较差。

参考

https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Sequence-Labeling

本文分享自微信公众号 - AI小白入门(StudyForAI)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【NLP-NER】什么是命名实体识别?

    命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP...

    yuquanle
  • 初学者|今天掌握SnowNLP好不好

    本文简绍了SnowNLP的使用方法,这是一个处理中文文本内容的python类库,其主要功能包括分词、词性标注、情感分析、汉字转拼音、繁体转简体、关键词提取以及文...

    yuquanle
  • 【NLP】XLNet详解

    BERT本身很有效,但它也存在一些问题,比如不能用于生成、以及训练数据和测试数据的不一致(Discrepancy)。在本文中,我们重点介绍比BERT更强大的预训...

    yuquanle
  • Cisco IOS镜像导入篇《GNS3 2.1.3 环境搭建系列教程二》

    楠尘
  • 【C语言笔记】变量的初始值是?

    可见,全局变量的默认初值为0。局部变量的默认是随机的,没有规律的。所以,我们在使用局部变量之前应该首先进行初始化,否则可能会出现意想不到的错误。

    正念君
  • MySQL 那些监控参数 问 答 (4)REDO AHI latch 锁

    2020已经悄然来到身边,感觉时间过的很快,学习的过程也是,一阵热乎的很简单,难再坚持两个字好写,做起来确实是难事。本系列后续还会有,会因为监控这个事情本身就没...

    AustinDatabases
  • hadoop: hdfs API示例

    利用hdfs的api,可以实现向hdfs的文件、目录读写,利用这一套API可以设计一个简易的山寨版云盘,见下图:

    菩提树下的杨过
  • Cloudera Manager监控介绍

    Cloudera Manager提供了许多功能,用于监控集群组件(主机,服务)的运行状况和性能,以及集群上运行的作业的性能和资源情况。具体的包括以下项目:

    Fayson
  • 扎根七年,旷视安防的原则与野望

    旷视科技CEO印奇曾说,“2018将是行业整合的一年,输赢到今年结束就能看得清楚。”

    AI掘金志
  • linux常用命令(防火墙)

    在部署和配置集群的时候,集群中的多台服务器需要通信,对于一些复杂的应用,例如consul、hadoop等,往往是客户端通信占用一个端口、Web UI占用一个端口...

    张子阳

扫码关注云+社区

领取腾讯云代金券