Word2Vec 和词嵌入 - 初学者指南

avatar
阿里巴巴 前端委员会智能化小组 @阿里巴巴

译/阿里云 - 秦奇
原文链接:wiki.pathmind.com/word2vec

Word2Vec 是一个两层神经网络,它可以把文本中的单词进行向量化表示。它的输入是一个语料库(Corpus),它的输出是一组向量。 Word2Vec 并非是一种深度神经网络,它只是将文本转换为深度神经网络可以理解的向量形式。 ​

Word2Vec 不仅仅被用来 表示文本,还可以被应用于 表示基因、代码、喜欢的事物、 播放列表、社交媒体图表等其他任何有规律的序列(Sequence)。 ​

为什么呢?因为单词(Words)和上面提到的其他数据一样都是一种离散状态,我们只是在计算这些状态之间的转换概率(即它们同时出现的可能性),所以Gene2Vec、Like2Vec和Follower2Vec都是可能的。考虑到这一点,下面的教程将帮助您了解如何为任何一组离散而又共现(Co-occurring)的状态创建神经嵌入(Neural Embeddings)。 ​

Word2Vec 的目的和用处是在向量空间中将相似词的向量组合在一起,也就是说,它通过数学的方式来检测词之间的相似性。Word2Vec 创建的向量可以自动包含单词的特征信息,比如单词的上下文信息。 ​

如果有足够的数据、用法和上下文信息,Word2Vec 可以根据已有的信息对单词的含义进行高度准确的猜测,这些猜测可用于建立单词与其他单词之间的关联性,(比如,“男人”之于“男孩” 和 “女人”之于“女孩”);或者对文档进行聚类和分类。这种关联性可以作为在科学研究、法律发现、电子商务和客户关系管理等不同领域实现搜索、情感分析和推荐等任务的基础。 ​

Word2Vec 的输出是一个词汇表(Vocabulary),其中每一个单词(word)都附带一个向量表示。之后可以将其输入深度学习模型或者用来检测单词之间的关系。 ​

常用的相似度衡量方式为 余弦相似度,90度代表没有任何相似性,0度代表相似度为1,即完全相同。比如参考下图,我们使用 Word2Vec 检测与“瑞典”相关联的单词列表,然后按接近程度排列,其中,瑞典完全等同于瑞典,而挪威与瑞典的余弦距离为 0.760124,也是任何其他国家中最高的。另外斯堪的纳维亚(Scandinavia, 这里指 挪威,译者注)和几个富裕的北欧、日耳曼国家位居前九名。


词嵌入(Word Embeddings)

我们 把用来表示单词的向量称为词嵌入,虽然很奇怪,使用了一件事来描述另一件事,而且这两件事完全不同。但正如埃尔维斯·科斯特洛 (Elvis Costello) 所说:“写音乐就像为建筑跳舞”。 Word2Vec 对单词进行“向量化”表示,这样做可以使自然语言成为计算机认识的语言,这样我们可以使用强力的数学运算来检测单词之间的相似性。 ​

Word2Vec 类似于自动编码器,它对文本中的每个单词进行编码,它不像受限玻尔兹曼机那样通过重构对单词进行训练,而是结合语料库中其他相邻的单词进行训练。 ​

Word2Vec总共有两种方式,一种是使用上下文来预测单词(一种称为连续词袋的方法,即 CBOW,Continuous Bag of Words),一种是使用单词来预测上下文,被称为 Skip-Gram。我们使用后一种方法是因为它在大型数据集上可以产生更准确的结果。


当分配给一个词的特征向量无法准确预测该词的上下文时,每个单词的上下文就会自动调整特征向量。通过调整向量,可以使 上下文判断为相似的单词在向量维度上靠得更近。 ​

