fasttext 文本分类_使用Facebook的FastText简化了文本分类

fasttext 文本分类

分步教程,使用FastText API分析Amazon产品评论的情绪

该博客提供了详细的分步教程,以使用FastText进行文本分类。 为此,我们选择在Amazon.com上对客户评论进行情感分析,并详细说明如何抓取特定产品的评论,以便对其动手进行情感分析,然后可以对其结果进行分析以决定购买前,根据给定的反馈,确定产品的质量。

什么是FastText?

文本分类已成为商业世界的重要组成部分; 无论是用于垃圾邮件过滤还是用于分析电子商务网站的tweet sor客户评论的情绪,这可能是最普遍的示例。

FastText是由Facebook AI Research(FAIR)开发的开放源代码库,专门致力于简化文本分类。 FastText能够在多核CPU上不到十分钟的时间内训练数百万个示例文本数据,并使用训练后的模型在不到五分钟的时间内对300,000多个类别中的原始看不见的文本进行预测。

预训练数据集

从Kaggle.com获得的人工注释的亚马逊评论数据集(包含数百万条评论)被收集,并在转换为FastText格式后用于训练模型。

FastText的数据格式如下:

__label__< X > __label__ < Y > ... < Text >

其中X和Y代表类别标签。

在我们使用的数据集中,我们将评论标题放在评论之前,并用' : '和一个空格分隔。

下面提供了来自训练数据文件的样本,可以在Kaggle.com网站上找到用于训练和测试模型的数据集。

__label__2 Great CD: My lovely Pat has oneof the GREAT voices of her generation. 
I have listened to this CD for YEARS and I
still LOVE IT. When I 'm in a good mood it
makes me feel better. A bad mood just
evaporates like sugar in the rain. This CD
just oozes LIFE. Vocals are jusat STUUNNING
and lyrics just kill. One of life 's hidden
gems. This is a desert isle CD in my book.
Why she never made it big is just beyond me .
everytime I play this, no matter black,
white, young, old, male, female EVERYBODY
says one thing "Who was that singing ?"

在这里,我们只有两个等级1和2,其中__label__1表示审阅者对该产品给出了1颗或2颗星,而__label__2表示该__label__2是4颗或5颗星。

训练FastText进行文本分类

预处理和清理数据

在规范化文本大小写并删除不需要的字符后,执行以下命令以生成经过预处理和清理的训练数据文件。

cat <path to training file > | sed - e 
“s/\([.\!?,’/()]\)/ \ 1 /g” | tr “[:upper:]”
“[:lower:]” > 
<path to pre -processed output file >

设置FastText

让我们从下载最新版本开始

$  wget https://github.com/facebookresearch/fastText/archive/v0.1.0.zip
$  unzip v0.1.0.zip

移至fastText目录并进行构建:

$  cd fastText-0.1.0
$  make

运行不带任何参数的二进制文件将打印高级文档,显示fastText支持的不同用例:

>> ./fasttext
usage: fasttext <command > < args >
The commands supported by fasttext are:
  supervised              train a supervised classifier
  quantize                quantize a model to reduce the memory usage
  test                    evaluate a supervised classifier
  predict                 predict most likely labels
  predict-prob            predict most likely labels with probabilities
  skipgram                train a skipgram model
  cbow                    train a cbow model
  print- word -vectors      print word vectors given a trained model
  print- sentence -vectors  print sentence vectors given a trained model
  nn                      query for nearest neighbors
  analogies               query for analogies

在本教程中,我们主要使用supervisedtestpredict子命令,它们对应于学习(和使用)文本分类器。

训练模型

以下命令用于训练文本分类模型:

./fasttext supervised -input 
< path to pre-processed training file> -output
< path to save model> -label __label__ 

-input命令行选项引用训练文件,而-output选项引用保存模型的位置。 训练完成后,将在给定位置创建一个包含受过训练的分类器的文件model.bin

用于改进模型的可选参数

训练的时代越来越多

