返回介绍

PaperWeekly 第五期 - 从 Word2Vec 到 FastText

发布于 2025-01-21 00:48:32 字数 6568 浏览 0 评论 0 收藏 0

Word2Vec 从提出至今,已经成为了深度学习在自然语言处理中的基础部件,大大小小、形形色色的 DL 模型在表示词、短语、句子、段落等文本要素时都需要用 word2vec 来做 word-level 的 embedding。Word2Vec 的作者 Tomas Mikolov 是一位产出多篇高质量 paper 的学者,从 RNNLM、Word2Vec 再到最近流行的 FastText 都与他息息相关。一个人对同一个问题的研究可能会持续很多年,而每一年的研究成果都可能会给同行带来新的启发,本期的 PaperWeekly 将会分享其中三篇代表作,分别是:

1、Efficient Estimation of Word Representation in Vector Space, 2013
2、Distributed Representations of Sentences and Documents, 2014
3、Enriching Word Vectors with Subword Information, 2016

Efficient Estimation of Word Representation in Vector Space

作者

Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean

单位

Google Inc., Mountain View, CA

关键词

Word Representation, Word Embedding, Neural Network, Syntactic Similarity, and Semantic Similarity

来源

arXiv, 201309

问题

如何在一个大型数据集上快速、准确地学习出词表示?

模型

传统的 NNLM 模型包含四层,即输入层、映射层、隐含层和输出层,计算复杂度很大程度上依赖于映射层到隐含层之间的计算,而且需要指定上下文的长度。RNNLM 模型被提出用来改进 NNLM 模型,去掉了映射层,只有输入层、隐含层和输出层,计算复杂度来源于上一层的隐含层到下一层隐含层之间的计算。

本文提出的两个模型 CBOW (Continuous Bag-of-Words Model) 和 Skip-gram (Continuous Skip-gram Model) 结合了上面两个模型的特点,都是只有三层,即输入层、映射层和输出层。CBOW 模型与 NNLM 模型类似,用上下文的词向量作为输入,映射层在所有的词间共享,输出层为一个分类器,目标是使当前词的概率最大。Skip-gram 模型与 CBOW 的输入跟输出恰好相反,输入层为当前词向量,输出层是使得上下文的预测概率最大,如下图所示。训练采用 SGD。

资源

Code: C++代码
Dataset: SemEval-2012 ,用来评估语义相关性。

相关工作

Bengio[1]在 2003 年就提出了 language model 的思路,同样是三层(输入层,隐含层和输出层)用上下文的词向量来预测中间词,但是计算复杂度较高,对于较大的数据集运行效率低;实验中也发现将上下文的 n-gram 出现的频率结合进去会提高性能,这个优点体现在 CBOW 和 Skip-gram 模型的输出层中,用 hierarchical softmax(with huffman trees)来计算词概率。

简评

本文的实验结果显示 CBOW 比 NNLM 在 syntactic 和 semantic 上的预测都要好,而 Skip-gram 在 semantic 上的性能要优于 CBOW,但是其计算速度要低于 CBOW。结果显示用较大的数据集和较少的 epoch,可以取得较好的效果,并且在速度上有所提升。与 LSI 和 LDA 相比,word2vec 利用了词的上下文,语义信息更加丰富。基于 word2vec,出现了 phrase2vec, sentence2vec 和 doc2vec,仿佛一下子进入了 embedding 的世界。NLP 的这些思想也在用于 recommendation 等方面,并且与 image 结合,将 image 跟 text 之间进行转换。

Distributed Representations of Sentences and Documents

作者

Quoc V. Le, Tomas Mikolov

单位

Google Inc, Mountain View, CA

关键词

sentence representation

来源

ICML 2014

问题

基于 word2vec 的思路,如何表示 sentence 和 document?

模型


利用 one-hot 的表示方法作为网络的输入,乘以词矩阵 W,然后将得到的每个向量通过平均或者拼接的方法得到整个句子的表示,最后根据任务要求做一分类,而这过程中得到的 W 就是词向量矩阵,基本上还是 word2vec 的思路。

接下来是段落的向量表示方法:


依旧是相同的方法,只是在这里加上了一个段落矩阵,用以表示每个段落,当这些词输入第 i 个段落时,通过段落 id 就可以从这个矩阵中得到相对应的段落表示方法。需要说明的是,在相同的段落中,段落的表示是相同的。文中这样表示的动机就是段落矩阵 D 可以作为一个 memory 记住在词的 context 中遗失的东西,相当于增加了一个额外的信息。这样经过训练之后,我们的就得到了段落表示 D,当然这个段落就可以是一段或者一篇文章。