梵高的向日葵画可以看做是画布上油画的二维混合物,它代表了 1880 年代后期巴黎三维空间中的植物,而排列在一个向量中的 500 个数字可以代表一个词或一组词,这些数字将每个单词定位为 500 维向量空间中的一个点。虽然超过三个维度的空间很难形象化(Geoff Hinton 教人们想象 13 维空间,建议学生先想象三维空间,然后对自己说:“十三,十三,十三。。。”)。 ​

一组训练过的词向量将使相似的词在空间中彼此靠近。比如橡树(oak)、榆树(elm)和桦树(birch)这三个词可能聚集在一个角落,而战争(war)、冲突(conflict)和摩擦(strife)则分布在另一个角落。类似的事物和想法被证明是“接近的”。它们的相对含义已被转化为可测量的距离,特质转变为可衡量的数字,这样算法可以完成后续的工作。然而相似性只是 Word2Vec 可学习的许多关联性的基础。比如,它可以用来衡量在某种语言中单词之间的关系,并将它们映射到另一种语言。


罗马、巴黎、柏林和北京不仅会聚集在一起,而且它们所属的国家在向量空间中的距离也相似。比如 罗马 - 意大利 = 北京 - 中国。如果你只知道罗马是意大利的首都,并且想知道中国的首都,那么等式 罗马-意大利+中国 就会返回北京。


有趣的 Word2Vec 结果

让我们看看 Word2Vec 其他一些有趣的关联。 我们将给出逻辑类比的符号,这些符号并不是加号、减号和等号。其中:表示“之于”,和::代表“等同于”。例如 罗马之于意大利就像北京之于中国,Rome:Italy::Beijing:China 。在最后,我们将列举一些 Word2Vec 模型某些情况下推荐的单词列表,它不是提供一个确切的答案,而是给出排名前三的选项:

king:queen::man:[woman, teenager, girl]
//Weird, but you can kind of see it

house:roof::castle:[dome, bell_tower, spire, crenellations, turrets]

knee:leg::elbow:[forearm, arm, ulna_bone]

New York Times:Sulzberger::Fox:[Murdoch, Chernin, Bancroft, Ailes]
//The Sulzberger-Ochs family owns and runs the NYT.
//The Murdoch family owns News Corp., which owns Fox News.
//Peter Chernin was News Corp.'s COO for 13 yrs.
//Roger Ailes is president of Fox News.
//The Bancroft family sold the Wall St. Journal to News Corp.

love:indifference::fear:[apathy, callousness, timidity, helplessness, inaction]
//the poetry of this single array is simply amazing...

Donald Trump:Republican::Barack Obama:[Democratic, GOP, Democrats, McCain]
//It's interesting to note that, just as Obama and McCain were rivals,
//so too, Word2vec thinks Trump has a rivalry with the idea Republican.

monkey:human::dinosaur:[fossil, fossilized, Ice_Age_mammals, fossilization]
//Humans are fossilized monkeys? Humans are what's left
//over from monkeys? Humans are the species that beat monkeys
//just as Ice Age mammals beat dinosaurs? Plausible.

building:architect::software:[programmer, SecurityCenter, WinPcap]

这个模型是在谷歌新闻词汇上训练的,你可以导入和使用。想一想,Word2Vec 算法从来没有教过一条英语语法规则,它对世界一无所知,并且与任何基于规则的符号逻辑或知识图谱无关。然而,它以一种灵活和自动化的方式学到了知识,这比大多数知识图谱在经过多年的人工劳动后学到的要多得多。 它将 Google 新闻文档视为一张白纸,在训练结束时,它可以计算出对人类有意义的复杂关联关系。您还可以使用 Word2Vec 模型获取其他的关联信息,然而并非所有事物都是相互关联的信息,比如:

  • 伊拉克 - 暴力 = 约旦
  • 人类 - 动物 = 伦理
  • 总统 - 权力 = 总理
  • 图书馆 - 书籍 = 大厅
  • 股票市场≈温度计

通过建立一个词与其他词(不一定包含相同的字母)的相似度,我们已经从单词之外,获得了更多的含义。 ​

