情感分析是对带有情感色彩(褒义贬义/正向负向)的主观性文本进行分析,以确定该文本的观点、喜好、情感倾向。本文将针对顾客对酒店的评论数据,进行建模,并通过模型进行预测。演示情感分析中的常用操作,包括分词,文本向量化,及使用朴素贝叶斯(Naive Bayes)方法进行建模、预测。
使用的酒店评论数据集链接为:
https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv
每条记录包括评论内容和标记喜好的标签,标签只有2个值:1代表喜欢,0为不喜欢。下图显示了4条数据:
下面我们使用Alink来进行分析、建模。
▼ 钉钉扫码加入 Alink 技术交流群 ▼
Python 版本 Alink 分析示例
使用CsvSourceBatchOp读取URL数据,代码如下:
source = CsvSourceBatchOp()\
.setFilePath('https://github.com/SophonPlus/ChineseNlpCorpus/raw/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv')\
.setSchemaStr('label long, review string')\
.setIgnoreFirstLine(True)
设置列名分别为label和review,数据类型分别为整型和字符串类型,由于该CSV数据第一行保存的是列名,需要设置读取数据时忽略第一行。
下面,我们选择5条数据打印显示出来,看一下数据源是否有问题:
source.firstN(5).print()
结果如下:
然后,我们设置Pipeline,将整个处理和模型过程封装在里面,代码如下:
pipeline = Pipeline(
Imputer().setSelectedCols(["review"]).setOutputCols(["featureText"]).setStrategy("value").setFillValue("null"),
Segment().setSelectedCol("featureText"),
StopWordsRemover().setSelectedCol("featureText"),
DocCountVectorizer().setFeatureType("TF").setSelectedCol("featureText").setOutputCol("featureVector"),
LogisticRegression().setVectorCol("featureVector").setLabelCol("label").setPredictionCol("pred"