关于作者:张正,坐标巴黎,上班NLP,下班词嵌入。


从词嵌入到句嵌入

到底什么是 fastText ?

先说结论,fastText 在不同语境中至少有两个含义:

1. 在文章 Bag of Tricks for Efficient Text Classification [1] 中,fastText 是作者提出的文本分类器的名字。与 sub-word 无关!也不是新的词嵌入训练模型!是 word2vec 中 CBOW 模型的简单变种。

2. 作为 Facebook 开源包,fastText [6] 是用来训练词嵌入或句嵌入的,其不仅包括 1 中论文的代码实现,还包括 Enriching Word Vectors with Subword Information [2] 及 FastText.zip: Compressing text classification models [3] 两文的代码实现。

本来觉得这些含义区别不重要,直到连我自己都被弄迷糊了。在写这篇解读前,我心中的 fastText 一直是第三种含义:用 sub-word 信息加强词嵌入训练,解决 OOV(Out-Of-Vocabulary)表征的方法。结果带着这个预先的理解读 Bag of Tricks for Efficient Text Classification,越读越迷惑。

为理清思路,第一小节我们就先讲讲 Bag of Tricks for Efficient Text Classification 中的 fastText,第二小节则围绕 Enriching Word Vectors with Subword Information

1.1 Abstract

“本文探索了一种简单有效的文本分类基准(方法)。我们的实验表明,我们的快速文本分类器 fastText 在准确性方面与深度学习分类器平分秋色,其训练和评估速度(相比深度学习模型更是)要快许多个数量级。

我们可以使用标准的多核 CPU 在不到 10 分钟的时间内用 fastText 训练超过 10 亿个单词,并在一分钟之内将 50 万个句子在 31 万 2 千个类中做分类。”

作者中又出现了托老师,不知道是不是受他影响,这篇文章在表述上也很有 word2vec 的味道,更不用说模型本身。fastText 和 word2vec 的卖点都是简单高效(快)。

1.2 一句话介绍fastText

word2vec 的 CBOW 模型中将中心词替换为类别标签就得到了 fastText。

具体到一些小区别:

  • CBOW 中词袋的大小由 window_size 决定,而 fastText 中就是整个要分类的文本。

  • CBOW 实际运行中用 Hierarchical softmax,fastText 用 softmax 或 Hierarchical softmax,具体试类的数量决定。

这就是一个标配版且可以实际应用的 fastText 了,我要再强调三点它和 CBOW 无区别的地方,因为在别的讲该论文的文章中看到了一些错误的理解:

  • CBOW 和 fastText 都是用平均值来预测的。(CBOW 不是求和,是求平均)

  • N-gram 对于 CBOW 和 fastText 都是锦上添花的元素,不是标配。

  • 词向量初始化都是随机的,fastText 并没有在 word2vec 预训练词嵌入的基础上再训练。

1.3 对N-gram的理解

如果没有重新读这篇文章,我也会下意识地往 character 级别想,但是必须要在此强调:这篇文章和 character 没有任何关系!文章中的 n-gram 出自 Character-level Convolutional Networks for Text Classification [4],是 word 级别的。与我在 word2vec 中提到的 phrases 类似。

在此梳理几个概念:

  • BOW (Bag-Of-Words):给你一个句子,统计每个词在其中出现的次数,这种表征方法就是 BOW。

  • CBOW (Continuous BOW):托老师在 BOW 前加了个 C,就是因为word2vec 并没有基于词频,而是连续的分布式的表征(continuous distributed representation)。

  • n-gram (or word n-gram):“我写知乎”,bi-gram 就是“我写”,“写知”和“知乎”。

  • character-level n-gram:中文不太好讲 word 和 character 的区别,深入到字母级别,把一个词拆成字母串。Enriching Word Vectors with Subword Information 中是 character-level n-gram,这里不是。

作者的实验证明,引入 word n-gram 可以提升一些任务的表现,原因是标配版中只用 word 级别求平均值完全忽略了词序,而 n-gram 保留了小范围的部分词序,对于文本表征是有意义的,从这个角度也可以判断此处的 n-gram 应当是词级别而不是 character 级别的。

这篇文章可以看作是 word2vec 的一个延伸,并不是 fastText 出名的原因。

1.4 “假装看过代码”

