fastText

fastText

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

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

fastText词向量文本分类机器学习自然语言处理Github开源项目

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 许可证。

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多