Project Icon

fastText

高效词向量学习和文本分类库

fastText是Facebook开发的开源自然语言处理库,专注于高效词向量学习和文本分类。它支持157种语言,利用子词信息丰富词向量表示,并采用多种技巧提升分类性能。该库易用且训练速度快,适合大规模文本处理。fastText还提供模型量化功能,可大幅压缩模型体积,便于部署。

fastText

fastText是一个用于高效学习词表示和句子分类的库。

CircleCI

目录

资源

模型

补充数据

常见问题

您可以在我们的网站上找到常见问题的答案

速查表

我们还提供了一个包含有用的单行命令的速查表

要求

我们使用circleci在各种Docker镜像下持续构建和测试我们的库、CLI和Python绑定。

通常,fastText可以在现代Mac OS和Linux发行版上构建。 由于它使用了一些C++11特性,因此需要支持C++11的编译器。 这些包括:

  • (g++-4.7.2或更新版本)或(clang-3.3或更新版本)

编译使用Makefile进行,所以你需要有一个可用的make。 如果你想使用cmake,你需要至少2.8.9版本。

我们成功构建和测试CLI的最老的发行版之一是Debian jessie

对于词相似度评估脚本,你需要:

  • Python 2.6或更新版本
  • NumPy & SciPy

对于Python绑定(参见python子目录),你需要:

  • Python 2.7或>=3.4版本
  • NumPy & SciPy
  • pybind11

我们成功构建和测试Python绑定的最老的发行版之一是Debian jessie

如果这些要求使你无法使用fastText,请开一个issue,我们会尽力满足你的需求。

构建fastText

我们讨论构建fastText的最新稳定版本。

获取源代码

你可以在常规位置找到我们的最新稳定版本

还有master分支,其中包含我们最新的所有工作,但伴随着不稳定分支的所有常见警告。如果你是开发者或高级用户,可能会想使用这个。

使用make构建fastText(推荐)

$ wget https://github.com/facebookresearch/fastText/archive/v0.9.2.zip
$ unzip v0.9.2.zip
$ cd fastText-0.9.2
$ make

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

使用cmake构建fastText

目前这不是发布版本的一部分,所以你需要克隆master分支。

$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ mkdir build && cd build && cmake ..
$ make && make install

这将创建fasttext二进制文件以及所有相关库(共享、静态、PIC)。

构建Python版fastText

目前这不是发布版本的一部分,所以你需要克隆master分支。

$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ pip install .

有关更多信息和介绍,请参见python/README.md

使用示例

这个库有两个主要用例:词表示学习和文本分类。 这些在12两篇论文中有描述。

词表示学习

为了学习词向量,如1中所述,执行:

$ ./fasttext skipgram -input data.txt -output model

其中data.txt是包含UTF-8编码文本的训练文件。 默认情况下,词向量将考虑3到6个字符的字符n-gram。 优化结束时,程序将保存两个文件:model.binmodel.vecmodel.vec是一个文本文件,每行包含一个词向量。 model.bin是一个二进制文件,包含模型参数以及字典和所有超参数。 二进制文件可以在以后用于计算词向量或重新开始优化。

获取词表外单词的词向量

之前训练的模型可以用来计算词表外单词的词向量。 如果你有一个文本文件queries.txt,包含你想计算向量的单词,使用以下命令:

$ ./fasttext print-word-vectors model.bin < queries.txt

这将输出词向量到标准输出,每行一个向量。 这也可以与管道一起使用:

$ cat queries.txt | ./fasttext print-word-vectors model.bin

查看提供的脚本以获取示例。例如,运行:

$ ./word-vector-example.sh

将编译代码、下载数据、计算词向量并在罕见词相似度数据集RW [Thang et al. 2013]上评估它们。

文本分类

这个库也可以用来训练监督文本分类器,例如用于情感分析。 为了使用2中描述的方法训练文本分类器,使用:

$ ./fasttext supervised -input train.txt -output model

其中train.txt是一个文本文件,每行包含一个训练句子和标签。 默认情况下,我们假设标签是以字符串__label__为前缀的单词。 这将输出两个文件:model.binmodel.vec。 模型训练完成后,你可以通过在测试集上计算k的精确率和召回率(P@k和R@k)来评估它:

$ ./fasttext test model.bin test.txt k

参数k是可选的,默认为1

为了获取一段文本的k个最可能的标签,使用:

$ ./fasttext predict model.bin test.txt k

或使用predict-prob来同时获取每个标签的概率

$ ./fasttext predict-prob model.bin test.txt k

其中test.txt包含每行一个要分类的文本片段。 这样做会将每行k个最可能的标签打印到标准输出。 参数k是可选的,默认为1。 查看classification-example.sh以获取使用示例。 为了重现2论文中的结果,运行classification-results.sh,这将下载所有数据集并重现表1中的结果。