我要坦白:我确实没仔细看过 fastText 的源码。因此从代码角度来解释 n-gram 在不同 fastText 版本中的区别我直接引用评论 keep fighting 同学的内容,非常感谢!不同于 word2vec,fastText 源码和论文是相互匹配的,可以交叉验证我们对 n-gram 的理解。

1.5 创新性有限的fastText.zip

同 word2vec 一样,softmax 给模型的计算量、内存占用都带来了很大的负担。对 fastText 而言,随着文本数量和词典规模增大,内存占用会极大地攀升。针对该问题,FastText.zip: Compressing text classification models [5] 研究了如何在对模型效果影响不大的情况下节省内存。

按照惯例,我们还是简单翻一下 abstract:

“我们考虑生成用于文本分类的紧凑架构的问题,从而使整个模型适配有限的内存。在考虑了受 hashing 相关文献启发的不同解决方案后,我们提出了一种基于 PQ 算法(Product Quantization)来存储词嵌入的方法。虽然原始技术会导致准确性下降,但我们将此方法改编为规避量化伪像。

虽然原版方法会导致准确性下降,但我们将此方法改进为可以规避 quantization artefacts 的(我尽力了,但我真的不知道这里怎么翻译,求大神指导)。在几个基准测试上的实验结果表明,我们的方法通常仅需要比 fastText 少两个数量级的内存,而在准确性方面仅稍差一些。就内存使用率和准确性之间的平衡而言,它比现有技术高出许多。”

如 OpenReview 所说,这篇文章是用已经存在的模型压缩方法(如 PQ 算法、用 hashing 来缩小词典内存占用等),创新性有限。何况 ICLR 更关注 DL 模型而不是 NLP 文本分类部分,因此被拒也可以理解。


从词嵌入到子词嵌入

接着再聊聊文章 Enriching Word Vectors with Subword Information [7],真 fastText。

2.1 Abstract

“在大型未标注语料库上训练的连续词表征对于许多自然语言处理任务有用。通过为每个单词分配不同的向量,学习此类表征的流行模型会忽略单词的词法(形态学)信息。这是一个限制,尤其是对于具有大量词汇和许多罕见词的语言。

在本文中,我们提出了一种基于 skipgram 模型的新方法,其中每个单词都被表示为一个 n- 字袋(我实在找不到特别贴切的中文翻译,此处“ n- 字袋”对应 cbow 里的“词袋”)。一个向量表征与每个 n- 字(符)有关;单词被表示为它们(n- 字表征)的总和。

我们的方法很快速,(它)允许在大型语料库上快速训练模型,并允许我们为未出现在训练数据中的单词计算其表征。我们在词的相似性和类比任务上用九种不同的语言评估我们的词表征。通过与最近提出的(基于)形态学的词表征法进行比较,我们证明了我们的向量在这些任务上实现了最先进的性能。”

原版 abstract 只有一段,为了结构清晰,被我拆成了以上三部分。

fastText 依旧是 skip-gram 模型基础上的延展(毕竟通讯作者是托老师)。但不同于 word2vec 最小单位是词(word),它引入了词中 n 个字(character)的信息。这样做的目的,是为了解决 word2vec 没能解决的 OOV(Out-Of-Vocabulary)问题,即如何表示不在词典中,从未见过的词。当然,按照 fastText 的光荣传统,它不仅局限于英语,而是关注多语词嵌入。

2.2 拆!词到子词(subword,n-grams)

这篇文章的精华当然是如何把一个词拆成子词(subword),子词就是词中 n 个字母的集合。

照搬文中给的例子:

你看这个“where”,

它又长又宽,

就像这个猫它又大又圆,

你们来这里阅读,

觉得,图很,好看,

就像我给你们扯淡,

一样很开心。

吸完我家的猫后,来继续说 “where”,假设我们要把它拆成 3 个字母的集合,我们很容易就得到:“whe”,“her”,“ere”。是不是觉得哪里不对,如果这样做的话,如何区分单词 “her” 和 3-grams 中的 “her”。

因此,重点来了,作者提出了给单词头尾加上“<>”符号,“where” 就成了“<where>”,这样其 3-grams 的完全体就是:

“<wh”,“whe”,“her”,“ ere”,“ re>”

而单词“her”就成了“<her>”,就可以与“her”区分开了。