默认情况下,模型在每个示例上训练了5个时期,为了增加此参数以进行更好的训练,我们可以指定-epoch参数。

例:

./fasttext supervised -input 
< path to pre-processed training file> -output 
< path to save model> -label __label__ -epoch 50

指定学习率

改变学习速度意味着改变我们模型的学习速度就是增加(或减少)算法的学习速度。 这对应于在处理每个示例后模型变化了多少。 学习率为0意味着该模型完全不会改变,因此不会学习任何东西。 良好的学习率值在0.1 - 1.0的范围内。

lr的默认值为0.1。 这是我们指定此参数的方式。

./fasttext supervised -input 
<path to pre -processed training file > -output
 <path to save model> -label __label__ - lr 0.5

使用n-gram作为特征

对于取决于单词顺序的问题,尤其是情感分析,这是一个有用的步骤。 将指定在n大小的窗口中连续标记的串联用作训练功能。

我们为此指定-wordNgrams参数(理想值为2到5之间):

./fasttext supervised -input 
< path to pre-processed training file> -output 
< path to save model> -label __label__ -wordNgrams 3

测试和评估模型

以下命令用于在预先注释的测试数据集上测试模型,并将原始标签与每个评论的预测标签进行比较,并以精度和召回值的形式生成评估得分。

精度是fastText预测的标签中正确标签的数量。 召回是成功预测的标签数量。

./fasttext test <path to model> < path to test file> k

其中参数k表示该模型将预测每次评论的前k个标签。

在400000条评论的测试数据上评估我们训练有素的模型所获得的结果如下。 如所观察到的,获得了91%的精确召回率,并在非常短的时间内对模型进行了训练。

N400000
P@ 1 0.913
R@ 1 0.913
Number of examples: 400000

在Amazon.com上对产品进行实时客户评论的情绪分析

Scrape Amazon客户评论

我们使用现有的python库从页面抓取评论。

要设置模块,请在命令提示符/终端中输入:

pipinstall amazon-review-scraper

给定网页的网址,这是一个示例代码,可用于抓取特定产品的评论:

from amazon_review_scraper import amazon_review_scraper

url = input( "Enter URL: " )
start_page = input( "Enter Start Page: " )
end_page = input( "Enter End Page: " )
time_upper_limit = input( "Enter upper limit of time range (Example: Entering the value 5 would mean the program will wait anywhere from 0 to 5 seconds before scraping a page. If you don't want the program to wait, enter 0): " )
file_name = "amazon_product_review"

scraper = amazon_review_scraper.amazon_review_scraper(url, start_page, end_page, time_upper_limit)
scraper.scrape()
scraper.write_csv(file_name)

注意 :在输入特定产品的客户评论页面的URL时,请确保附加&pageNumber=1如果尚不存在),以使&pageNumber=1器正常运行。

上面的代码从给定的URL中刮取评论,并以以下格式创建输出的csv文件:

数据集链接

从上面的csv文件中,我们提取“标题”和“正文”,并将它们附加在一起,并用':和训练文件中的空格隔开,并将它们存储在单独的txt文件中,以预测情绪。

搜集数据的情绪预测

./fasttext predict <path to model> 
< path to test file> 
k > < path to prediction file>

其中k表示该模型将预测每次评论的前k个标签。

为上述评论预测的标签如下:

__label__ 2
__label__ 1
__label__ 2
__label__ 2
__label__ 2
__label__ 2
__label__ 2
__label__ 2
__label__ 1
__label__ 2
__label__ 2

手动验证的结果非常准确。 然后可以将预测文件用于进一步的详细分析和可视化目的。

因此,在此博客中,我们学习了如何使用FastText API进行文本分类,如何针对给定产品抓取Amazon客户评论以及如何使用经过训练的模型来预测他们的情绪以进行分析。

如果您有任何疑问或建议,我想听听。 请写信给我abhishek.narayanan@dataturks.com。

翻译自: https://hackernoon.com/text-classification-simplified-with-facebooks-fasttext-b9d3022ac9cb

fasttext 文本分类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值