最近重温了下elmo模型,主要有几点:
1- 相比于word2vec这些多了上下文的理解。
2 - 基本单元是一个两层的基于字符卷积的网络.
3 - 内部状态的组合构成新的词汇向量表示.
4-elmo采用了双向bi-lstm模型,利用了语言模型,从elmo公式中我们就可以看出, 向左和向右的LSTM是不同的, 也就是说有两个 LSTM单元.
是输入的意思. 输入的内容是最初始的词向量.
是输出内容, 即LSTM在每个位置的 h. h会再用作softmax的输入, 来进行词汇选择权重赋予,最原始的词向量通过字符卷积而来,而LSTM的每一层都有自己不同的代表的意义, 因此,对于不同的任务, 每层参与表征的权重也就不同, 因此, 为了一般化, 该方案设置一个通用词向量表征法, 即 利用每层状态的线性组,其中,s就是softmax-normalized weights , 也就是加和为1的一组权重向量. 这组权重不仅仅代表的是权重, 因为每层LSTM内部状态,也就是 h 的分布是不同的, 这个也可以用作layer normalization.而,
允许具体的task模型去放缩 ELMo 的大小. 这个地方非常重要, 作者在补充中进行了强调, 在没有这个的情况下, 只采用该模型的最后一层输出作为词向量的时候的效果甚至差于 baseline. 这个重要的原因是, BiLM的内部表征和具体任务的表征的分布是不一样的.
5-elmo的使用方法:
将该词向量加到一般的任务的方法是, 先固定一个权重, 构成一个 , 然后联结
和 最初始词向量(也就是通过字符卷积获得的向量) 为 [
], 然后将这个向量输入到任务的RNN模型中去. 然后在训练中一同训练权重因子.