N-gram 和 Skip-gram

单词一次读入一个向量,并在一定范围内来回扫描,这些范围就是 N-gram,一个 N-gram 是来自给定语言序列的n 个项目的连续序列。它可以是 unigram、bigram、trigram、4-gram 或 5-gram 等等。Skip-gram 只是从 N-gram 中删除项目。 ​

由 Mikolov 推广并用于 DL4J 实现的 Skip-gram 表示方法已被证明比其他模型(例如CBOW)更加准确,因为生成的上下文信息更具泛化性。然后将此 N-gram 输入神经网络以学习给定词向量的重要性(这里重要性被定义为它作为某些更大含义或标签的指标时的有用性)。 ​

NLP 的进展:ElMO、BERT 和 GPT-3

词向量是组成了包括 ElMO、ULMFit 和 BERT 等语言模型在内的自然语言处理模型算法的基础,但这些语言模型表示单词的方式,在Word2vec之上又有一些优化以取得更好的效果。 Word2Vec 是一种用于生成单词分布式表示的算法,即词汇表中的任何给定单词,例如get或grab或go都有自己的词向量,这些向量有效地存储在查找表或字典中。然而这种词表示的方法并没有解决多义性问题,也没有解决给定词或短语可能存在许多含义共存的问题。例如,go是动词,也是棋盘游戏;get是动词,也是动物的后代。给定的单词类型(例如 go 或 get)的含义根据其上下文而有所不同。 ElMO 和 BERT 证明的一件事是,通过对给定单词的上下文进行编码,通过在表示给定单词实例的向量中包含有关前后单词的信息,我们可以在自然语言处理任务中获得更好的结果。BERT 的表现归功于注意力机制。 在衡量常识推理的 SWAG 基准测试中,发现 ELMo 相对于非上下文词向量减少了5% 的错误,而 BERT 显示出超过 ELMo 的额外 66% 的错误减少。最近,OpenAI 与 GPT-2 的合作在生成自然语言方面显示出惊人的结果。2020 年夏季,OpenAI 发布了最新的语言模型 GPT-3,在语言生成任务上表现出惊人的强劲表现,正在被广泛用作新应用的基础。 ​

谷歌的 Word2Vec 专利

Word2Vec 是一种计算单词向量表示的方法,由 Tomas Mikolov 领导的谷歌研究人员团队引入。Google发布了基于在Apache 2.0 许可协议的 Word2Vec 的开源版本。2014 年,Mikolov 离开谷歌加入 Facebook,2015 年 5 月,谷歌获得了该方法的专利,该专利并未废除其发布时的 Apache 许可协议。 ​

其他语言

虽然所有语言中的单词都可以使用 Word2Vec 转换为向量,并且这些向量可以通过深度学习框架学习,但 NLP 预处理会非常依赖于特定的语言,并且需要Word2vec之外的工具。在斯坦福大学自然语言处理组有许多基于Java的工具,符号化,部分词性标注和语言,如识别中文,阿拉伯语,法语,德语和西班牙语。对于日语,像Kuromoji这样的 NLP 工具很有用。其他外语资源,包括文本语料库可在此处获得。 ​

GloVe:全局向量

可以像这样将 GloVe 模型加载和保存到 Word2Vec: WordVectors wordVectors = WordVectorSerializer.loadTxtVectors(new File("glove.6B.50d.txt")); ​

Word2vec 和 NLP 的进一步阅读

译者注

这篇文章是译者在学习Word2Vec时看到的一片比较有趣的文章,而很多自然语言处理算法都是使用Word2Vec表示单词进行输入。这篇文章由于译者能力所限,翻译可能并不准确,还请读者见谅。这里并不涉及更多的原理,详细原理可以参考这篇文章:《快速入门词嵌入之word2vec》



淘系前端-F-x-Team 开通微博 啦!(微博登录后可见)
除文章外还有更多的团队内容等你解锁🔓