情感分析是对带有情感色彩(褒义贬义/正向负向)的主观性文本进行分析,以确定该文本的观点、喜好、情感倾向。本文将针对顾客对酒店的评论数据,进行建模,并通过模型进行预测。演示情感分析中的常用操作,包括分词,文本向量化,及使用朴素贝叶斯(Naive Bayes)方法进行建模、预测。
使用的酒店评论数据集链接为:https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv
将数据下载到本地,在本人Mac上的存储路径为: /Users/yangxu/alink/data/ChnSentiCorp_htl_all.txt
每条记录包括评论内容和标记喜好的标签,标签只有2个值:1代表喜欢,0为不喜欢。下图显示了4条数据:
下面我们使用Alink来进行分析、建模。
使用CsvSourceBatchOp读取URL数据,代码如下:
source = CsvSourceBatchOp()\ .setFilePath('/Users/yangxu/alink/data/ChnSentiCorp_htl_all.txt')\ .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") )
解释一下各个算法组件的作用:
下面,我们就可以进入模型训练阶段。通过Pipeline的fit()方法,可以得到整个流程的模型(PipelineModel),记作变量model,代码如下:
model = pipeline.fit(source)
使用model可以对批式/流式数据进行预测,都是调用model的transform()方法。
model.transform(source).select(["pred", "label", "review"]).firstN(10).print()
运行结果为: