词向量工具---fastText简介、使用教程及源码分析

首先我们还是看一下fasttext的目录。所有的C++代码都在src中。然后就是一些linux脚本文件

我们进入src目录看看有哪些C++文件。从上往下看,
args是专门存储超参的类。
dictionary是词典类,构建存储词典,支持把单词转成id。
fasttext是训练测试等的核心文件,会调用model进行词向量文本向量的训练。
main是主函数负责接受超参转成args类,根据不同目的调用不同的方法。
剩下的matrix,vector等文件都是辅助fasttext,model以及dictionary词典的。

fasttext中文本向量就是词向量的平均,得到文本向量并进行分类的代码和word2vec中的CBOW非常像。我们先看一下classification-example.sh。这个脚本文件会对来自于dbpedia的文本进行分类。分类前要对文本进行预处理并且打乱。

参数方面

  • loss function选用hs(hierarchical softmax)要比ns(negative sampling) 训练速度要快很多倍,并且准确率也更高。
  • wordNgrams 默认为1,设置为2以上可以明显提高准确率。
  • 如果词数不是很多,可以把bucket设置的小一点,否则预留会预留太多bucket使模型太大。

因为facebook提供的只是C++版本的代码,上github已经有封装的python接口。用起来特别方便,觉得还不能满足自己的使用要求,修改源码也非常方便。
所以对于文本分类,先用fasttext做一个简单的baseline是很适合的。

源码分析

fastText的代码结构以及各模块的功能图

训练数据格式

训练数据格式为一行一个句子,每个词用空格分割,如果一个词带有前缀 label,那么它就作为一个类标签,在文本分类时使用,这个前缀可以通过-label参数自定义。训练文件支持 UTF-8 格式。

fasttext 模块

fasttext 是最顶层的模块,它的主要功能是训练和预测,首先是训练功能的调用路径,第一个函数是 train,它的主要作用是 初始化参数,启动多线程训练。

-------------本文结束感谢您的阅读-------------
坚持整理学习笔记,您的支持将鼓励我继续整理下去!