fastText
-
- 文本分类
- 什么是文本分类?
- 安装使用fastText
- 参考文献
文本分类
??文本分类是许多应用程序的核心问题,如垃圾邮件检测,情绪分析或智能回复。 在本教程中,我们将介绍如何使用fastText工具构建文本分类器。
什么是文本分类?
??文本分类的目标是将文档(例如电子邮件,帖子,文本消息,产品评论等)分配给一个或多个类别。 这些类别可以是评论分数,垃圾邮件vs. 非垃圾邮件或输入文档的语言。 如今,构建此类分类器的主要方法是机器学习,即从示例中学习分类规则。 为了构建这样的分类器,我们需要标记数据,其由文档及其对应的类别(或标签或标签)组成。
??作为一个例子,我们构建了一个分类器,它自动将StackExchange有关烹饪的问题分类为几个可能的标签之一,例如:pot
、bowl
或者 baking
安装使用fastText
??本教程的第一步是安装和构建fastText。 它只需要一个c ++编译器,并且支持c ++ 11。
- 运行环境
Ubuntu 16.04 + 16G内存 - 让我们从下载最新版本开始:
$ wget https://github.com/facebookresearch/fastText/archive/v0.2.0.zip
$ unzip v0.2.0.zip
- 下载并解压后如图所示:
- 进入到fastText-0.2.0目录,并编译它,编译后结果如下:
$ cd fastText-0.2.0
$ make
提示:data和pre_train_model目录是我后来新建的,正常情况下都是可以一次性安装成功的。
- 不带任何参数运行二进制文件将打印高级文档,显示fastText支持的不同用例:
- 在本教程中,我们主要使用
监督
,测试
和预测
子命令,这些子命令对应于学习(和使用)文本分类器。 有关fastText的其他功能的介绍,请参阅有关学习词向量的教程。 - 数据获取和准备
如引言中所述,我们需要标记数据来训练我们的监督分类器。 在本教程中,我们感兴趣的是构建一个分类器来自动识别有关烹饪的StackExchange问题的主题。 让我们从StackExchange的烹饪部分及其相关标签下载问题示例:
# 在当前目录新建一个data目录用于存放数据
$ mkdir data
$ cd data
$ wget https://dl.fbaipublicfiles.com/fasttext/data/cooking.stackexchange.tar.gz && tar -xvzf cooking.stackexchange.tar.gz
$ head cooking.stackexchange.txt
下载完成之后如下所示:
??文本文件的每一行都包含一个标签列表,后跟相应的文档。 所有标签都以__label__
前缀开头,这就是fastText识别什么是标签或什么是单词的方式。 然后训练该模型以预测给定文档中的单词的标签。
??在训练我们的第一个分类器之前,我们需要将数据分成训练和验证。 我们将使用验证集来评估学习分类器对新数据的好坏程度。
我们的完整数据集包含15404个示例。 让我们将它分成12404个示例的训练集和3000个示例的验证集:
- 构建我们的第一个分类器
-input
命令行选项指示包含训练示例的文件,而-output
选项指示保存模型的位置。 在训练结束时,在当前目录中创建包含训练分类器的文件model_cooking.bin。
通过运行命令,可以交互式地直接测试我们的分类器:
该模型预测的标签是食品安全,这是不相关的。 不知何故,该模型似乎在简单的例子上失败了。 为了更好地了解其质量,我们通过运行以下方法对验证数据进行测试:
可以看到目前的预测效果还比较差,接下来我把epoch和lr(学习率)稍作调整,结果如下:
由于时间原因,还有些后续步骤没有实现,后期会慢慢补上。
参考文献
[1] https://fasttext.cc/docs/en/supervised-tutorial.html