[关闭]
@songying 2019-04-01T17:01:51.000000Z 字数 2996 阅读 986

ELMO: Deep contextualized word representations

博客文章


前言

现在再写 ELMO 相关文章有点炒冷饭的意思,毕竟 Bert 一出, 意味着在Embedding领域,预训练语言模型才是正确的道路。但另一方面,ELMO 这篇文章依旧有着很好的参考价值,对于滤清整个Embedding的发展有着很好的帮助,推荐阅读原论文。

本文不与 Bert 进行对比,而是与之前的 Glove 等词向量做比较,来解释为何 ELMO 能够获得更好的结果。

ELMO 之前

我们回想在 ELMO 之前的 Word2Vec 时代, 我们获得的词向量是上下文无关的,这使得我们的词向量在解决歧义问题上捉襟见肘。另一方面,词向量是采用单层神经网络训练得到的,这意味着词向量本身的表示抽象程度并不高, 对比CV中的卷积理论, 越深层的网络越能把握数据的深层抽象特征, 而对于语言这么抽象的东西, 仅仅采用单层网络来做明显是远远不够的。

为了解决词的上下文信息问题,我们通常采用 双向LSTM 或 Transformer 来做上下文表示层来获取词的上下文表示, ELMO 就是利用了这种思想,将这种上下文表示信息融入到Embedding 中,那不就能够获得更好的表示了吗。

此外,为了弥补词向量对于OV词以及时态,正负数等词的不足, char-level 向量被用来做词向量的信息补偿,将word-level 与char-level 结合起来的确能够获得更好的效果。 结合的方式多种多样, 其中, Highway Networks 是一种很常见且很高效的方式。而对于 char-level 向量来说,训练的方式有多种,如RNN, CNN等。

双向语言模型

与传统的语言模型相同, 双向语言模型的目的依旧是获得各层的表示来作为词的向量表示, 先来原理,再谈谈我的看法。

首先, 双向语言模型的输入是 char-level 的, 在原论文中是通过字符卷积得到的最初的词向量表示 , 然后再将 char-level 词向量 feed 入L层的双向LSTM中进行训练。

对于双向语言模型来说,其在损失函数方面与传统的有所不同, 其考虑到了前向语言模型的计算以及后向语言模型的计算。

那么其损失函数就是简单的求二者的 log 和:


从语言模型的角度来看,这个创新点不是很强,但效果很好,这说明深层的网络再 Embedding 是可作为的, 另一方面,双层的 LSTM 表现往往要比单层的表现要好。

唯一疑惑的一点是, 这里为何采用 char-level 来训练,是越细粒度的越能够把握信息吗? 如果采用 word-level 来训练,是否还能获得这么大的提升。

另一方面, 去年有看到阿里的一篇文章以 word2Vec + ELMO 能够获得比单一的ELMO更好的效果, 如果采用ELMO的方法训练一个Word 版本,然后二者结合,是否能够产生更好的效果。

当然, 想法终究是想法, 在 Bert 之后, 感觉 Embedding 未来会走上预训练语言模型的道路上, 所以, ELMO 这种路子怕是会沉寂一段时间,甚至消亡, 毕竟, 采用预训练要比词向量的方式,其泛化能力要强的多, 参数上就差着量级呢 。

## ELMO

ELMO 经过 L 层的双向语言模型, 然后将字符级表示 , 每层的隐层输出 组合起来, 形成一个2L + 1 个向量:


然后就是如何将这 2L+1 个向量用到下游任务中, 这是本文的核心创新点, 其能够很好的解决歧义问题。

使用 最简单的方式就是仅仅采用最顶层的输出作为词的表示,即将最后一层的向量矩阵 拿出来当 word2Vec 的用,也能获得比较好的结果,这意味着, 深层的网络更能把握语言的抽象信息, 对语义的表示也更好。

那么对于第 个词,其最终的表示为:


另一个比较复杂的实验方式是, 对于特定任务, 我们取双向语言模型中的 L 个隐层输出 作为输入,计算每一层的对最终向量生成的权重信息,其实本质就是将注意力机制的思想引入到此处, 考虑到不同层对信息的把握不同, 通过调整不同层的比重来实现词向量的变化, 真的有点大道至简的意思。

需要注意的是 的计算论文中并没有给出很详细的计算过程, 不知道是故意略去还是怎么的, 懂得这点的同学麻烦指正一下。

值得一提的是, 缩放因子 是考虑到双向语言模型中的每一层的输出具有不同的分布,其某种程度上相当于在 Weighting 前对每一层的向量做 Layer Normalization。 论文中有提到,如果将每层向量提前做Normalization, 也能够有所帮助。

使用 ELMO

对比ELMO, 其参数量要少很多,对于一些资源受限的设备,不适合上 Bert 的, ELMO 也是不错的选择, 论文中提到, 使用ELMO 有两种方式:

论文中还提到, 适当的 Dropout 或者在损失中加入L2正则是有帮助的。

最后

虽然说 ELMO 的光芒完全被 Bert 掩盖,但这并不意味着这篇文章不够优秀, 只能说, 贫穷限制了我们的想象力。 对于ELMO 的训练来说,大多数的实验室还是有足够的资源搞定的,但对于 Bert, 有资源搞一搞Bert的实验室实在是凤毛麟角。

我个人认为, 在 Embedding 领域,目前已经没有小实验室参与的资格了,甚至很多大实验室也只能望洋兴叹, 所以,对于初入 NLP 的新人来说, 文章,看看就好,毕竟的确经典,但实践就未必需要了,往往只是浪费时间,感动自己。 对,我说的就是我,哈哈哈哈。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注