Word2Vec进阶 - ELMO

Word2Vec进阶 - ELMO – 潘登同学的NLP笔记

文章目录

    • Word2Vec进阶 - ELMO -- 潘登同学的NLP笔记
  • ELMO
    • 原理
    • 整体架构
    • Char Encoder Layer
    • BiLSTM
    • ELMO词向量
  • 实验结果
  • 总结

Word2Vec进阶 - ELMO_第1张图片

ELMO

ELMo出自Allen研究所在NAACL2018会议上发表的一篇论文《Deep contextualized word representations》,从论文名称看,应该是提出了一个新的词表征的方法。据他们自己的介绍:ELMo是一个深度带上下文的词表征模型,能同时建模

  1. 单词使用的复杂特征(例如,语法和语义);
  2. 这些特征在上下文中会有何变化(如歧义等)。

这些词向量从深度双向语言模型(BiLSTM)的隐层状态中衍生出来,BiLSTM是在大规模的语料上面Pretrain的。它们可以灵活轻松地加入到现有的模型中,并且能在很多NLP任务中显著提升现有的表现,比如问答、文本蕴含和情感分析等。

原理

之前我们一般比较常用的词嵌入的方法是诸如SkipGram和GloVe这种,但这些词嵌入的训练方式一般都是上下文(相对长的上下文)无关的,并且对于同一个词,不管它处于什么样的语境,它的词向量都是一样的,这样对于那些有歧义的词非常不友好。因此,论文就考虑到了要根据输入的句子作为上下文,来具体计算每个词的表征,提出了ELMo(Embeddings from Language Model)。它的基本思想,用大白话来说就是,还是用训练语言模型的套路,然后把语言模型中间隐含层的输出提取出来,作为这个词在当前上下文情境下的表征,简单但很有用!

整体架构

Word2Vec进阶 - ELMO_第2张图片

  1. 首先经过一个字符编码层,因为ELMo实际上是基于char的,所以它会先对每个单词中的所有char进行编码,从而得到这个单词的表示,经过Char Encoder layer层出来的维度是 ( B , W , D ) (B,W,D) (B,W,D)
  2. 随后该句子表示会经过BiLMs,即双向语言模型的建模,内部其实是分开训练了两个正向和反向的语言模型,而后将其表征进行拼接,最终得到的输出维度为 ( L + 1 , B , W , 2 D ) (L + 1, B, W, 2D) (L+1,B,W,2D),L+1实际上是将L个BiLSTM的输出结果,加上了最初的embedding层,得到的 L + 1 L+1 L+1维的输出
  3. Scalar Mixer:紧接着,得到了biLMs各个层的表征之后,会经过一个混合层,它会将前面这些层的表示进行加权求和,这一层主要是训练权重值

Char Encoder Layer

Word2Vec进阶 - ELMO_第3张图片

  • 输入的句子会被reshape成B W ∗ C BW * CBW∗C,因其是针对所有的char进行处理
  • Char Embedding: 针对每个char进行编码,实际上所有char的词表大概是262,其中0-255是char的unicode编码,256-261这6个分别是(单词的开始)、(单词的结束)、 (句子的开始)、(句子的结束)、(单词补齐符)和(句子补齐符),所以Char Embedding中的参数是 262 ∗ d 262∗d 262d, d d d 表示的是字符的embedding维度,与最终的输出D不同,而 D 表示的是单词的embedding维度
  • Multi-Scale卷积层:这里用的是不同scale的卷积层,卷积之间的不同在于其kernel_sizechannel_size的大小不同,用于捕捉不同n-grams之间的信息;这里的卷积都是1维卷积,即只在序列长度上做卷积,根据不同的channel_size的大小,有不同大小的输出 d 1 , d 2 , … , d m d_1,d_2,\ldots,d_m d1,d2,,dm
  • Concat层: 拼接并且reshape成 ( B , W , d 1 + d 2 + … + d m ) (B,W,d_1+d_2+\ldots+d_m) (B,W,d1+d2++dm)
  • Highway层: 借鉴了残差的思想,做的全连接与残差加和形式
  • Linear层: 用全连接将 d 1 + d 2 + … + d m d_1+d_2+\ldots+d_m d1+d2++dm转换为D

BiLSTM

Word2Vec进阶 - ELMO_第4张图片

ELMO词向量

经过了BiLSTM之后,得到的表证维度为 ( L + 1 , B , W , 2 D ) (L + 1, B, W, 2D) (L+1,B,W,2D),接下来就是生成最终的ELMO向量了

再次强调,ELMO只是一个预训练Embedding层的模型,只需要语料库,不需要标签,目的也只是更好的描述词与词之间的关系

Scalar Mixer的作用主要是对 L + 1 L+1 L+1个张量,进行加权求和操作,每一个权重 α \alpha α都是要学习的值,求和完后前面还有一个缩放系数 γ \gamma γ,针对不同任务会有不同的值,也是要求学习的

同时论文里面还提到,每一层输出的分布之间可能会有较大差别,所以有时也会在线性融合之前,为每层的输出做一个Layer Normalization,这与Transformer里面一致。

经过Scalar Mixer之后的向量维度为 B ∗ W ∗ 2 D B ∗ W ∗ 2D BW2D,即为生成的ELMo词向量,可以用于后续的任务

实验结果

这里主要列举一些在实际下游任务上结合ELMo的表现,分别是SQuAD(问答任务)、SNLI(文本蕴含)、SRL(语义角色标注)、Coref(共指消解)、NER(命名实体识别)以及SST-5(情感分析任务),其结果如下:

可见,基本都是在一个较低的baseline的情况下,用了ELMo后,达到了超越之前SoTA的效果!

总结

ELMo具有如下的优良特性:

  • 上下文相关:每个单词的表示取决于使用它的整个上下文。
  • 深度:单词表示组合了深度预训练神经网络的所有层。
  • 基于字符:ELMo表示纯粹基于字符,然后经过CharCNN之后再作为词的表示,输入的词表很小。

你可能感兴趣的:(Tensorflow,word2vec,自然语言处理,深度学习)