ELMo

论文:《Deep contextualized word representations

1. word2vector

我们先简单回顾下word2vector。我们想解的问题的是:如何将一个词语用向量来表示?

1.1 one-hot

首先想到的是使用one-hot来表示,如我们有一个词典:【a,apple,…,zoo,】,词典有n个词语,那么就用n维向量表示某个词。向量中词语下标位的值为1,其余为0:
在这里插入图片描述
该方法的主要缺点为:

  • 向量太长,词汇量增加,向量维度增加。
  • 该向量无法表达出词汇之间的关系:
    模型学不到“I want a glass of apple _____”该填什么的。
    “orange”和“apple”的特征表示没有任何的关系。

1.2 Neural Architecture of language model

语言模型简单可以理解是某一句话是合理的概率模型。如给出“I want a glass of orange __”,通过语言模型我们可能得到空格处最可能的单词为“juice”。基于神经网络结构的语言模型如下所示:
在这里插入图片描述

  • 第一层:绿色方块为onehot向量
  • 第二层:各个one-hot向量(10000维)会乘以共享矩阵C,即词向量矩阵(10000*300)。
  • 第三层:乘完的向量(300维)连接(3*300=900维),并代入tanh函数
  • 第四层:第三层到第四层(10000维)使用的是全连接
  • Softmax:Vi表示输出V中的第i个元素,那么这个元素的Softmax为
    在这里插入图片描述

1.3 word2vector

Neural Architecture of language model 非常重,一个比较轻巧训练词向量的方式就是最流行的word2vector:
在这里插入图片描述

  • CBOW模型:获得中间词两边的的上下文,然后用周围的词去预测中间的词。经过词嵌入后,将向量按位素数相加。
  • Skip-gram模型正好和CBOW模型相反,输入为中间的词,使用预测两边的的上下文的单词。
    为了加速训练,还做了优化:
  • hierarchical softmax:不使用one-hot,而是利用哈夫曼编码。节点数logV。
  • 负采样:将模型变成2分类任务模型:
    相邻: [V orange ​ ,V juice ​ ] -> 1
    非相邻:[ V orange ​ ,V man ​ ] - > 0

word2vector的显而易见的缺点是没考虑上下文含义。比如说“我 用 苹果 手机 上网 买了 一箱 苹果”,这里的两个“苹果”我们从词向量矩阵中lookup出来的是相同的向量,但是显然这两个苹果的含义的不同的。这个问题之前的解法有如,训练多个词向量矩阵,可参阅《improving word representations via global context and multiple word prototypes》。但是,这个方法存在比较大我问题是,如何确定一个词有多少种意思(多少个矩阵)?如何更好的确定选哪个词向量的矩阵?

2. ELMo

2.1 核心创新

ELMo 借鉴CV中低、中、高特征的表示,如图:
在这里插入图片描述
ELMo用多层的BiLSTM语言模型,也想训练出多层次的文本表示:
在这里插入图片描述
可认为,低层特征表示是词语级别的特征,中层特征表示是句法级别的特征、高层特征表示是语义级别的特征。

2.2 核心公式

  • 各层的表示向量为:
    在这里插入图片描述
    其中: h 0 = [ x , x ] h_0 =[x,x] h l = [ h l , h l ] h_l=[\stackrel{\rightarrow}{h_l},\stackrel{\leftarrow}{h_l}]

  • 各层的表示向量加权求和得到该token的ELMo表示:
    在这里插入图片描述
    其中: s s 为各层表示的权重, γ \gamma 为改次任务的权重。

2.3 实验效果

如下表所示,ELMo能非常好的找到相同语境含义的“play”:
在这里插入图片描述
在这里插入图片描述