如果你想计算句子或段落的向量表示,请使用:

$ ./fasttext print-sentence-vectors model.bin < text.txt

这假设text.txt文件包含你想获取向量的段落。 程序将在文件中每行输出一个向量表示。

你也可以使用以下命令量化监督模型以减少其内存使用:

$ ./fasttext quantize -output model

这将创建一个内存占用更小的.ftz文件。所有标准功能,如testpredict,在量化模型上的工作方式相同:

$ ./fasttext test model.ftz test.txt

量化过程遵循3中描述的步骤。你可以运行脚本quantization-example.sh作为示例。

完整文档

不带参数调用命令以列出可用参数及其默认值:

$ ./fasttext supervised
输入或输出路径为空。

以下参数是必需的:
  -input              训练文件路径
  -output             输出文件路径
以下参数为可选项:
  -verbose            详细程度级别 [2]

以下字典相关参数为可选项:
  -minCount           词语最少出现次数 [1]
  -minCountLabel      标签最少出现次数 [0]
  -wordNgrams         词语n元组最大长度 [1]
  -bucket             桶的数量 [2000000]
  -minn               字符n元组最小长度 [0]
  -maxn               字符n元组最大长度 [0]
  -t                  采样阈值 [0.0001]
  -label              标签前缀 [__label__]

以下训练相关参数为可选项:
  -lr                 学习率 [0.1]
  -lrUpdateRate       学习率更新频率 [100]
  -dim                词向量维度 [100]
  -ws                 上下文窗口大小 [5]
  -epoch              训练轮数 [5]
  -neg                负采样数量 [5]
  -loss               损失函数 {ns, hs, softmax} [softmax]
  -thread             线程数 [12]
  -pretrainedVectors  用于监督学习的预训练词向量 []
  -saveOutput         是否保存输出参数 [0]

以下量化相关参数为可选项:
  -cutoff             保留的词语和n元组数量 [0]
  -retrain            应用截断时是否微调嵌入 [0]
  -qnorm              是否单独量化范数 [0]
  -qout               是否量化分类器 [0]
  -dsub               每个子向量的大小 [2]

默认值可能因模式而异。(词表示模式 `skipgram` 和 `cbow` 使用默认的 `-minCount` 值为 5。)

## 参考文献

如果使用此代码学习词表示,请引用 [1](#enriching-word-vectors-with-subword-information);如果用于文本分类,请引用 [2](#bag-of-tricks-for-efficient-text-classification)。

### 用子词信息丰富词向量

[1] P. Bojanowski\*, E. Grave\*, A. Joulin, T. Mikolov, [*用子词信息丰富词向量*](https://arxiv.org/abs/1607.04606)

@article{bojanowski2017enriching, title={Enriching Word Vectors with Subword Information}, author={Bojanowski, Piotr and Grave, Edouard and Joulin, Armand and Mikolov, Tomas}, journal={Transactions of the Association for Computational Linguistics}, volume={5}, year={2017}, issn={2307-387X}, pages={135--146} }


### 高效文本分类的技巧包

[2] A. Joulin, E. Grave, P. Bojanowski, T. Mikolov, [*高效文本分类的技巧包*](https://arxiv.org/abs/1607.01759)

@InProceedings{joulin2017bag, title={Bag of Tricks for Efficient Text Classification}, author={Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Mikolov, Tomas}, booktitle={Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics: Volume 2, Short Papers}, month={April}, year={2017}, publisher={Association for Computational Linguistics}, pages={427--431}, }


### FastText.zip: 压缩文本分类模型

[3] A. Joulin, E. Grave, P. Bojanowski, M. Douze, H. Jégou, T. Mikolov, [*FastText.zip: 压缩文本分类模型*](https://arxiv.org/abs/1612.03651)

@article{joulin2016fasttext, title={FastText.zip: Compressing text classification models}, author={Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Douze, Matthijs and J{'e}gou, H{'e}rve and Mikolov, Tomas}, journal={arXiv preprint arXiv:1612.03651}, year={2016} }


(\* 这些作者贡献相同。)

## 加入 fastText 社区

* Facebook 页面:https://www.facebook.com/groups/1174547215919768
* Google 群组:https://groups.google.com/forum/#!forum/fasttext-library
* 联系方式:[egrave@fb.com](mailto:egrave@fb.com), [bojanowski@fb.com](mailto:bojanowski@fb.com), [ajoulin@fb.com](mailto:ajoulin@fb.com), [tmikolov@fb.com](mailto:tmikolov@fb.com)

查看 CONTRIBUTING 文件了解如何提供帮助。

## 许可证

fastText 采用 MIT 许可证。
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号