当前位置: 代码迷 >> 综合 >> fastText 文本分类
  详细解决方案

fastText 文本分类

热度:83   发布时间:2023-12-16 22:08:39.0

fastText

    • 文本分类
    • 什么是文本分类?
    • 安装使用fastText
    • 参考文献

文本分类

??文本分类是许多应用程序的核心问题,如垃圾邮件检测,情绪分析或智能回复。 在本教程中,我们将介绍如何使用fastText工具构建文本分类器。

什么是文本分类?

??文本分类的目标是将文档(例如电子邮件,帖子,文本消息,产品评论等)分配给一个或多个类别。 这些类别可以是评论分数,垃圾邮件vs. 非垃圾邮件或输入文档的语言。 如今,构建此类分类器的主要方法是机器学习,即从示例中学习分类规则。 为了构建这样的分类器,我们需要标记数据,其由文档及其对应的类别(或标签或标签)组成。

??作为一个例子,我们构建了一个分类器,它自动将StackExchange有关烹饪的问题分类为几个可能的标签之一,例如:potbowl 或者 baking

安装使用fastText

??本教程的第一步是安装和构建fastText。 它只需要一个c ++编译器,并且支持c ++ 11。

  1. 运行环境
    Ubuntu 16.04 + 16G内存
  2. 让我们从下载最新版本开始:
$ wget https://github.com/facebookresearch/fastText/archive/v0.2.0.zip
$ unzip v0.2.0.zip
  1. 下载并解压后如图所示:
    fastText
  2. 进入到fastText-0.2.0目录,并编译它,编译后结果如下:
$ cd fastText-0.2.0
$ make

builded
提示:data和pre_train_model目录是我后来新建的,正常情况下都是可以一次性安装成功的。

  1. 不带任何参数运行二进制文件将打印高级文档,显示fastText支持的不同用例:
    ./fastText
  2. 在本教程中,我们主要使用监督测试预测子命令,这些子命令对应于学习(和使用)文本分类器。 有关fastText的其他功能的介绍,请参阅有关学习词向量的教程。
  3. 数据获取和准备
    如引言中所述,我们需要标记数据来训练我们的监督分类器。 在本教程中,我们感兴趣的是构建一个分类器来自动识别有关烹饪的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识别什么是标签或什么是单词的方式。 然后训练该模型以预测给定文档中的单词的标签。
??在训练我们的第一个分类器之前,我们需要将数据分成训练和验证。 我们将使用验证集来评估学习分类器对新数据的好坏程度。
result
我们的完整数据集包含15404个示例。 让我们将它分成12404个示例的训练集和3000个示例的验证集:
result

  1. 构建我们的第一个分类器
    result
    -input命令行选项指示包含训练示例的文件,而-output选项指示保存模型的位置。 在训练结束时,在当前目录中创建包含训练分类器的文件model_cooking.bin。
    通过运行命令,可以交互式地直接测试我们的分类器:
    result
    该模型预测的标签是食品安全,这是不相关的。 不知何故,该模型似乎在简单的例子上失败了。 为了更好地了解其质量,我们通过运行以下方法对验证数据进行测试:
    validate
    可以看到目前的预测效果还比较差,接下来我把epoch和lr(学习率)稍作调整,结果如下:
    参数调整
    由于时间原因,还有些后续步骤没有实现,后期会慢慢补上。

参考文献

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