论文题目

Deep Contextualized Word Representations (ELMo)

背景介绍

预训练词向量是神经网络语言理解的基础模块。然而,如何得到高质量的词向量仍是一项挑战。获取高质量的词向量需要解决两个问题:

  1. 词语本身复杂的特性,如语法和语义
  2. 语境变化引发词语用法的改变,如一词多义

特别是第二点,传统词向量基本无能为力,如Word2vec。Word2vec 一般只看周围几个词,仅是语言模型训练过程中的副产物,词向量相对单薄。而ELMo 根据整个句子来决定词的表示,ELMo 是整个双向语言模型中间层表示的融合产物,除了语义语法信息,还可缓解一词多义问题。

ELMo 全称是Embeddings from Language Models。其实Word2vec 也是来源于语言模型,只不过和ELMo 相比,没有尽可能多地利用语言模型的各中间部分的信息。下面具体看看ELMo 是如何利用双向语言模型各层结果的。

模型结构

ELMo预训练双向语言模型架构
ELMo预训练双向语言模型架构

如图所示,预训练双向语言模型自底而上分别是句子原始输入(input tokens);输入表示层(token representation layer \(L_{o}\));双向LSTM 层(context-sensitive representation layer \(L_{1}\));双向LSTM 层(context-sensitive representation layer \(L_{2}\))。

原始输入为句子的切分片段\(t_{k}\),如词、词片段(word piece)。输入表示层一般直接使用embedding 或者使用字符级CNN 进行编码,得到\(\textbf{x}_{k}^{LM}\)。这部分是上下文无关的,仅与\(t_{k}\)有关。

接下来是双向LSTM层。对于任意词\(t_{k}\),在已知前面词和后面词的情况下,分别从两个方向预测词\({t}_{k}\)的概率,并输出该词的前向表示\(\overrightarrow{\textbf{h}}_{k,j}^{LM}\) 和后向表示\(\overleftarrow{\textbf{h}}_{k,j}^{LM}\)。文章使用双向LSTM 层不同方向的参数是共享的。图中仅使用了2 层BiLSTM,理论上是可以使用任意个。

有了各层表示之后,对于每个token \(t_{k}\),有2L+1个表示集合:

\[\begin{aligned} R_{k} &= \left \{ \textbf{x}_{k}^{LM}, \overrightarrow{\textbf{h}}_{k,j}^{LM}, \overleftarrow{\textbf{h}}_{k,j}^{LM} | j= 1, ..., L \right \} \\ &= \left \{ \textbf{h}_{k,j}^{LM}|j=1, ..., L \right \} \end{aligned}\]

其中\(\textbf{h}_{k,0}^{LM}\) 为输入表示层。对于每个biLSTM层\(\left(j>0\right)\),\(\textbf{h}_{k,j}^{LM} = \left[\overrightarrow{\textbf{h}}_{k,j}^{LM}, \overleftarrow{\textbf{h}}_{k,j}^{LM}\right]\)。

对于下游任务来说,ELMo 将每个token的表示集合\(R_{k}\) 转换成一个向量,即\(\textbf{ELMo}_{k} = E\left(R_{k};\Theta ^{task}\right)\)。

最简单地,当仅选择ELMo 最后一个biLSTM 层的输出: \(\textbf{ELMo}_{k} = \textbf{h}_{k,j}^{LM}\)。

普遍来说\(E\)是一个根据不同任务对双向语言模型不同层进行加权的函数。

\[\textbf{ELMo}_{k}^{task} = E\left(R_{k};\Theta ^{task}\right) = \gamma^{task} \sum_{j=0}^{L}s_{j}^{task}\textbf{h}_{k,j}^{LM}\]

模型训练

文章对Char n-gram进行CNN编码,然后接两层Highway层和一个投影层,将其映射成定长512维向量,然后经过两层隐藏单元为4196、输出维度为512的BiLSTM层,从第一个BiLSTM到第二个biLSTM加一个残差连接。相比固定词表的模式,Char CNN 可以很好解决oov 问题。

将双向语言模型在大规模语料中训练好后,把每个单词对应模型中的各层表示记录下来,然后让下游监督任务学习这些表示的线性组合。一般可以将\(\textbf{x}_{k}\) 和\(\textbf{ELMo}_{k}\) 拼接起来作为接下来监督任务的输入,监督任务一般采用RNN、CNN 或者全连接层进行训练。在某些任务中,再次把\(\textbf{ELMo}_{k}\) 和监督任务监督任务的输出层拼接起来可以提升监督任务的效果。

另外, 文章发现对ELMo加入Dropout 正则或者权重L2 正则,效果更佳。 同时,在多数下游任务中,进一步Finetune 双向语言模型,效果也有提升。

模型分析

ELMo 认为语言模型不同层可以捕获不同级别的语言特性。高级别表示层可以获得语境相关的语义,而低级别表示层能够学习语法层面的信息。结合起来,可以很好的表示词。ELMo 相比ULMFiT,训练过程操作性更好。同时为使用复杂语言模型来获得词向量提供了新思路。

参考资料:

  1. Deep Contextualized Word Representations