2.3 塞!把子词塞进skip-gram

说完了如何把词拆成子词,那么下面唯一的问题就是怎么把拆出来的塞进 skip-gram 模型了。我们先想下总共有多少种选择?三种。

  • 只有子词

  • 只有词

  • 子词加词

有几个位置可以塞?两个。

回想下 skip-gram 模型,用中心词来预测上下文中的一个词。因此两个位置是:

1. 中心词

2. 上下文词

综上,一共有 6 种选择,当然更准确点说是 5 种,毕竟 a2+b2 是 skip-gram 本尊。

fastText 的选择是:a3+b2

这是一个非常容易被忽视的点,fastText 中是把词本身加入到 n-grams 袋中的。如下原文为证:

We also include the word w itself in the set of its n-grams, to learn a representation for each word (in addition to character n-grams).

中心词的词向量是 n-grams 袋(n-grams 袋中也包含词本身)中所有向量的和。而要去预测的上下文词,就是正常词向量,没有用到子词信息。

2017 ACL 的 fastText 展示提问环节,有人问过为什么不是 a1,作者的回答是他们试过 a1,发现效果不好。

2.3 当你遇到OOV

word2vec 时期,遇到训练时没遇到的词,它的词向量无法得到。有了 fastText,对于 OOV 词,直接对其 n-gram 向量求和就 ok。

当然,这样做的前提是基于词的拼写、子词在形态学上是有意义的。因此,不同语言,不同效果,作者发现这种方法对阿拉伯语、德语和俄语就比对英语、法语和西班牙语效果好。

中国字的偏旁就像 subword 一样,看一个字的组成也能大概猜想其含义,不知道有没有中国字版的 fastText?希望有知乎大神作答。

2.4 长文如何写?

把一篇文章写长实在太难了:要么你提出的算法非常完整,4 页完全不够写;要么你的实验分析做得非常完善,让人可以通过它对你提出的方法获得全面的理解。这篇文章是 ACL 的一篇长文,是后者的典范。实验和结果分析部分也非常值得学习。

结尾彩蛋,fastText 作者 Armand Joulin 是我非常喜欢的研究者之一,我也很荣幸能邀请到他作我博士答辩委员会的评审之一。

按照惯例,答辩时会给每位评审准备一份演讲 PPT 的缩印版。答辩结束回收这些材料时,看到 Armand 在缩印版上写下了很多有意义的笔记和问题,还顺手留下了两幅大作。(可见我讲的是多么无聊。。。)


希望大家能在其中看出什么惊人的 NLP idea。

Stay Hungry. Stay Foolish.

参考文献

[1] Bag of Tricks for Efficient Text Classification https://arxiv.org/pdf/1607.01759.pdf

[2] Enriching Word Vectors with Subword Information https://arxiv.org/pdf/1607.04606.pdf

[3] FastText.zip: Compressing text classification models https://arxiv.org/pdf/1612.03651.pdf

[4] Character-level Convolutional Networks for Text Classification https://papers.nips.cc/paper/5782-character-level-convolutional-networks-for-text-classification.pdf

[5] FastText.zip: Compressing text classification models https://arxiv.org/abs/1612.03651

[6] https://fasttext.cc

[7] Enriching Word Vectors with Subword Information https://www.aclweb.org/anthology/Q17-1010.pdf

更多阅读

#投 稿 通 道#

 让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。

???? 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

???? 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site

• 所有文章配图,请单独在附件中发送

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

????

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。

