1. 提出背景
在2013年的word2vec及2014年的GloVe的工作中,每个词对应一个vector,对于多义词无能为力。ELMo的工作对于此,提出了一个较好的解决方案。不同于以往的一个词对应一个向量,是固定的。在ELMo世界里,预训练好的模型不再只是向量对应关系,而是一个训练好的模型。使用时,将一句话或一段话输入模型,模型会根据上下文来推断每个词对应的词向量。这样做之后明显的好处之一就是对于多义词,可以结合前后语境对多义词进行理解。比如apple,可以根据前后文语境理解为公司或水果。
ELMO,是Embedding from Language Model的缩写( Peters等人,2018年),通过无监督预训练多层双向LSTM模型来学习带上下文信息的(Contextualized)单词表示。
ELMo在中文上确实会比word2vec好很多, 使用中文语料测试成功了, 使用200m新闻语料训练语言模型, 然后在对该新闻语料进行分类(10类)。最终测试结果使用ELMO比word2vector高近2个百分点, 而且这还是没有对ELMO优化的情况下。
2.简介
与传统词向量用固定向量的表示不同,ELMo是一种动态词向量表示方法,其最终训练得到一个语言模型。当需要文本s中某个词w的词向量表示时,ELMo通过将s作为输入,得到文本的向量表示,继而获得词w在文本s语境下的词向量表示。
ELMo认为,通过联合bi-LSTM的各层内部状态来表示词向量可以表达词语更为丰富的信息,模型底层隐状态表达词语的语法信息(eg:适用于词性标注任务),而上层隐状态则捕捉了词语的语义信息(eg:适用于词义消歧任务)。
大量实验证明,ELMo在多种NLP任务中都获得极好的效果;另外,前人的工作以及论文最后对ELMo与GoVe的分析则证明,词向量的深度表示比仅利用LSTM的最后一层的效果更好。
3.ELMo原理
他们使用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。
前向LSTM结构:
双向语言模型是ELMO的基础。模型的输入是由n个token构成的序列
(
x
1
,
.
.
.
,
x
n
)
(x_1,...,x_n)
(x1,...,xn),语言模型根据历史的序列预测
x
1
.
.
.
.
.
x
i
−
1
x_1.....x_{i-1}
x1.....xi−1下一个token
x
i
x_i
xi的概率。在正向计过程中,根据历史的序列预测
x
1
.
.
.
.
.
x
i
−
1
x_1.....x_{i-1}
x1.....xi−1下一个token
x
i
x_i
xi的概率
反向LSTM结构:
在反向计算过程中,根据历史之后的序列
x
i
+
1
.
.
.
.
.
x
n
x_{i+1}.....x_n
xi+1.....xn预测第i个token
x
i
x_i
xi的概率,
最大似然函数:
该模型的loss是最小化两个方向的负对数似然( =最大化真实单词的对数似然) :
因此ELMo的基本输入单元为句子,每个词没有固定的词向量,是根据词的上下文环境来动态产生当前词的词向量,常见的场景可以较好解决一词多义的问题,这一点跟word2vec与glove等通用词向量模型是不同的。
参考https://blog.csdn.net/zwqjoy/article/details/101296941