我最近在家听贪婪学院的NLP直播课。 是基本内容。 放到博客上做NLP课程的简单整理。
本课程主要介绍单词向量和Elmo。 核心是Elmo,语向量是基础知识点。
Elmo在2018年提交的论文《Deep contextualized word representtations》中,在这篇论文中提出了重要的思想Elmo。 Elmo是一种基于特征的语言模型,使用预训练的语言模型生成更好的特征。
Elmo是句法和语义等复杂特征,以及对语言语境中词的变化进行建模,即对多义词进行建模的新深度语境化词的特征。 我们的词向量是深度双向语言模型biLM内部状态的函数,在大文本语料库中预先训练。
Elmo的主要途径是首先训练完整的语言模型,用该语言模型处理需要训练的文本,生成对应的词向量,因此文中强调Elmo的模型可以针对同一词的不同句子生成不同的词向量。
在讲ELmo之前先回顾一下单词向量和语言模型。 由于ELmo方案在语言模型的单词向量中存在一些缺点(主要解决不了单词的多语义问题),因此提出了双向-深度-LSTM的ELmo模型。 这里的“双向”是联系,不是真正意义上的双向,所以XLNET有改进的permutation,真正实现了上下文感知的双向。 这里的“深度”是横向和纵向的深度。 因为深度可以按层学习不同的地方,越深层学习的东西越具体。
1 .单词向量和语言模型
NLU文本的量化表示方法
独热码:能表示单词之间的相似度吗? -做不到。 这是因为用任何一种方法(余弦相似度等)都无法计算两个向量的相似度。
所以,有单词向量(方差表示的单词向量)
独热码:是稀疏向量,都是正交的。
词向量:密集向量,分布式词向量。
聚集了相似的单词。 当我们提取某个词向量时,我们可以通过可视化来表达他们的关系。 可视化TSNE (位于sk learn上) )这是降维算法(一般对词向量使用TSNE ),其他降维算法有PCA等。
语言模型的目标是最大的语言一句话的概率。
根据前面几个单词预测下一个单词就是语言模型。
语言模型基础:链式法则、马尔可夫、n班、平滑方式、困惑度。
全局方法:全局方法
Local方法:本地方法
基于LM的培训:基于语言模型的培训
基于非LM的培训:基于非语言模型的培训
1全局vs本地
Global:优势:全局.劣势:计算量大,有新文本需要更新。
Local: Skip Gram
2 .基于lm的vs非lm的
对于Elmo :语言模型-NNLM-分层显示- hmm-rnn-lstm-bil STM-deepbilstm-elmo
2 .学习不同语境下的语义表达
基于分布式全高清
skip-gram
句子:单词向量的训练方法有两种
单词: W1 W2 W3 W4 W5
windows=1
假设知道w2,预测w1和w3
目标函数:最大化p (w2|w1 ) P(w1|w2 ) p ) P(w3|w2 ) p (w2…)
cbow :
根据w1和w3预测w2
目标函数:maximizep(W2|W1,w3 ) p ) W3|W2,w4 )…
语言模型hmm
nnlm :
目标函数:最大化P(w3|w2 ) P(w3|w2 )
上面句子中的Back是不同的意思。
理解不同语境中词向量的含义是我们的目标。 所以有了Elmo、Bert等模型。
正确答案是ABCD。
a是比较直观可行的方案,每个单词有多个意思时,可以对应多个词向量。 当然方法是可行的,但具体的执行问题也有可能很清楚。
>B和C是相关的。example: I back my car, I heart my back. 首先对back计算一个基准向量 H_back 一对一的,如何计算2个back这个句子里面的含义分别是什么? H_back + ▲(基于上下文的偏移)
3.基于LSTM 的词向量学习
基于LSTM 作为基石
深度,层次
LSTM 来源于RNN, 因为RNN有些梯度爆咋的问题,所以提出了LSTM。
目标函数 是一个 语言模型,输出层 通过softmax 获取 期望输出向量,然后 期望输出 和实际值(热独编码) 计算交叉熵,反向传播。
下面是两个独立的 LSTM。不是一个真正的双向LSTM。
为什么不是真正的双向 是因为只是把前向和反向 拼接起来的结果,不是完整意义上的双向。 所以后面Permutation(XLNET) 可以认为是真正的双向
4.深度学习中的层次表示以及Deep BI-LSTM
深度 : 可以从纵向和横向上深度。
层次表示 可以看出 每层学出来的结果是不一样的。
这个就是Deep-bi-LSTM
基于LM方式来训练。
5.ELMO模型
Elmo 使用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。
语言模型的双向体现在对句子的建模:给定一个N个token的句子, t1,t2,t3...tNt1,t2,t3...tNt_1,t_2,t_3...t_Nt1,t2,t3...tN。
前向语言模型:从历史信息预测下一个词,即从给定的历史信息$(t_1,…,t_{k-1}) $ 建模下一个token 预测 tktkt_ktk的概率 (这是前向LSTM)
对于一个L层的LSTM, 设其输入是xLMkxkLMx^{LM}_kxkLM(token embedding)每一层都会输出一个context-dependent representation (h⃗LMk,jh⃗k,jLMvec{h}^{LM}_{k,j}hk,jLM), LSTM的最后一层输出为(h⃗LMk,Lh⃗k,LLMvec{h}^{LM}_{k,L}hk,LLM),该输出会在Softmax layer被用来预测下一个token tk+1tk+1t_{k+1}tk+1
后向语言模型:从未来信息预测上一个词,即从给定的未来(tk+1,...tNtk+1,...tNt_{k+1},...t_Ntk+1,...tN)建模上一个token tktkt_ktk的概率(反向LSTM)
对于一个L层的LSTM, 设其输入是xLMkxkLMx^{LM}_kxkLM(token embedding)每一层都会输出一个context-dependent representation 反向的(h⃗LMk,jh⃗k,jLMvec{h}^{LM}_{k,j}hk,jLM), LSTM的最后一层输出为反向的(h⃗LMk,Lh⃗k,LLMvec{h}^{LM}_{k,L}hk,LLM),该输出会在Softmax layer被用来预测下一个token tk−1tk−1t_{k-1}tk−1
双向语言模型是前向、后向的一个综合,通过两个方向的对数极大似然估计来完成:
其中:
ΘxΘxTheta_{x}Θx是token embedding
ΘsΘsTheta_{s}Θs代表softmax layer的参数
biLM利用了biLSTM,biLSTM在前向和后向两个方向上共享了部分权重
对于一个token,ELMo会计算2L+1 个representation(输入的一个token embedding和前向、后向的2L个representation):
其中:
在下游任务中,ELMo将R的所有层压缩成一个向量ELMok=E(Rk;Θe)ELMok=E(Rk;Θe)ELMo_k=E(R_k;Θe)ELMok=E(Rk;Θe) ,在最简单的情况下,也可以只使用最后一层E(Rk)=hLMk,LE(Rk)=hk,LLME(R_k)=h^{LM}_{k,L}E(Rk)=hk,LLM
其中
可以看出,ELMo是biLM多层输出的线性组合。
在监督NLP任务中使用Elmo
在supervised NLP tasks中使用ELMo, 给定N个token的句子,supervised NLP处理的标准过程的输入是context-independent token词向量xkxkx_kxk,加入ElMo有两种方式:
直接将ELMo词向量ELMokELMokELMo_kELMok和普通词向量xkxkx_kxk 拼接得到[xk;ELMotaskk][xk;ELMoktask][x_k; ELMo_k^{task}][xk;ELMoktask],作为模型的输入。
将ELMo词向量ELMokELMokELMo_kELMok 和隐藏层输出hkhkh_khk 进行拼接得到[hk;ELMotaskk][hk;ELMoktask][h_k; ELMo_k^{task}][hk;ELMoktask]
(一个单词在语境下的表示 就是所有层的加权平均。
在预训练好这个语言模型之后,ELMo就是根据公式来用作词表示,其实就是把这个双向语言模型的每一中间层进行一个求和。最简单的也可以使用最高层的表示来作为ELMo。然后在进行有监督的NLP任务时,可以将ELMo直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。)
6.总结
ELMo的假设前提一个词的词向量不应该是固定的,所以在一词多意方面ELMo的效果一定比word2vec要好。
word2vec的学习词向量的过程是通过中心词的上下窗口去学习,学习的范围太小了,而ELMo在学习语言模型的时候是从整个语料库去学习的,而后再通过语言模型生成的词向量就相当于基于整个语料库学习的词向量,更加准确代表一个词的意思。
ELMo还有一个优势,就是它建立语言模型的时候,可以运用非任务的超大语料库去学习,一旦学习好了,可以平行的运用到相似问题。
Bert 是 AutoEncoder 通过上下文来预测中间mask单词,损失函数是ADE的损失函数,不是交叉熵损失。Bert 模型不是基于语言模型的,只是基于ADE。
Elmo 是基于语言模型的。