分步教程,使用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 one
of 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
表示该星级是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
在本教程中,我们主要使用有supervised
, test
和predict
子命令,它们对应于学习(和使用)文本分类器。
训练模型
以下命令用于训练用于文本分类的模型:
./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%的精确召回率,并且模型在非常短的时间内得到了训练。
N 400000
P@ 1 0.913
R@ 1 0.913
Number of examples: 400000
在Amazon.com上对产品进行实时客户评论的情绪分析
Scrape Amazon客户评论
我们使用现有的python库从页面抓取评论。
要设置模块,请在命令提示符/终端中输入:
pip install 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。
From: https://hackernoon.com/text-classification-simplified-with-facebooks-fasttext-b9d3022ac9cb