今天我们来看 Mikolov 大佬 2016 年的另一大巨作——fastText。2013 年大佬在 Google 开源了 Word2Vec,2016 年刚就职于 FaceBook 就开源了 fastText,全都掀起了轩然大波。
fastText 模型有两篇相关论文:
截至目前为止,第一篇有 1500 多引用量,第二篇有 2700 多引用量。
从这两篇文的标题我们可以看出来 fastText 有两大用途——文本分类和 Word Embedding。
由于 fastText 模型比较简单,所以我们可以把两篇论文放在一起看。
fastText 提供了简单而高效的文本分类和 Word Embedding 方法,分类精度比肩深度学习而且速度快上几个数量级。
举个例子:使用标准的 CPU 可以在十分钟的时间里训练超过 10 亿个单词,在不到一分钟的时间里可以将 50 万个句子分到 31 万个类别中。
可以看到 fastText 的速度有多惊人。
fastText 之所以能做到速度快效果好主要是两个原因:N-Gram 和 Hierarchical softmax。由于 Hierarchical softmax 在 Word2Vec 中已经介绍过了,所以我们只介绍一下 N-gram。
N-gram 是一种基于统计语言模型的算法,常用于 NLP 领域。其思想在于将文本内容按照字节顺序进行大小为 N 的滑动窗口操作,从而形成了长度为 N 的字节片段序列,其片段我们称为 gram。
以“谷歌是家好公司” 为例子:
当然,我们可以用字粒度也可以用词粒度。
例如:谷歌 是 家 好 公司 二元 Bi-gram 特征为:谷歌是 是家 家好 好公司 三元 Tri-gram 特征为:谷歌是家 是家好 家好公司
N-gram 产生的特征只是作为文本特征的候选集,后面还可以通过信息熵、卡方统计、IDF 等文本特征选择方式筛选出比较重要的特征。
这边值得注意的是,fastText 是一个库,而不是一个算法。类似于 Word2Vec 也只是一个工具,Skip-Gram 和 CBOW 才是其中的算法。
fastText is a library for efficient learning of word representations and sentence classification.
”
fastText 在 Skip-Gram 的基础上实现 Word Embedding,具体来说:fastText 通过 Skip-Gram 训练了字符级别 N-gram 的 Embedding,然后通过将其相加得到词向量。
举个例子:对于 “where” 这个单词来说,它的 Tri-gram 为:“<wh”, “whe”, “her”, “ere”, “re>”。由于字符串首尾会有符号,所以这里用 < 表示前缀, > 表示后缀。textFast 是对 这些 Tri-gram 进行训练,然后将这 5 个 tri-gram 的向量求和来表示 “where” 的词向量。
这样做主要有两个好处:
为了节省内存空间,我们使用 HashMap 将 N-gram 映射到 1 到 K,所以单词的除了存储自己在单词表的 Index 外,还存储了其包含的 N-gram 的哈希索引。
一般来说,速度快的模型其结构都会比较简单,fastText 也不例外,其架构图如下图所示:
其中, 为一个句子的 N-gram 特征。
我们看到这个架构是不是感觉似曾相似?
fastText 与 Word2Vec 的 CBOW 架构是非常相似的,但与 CBOW 不同的是:fastText 输入不仅是多个单词 Embedding 向量,还将字符级别的 N-gram 向量作为额外的特征,其预测是也不是单词,而是 Label(fastText 主要用于文本分类,所以预测的是分类标签)。
我们简单看下 fastText 的两个实验——Embedding 和文本分类;
sisg 是 fastText 用于 Embedding 的模型,实验效果如下:
分类实验的精度 fastText 比 char-CNN、 char-RCNN 要好,但比 VDCNN 要差。(但这里注意:fastText 仅仅使用 10 个隐藏层节点 ,训练了 5 次 epochs。)
在速度上 fastText 快了几个数量级。(此处注意:CNN 和 VDCNN 用的都是 Tesla K40 的 GPU,而 fastText 用的是 CPU)
下面是标签预测的结果,两个模型都使用 CPU 并开了 20 个线程:
一句话总结:fastText 是一个用于文本分类和 Embedding 计算的工具库,主要通过 N-gram 和 Hierarchical softmax 保证算法的速度和精度。
关于 Hierarchical softmax 为什么会使 fastText 速度那么快?而在 Word2Vec 中没有看到类似的效果?
我觉得是因为 fastText 的标签数量相比 Word2Vec 来说要少很多,所以速度会变的非常快。其次 Hierarchical softmax 是必要的,如果不同的话速度会慢非常多。
另外,fastText 可能没有什么创新,但他却异常火爆,可能有多个原因,其中包括开源了高质量的 fastText,类似 Work2Vec,当然也会有 Mikolov 大佬和 Facebook 的背书。
总的来说,fastText 还是一个极具竞争力的一个工具包。
推荐阅读
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
太赞了!Springer面向公众开放电子书籍,附65本数学、编程、机器学习、深度学习、数据挖掘、数据科学等书籍链接及打包下载
数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。