Word Embedding Papers | 经典再读之fastText相关推荐

  1. Word Embedding Papers | 经典再读之Word2Vec

    关于作者:张正,坐标巴黎,上班NLP,下班词嵌入. 都已经 2020 年了,还在介绍 word2vec? 对.词嵌入(word embeddings)向前可以追溯到上世纪 50 年代(虽然那时还不叫这 ...

  2. 经典再读 | NASNet:神经架构搜索网络在图像分类中的表现

    (图片付费下载于视觉中国) 作者 | Sik-Ho Tsang 译者 | Rachel 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导读]从 AutoML 到 NAS, ...

  3. 经典再读 | 认知控制和失匹配对N2成分的影响

    本研究主要关注以下两点:①关注"认知控制"对N2的影响:③关注能诱发前头皮分布的N2成分的范式.研究认为前部N2应该被划分为单独的与控制和失匹配相关的子成分.另外,oddball范 ...

  4. 理解Word Embedding,全面拥抱ELMO

    提到Word Embedding,如果你的脑海里面冒出来的是Word2Vec,Glove,Fasttext等.那我猜你有80%的概率是从事和NLP相关的工作或者至少是一个算法爱好者(这貌似是一个真命题 ...

  5. 如何使用glove,fasttext等词库进行word embedding?(原理篇)

    0 序 本文保证干货满满~ 看完本文后,你只需要一个glove或者其他已经训练好的词库,也就是一个类似txt的文件,那么你就可以把一个英文单词用一个多维(如300维向量)表示出来!并且会带入到kera ...

  6. Pytorch:jieba分词、hanlp分词、词性标注、命名实体识别、one-hot、Word2vec(CBOW、skipgram)、Word Embedding词嵌入、fasttext

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 文本预处理及其作用: 文本语料在输送给模型前一般需要一系列的预 ...

  7. 哪些技术好书值得一读再读?阿里大牛列了一份经典书单

    喜爱读书,就等于把生活中寂寞无聊的时光换成巨大享受的时刻.有了书,各个领域的智慧,几乎触手可及.我们能有幸站在前辈.巨人的肩膀上,看更远的风景. 4月23日世界读书日,阿里九位技术大牛为你推荐好书,与 ...

  8. Word Embedding List|ACL 2020 词嵌入长文汇总及分类

    ACL 2020 于 5 月 17 日放榜啦,在此祝贺.羡慕每一位论文被接收的朋友.以下汇总并尝试按主题分类了 37 篇与 word embedding 有关的长文,让我们一起看看今年词嵌入的研究又有 ...

  9. 如何用Python处理自然语言?(Spacy与Word Embedding)

    本文教你用简单易学的工业级Python自然语言处理软件包Spacy,对自然语言文本做词性分析.命名实体识别.依赖关系刻画,以及词嵌入向量的计算和可视化. (由于微信公众号外部链接的限制,文中的部分链接 ...

最新文章

  1. axios与ajax区别
  2. ONNX系列七 --- 在Python中使用可移植的ONNX AI模型
  3. 使用辅助任务来提升情感分类领域适应
  4. Ubuntu 全部命令
  5. 非因解读 | Multiplex immunofluorescnece-多重免疫荧光结合单细胞蛋白组技术探索肿瘤微环境
  6. Java使用DES加密解密
  7. [转]用python来开发webgame服务端(4)
  8. word压缩图片怎么弄_教大家WORD插入图片如何批量压缩图片
  9. 英语体系----词根词缀等----持续补充(词根词缀等,词汇,语法,简单句,长难句,写作)
  10. linux没有cpufreq目录,【原创】Linux cpufreq framework
  11. 如何批量将 ppt 后缀格式的演示文稿转换为 pptx 格式
  12. 开热点给电脑消耗大吗_手机开启WiFi热点,提供流量给电脑上网,可行吗?
  13. pycharm设置控制台的解释器_PyCharm设置
  14. 安装apk报错“解析包时出现问题”
  15. HTML3/CSS基础
  16. 抓取王者荣耀英雄列表的爬虫笔记(python+requests)
  17. 高利转贷”“职业放贷”是违法借贷行为
  18. HTML+CSS简单漫画网页设计成品 大学生个人HTML响应式--(海贼王 6页)
  19. 化学实验学术报告PPT答辩模板
  20. pdf怎样添加水印?添加图片水印的方法

热门文章

  1. 怎么测内阻 恒压源_电池内阻及简单测试方法
  2. jpa关联映射(一)
  3. 在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH
  4. 基于visual Studio2013解决C语言竞赛题之1089牛虎过河
  5. 【CSON原创】HTML5游戏框架cnGameJS开发实录
  6. [C#(WebForm)] - 利用递归遍历文件夹和文件存入TreeView
  7. php循环给数组每个值加引号,php数组非数字键名加引号的必要性!
  8. springboot返回modelandview 找不到视图_SpringBoot错误处理机制及原理
  9. vue 单选框样式_作为一位Vue工程师,这些开发技巧你都会吗?
  10. python判断ip能否ping通_Python实现检测服务器是否可以ping通的2种方法