这篇介绍一下ELMo算法(论文)。按道理应该加入前面的《关于句子embedding的一些工作简介》系列,但是严格来讲,只能说它通过自己产生的word embedding来影响了句子embedding, 所以干脆另写一篇吧。
作者认为好的词表征模型应该同时兼顾两个问题:一是词语用法在语义和语法上的复杂特点;二是随着语言环境的改变,这些用法也应该随之改变。作者提出了deep contextualized word representation 方法来解决以上两个问题。
这种算法的特点是:每一个词语的表征都是整个输入语句的函数。具体做法就是先在大语料上以language model为目标训练出bidirectional LSTM模型,然后利用LSTM产生词语的表征。ELMo故而得名(Embeddings from Language Models)。为了应用在下游的NLP任务中,一般先利用下游任务的语料库(注意这里忽略掉label)进行language model的微调,这种微调相当于一种domain transfer; 然后才利用label的信息进行supervised learning。
ELMo表征是“深”的,就是说它们是biLM的所有层的内部表征的函数。这样做的好处是能够产生丰富的词语表征。高层的LSTM的状态可以捕捉词语意义中和语境相关的那方面的特征(比如可以用来做语义的消歧),而低层的LSTM可以找到语法方面的特征(比如可以做词性标注)。如果把它们结合在一起,在下游的NLP任务中会体现优势。
ELMo顾名思义是从Language Models得来的embeddings,确切的说是来自于Bidirectional language models。具体可以表示为:
和
这里的 (t1,t2,...,tN) ( t 1 , t 2 , . . . , t N ) 是一系列的tokens
作为语言模型可能有不同的表达方法,最经典的方法是利用多层的LSTM,ELMo的语言模型也采取了这种方式。所以这个Bidirectional LM由stacked bidirectional LSTM来表示。
假设输入是token的表示 xLMk x k L M 。在每一个位置 k k ,每一层LSTM上都输出相应的context-dependent的表征 h→LMk,j h → k , j L M 。这里 j=1,...,L j = 1 , . . . , L 。顶层的LSTM的输出, h→LMk,L h → k , L L M ,通过Softmax层来预测下一个token tk+1 t k + 1 。
这里的 Θx Θ x 代表token embedding, Θs Θ s 代表softmax layer的参数。
对于每一个token,一个L层的biLM要计算出共 2L+1 2 L + 1 个表征:
这里 hLMk,j h k , j L M 是简写,当 j=0 j = 0 时,代表token层。 j>0 j > 0 时,同时包括两个方向的h。
在下游的任务中, ELMo把所有层的R压缩在一起形成一个单独的vector。(在最简单的情况下,可以只保留最后一层的 hLMk,L h k , L L M 。)
具体来讲如何使用ElMo产生的表征呢?对于一个supervised NLP任务,可以分以下三步:
印象中太深的NLP方面的模型基本没有,这和Computer Vision领域非常不一样。 当然这也是所解决问题的本质决定: Image的特征提取在人脑里就是从低阶到高阶的过程,深层网络有助于高级特征的实现。对于语言来讲很难定义这样的一个过程,这篇文章的两层biLM加residual connection的架构比较少见(Google的transformor是多层网络+residual connection一个例子)。文章认为低层和高层的LSTM功能有差异:低层能够提取语法方面的信息;高层擅于捕捉语义特征。
效果
先看一下在QA,Textual entailment,Semanic role labeling, Coreference resolution, NER, 和 Sentiment analysis上的表现。
和state of art比基本上每个任务都有明显的改善。表中的OUR BASELINE在论文中有详细介绍,它指的是作者选定的某些已有的模型。ELMo+BASELINE指的是作者把ELMo的word representation作为输入提供给选定的模型。这样我们可以清楚的比较在使用和不使用ELMo词嵌入时的效果。
多层和最后一层
公式(1)用各层表征的叠加来代表相应位置的向量,作者在下表中比较了仅仅使用最后一层的效果。
显然多层的叠加效果好于仅使用最后的一层。
最后一列里的 λ λ 代表的是网络参数regularization的大小。结果说明合适的regularization有好处。
存在于输入层和输出层
其实ELMo不仅可以作为下游模型的输入,也可以直接提供给下游模型的输出层。
上表说明有时候同时提供给下游模型的输入和输出层效果更好。
biLM捕捉到的词语信息
ELMo提高了模型的效果,这说明它产生的word vectors捕捉到其他的word vectors没有的信息。直觉上来讲,biLM一定能够根据context区别词语的用法。下表比较了Glove和biLM在play这个多义词上的解释。
对于Glove来说,play的近义词同时涵盖了不同的语法上的用法:动词(playing, played), 名词(players,game)。
但是biLM能够同时区分语法和语义:第一个例子里的play名词,表示击球,第二个例子中play也是名词,表示表演。显然biLM能够在表示词语嵌入时考虑到context的信息。
ELMo在处理很多NLP下游任务中表现非常优异。但是我想这跟它集中在产生更好的词语级别的embedding是有关系的。过去介绍到的一些其他的算法,比如Quick thoughts也是利用了语言模型作为句子的encoder;还有InferSent使用biLSTM作为encoder。和ELMo相比,它们都显得“野心”太大:它们为下游的NLP任务提供了句子embedding的解决方案:即直接利用它们的pretrained encoder,最终的预测无非是加上softmax的classifier。
对比而言ELMo要单纯很多,它只提供了word级别的解决方案:利用它的pretrained biLM来产生word embedding,然后提供给下游的模型。这里的模型往往是sequence model,其效果已经在相应的NLP任务上得到验证。这时有了新的兼具语法语义及环境特征的word embedding的加持,难怪效果会更好。更不要说,ELMo还在任务语料库上小心翼翼的再进行过一轮微调,更是保证了对新domain的adaptation。
关注公众号《没啥深度》有关自然语言处理的深度学习应用,偶尔也有关计算机视觉