Semi-supervised sequence tagging with bidirectional language models

Author Avatar
Trace 12月 04, 2017
  • 在其它设备中阅读本文章

最近在看微信推送的时候,有看到一篇推荐文献,发表在ACL2017,跟我之前想做的 通过改进embedding的表示提高NLP任务的表现 方面有点联系的,大致看下来觉得挺不错的,这里在仔细阅读一遍,记录下来。这篇文章不管是在对技术上、研究思想上,还是文章写作方面都有借鉴意义。

链接:Semi-supervised sequence tagging with bidirectional language models

摘要

预训练的word embedding已经在基于深度学习的NLP模型里广泛应用了,但是word embedding往往只从数量比较少的数据中训练得来。文章提出了将一个双向的语言模型的context embedding引入序列标注任务中,在NER和chunking两个任务上进行了实验,发现context embedding的引入可以提高performance,并且与其他的某些transfer或者joint learning,以及某些引入附加信息的方法相比,能得到更好的performance。

模型


上图是整个模型的概览,左边是一个比较基本的Bi-RNN-CRF的序列标注模型,也可以参考End-to-end sequence labeling via bi-directional LSTM-CNNs-CRF,这个模型最开始输入的character representation也是由两部分组成,一部分是形态学特征信息,$c_k$,另一部分是预训练的word embedding,$w_k$。接着是一个正向一个反向RNN,最后接一个CRF层对标签进行优化。
语言模型(Language Model)本来是用来计算一个序列 $(t_1, t_2, \cdots, t_N)$ 的可能性,即:

$p(t_1, t_2, \cdots, t_N) = \prod_{k=1}^N{p(t_k|t_1, t_2, \cdots, t_{k-1})}$

基于以上的基本假设,构建深度神经网络,最后得到一个固定长度的向量,$h_f^{LM}$。上面公式其实是得到一个正向的表示,考虑到既然可以获得正向上下文信息,作者又训练了一个反向的语言模型,也得到一个固定长度的向量,$h_b^{LM}$。主要的计算公式如下:

$p(t_1, t_2, \cdots, t_N) = \prod_{k=1}^N{p(t_k|t_{k+1}, t_{k+2}, \cdots, t_N)}$

最后两个语言模型的embedding,$h_f^{LM}$,$h_b^{LM}$,串联组成一个向量$h^{LM}$。这里的两个向量完全是独立训练得到,没有共享参数。在得到$h^{LM}$后,作者将这个向量和Bi-RNN第一层的输出串联起来当成第二层RNN的输入。 其实,作者也提出了几个方案来做$h^{LM}$和第一层输出的整合,包括1. 串联之后加一个非线性变换;2. 加入类似attention机制,来给$h^{LM}$加上权重。因为直接串联的效果已经比较好了,所以作者并没有实现。

试验

作者主要在两个任务上做了评测,CoNLL 2003 NER taskCoNLL 2000 Chunking task。采用的标注方式是BIOES

训练中的tricks

  • Adam optimizer
  • 用early stopping来防止overfitting,具体策略是:先固定learning rate,在每个epoch训练结束之后,都测试一下开发集上的的performance。假如得到了一个最好的performance,就把learning rate作退火处理(annealing),即降低一个数量级(比如除以10),继续训练5个epoch,再降低一个数量级,继续训练5个epoch就结束训练。我的理解是假如说连续训练5个epoch,再降低learning rate训练5个epoch还没有出现更好的模型,就停止训练。
  • 随机种子,训练10次,取F值的平均和标准差

结果


从上图可以看出,文章的模型与baseline相比,表现最好,而且加入语言模型embedding,可以显著提高系统performance。

附加分析

  1. 在模型的哪个模块加入语言模型embedding,输入层,第一层RNN的输出,第二层RNN的输出? 第一层RNN的输出,解释是可能第二层的RNN可以把第一层RNN的任务特殊性的上下文信息和语言模型中通用的上下文信息结合起来考虑。
  2. 使用不同的语言模型是否会有影响? 加入反向语言模型更好,比较大的语言模型的size更好,比较大的语料用来训练语言模型更好。
  3. 评测数据集大小? 在小的数据集上,加入语言模型后,performance提高更显著。
  4. 是不是因为语言模型embedding的加入增加了参数,所以performance更好?
    通过两个实验:1. 不加LM,只是单纯增加第二层RNN的维度(没有提及怎么增加这个维度的?)与加入LM时的维度一致;2. 加LM,但是对维度进行压缩(同样没有提及怎么压缩这个维度的?),使得与不加LM的基础模型维度一致。结论是:单纯增加维度是没用的,压缩维度会稍微降低performance。
  5. 语言模型可以跨领域吗? 将新闻领域训练出来的语言模型,用到科学出版物的任务上,也有performance的提升。

思考

  1. 即使是dropout这么一个参数就有好多选择要不要用,在哪些层要用,用多大,比如在CoNLL 2003 NER的基本模型中,作者就只在GRU的输入上用了25%的dropout;在CoNLL 2000 chunking的基础模型中就在embedding上,LSTM的输入,以及最后一层LSTM的输出上用了50%的dropout。
  2. 对人们比较关心的几个问题都做了附加的分析,让人心服口服,值得学习。
  3. 即使只是对基础模型的一个细小改动,增加一个类型信息(本文是语言模型的上下文信息),如果把实验做的充分,结果显著,也是可以发出来文章的。

本文标题: Semi-supervised sequence tagging with bidirectional language models
原始链接: https://oyeblog.com/2017/paper_0_LM/
发布时间: 2017年12月04日 - 22时11分
最后更新: 2023年10月22日 - 15时17分
版权声明: 本站文章均采用CC BY-NC-SA 4.0协议进行许可。转载请注明出处!