序列标注问题中将分类标签引入RNN网络结构的尝试

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/

                                      author: 张俊林,黄通文,沈磊,薛会萍

首先强调一点,本文主体内容就如标题所说做的一次尝试,需要强调的是这个尝试并没什么太大效果,如果仅仅关注效果的读到这里就可以结束了。如果希望看看是怎样进行尝试过程的可以继续往下读。

序列标注问题是NLP领域中最常见的一大类问题,包含很多子研究领域,比如中文分词、词性标注、NER命名实体识别、语义角色标注等等,甚至Chatbot的任务类对话类型也可以转换成序列标注问题。目前利用神经网络模型来解决序列标注问题的技术方案也已经比较成熟,一般是用RNN来做,典型的结构图如图1所示:

序列标注问题中将分类标签引入RNN网络结构的尝试_第1张图片

                        图1.RNN解决序列标注问题


具体思路可以参考之前的文章《使用RNN解决NLP中序列标注问题的通用优化思路》,这里不赘述细节。目前使用RNN做序列标注问题,总体而言,跟传统方法比效果相当,并没有表现出特殊明显的优势,我觉得可能跟大多数序列标注问题所需要参考的上下文比较短,所以神经网络模型并不太能发挥出其优势有关。


如图1所示的解决方案中,很容易看出有个值得改进的点。RNN典型网络结构做序列标注任务的问题是什么呢?很明显RNN结构做序列标注问题,不论你套上多少层RNN或者LSTM,其在预测某个单词的标签时,只是考虑了单词本身以及其所在上下文里包含单词的信息。难道这还不够吗?其实还不够。有一类可以利用的信息在这个结构里没有考虑进来,就是单词的分类标签之间的相互影响。比如拿NER问题来说,假设PersonName_Begin标签代表一个字是人名中的起始字,PersonName_Inside代表一个字是人名中的中间字,PersonName_End代表一个字是人名中的终止字。那么很明显如果出现一个PersonName_Begin标签,后面跟PersonName_Inside(三字名的话)或者PersonName_End(两字名的话)的概率应该远大于其它类型标签。再比如拿词性标注来说,假设某个单词被标注为形容词标签ADJ,那么后面跟形容词ADJ或者名词NN的概率要比其它类别标签的概率大得多。这其实体现了标签之间的相互影响,但是基于RNN的模型一般不会将标签信息作为特征。


那么,如何将标签之间的相互影响这个因素体现到神经网络结构下的序列标注问题里呢?这个问题其实是值得探索的一个方向。之前有类方法这么做:RNN在每个时间步t对每个单词输出若干候选标签(这么讲只是为了方便理解,真实在做的时候并没有输出候选标签,而是把隐层节点的状态作为CRF的输入),对于一句话来说,每个单词输出若干候选标签,但是这时候还没定下来到底哪个是最终要输出的标签,在这些候选标签之上再套上一层CRF模型来寻找全局最优的标签组合路径(架构参考图2)。

序列标注问题中将分类标签引入RNN网络结构的尝试_第2张图片

           2. RNN+CRF模型(From: End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF

这等于在RNN的输出结果后面再叠加上了一层后处理步骤,RNN考虑的是根据单词和单词所处上下文给出候选标签,CRF融合全局标签信息得出最优解。我个人对于这种网络与非网络异质模型融合不是太感冒,当然这无关对错,纯属个人技术口味问题。


那么能否在纯粹的神经网络架构下把标签的相互影响因素纳入到模型里面来呢?其实拍下脑袋有个很直接的方法,就是把NER问题的DL网络结构稍微修正一下,调整成下面图3的结构:


   

序列标注问题中将分类标签引入RNN网络结构的尝试_第3张图片

                                 3.标签作为输入特征的RNN模型


和图1的标准RNN解决序列标注问题的网络结构相比,RNN的每个时间步t的输入由原先的单独的t时刻输入Xt,现在改造成每一时刻输入有两个:一个是t时刻的输入Xt,另外一个是t-1时刻输出的标签Y(t-1)。这样,就将前一时刻的标签输出作为当前时刻的输入,也就是将标签作为特征引入到神经网络模型中来。引入这个改进后,貌似好像只是把前一时刻的标签对当前时刻的标签影响建立到模型里,但是其实不仅仅如此,在t时刻的RNN网络隐层对前面时刻1到时刻t-1的标签都建立到模型里去了,只不过是体现在隐层状态上,也就是说这个结构应该可以对标签之间的远程影响也能建立到看上去很简单的模型中去。


这个新的网络结构还是比较简单直观的,在序列标注问题中,从道理上讲也是有一定合理性的。如何训练整个模型呢?在训练阶段,因为训练数据的每个输入单词都是带标准答案标签的,所以在训练时刻,t时刻的输入标签可以直接用t-1时刻的输出标签。这样就能够训练神经网络模型,而训练出的神经网络模型是融合了单词上下文信息以及标签序列之间的相互影响因素的。在推理阶段,t时刻的输入标签则直接用t-1时刻预测输出的标签。可以看出,这个标签使用策略和大多数Encoder-Decoder模型中的Decoder部分策略是相似的。


我们用CONLL2003的命名实体识别和词性标注任务对这个模型进行了训练和测试,并与标准的LSTM模型进行了对比。结果加了标签作为输入的模型和标准的LSTM模型相比,在这两个任务上都没有显著的差异,结果没有明显变好也没有明显变坏,差不太多。但是具体到每个类别,会发现有些类别相比标准LSTM模型变好,有些变差,综合下来基本没差别。我想了下可能的原因,很大的可能是:在推理阶段,因为t时刻使用的是t-1时刻预测的标签,如果t-1时刻标签预测的是对的,按理说应该对后续的标签预测有帮助作用,但是如果预测是错的,那么也可能反而会对正确结果的判断有干扰作用。


  总而言之,这是一次失败的尝试,不过这是种比较容易想到的而且乍一想觉得很有道理的一种改进思路,但是实验结果证明好像不太有效果,所以把这个思路和对应的结果分享出来,希望对有相似想法的同学进一步的工作有帮助作用。


序列标注问题中将分类标签引入RNN网络结构的尝试_第4张图片扫一扫关注微信号:“布洛卡区” ,深度学习在自然语言处理等智能应用的技术研讨与科普公众号

你可能感兴趣的:(深度学习,自然语言处理)