ELMo算法介绍

这篇介绍一下ELMo算法(论文)。按道理应该加入前面的《关于句子embedding的一些工作简介》系列,但是严格来讲,只能说它通过自己产生的word embedding来影响了句子embedding, 所以干脆另写一篇吧。

Introduction

作者认为好的词表征模型应该同时兼顾两个问题:一是词语用法在语义和语法上的复杂特点;二是随着语言环境的改变,这些用法也应该随之改变。作者提出了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任务中会体现优势。

Bidirectional language models

ELMo顾名思义是从Language Models得来的embeddings,确切的说是来自于Bidirectional language models。具体可以表示为:
这里写图片描述

这里写图片描述
这里的(t1,t2,...,tN)是一系列的tokens
作为语言模型可能有不同的表达方法,最经典的方法是利用多层的LSTM,ELMo的语言模型也采取了这种方式。所以这个Bidirectional LM由stacked bidirectional LSTM来表示。

假设输入是token的表示xkLM。在每一个位置k,每一层LSTM上都输出相应的context-dependent的表征hk,jLM。这里j=1,...,L。顶层的LSTM的输出,hk,LLM,通过Softmax层来预测下一个tokentk+1

log likelihood表达如下:
这里写图片描述

这里的Θx代表token embedding, Θs代表softmax layer的参数。

ELMo

对于每一个token,一个L层的biLM要计算出共2L+1个表征:
这里写图片描述

这里hk,jLM是简写,当j=0时,代表token层。j>0时,同时包括两个方向的h。

在下游的任务中, ELMo把所有层的R压缩在一起形成一个单独的vector。(在最简单的情况下,可以只保留最后一层的hk,LLM。)
这里写图片描述

具体来讲如何使用ElMo产生的表征呢?对于一个supervised NLP任务,可以分以下三步:

  1. 产生pre-trained biLM模型。模型由两层bi-LSTM组成,之间用residual connection连接起来。
  2. 在任务语料上(注意是语料,忽略label)fine tuning上一步得到的biLM模型。可以把这一步看为biLM的domain transfer。
  3. 利用ELMo的word embedding来对任务进行训练。通常的做法是把它们作为输入加到已有的模型中,一般能够明显的提高原模型的表现。

印象中太深的NLP方面的模型基本没有,这和Computer Vision领域非常不一样。 当然这也是所解决问题的本质决定: Image的特征提取在人脑里就是从低阶到高阶的过程,深层网络有助于高级特征的实现。对于语言来讲很难定义这样的一个过程,这篇文章的两层biLM加residual connection的架构比较少见(Google的transformor是多层网络+residual connection一个例子)。文章认为低层和高层的LSTM功能有差异:低层能够提取语法方面的信息;高层擅于捕捉语义特征。

Evaluation and Analysis

效果
先看一下在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。

关注公众号《没啥深度》有关自然语言处理的深度学习应用,偶尔也有关计算机视觉
这里写图片描述

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值