1. 引言
在2018年之前,词向量表示的方法主要还是采用CBOW、skip-gram、GloVe等方法,这些方法都是采用一个固定维度的向量来表征每一个词汇或字符,虽然方法简单,但是会存在两个问题,一方面是没有考虑词汇在不同语境的信息,比如”apple"在一些场景下可以表示水果,在另一些场景下可能表示苹果公司,另一方面,采用一个固定的向量表示词汇,没有考虑到语法和语义的信息。因此,在2018年,Matthew等人提出了一种新的方法——ELMo(Embeddings from Language Models),ELMo训练的不再只是一个词向量,而是一个包含多层BiLstm的模型,然后对于每一个句子,都需要传入该模型,分别拿到每个时间步在每个层的输出,最后在具体的NLP任务中,再单独训练每一层的权重向量,对每一层的向量进行线性加权作为每个词汇的最终向量表示。这样一来,每个词汇在不同的上下文语境中,都可以得到不同的向量表示,因此,在一定意义上可以解决一词多义的问题。
2. ELMo原理介绍b
2.1 双向语言模型(Bidirectionbbal language models, biLM)
首先介绍一下什么是双向语言模型,即biLM,因为作者预训练词向量模型就是通过biLM。给定一个长度为N的词汇序列 t 1 , t 2 , … , t N t_{1}, t_{2}, \ldots, t_{N} t1,t2,…,tN,我们知道,在每个时间步,前向语言模型会根据前面的b词汇预测当前词汇的概率,最终对每个时间步的输出概率进行累积来作为整个序列的预测概率,并期望该概率越大越好,即:
p ( t 1 , t 2 , … , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , … , t k − 1 ) p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} | t_{1}, t_{2}, \ldots, t_{k-1}\right) p(t1,t2,…,tN)=k=1∏Np(tk∣t1,t2,…,tk−1