Flink基于Alink中文情感分析示例(Java版本)

使用Alink平台和Logistic Regression模型,对酒店评论数据进行情感分析,实现文本的情感倾向预测。

Alink是基于Flink的机器学习算法平台,欢迎访问Alink的github获取下载链接及更多信息。

alibaba/Alinkgithub.com

情感分析是对带有情感色彩(褒义贬义/正向负向)的主观性文本进行分析,以确定该文本的观点、喜好、情感倾向。本文将针对顾客对酒店的评论数据,进行建模,并通过模型进行预测。演示情感分析中的常用操作,包括分词,文本向量化,及使用朴素贝叶斯(Naive Bayes)方法进行建模、预测。 

使用的酒店评论数据集链接为:raw.githubusercontent.com

每条记录包括评论内容和标记喜好的标签,标签只有2个值:1代表喜欢,0为不喜欢。下图显示了4条数据:

下面我们使用Alink来进行分析、建模。 

首先,我们需要一个Alink的Java工程,配置好相关环境。

最简单的办法是使用Alink的example工程,下载Alink git的代码,并用Jave IDE打开项目

如下图所示,可以看到三个已经写好的示例:ALSExample, GBDTExample, KMeansExample.

我们在com.alibaba.alink package下新建一个Java文件:

package com.alibaba.alink;

public class SentimentHotelSimpleExample {

	public static void main(String[] args) throws Exception {

	}
}

使用CsvSourceBatchOp读取URL数据,代码如下。

设置列名分别为label和review,数据类型分别为整型和字符串类型,由于该CSV数据第一行保存的是列名,需要设置读取数据时忽略第一行。

CsvSourceBatchOp source = new CsvSourceBatchOp()
	.setFilePath("https://github.com/SophonPlus/ChineseNlpCorpus/raw/master/datasets"
		+ "/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv")
	.setSchemaStr("label int, review string")
	.setIgnoreFirstLine(true)
source.firstN(5).print();

最后一行代码是选择5条数据打印显示出来,结果如下:

labelreview
0携程订单上写明:“房型特点:一张1.32,另一张1.12米,无法加床全部房间有免费宽带”,实际入住后见到的房间是我所见过的最小的标准间,两个床尺寸相同,床的两边均靠着墙,没有一点多余的空间,甚至连放行李的地方也没有,更不要提什么橱了,跟酒店提出与所订房间不同,他们说我们订的房间空调坏了,只能换这个房间,价格一样。我不知道这是酒店的欺诈还是携程的欺诈,我要求得到赔偿。如果需要证据的话,我有实拍的房间照片。另外,建议大家不要出泰山旅游,几乎一半的酒店会不定时,无预警的停电。
0洗澡竟然没有热水!!太郁闷了第二天还要爬山啊!!不过网速还可以
0我要求里写了要安静的房间。。谁知道那天住在6楼,外面的风,凄惨的吹着,声音很大,一个小时才入睡。让酒店换房间。他们说,酒店周围没有树,每间房间声音都很大。。赫赫,这里理由么?看来下次,起风的时候就不能去住了。
0过了好久才想起来评价,记得离火车站超级近,不过方便的同时必然会觉得比较吵。韩日旅游团住这里的很多,前台服务冷淡。两个人住标准间,只给一张房卡,还很挑衅的看我。气的没心情。宾馆反馈2008年7月17日:酒店针对客人提出的问题,现已认真整改,希望每一位入住渤海明珠酒店的您都能高兴入住,满意而归。
0酒店在铁路旁,晚上火

然后,我们设置Pipeline,将整个处理和模型过程封装在里面,代码如下:

Pipeline pipeline = new Pipeline(
        new Imputer()
            .setSelectedCols("review")
            .setOutputCols("featureText")
            .setStrategy("value")
            .setFillValue("null"),
        new Segment()
            .setSelectedCol("featureText"),
        new StopWordsRemover()
            .setSelectedCol("featureText"),
        new DocCountVectorizer()
            .setFeatureType("TF")
            .setSelectedCol("featureText")
            .setOutputCol("featureVector"),
        new LogisticRegression()
            .setVectorCol("featureVector")
            .setLabelCol("label")
            .setPredictionCol("pred")
    );

解释一下各个算法组件的作用:

•Imputer:对“review”列进行缺失值填充,方式是填充字符串值“null”,结果写到“featureText“列。•Segment:是进行分词操作,即将原句子分解为单词,之间用空格分隔。由于没有输入结果列,分词结果会直接替换调输入列的值。•StopWordsRemover:是将分词结果中的停用词去掉。•DocCountVectorizer:对“featureText“列出现的单词进行统计,并根据计算出的TF值,将句子映射为向量,向量长度为单词个数,并保存在"featureVector"列。•LogisticRegression:是使用LogisticRegression分类模型。分类预测放在“pred” 列。

