fastText之我所见(一)

                                   fastText之我所见(一)

本系列blog重点介绍fasttext快速文本分类器的历史、原理以及实战等,主要有(一)(二)两个教程share给大家。教程(一)主要介绍fastTest,教程(二)主要从代码的角度来实战。

笔者信息:Next_Legend  QQ:1219154092 人工智能 自然语言处理 图像处理 神经网络 高维信息处理

                                                                                                                                                    ——2018.7.31于天津大学

一、What is fastTest?

FastText is an open-source, free, lightweight library that allows users to learn text representations and text classifiers. It works on standard, generic hardware. Models can later be reduced in size to even fit on mobile devices.

FastText是一个开源的、免费的、轻量级的库,允许用户学习文本表示和文本分类器。它适用于标准的通用硬件。模型可以在以后缩小,甚至可以在移动设备上使用。

fasttext是facebook开源的一个词向量与文本分类工具,在2016年开源,典型应用场景是“带监督的文本分类问题”。提供简单而高效的文本分类和表征学习的方法,性能比肩深度学习而且速度更快。

fastText结合了自然语言处理和机器学习中最成功的理念。这些包括了使用词袋以及n-gram袋表征语句,还有使用子字(subword)信息,并通过隐藏表征在类别间共享信息。我们另外采用了一个softmax层级(利用了类别不均衡分布的优势)来加速运算过程。

该工具的作者有以下几位:

                               

二、Requirements

fastText builds on modern Mac OS and Linux distributions. Since it uses C++11 features, it requires a compiler with good C++11 support. These include :

fastText构建在现代Mac OS和Linux发行版上。由于它使用了C++11特性,所以它需要一个具有良好C++11支持的编译器。这些包括:

(gcc-4.6.3 or newer) or (clang-3.3 or newer)

Compilation is carried out using a Makefile, so you will need to have a working make. For the word-similarity evaluation script you will need:

编译是使用Makefile进行的,因此您需要有一个工作make。对于单词相似的评估脚本,您将需要:

python 2.6 or newer

numpy & scipy

注意:fastText准确率比肩深度学习。如其名,fastText在训练时贼快,这也是该库最大的优势,相比cnn动辄几小时、十几小时的漫长训练过程,fastText只需几分钟就训练完成,该库已经开源,c++和python版本均有,原始代码由c++编写,默认开发环境为linux,如果是windows开发环境,可以自己使用vs创建工程,然后将源码依次移植过来,就可以编译调试了。

三、Building fastText

In order to build fastText, use the following:

为了建立快速文本,请使用以下内容:

                          

This will produce object files for all the classes as well as the main binary fasttext. If you do not plan on using the default system-wide compiler, update the two macros defined at the beginning of the Makefile (CC and INCLUDES).

这将为所有的类以及主二进制fasttext生成对象文件。如果您不打算使用默认的全系统编译器,请更新Makefile(CC和include)开头定义的两个宏。

四、List of options

Invoke a command without arguments to list available arguments and their default values:

调用没有参数的命令来列出可用的参数及其默认值:

默认值可能因模式而异。(单词表示模式skipgram和cbow使用默认值-5.)

五、fastText与word2vec藕断丝连

早在2013年,Mikolov et al.就提出了用向量来表示词语,即word2vec。利用词向量来表示词语这种方法具有一定的缺陷,比如不能表示句子。一种比较粗暴的方式是对单词的向量表示取平均作为句子的表示,但是这种做法通常效果不好。虽然word2vec这种方法具有一定的缺陷,但由于其简单高效,所以得以广泛应用。

fasttext提供了文本表示以及文本分类的框架,其本质在于给定一个索引集合,来预测某个索引。基于cbow,skip-gram或者bow的文本分类都是该库的示例。

相似处:

图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。

都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。

不同处:

模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是 分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用;

模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容。

两者本质的不同,体现在 h-softmax的使用:

Word2vec的目的是得到词向量,该词向量最终是在输入层得到,输出层对应的 h-softmax也会生成一系列的向量,但最终都被抛弃,不会使用。

fasttext则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)

六、相关文章链接

https://mp.weixin.qq.com/s/TEcWhioOLMCaaIJI64Wtmw

https://fasttext.cc/docs/en/supervised-tutorial.html

https://arxiv.org/pdf/1607.01759v3.pdf

https://pypi.python.org/pypi/fasttext

https://github.com/facebookresearch/fastText

https://heleifz.github.io/14732610572844.html

http://blog.csdn.net/weixin_36604953/article/details/78324834

http://albertxiebnu.github.io/fasttext/

https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/feature/Word2Vec.scala

https://github.com/facebookresearch/fastText/blob/master/src/model.cc

https://github.com/facebookresearch/fastText/blob/master/src/fasttext.cc

猜你喜欢

转载自blog.csdn.net/jinyuan7708/article/details/81303944