NLP︱高级词向量表达(二)——FastText(简述、学习笔记) - CSDN博客

标签: | 发表时间:2018-03-14 14:12 | 作者:
出处:http://blog.csdn.net

FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,不过这个项目其实是有两部分组成的,一部分是这篇文章介绍的
fastText 文本分类(paper: A. Joulin, E. Grave, P. Bojanowski, T. Mikolov,
Bag of Tricks for Efficient Text
Classification(高效文本分类技巧)
),
另一部分是词嵌入学习(paper: P.
Bojanowski*, E. Grave*, A. Joulin, T. Mikolov, Enriching Word Vectors
with Subword
Information
(使用子字信息丰富词汇向量))。
按论文来说只有文本分类部分才是 fastText,但也有人把这两部分合在一起称为
fastText。笔者,在这即认为词嵌入学习属于FastText项目。
github链接: https://github.com/facebookresearch/fastText

.

高级词向量三部曲:

1、 NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、R&python实现、相关应用)
2、 NLP︱高级词向量表达(二)——FastText(简述、学习笔记)
3、 NLP︱高级词向量表达(三)——WordRank(简述)
4、其他NLP词表示方法paper: 从符号到分布式表示NLP中词各种表示方法综述


一、FastText架构

本节内容参考自:
1、开源中国社区 [ http://www.oschina.net] 《Facebook 开源的快速文本分类器 FastTexT》
2、雷锋网文章:《 比深度学习快几个数量级,详解Facebook最新开源工具——fastText

.

1、fastText 架构原理

fastText 方法包含三部分:模型架构、层次 Softmax 和 N-gram 特征。

fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。
序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。
fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。
fastText 模型架构和 Word2Vec 中的 CBOW 模型很类似。不同之处在于,fastText 预测标签,而 CBOW 模型预测中间词。

这里写图片描述
.
.

2、改善运算效率——softmax层级

对于有大量类别的数据集,fastText使用了一个分层分类器(而非扁平式架构)。不同的类别被整合进树形结构中(想象下二叉树而非 list)。在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈弗曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。(参考 博客
这里写图片描述

考虑到线性以及多种类别的对数模型,这大大减少了训练复杂性和测试文本分类器的时间。fastText 也利用了类别(class)不均衡这个事实(一些类别出现次数比其他的更多),通过使用 Huffman 算法建立用于表征类别的树形结构。因此,频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高。
这里写图片描述
.
.
.


二、FastText的词向量表征

1、FastText的N-gram特征

常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。
“我 爱 她” 这句话中的词袋模型特征是 “我”,“爱”, “她”。这些特征和句子 “她 爱 我” 的特征是一样的。
如果加入 2-Ngram,第一句话的特征还有 “我-爱” 和 “爱-她”,这两句话 “我 爱 她” 和 “她 爱 我” 就能区别开来了。当然,为了提高效率,我们需要过滤掉低频的 N-gram。

在 fastText 中一个低维度向量与每个单词都相关。隐藏表征在不同类别所有分类器中进行共享,使得文本信息在不同类别中能够共同使用。这类表征被称为词袋(bag of words)(此处忽视词序)。在 fastText中也使用向量表征单词 n-gram来将局部词序考虑在内,这对很多文本分类问题来说十分重要。

举例来说:fastText能够学会“男孩”、“女孩”、“男人”、“女人”指代的是特定的性别,并且能够将这些数值存在相关文档中。然后,当某个程序在提出一个用户请求(假设是“我女友现在在儿?”),它能够马上在fastText生成的文档中进行查找并且理解用户想要问的是有关女性的问题。
.
.

2、FastText词向量优势

(1)适合大型数据+高效的训练速度:能够训练模型“在使用标准多核CPU的情况下10分钟内处理超过10亿个词汇”,特别是与深度模型对比,fastText能将训练时间由数天缩短到几秒钟。使用一个标准多核 CPU,得到了在10分钟内训练完超过10亿词汇量模型的结果。此外, fastText还能在五分钟内将50万个句子分成超过30万个类别。
(2)支持多语言表达:利用其语言形态结构,fastText能够被设计用来支持包括英语、德语、西班牙语、法语以及捷克语等多种语言。它还使用了一种简单高效的纳入子字信息的方式,在用于像捷克语这样词态丰富的语言时,这种方式表现得非常好,这也证明了精心设计的字符 n-gram 特征是丰富词汇表征的重要来源。FastText的性能要比时下流行的word2vec工具明显好上不少,也比其他目前最先进的词态词汇表征要好。
这里写图片描述
(3)fastText专注于文本分类,在许多标准问题上实现当下最好的表现(例如文本倾向性分析或标签预测)。FastText与基于深度学习方法的Char-CNN以及VDCNN对比:
FastText与基于深度学习方法的Char-CNN以及VDCNN对比
(4)比word2vec更考虑了相似性,比如 fastText 的词嵌入学习能够考虑 english-born 和 british-born 之间有相同的后缀,但 word2vec 却不能(具体参考 paper)。
.
.

3、FastText词向量与word2vec对比

本节来源于博客: fasttext
FastText= word2vec中 cbow + h-softmax的灵活使用

灵活体现在两个方面:
1. 模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是 分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用;
2. 模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;

两者本质的不同,体现在 h-softmax的使用。
Wordvec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax 也会生成一系列的向量,但最终都被抛弃,不会使用。
fasttext则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)

相关文章: Jupyter notebooks:Comparison of FastText and Word2Vec
.
.
.


三、FastText实现

github链接: https://github.com/facebookresearch/fastText
fastText基于Mac OS或者Linux系统构筑,使用 C++11 的特性。需要python 2.6 或者更高版本支持,以及numpy & scipy等软件支持。
FastText默认参数:

  $ ./fasttext supervised
Empty input or output path. The following arguments are mandatory: -input training file path -output output file path The following arguments are optional: -lr learning rate [0.1] -lrUpdateRate change the rate of updates for the learning rate [100] -dim size of word vectors [100] -ws size of the context window [5] -epoch number of epochs [5] -minCount minimal number of word occurences [1] -minCountLabel minimal number of label occurences [0] -neg number of negatives sampled [5] -wordNgrams max length of word ngram [1] -loss loss function {ns, hs, softmax} [ns] -bucket number of buckets [2000000] -minn min length of char ngram [0] -maxn max length of char ngram [0] -thread number of threads [12] -t sampling threshold [0.0001] -label labels prefix [__label__] -verbose verbosity level [2] -pretrainedVectors pretrained word vectors for supervised learning []

Mikolov 在 fastTetxt 的论文中报告了两个实验,其中一个实验和 Tagspace 模型进行对比。实验是在 YFCC100M 数据集上进行的, YFCC100M 数据集包含将近 1 亿张图片以及摘要、标题和标签。实验使用摘要和标题去预测标签。Tagspace 模型是建立在 Wsabie 模型的基础上的。Wsabie 模型除了利用 CNN 抽取特征之外,还提出了一个带权近似配对排序 (Weighted Approximate-Rank Pairwise, WARP) 损失函数用于处理预测目标数量巨大的问题。
这里写图片描述
上面就是实验结果,从实验结果来看 fastText 能够取得比 Tagspace 好的效果,并拥有无以伦比的训练测试速度。但严格来说,这个实验对 Tagspace 有些不公平。YFCC100M 数据集是关于多标记分类的,即需要模型能从多个类别里预测出多个类。Tagspace 确实是做多标记分类的;但 fastText 只能做多类别分类,从多个类别里预测出一个类。而评价指标 prec@1 只评价一个预测结果,刚好能够评价多类别分类。

YFCC100M 数据: https://research.facebook.com/research/fasttext/


.

延伸一:重磅:facebook公开了90种语言的Pre-trained word vectors

https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md
可怕的facebook,用fasttext进行训练,使用默认参数,300维度

相关 [nlp 向量 fasttext] 推荐:

NLP︱高级词向量表达(二)——FastText(简述、学习笔记) - CSDN博客

- -
FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,不过这个项目其实是有两部分组成的,一部分是这篇文章介绍的. fastText 文本分类(paper:. Classification(高效文本分类技巧)),. 另一部分是词嵌入学习(paper:. Information(使用子字信息丰富词汇向量)).

Facebook词向量工具FastText

- - 标点符
fastText是Facebook于2016年开源的一个词向量计算和文本分类工具,在文本分类任务中,fastText(浅层网络)往往能取得和深度网络相媲美的精度,却在训练时间上比深度网络快许多数量级. 在标准的多核CPU上, 能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内.

[转][转]Facebook 开源的快速文本分类器 FastText

- - heiyeluren的blog(黑夜路人的开源世界)
比深度学习快几个数量级,详解Facebook最新开源工具——fastText. 导读:Facebook声称fastText比其他学习方法要快得多,能够训练模型“在使用标准多核CPU的情况下10分钟内处理超过10亿个词汇”,特别是与深度模型对比,fastText能将训练时间由数天缩短到几秒钟. Facebook FAIR实验室在最新博客中宣布将开源资料库fastText,声称相比深度模型,fastText能将训练时间由数天缩短到几秒钟.

FastText 文本分类使用心得 - CSDN博客

- -
最近在一个项目里使用了fasttext[1], 这是facebook今年开源的一个词向量与文本分类工具,在学术上没有什么创新点,但是好处就是模型简单,训练速度又非常快. 我在最近的一个项目里尝试了一下,发现用起来真的很顺手,做出来的结果也可以达到上线使用的标准. 其实fasttext使用的模型与word2vec的模型在结构上是一样的,拿cbow来说,不同的只是在于word2vec cbow的目标是通过当前词的前后N个词来预测当前词,在使用层次softmax的时候,huffman树叶子节点处是训练语料里所有词的向量.

技术解读 | 基于fastText和RNN的语义消歧实战

- - 机器之心
在我们云脑科技最近的一个项目中,需要对文本中提取的实体进行消歧(WSD, Word Sense Disambiguation),即确定某个实体在当前上下文中是我们期望的一个意义. 美国电影《坏女孩》由Myriad Pictures Inc.于2013年出品. 讲述雅蕾克丝,一个女同性恋,父母离异,母亲重新找了一个继父,却又早早自杀身亡;父亲也重新找了个继母,继母对她百般刁难.

NLP入门之语音模型原理

- - IT瘾-bigdata
这一篇文章其实是参考了很多篇文章之后写出的一篇对于语言模型的一篇科普文,目的是希望大家可以对于语言模型有着更好地理解,从而在接下来的NLP学习中可以更顺利的学习.. 1:传统的语音识别方法:. 这里我们讲解一下是如何将声音变成文字,如果有兴趣的同学,我们可以深入的研究.. 首先我们知道声音其实是一种波,常见的MP3等都是压缩的格式,必须要转化成非压缩的纯波形的文件来处理,下面以WAV的波形文件来示例:.

谷歌最强 NLP 模型 BERT 解读

- - 雷锋网
雷锋网 AI 科技评论按:本文是追一科技潘晟锋基于谷歌论文为 AI 科技评论提供的解读稿件. 最近谷歌研究人员通过新的BERT模型在11项NLP任务中夺得STOA结果,这在自然语言处理学界以及工业界都引起了不小的热议. 作者通过在33亿文本的语料上训练语言模型,再分别在不同的下游任务上微调,这样的模型在不同的任务均得到了目前为止最好的结果,并且有一些结果相比此前的最佳成绩得到了幅度不小的提升.

15分钟入门NLP神器—Gensim

- - IT瘾-geek
   作者:李雪冬           . 编辑:李雪冬           . 作为自然语言处理爱好者,大家都应该听说过或使用过大名鼎鼎的Gensim吧,这是一款具备多种功能的神器. Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达.

NLP大师李中莹教你省时100条

- - 佳人
NLP大师李中莹教你省时100条,大师辛苦总结的经验,对照自己开始上进吧. 1、随身携带一本小册子,每想到要做的事都马上写下. 无需写得详细,能唤起自己记忆便可. 2、每天下班前,把所有明天需做的事依缓急程度排列写下,并且定下每项之预算时间需要,作为明天的工作计划. 3、每周的最后一天,检查一下下周需做的事.

【NLP主流最大的偏见,规则系统的手工性】

- - 我爱自然语言处理
【科普随笔:NLP主流的傲慢与偏见】中的第一条是 :. 【偏见一】规则系统的手工编制(hand-crafted)是其知识瓶颈,而机器学习是自动训练的(言下之意:因此没有知识瓶颈). NLP(Natural Language Processing)主流对规则系统和语言学家大小偏见积久成堆,这一条可以算是万偏之源.