下面,我们就可以进入模型训练阶段。通过Pipeline的fit()方法,可以得到整个流程的模型(PipelineModel),记作变量model,代码如下:

PipelineModel model = pipeline.fit(source);

使用model可以对批式/流式数据进行预测,都是调用model的transform()方法。

model.transform(source)
	.select(new String[]{"pred","label","review"})
	.firstN(10)
	.print();

运行结果为:

predlabelreview
11酒店服务真的很好,房间也很整洁。从阳台可以看到海景,海上有好多停着的船只,蛮有感觉的。自助早餐很不错,品种还是蛮丰富的。
11洗了衣服本挂在洗手间的,等外出回来,已经拿架子挂在阳台上!满意服务态度一流,看到的全是笑脸!开心房间虽然设施老化,但很干净!安心海景不错!爽
11非常好的地理位置,住的是豪华海景房,打开窗户就可以看见栈桥和海景。记得很早以前也住过,现在重新装修了。总的来说比较满意,以后还会住
11我也是通过比较携程的用户评论选择海景的,是第一次住。总体感觉很好,房间硬件一般但很干净,每天有水果、糖果赠送,第一天还送玩偶,小孩子很喜欢。特别要提的是酒店服务很周到,餐饮和包车的价格也很公道,我们在酒店吃了两次晚餐都非常的满意,人均消费在30元左右(含酒水的哦)。同去的朋友都很满意,下次去威海还会住海景的。补充点评2008年7月29日:这里的工作人员各个彬彬有礼,作为一家国有企业实在难能可贵。例如,我早餐后刚在大堂的沙发坐下,服务员立即给我送上茶水和毛巾;我们在二楼公共休息区打牌,服务员见天色将黑,就主动把灯打开......
11再次入住海景花园大酒店仍感亲切,酒店员工热情不减,服务还是这样的到位,我入住过的威海其他几家四星酒店与它相比,服务不在一个档次上,海景花园确实不错,下次我还是会入住.我要提的意见是,酒店客房空调不太制冷,服务不能在这些地方留有瑕疵,希望得到改进.
11非常好的服务,虽然酒店挂牌4星,但服务不比5星差,整个酒店的服务员都很热情,你所见到的每个人都会主动向你问好,该酒店在细节的服务上也做的非常好,如:你在大堂内入座,服务员马上会给你上茶水和毛巾,都是免费的哦;你下出租车,服务员马上会递给你一张卡片,上面有你所乘坐的出租车号码,以免你万一有什么事可以找的到那辆车(因威海出租车的发票上没有车号)。如果一定要找一些酒店的缺点,那就是酒店的餐厅上菜的速度较慢,而且不要点川菜,因厨师不太会做。但不管如何,下次我去威海,还是会去该酒店入住。
11确实不错!地点较佳,海景房正对栈桥和小青岛,不出房门,不用挤在旅游人群中,就能欣赏怡人海景;早餐较丰富且环境好,相对其价格,性价比高;一楼咖啡吧的简餐价格不高,味道较好,份量足(特别是三明治、热狗),是住客和非住店游客解决简单一餐或作为点心的好选择;宾馆楼道里的点心较受欢迎,品种多,质量高,而且添加及时,深受孩子喜爱;就是床略小(指带一个孩子睡的话)。总之,总体感觉好,推荐入住。
11位置便利,价格便宜,服务周到,环境幽美!谢谢!
11挺不错的酒店,每次去盐城都住在这里,价格便宜量又足!
11还不错酒店,就餐和出行都很方便。服务态度也比较好

附录完整的Java代码如下:

package com.alibaba.alink;


import com.alibaba.alink.operator.batch.source.CsvSourceBatchOp;
import com.alibaba.alink.pipeline.Pipeline;
import com.alibaba.alink.pipeline.PipelineModel;
import com.alibaba.alink.pipeline.classification.LogisticRegression;
import com.alibaba.alink.pipeline.dataproc.Imputer;
import com.alibaba.alink.pipeline.nlp.DocCountVectorizer;
import com.alibaba.alink.pipeline.nlp.Segment;
import com.alibaba.alink.pipeline.nlp.StopWordsRemover;


public class SentimentHotelSimpleExample {


