版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27717921/article/details/89053988
在读这篇论文之前,首先我们要了解word embeding存在的问题。通常word embeding是通过大型语料库预训练得出的一个v*m的大表,v是词的个数,m是用维度为m的向量来表示词。
word embeding的好处就在于可比较词的相似度,相近的两个词,它们的embeding越相近。
但是word embeding是一个静态的词表,也就是说一旦预训练完成,这个词的embeding就是确定的,但是在实际应用中,往往是需要结合语境的,尤其是一词多义,如单词bank
而在很长一段时间里,静态的word embeding都是非常重要的word表示方式,直到Elmo的出现,终于提供了一种deep contextualized word representation。
1. 可以表示句法和语法
2. 可以表示一词多义,对一词多义建模
不同于传统的word embeding, elmo representations are deep, in the sense that they are a function of all of the in- ternal layers of the biLM. More specifically, we learn a linear combination of the vectors stacked above each input word for each end task, which markedly improves performance over just using the top LSTM layer.
从paper中,我们可以了解到elmo结合了每层的表示,基于大规模语料训练后的双向语言模型内部隐状态特征的组合,并且在特定任务中可以微调。这篇论文还指出bilstm的high-level提取出了语境相关的含义,可以用于语义理解的任务,而low-level捕捉到了词性和句法,可以应用于一部分的语音标注中。
在了解ELMO之前,首先需要了解下语言模型
给定一句话,这句话最终分词分为N个token,如s = (t1, t2, ..., tN ),则建立前向语言模型,s是一句话的概率可以表示为:
对tk, lstm的每层都会输出一个语境相关的表示
,j=(1,····L),
表示最高层的输出,可以利用最高层,经过softmax层表示预测下一个tk+1。
前向语言模型的流程如下图:
同理,后向语言模型,s是一句话的概率可以表示为:
和前向语言模型类似,这里就不再重复描述。
将前向语言模型和后向语言模型结合起来就形成biLM。
其中两个方向的LSTM的参数不是共享的,
就是一开始输入的词向量,
就是softmax层参数。因此,双向语言模型的结构图如下:
对于每一个词
,一个L层的biLM可以计算出
个表达如下,
如果我们统一用
来表示biLM的每一层输出,
来表示第一层向量,其实就是传统的word embeding,那么整个表达可以统一表示为
而前面也说了,ELMO本质上就是一个任务导向的,双向语言模型(biLM)内部的隐状态层的组合。通用的表达式如下
其中,参数
,原论文说softmax-normalized weights,其实可以理解为L+1层的权值,类似于归一化处理。而
是用来控制ELMO模型生成的向量大小,该系数对于后续的模型优化过程有好处(在附件中,作者强调了这个参数的重要性,因为biLM的内核表达,与任务需要表达,存在一定的差异性,所以需要这么一个参数去转换。并且,这个参数对于就是只取最后一层尤其重要。
给定一个预训练好的elmo和某个有监督的nlp任务的网络结构,利用elmo提高当前任务的效果是非常简单的,首先在当前比较小的语料库中跑elmo,记录每个token在每一层的表示,然后让具体下游任务学习这些token表示的线性表示方式,其实就是学习参数
和参数
,然后再和原有的词向量层x拼接。以token = stick为例,正如下图所表示:
(To add ELMo to the supervised model, we first freeze the weights of the biLM and then concatenate the ELMo vector ELMo task with k xk and pass the ELMo enhanced representation[x ; ELMotask ] into the task RNN.)
在实验部分,作者实验了elmo的使用方式和使用位置
使用方式: 只用elmo的最后一层或者用多层的线性组合
使用位置:和传统的word embeding拼接在一起,作为输入
,或者将放在和hk
拼接作为下一层的输入。
ELMO中不同的层,能从不同的纬度表达一个词,作者经过实验发现,低层的输出能更好的从句法语法的层面表达一个词,而高层的输出能更好的从语意的层面表达一个词。