elmo算法解析

2018年3月份提出ELMo(Embedding from Language models),模型通过对不同句子创建不同的词向量,进行动态调整,解决了之前工作2013年的word2vec及2014年的GloVe的多义词问题,可以称之为静态词向量。模型经过大量语料库预训练好之后
(context—before预测当前字,context—after预测当前字,而且不是同时的),使用预训练时,将任务实际的一句话或一段话输入该模型,模型会根据上下文来推断每个词对应的词向量,可以称之为动态词向量。
在这里插入图片描述
模型使用双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数是这两个方向语言模型的最大似然函数。给定一串长度为N的词条(t1,t2,…,tN),前向语言模型通过对给定句子左侧(t1,…tk−1)预测tk进行建模(auto regressive language model),前向LSTM:在这里插入图片描述
同理,后向语言模型通过对给定句子右侧(tN…tk-1)预测tk进行建模(auto regressive language model),后向LSTM:在这里插入图片描述
求取最大似然函数在这里插入图片描述
经过双向三层LSTM进行特征提取(word features,syntactic features,semantic features),得到预训练模型,会有三层embedding,其实就是对句子中在位置k的token在每一层的hidden state进行加权用于下游任务,最简单的也可以使用最高层的表示用于下游任务。
在这里插入图片描述
对于下游有监督NLP任务,利用ELMo模型可以分以下三步:
1、无监督产生预训练biLM模型。模型由两层bi-LSTM组成
2、在下游任务语料上(注意是语料,忽略label,自回归语言模型)fine tuning上一步得到的biLM模型。
3、利用ELMo的word embedding来对具体下游任务进行训练。以此作为新的词向量输入到已有的模型中,一般能够明显的提高原模型的表现。
在这里插入图片描述
缺点:
1、LSTM特征提取能力弱于transformer,
2、不能并行,因当前时刻隐状态依赖前一时刻的隐状态
3、双向只是将左右侧的隐状态进行拼接,实际上并无读取上下文的能力

https://blog.csdn.net/triplemeng/article/details/82380202 https://zhuanlan.zhihu.com/p/63115885