    public static void main(String[] args) throws Exception {
        CsvSourceBatchOp source = new CsvSourceBatchOp()
            .setFilePath("https://github.com/SophonPlus/ChineseNlpCorpus/raw/master/datasets"
                + "/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv")
            .setSchemaStr("label int, review string")
            .setIgnoreFirstLine(true);


        //source.firstN(5).print();


        Pipeline pipeline = new Pipeline(
            new Imputer()
                .setSelectedCols("review")
                .setOutputCols("featureText")
                .setStrategy("value")
                .setFillValue("null"),
            new Segment()
                .setSelectedCol("featureText"),
            new StopWordsRemover()
                .setSelectedCol("featureText"),
            new DocCountVectorizer()
                .setFeatureType("TF")
                .setSelectedCol("featureText")
                .setOutputCol("featureVector"),
            new LogisticRegression()
                .setVectorCol("featureVector")
                .setLabelCol("label")
                .setPredictionCol("pred")
        );


        PipelineModel model = pipeline.fit(source);


        model.transform(source)
            .select(new String[] {"pred", "label", "review"})
            .firstN(10)
            .print();
    }


}
用户画像,作为一种勾画目标用户、联系用户诉求与设计方向的有效工具,用户画像在各领域得到了广泛的应用。用户画像最初是在电商领域得到应用的,在大数据时代背景下,用户信息充斥在网络中,将用户的每个具体信息抽象成标签,利用这些标签将用户形象具体化,从而为用户提供有针对性的服务。还记得年底收到的支付宝年度消费账单吗?帮助客户回顾一年的消费细节,包括消费能力、消费去向、信用额度等等,再根据每位客户的消费习惯,量身定制商品推荐列表……这一活动,将数据这个量化的词以形象生动的表现手法推到了大众面前。这就是用户画像在电商领域的一个应用,随着我国电子商务的高速发展,越来越多的人注意到数据信息对于电商市场的推动作用。基于数据分析的精准营销方式,可以最大限度的挖掘并留住潜在客户,数据统计与分析为电商市场带来的突破不可估量。在大数据时代,一切皆可“量化”,看似普通的小小数字背后,蕴藏着无限商机,也正在被越来越多的企业所洞悉。如何从大数据中挖掘商机?建立用户画像和精准化分析是关键。什么是用户画像呢?用户画像是根据市场研究和数据,创建的理想中客户虚构的表示。创建用户画像,这将有助于理解现实生活中的目标受众。企业创建的人物角色画像,具体到针对他们的目标和需求,并解决他们的问题,同时,这将帮助企业更加直观的转化客户。用户画像最重要的一个步骤就是对用户标签化,我们要明确要分析用户的各种维度,才能确定如何对用户进行画像。用户画像建立步骤首先,基础数据收集,电商领域大致分为行为数据、内容偏好数据、交易数据,如浏览量、访问时长、家具偏好、回头率等等。而金融领域又有贷款信息,信用卡,各种征信信息等等。然后,当我们对用户画像所需要的基础数据收集完毕后,需要对这些资料进行分析和加工,提炼关键要素,构建可视化模型。对收集到的数据进行行为建模,抽象出用户的标签。电商领域可能是把用户的基本属性、购买能力、行为特征、兴趣爱好、心理特征、社交网络大致的标签化,而金融风控领域则是更关注用户的基本信息,风险信息,财务信息等等。随后,要利用大数据的整体架构对标签化的过程进行开发实现,对数据进行加工,将标签管理化。同时将标签计算的结果进行计算。这个过程中需要依靠Hive,Hbase等大数据技术,为了提高数据的实时性,还要用到Flink,Kafka等实时计算技术。最后,也是最关键的一步,要将我们的计算结果,数据,接口等等,形成服务。比如,图表展示,可视化展示。基于Flink+Alink构建全端亿级实时用户画像系统课程,将带领大家一步一步实现一个强大的实时用户画像系统,该系统以热门的互联网电商实际业务应用场景为案例讲解,具体包含:标签管理(支持动态标签扩展,动态标签指标)、用户预测、用户群体画像、用户行为画像、用户中心、几大内容。本课程采用全新的大数据技术栈:Flink+Alink,让你体验到全新技术栈的强大,感受时代变化的气息,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.13.0Alink1.5.0 ClickHouseDolphinSchedulerHadoopHbaseKafkaZookeeper SpringBoot2.0.8.RELEASE SpringCloud Finchley.SR2BinlogCanal MySQL MybatisVue.js、Nodejs、ElementUI 课程亮点: 1.与企业接轨、真实工业界产品2.标签化管理模块功能,支持动态标签扩展3.动态标签指标分析和维护4.Alink算法技术框架 5.大数据热门技术Flink版本 6.主流微服务后端系统 7.数据库实时同步解决方案 8.涵盖主流前端技术VUE+NodeJS+ElementUI 9.集成SpringCloud实现统一整合方案 10.互联网大数据企业热门技术栈 11.支持海量数据的实时画像 12.支持全端实时画像 13.全程代码实操,提供全部代码和资料 14.提供答疑和提供企业技术方案咨询 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值