乐于分享
好东西不私藏

Contextualized Word Vectors – CoVe(有上下文的词向量)

Contextualized Word Vectors – CoVe(有上下文的词向量)

很明显的,我们之前讲过的词向量算法不论是 W2V,GloVe,还是 FastText,不管他们对一个词的含义表达的多么精准,都有一个先天性的不足。或者这个表达本身就不准确,他们本身就不可能完全精准,因为从逻辑上讲就不可能有一个静态不变的向量来表达含义可变的词汇(我经常把词向量跟词嵌入互相使用,虽然他们俩本质上不完全相同,但是在现在的语境里是一回事)。
这样做的不足之处就好比我们只想用一个身份来形容一个人。我在公司的语境下是 “员工”,我在生活的语境下是 “AI 爱好分子”,我在游戏的语境下是个 “菜鸡” 等等。如果说只想用一顶帽子来完全表达一个是一种偏见,那么只想用一个向量来代表一个词那也是一种 “刻舟求剑”。
以前的算法之所以每一个词只能得到一个向量的原因是我们模型在训练好之后只需要输入这个词本身就可以得到它的向量,它所身处的环境完全不参与计算。这也就好像我们对人的刻板印象一样,输入某一个人的姓名,直接输出一个不变的评价。

Contextualized Word Vectors

我们知道那篇很有名的《Attention Is All You Need》是 2017 年发表的,也是这一年稍微晚了两个月,一篇叫做《Learned in Translation: Contextualized Word Vectors》的论文提出了他们的解决方案。

他们的方法其实受到了在 ImageNet 上训练的 CNN 能够成功迁移到计算机视觉中其他任务的启发,他们也是专注于一个 NLP 任务,即机器翻译(MT),而把机器翻译中的编码器(Encoder)迁移到其他 NLP 任务中,其实也就是拿到中间编码器的输出作为词向量。

其实想到这里是觉得挺有意思的,在视觉领域让模型学到了可迁移通用能力的任务是图片分类任务,而在语言领域让模型学到这个能力的任务是语言翻译任务。其实仔细思考一下也不难发现,这两个任务都在潜移默化的情况下让模型必须要摸清图片或者文字中的含义。对于计算机视觉来说,其任务的本质,是要求模型能够读懂图片中哪些像素是一起的,能够提取到什么特征,代表了什么物体。而文字翻译任务要求模型忠实地在目标语言中重现源语言的句子的含义,而不会丢失源语言句子中的信息 而这种能力正是图片跟文字领域的 “元能力”,才是这种任务得到的模型可以被迁移到其他任务的本质。

CoVe 论文中的模型使用的是 “英译德” 的翻译任务,输入的英文的初始向量使用的是 GloVe 模型得到的词向量,中间模型使用的是一个双向的双层 BiLSTM 模型,他们称之为 MT-LSTM(机器翻译-LSTM)。

了解模型的结构固然是重要的,但是 LSTM 我在去年已经仔细介绍过了这里就不重复介绍了,我只是想用一个我自己脑子中的案例来类比循环神经网络的运作原理。

这类网络是用来处理连续数据问题的,计算着一个一直基于新数据的隐藏层。我们想象我们有一杯清水,然后有三种颜色红,黄,蓝三种颜色的颜料。

我们先将清水倒入蓝色,此时杯中水变为蓝色,如果再倒入黄色,此时由于搅拌了此前蓝色的信息,此时水变为绿色,如果我们再倒入红色,此时水变为棕色。

如果我们把这杯水比作循环网络中记录过程中不断积累叠加的信息的中间层,那么我们就可以大致理解这个中间层的作用就是在不断混合记录着历史信息。虽然从理论上讲所有历史信息都会被混在里面,但是时间越久远的信息肯定会被不断稀释掉。

我这里一定要提一句,我上面的例子只是类比,它并不完全等于真实的计算。因为真实的计算顺序也会导致不同的叠加信息。而我们的案例中,先倒入黄色再倒入蓝色,跟先倒入蓝色再倒入黄色都会变成绿色,这在真实的循环网络计算中大概率是不成立的。如果有化学基础的朋友可以想象那是个烧杯,我们加入的反应试剂顺序不同而产生的化合反应不同则可能更准确一点。

我们可以简单接受上面的例子这个时候再来对比这样做的好处是什么了。对于颜色混合来说,一个固定的颜色原来我就一直认为他是一个固定的颜色,即使它被跟其他颜料掺和在一起,而这显然是不对的。更好的做法是我们知道它在添加过程中的顺序,记录下添加它之后整体的颜色,而这个颜色能够好的代表它的加入对于整体的影响。
那么词向量也是一样的道理,我们如果想得到一个词在一个具体语境下更准确的含义,我们也需要像添加颜色到水中一样,把前面的词一个一个先输入进去,等到直到把目标词汇也输入之后,得到的复合叠加的向量才更能表达它的含义。
而在 CoVe 中他们使用的还是双向的过程(BiLSTM 中的 Bi 就是双向),对于一句话中的一个目标词来说,我不仅仅看这个词前面的语境,也看它后面的语境,两个语境都计算之后得到的两个向量融合在一起则是这个词在这句话中最终的含义代表。
一个简单的句子比如 “苹果公司” 中的 “苹果” 跟 “牛顿被苹果砸了” 中的苹果肯定不能用相同的含义代表。我们的模型现在有能够捕捉到 “公司” 跟 “牛顿” 这样的语境之后,对于 “苹果” 在不同具体情况中表达就是更加精准的了。
不得不说,算法再一次教我做人了,看人还是得有动态的眼光呀。