最后一种就是没有词序的段落向量表示方法:



从图中就可以感觉到这个方法明显和 skip-gram 非常相似,这里只是把重点放在了段落的表示中,通过段落的表示,来预测相应的 context 词的表示。最后我们依然可以得到段落矩阵 D,这样就可以对段落进行向量化表示了。但是输入起码是句子级别的表示,而输出则是词的向量表示,因此个人比较怀疑这种方法的合理性。

简评

这篇文章是 word2vec 的方法提出一年后提出的方法,因此本文并没有使用目前非常流行的 word2vec 的训练方法来训练词向量,而是利用 word2vec 的思路,提出了一种更加简单的网络结构来训练任意长度的文本表示方法。这样一方面好训练,另一方面减少了参数,避免模型过拟合。优点就是在训练 paragraph vector 的时候加入了一个 paragraph matrix,这样在训练过程中保留了一部分段落或者文档信息。这点在目前看来也是有一定优势的。但是目前深度学习发展迅速,可以处理非常大的计算量,同时 word2vec 以及其变种被应用得非常普遍,因此该文章提出的方法思路大于模型,思路我们可以借鉴,模型就不具有优势了。

Enriching Word Vectors with Subword Information

作者

Piotr Bojanowski, Edouard Grave, Armand Joulin, Tomas Mikolov

单位

Facebook AI Research

关键词

Word embedding, morphological, character n-gram

来源

arXiv, 201607

问题

如何解决 word2vec 方法中罕见词效果不佳的问题,以及如何提升词形态丰富语言的性能?

模型

word2vec 在词汇建模方面产生了巨大的贡献,然而其依赖于大量的文本数据进行学习,如果一个 word 出现次数较少那么学到的 vector 质量也不理想。针对这一问题作者提出使用 subword 信息来弥补这一问题,简单来说就是通过词缀的 vector 来表示词。比如 unofficial 是个低频词,其数据量不足以训练出高质量的 vector,但是可以通过 un+official 这两个高频的词缀学习到不错的 vector。

方法上,本文沿用了 word2vec 的 skip-gram 模型,主要区别体现在特征上。word2vec 使用 word 作为最基本的单位,即通过中心词预测其上下文中的其他词汇。而 subword model 使用字母 n-gram 作为单位,本文 n 取值为 3~6。这样每个词汇就可以表示成一串字母 n-gram,一个词的 embedding 表示为其所有 n-gram 的和。这样我们训练也从用中心词的 embedding 预测目标词,转变成用中心词的 n-gram embedding 预测目标词。

实验分为三个部分,分别是(1)计算两个词之间的语义相似度,与人类标注的相似度进行相关性比较;(2)与 word2vec 一样的词类比实验;(3)与其他考虑 morphology 的方法比较。结果是本文方法在语言形态丰富的语言(土耳其语,法语等)及小数据集上表现优异,与预期一致。

资源

源码公布在 Facebook 的 fastText 项目中: GitHub - facebookresearch/fastText: Library for fast text representation and classification.

相关工作

利用语言形态学来改进 nlp 的研究源远流长,本文提及的许多关于 character-level 和 morphology 的有趣工作值得参考。

简评

文章中提出的思路对于 morphologically rich languages(例如土耳其语,词缀的使用极为普遍而有趣)来说十分有意义。词缀作为字母与单词之间的中层单位,本身具有一定的语义信息。通过充分利用这种中层语义来表征罕见词汇,直观上讲思路十分合理,也是应用了 compositionality 的思想。

利用形态学改进 word embedding 的工作十分丰富,但中文 NLP 似乎很难利用这一思路。其实个人感觉中文中也有类似于词缀的单位,比如偏旁部首等等,只不过不像使用字母系统的语言那样容易处理。期待今后也有闪光的工作出现在中文环境中。

总结

从 Word2Vec 到 FastText,从 word representation 到 sentence classification,Tomas Mikolov 的工作影响了很多人。虽然有个别模型和实验结果曾遭受质疑,但终究瑕不掩瑜。word2vec 对 NLP 的研究起到了极大地推动作用,其实不仅仅是在 NLP 领域中,在其他很多领域中都可以看到 word2vec 的思想和作用,也正是从 word2vec 开始,这个世界变得都被 vector 化了,person2vec,sentence2vec,paragraph2vec,anything2vec,world2vec。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文