广东茂名网站建设,element做模板wordpress,无锡网站推广优化公司哪家好,免费做爰小说网站语言模型#xff1a;从Word Embedding到ELMo ELMo原理Bi-LM总结参考资料 本文主要介绍一种建立在LSTM基础上的ELMo预训练模型。2013年的Word2Vec及2014年的GloVe的工作中#xff0c;每个词对应一个vector#xff0c;对于多义词无能为力。ELMo的工作对于此#xff0c;提出了… 语言模型从Word Embedding到ELMo ELMo原理Bi-LM总结参考资料 本文主要介绍一种建立在LSTM基础上的ELMo预训练模型。2013年的Word2Vec及2014年的GloVe的工作中每个词对应一个vector对于多义词无能为力。ELMo的工作对于此提出了一个较好的解决方案。不同于以往的一个词对应一个向量是固定的。
在ELMo世界里预训练好的模型不再只是向量对应关系而是一个训练好的模型。使用时
将一句话或一段话输入模型模型会根据上线文来推断每个词对应的词向量。这样做之后明显的好处之一就是对于多义词可以结合前后语境对多义词进行理解。比如apple可以根据前后文语境理解为苹果公司或一种水果。可以说ELMo的提出意味着从词嵌入Word Embedding时代进入了语境词嵌入Contextualized Word-Embedding时代。 ELMo原理
ELMo来自论文Deep contextualized word representations它是”Embeddings from Language Models“的简称。从论文题目看ELMo的核心思想主要体现在深度上下文Deep Contextualized 上。与静态的词嵌入不同ELMo除提供临时词嵌入之外还提供生成这些词嵌入的预训练模型所以在实际使用时ELMo可以基于预训练模型根据实际上下文场景动态调整单词的Word Embedding表示这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义自然也就解决了多义词的问题。所以ELMo实现了一个由静态到动态的飞跃。
ELMo的实现主要涉及语言模型当然它使用的语言模型有点特别因为它首先把输入转换为字符级别的Embedding根据字符级别的Embedding来生成上下文无关的Word Embedding然后使用双向语言模型如Bi-LM生成上下文相关的Word Embedding。
ELMo的整体模型结果如下图所示 从上图中可以看出ELMo模型的处理流程可分为如下 输入句子 句子维度为 B × W × C B\times W\times C B×W×C其中B表示批量大小batch_sizeW表示一句话中的单词数num_wordsC表示每个单词的最大字符数目(max_characters_per_token)可设置为某个固定值如50或60。在一个批量中语句有长短可以采用Padding方法对齐。 字符编码层 输入语句首先经过一个字符编码层Char Encoder LayerELMo实际是对字符进行编码它会对每个单词中所有字符进行编码得到这个单词的表示。输入维度是 B × W × C B\times W\times C B×W×C经过字符编码层后的数据维度为 B × W × D B\times W\times D B×W×D。这里展开进一步说明 如上图所示 Char Embedding 对每个字符进行编码包括一些特殊字符如单词的开始bow、单词的结束eow、句子的开始符bos、句子的结束符eos、单词补齐符pow和句子补齐符pos等维度会变为 B ∗ W ∗ C ∗ d B*W*C*d B∗W∗C∗d这里d表示字符的Embedding维度(char_embed_dim)Multi-Scale CNN Char Embedding通过不同规模的一维卷积、池化等作用后再经过激活层最后进入拼接和修改状态层ConcatReshapeConcatReshape 把卷积后的结果进行拼接使其形状变为 B , W , d 1 . . . d m B,W,d1...dm B,W,d1...dmdi表示第i个卷积的通道数Highway Net Highway Net类似残差连接这里有2个Highway层Linear Projection 该层为线性映射层上一层得到的维度d1…dm比较长经过该层后将维度映射到D作为词嵌入输入后续的层中这里输出维度为 B ∗ W ∗ D B*W*D B∗W∗D
注意输入度量是字符而不是词汇以便模型能捕捉词的内部结构信息。比如beauty和beautiful即使不了解这两个词的上下文双向语言模型也能够识别出它们在一定程度上的相关性。
双向语言模型 对字符级语句编码后该句子会经过双向语言模型Bi-LM模型内部先分开训练了两个正向和反向的语言模型而后将其表征进行拼接最终得到输出维度 ( L 1 ) ∗ B ∗ W ∗ 2 D (L1)*B*W*2D (L1)∗B∗W∗2D这里1是加上最初的Embedding层类似残差连接。
ELMo采用双向语言模型即同时结合正向和反向的语言模型其目标是最大化如下的log似然值 然后分别训练正向和反向的两个LM最后把结果拼接起来。词向量层的参数 Θ x \Theta_x Θx和Softmax层参数 Θ \Theta Θ在前向和后向语言模型中是共享的但LM正向与反向的参数是分开的。如下图所示 ELMo 利用正向和反向扫描句子计算单词的词向量并通过级联的方式产生一个中间向量下面会给出具体的级联方式。通过这种方式得到的词向量可以捕获到当前句子的结构和该单词的使用方式。
值得注意是ELMo 使用的 Bi-LM 与 Bi-LSTM 不同虽然长得相似但是 Bi-LM 是两个 LM 模型的串联一个向前一个向后而 Bi-LSTM 不仅仅是两个 LSTM 串联Bi-LSTM 模型中来自两个方向的内部状态在被送到下层时进行级联注意下图的 out 部分在 out 中进行级联而在 Bi-LM 中两个方向的内部状态仅从两个独立训练的 LM 中进行级联。
混合层 得到各层的表征后会经过一个混合层Scalar Mixer它会对前面这些层的表示进行线性融合得出最终的ELMo向量维度为 B ∗ W ∗ 2 D B*W*2D B∗W∗2D。·
Bi-LM
设一个序列有N个 token ( t 1 , t 2 , . . . , t N ) (t_1,t_2,...,t_N) (t1,t2,...,tN)这里说 token 是为了兼容字符和单词如上文所说EMLo使用的是字符级别的Embedding
对于一个前向语言模型来说是基于先前的序列来预测当前 token p ( t 1 , t 2 , . . . , t N ) ∏ k 1 N p ( t k ∣ t 1 , t 2 , . . . , t k − 1 ) p (t_1 ,t_2 ,...,t_N )\prod_{k1}^{N}{p( t_k|t_1 ,t_2 ,...,t_{k-1} )} p(t1,t2,...,tN)k1∏Np(tk∣t1,t2,...,tk−1) 而对于一个后向语言模型来说是基于后面的序列来预测当前 token p ( t 1 , t 2 , . . . , t N ) ∏ k 1 N p ( t k ∣ t k 1 , t k 2 , . . . , t N ) p (t_1 ,t_2 ,...,t_N )\prod_{k1}^{N}{p( t_k|t_{k1} ,t_{k2} ,...,t_{N} )} p(t1,t2,...,tN)k1∏Np(tk∣tk1,tk2,...,tN)可以用 h k , j → \overrightarrow{h_{k,j}} hk,j 和 h k , j ← \overleftarrow{h_{k,j}} hk,j 分别表示前向和后向语言模型。
ELMo 用的是多层双向的 LSTM所以我们联合前向模型和后向模型给出对数似然估计 ∑ k 1 N ( log p ( t k ∣ t 1 , . . . , t k − 1 ; Θ x , Θ → L S T M , Θ s ) log p ( t k ∣ t k 1 , . . . , t N ; Θ x , Θ ← L S T M , Θ s ) ) \sum_{k1}^{N}(\log p(t_k | t_1,...,t_{k-1}; \Theta_x, \overrightarrow{\Theta}_{LSTM},\Theta_s) \log p(t_k | t_{k1},...,t_{N}; \Theta_x, \overleftarrow{\Theta}_{LSTM},\Theta_s)) k1∑N(logp(tk∣t1,...,tk−1;Θx,Θ LSTM,Θs)logp(tk∣tk1,...,tN;Θx,Θ LSTM,Θs))其中 Θ x \Theta_x Θx表示 token 的向量 Θ s \Theta_s Θs表示 Softmax 层对的参数 Θ → L S T M \overrightarrow{\Theta}_{LSTM} Θ LSTM和 Θ ← L S T M \overleftarrow{\Theta}_{LSTM} Θ LSTM表示前向和后向的LSTM 的参数。
我们刚说 ELMo 通过级联的方式给出中间向量这边要注意两个地方一个是级联一个是中间向量现在给出符号定义对每一个 token t k t_k tk来说一个 L 层的 ELMo 的 2L 1 个表征 R k { x k L M , h k , j → , h k , j ← ∣ j 1 , . . , L } { h k , j ∣ j 0 , . . . , L } R_k\{x_k^{LM},\overrightarrow{h_{k,j}},\overleftarrow{h_{k,j}} | j1,..,L\} \\ \{h_{k,j}| j0,...,L\} Rk{xkLM,hk,j ,hk,j ∣j1,..,L}{hk,j∣j0,...,L}其中 h k , 0 h_{k,0} hk,0表示输入层 h k , j [ h k , j → ; h k , j ← ] h_{k,j} [\overrightarrow{h_{k,j}}; \overleftarrow{h_{k,j}}] hk,j[hk,j ;hk,j ]。之所以是 2L 1 是因为把输入层加了进来
对于下游任务来说ELMo 会将所有的表征加权合并为一个中间向量 E L M o k E ( R k ; Θ ) γ ∑ j 0 L s j h k , j L M ELMo_kE(R_k;\Theta) \gamma\sum_{j0}^{L}s_jh_{k,j}^{LM} ELMokE(Rk;Θ)γj0∑Lsjhk,jLM其中 s s s 是 Softmax 的结果用作权重 γ \gamma γ 是常量参数允许模型缩放整个 ELMo 向量考虑到各个 Bi-LSTM 层分布不同某些情况下对网络的 Layer Normalization 会有帮助。
总结
ELMo预训练模型采用双向语言模型该预训练模型能够随着具体语言环境更新词向量表示即更新对应词的Embedding。当然由于ELMo采用LSTM架构因此模型的并发能力、关注语句的长度等在大的语料库面前不能完全适用。而且通过拼接word embeddingForward hidden statebackward hidden state方式融合特征的方式削弱了语言模型特征抽取的能力。
参考资料
ELMo (Embeddings from Language Models)ELMo原理解析及简单上手使用Deep contextualized word representationsELMO词向量理解