基于Web 的酒店评论文本观点抽取系统的设计与实现
2021-07-30刘立波
王 涛,刘立波
(宁夏大学 信息工程学院,宁夏 银川 750021)
酒店在线评论文本客观真实地反映了消费者入住体验,是消费者对酒店服务的真实感知,其中包含大量评论观点,及时有效获取评论观点对酒店经营具有很高的价值。酒店评论文本观点抽取是抽取酒店属性词与评价词组合而成的短语。属性词通常为描述酒店的某一特征。评价词是用来表达消费者的观点态度,多数是形容词,但也有少量具有情感倾向的名词或动词[1]。例如酒店评论中的一个评论句子:“服务专业热情,房间设备干净整洁完善,自助早餐品种众多”。其中,“服务”、“房间设备”、“自助早餐品种”是属性词,“专业热情”、“干净整洁完善”、“众多”是评价词,它们分别被用来表达消费者对该酒店“服务”、“房间”、“自助早餐”满意的态度。
目前,评论观点抽取方法一般分为两大类:一类是基于传统自然语言处理技术的方法,这类方法将词性、句法依存信息等作为表征句子的特征信息,从而制定观点抽取规则抽取评论中观点。例如,Hu 等[2]首次提出使用关联规则实现观点抽取,只能显式地抽取评论文本中部分观点;Li 等[3]使用依存关系从影评中抽取“评价对象-评价意见”单元对;Qiu 等[4]利用依存关系获得属性词与评价词之间的关系模板,从而根据属性词抽取评价词,根据评价词抽取属性词。以上基于规则的方法依赖于领域专家制定的规则,规则多而复杂,人工构造难,且迁移性差,无法抽取规则之外的属性。另一类是近几年流行起来的神经网络方法,这类方法利用神经网络的结构性质对句子建模表征后抽取观点。例如,Liu 等[5]首次将长短期记忆网络应用于观点抽取任务,相较于根据规则抽取观点的方法,该方法取得了更优的性能。2016 年,Toh 等[6]提出将双向循环神经网络与CRF相结合的方法,在SemEval 属性级情感分析评测任务中性能达到最优。尽管如此,第二类方法需人工标注数据训练模型,存在评论数据量大、标注工作繁重等问题,且数据集质量易受主观标注影响。总之,这两类方法前期都需人工处理数据,耗费了大量的时间和精力。
针对上述问题,该系统基于Web 技术,以酒店评论文本观点抽取为研究对象,利用聚类的方法,采用Django 框架对系统功能模块进行封装,实现了酒店评论文本观点的快速抽取。无论是对消费者选择酒店的效率,还是酒店经营者管理酒店的效率,都有很大程度上的提升。
1 数据收集
该系统采用的酒店评论数据爬取自大众点评门户网站,去除用户名、时间等网页结构元素后,评论语句数据量可达57 805 条,共55 家酒店评论文本,单个酒店评论数量最多有5 468 条,最少有5 条。为了保证聚类的效果,去除了评论条数少于10 的酒店。经过上述处理后,评论语句文本数据总量共57 733 条,共46 家酒店评论数据,单个酒店评论数量最多有5 468 条,最少有11 条,符合实验要求。
2 系统设计
该系统采用B/S 架构,共分导航层、后台离线分析层、前端展示层和数据层4 层。导航层主要作用是为用户提供清晰的导航,方便用户操作;后台离线分析层和前端展示层采用后台离线分析-前端延迟查询的方法,旨在消除后台耗时分析操作对用户体验的影响。其中,后台离线分析层由评论文本预处理、构建句向量、降维和聚类、冗余观点合并5 个模块组成。数据层存储由后台离线分析得到的数据,为前端展示延迟查询提供数据支持,系统流程见图1。
图1 系统流程
3 系统实现
3.1 文本预处理
数据预处理主要分为数据清洗及长句切分2 个部分。(1)数据清洗:去除评论语句中的网页标签、表情等特殊字符、非中文字符(不包括标点符号)、停用词,旨在消除数据噪声对实验结果的影响[7—9]。(2)长句切分:由于一条评论语句中包含了消费者对酒店不同属性的评价,如“服务专业热情,房间设备干净整洁完善,自助早餐品种众多”,该评论语句中包含了消费者对酒店“服务”、“房间设备”、“自助早餐品种”等属性的评价,为了完整地提取出评论语句中不同的观点,按标点符号将长句切分为短句,并记录下由原始评论语句索引、短句在原评论语句中的位置索引及短句内容组成的三元组,示例见表1。
表1 长句切分结果表
3.2 构建句向量
计算机无法直接对文本进行计算,需将文本转化为向量表示才能计算文本中的信息。构建句向量分为以下3 步:
(1)对于一个待抽取短句S={w1,w2,…,wn},初始化每个词的分布式表示;
(2)采用word2vec 模型训练词向量wi={wv1,wv2,…,wv300}(i=1,2,3,…,n)作为词义的分布式表示;
(3)由于一个短句中包含多个词语,因此可将各个短句中每一个词向量求和取平均数,如式(1)所示,构建一维度为300 的短语句向量SV={ v1,v2,…,v300}。
式(1)中:SV 为短语句向量;wi为词向量;n 为短语句中的单词数。
3.3 降维和聚类
为了提升酒店评论文本观点的抽取速率,通过对中文评论文本观点抽取方法的研究,采用降维和聚类的方法对观点进行抽取。降维聚类流程见图2。首先,采用t-SNE 算法(T 分布和随机近邻嵌入算法)将300 维短语句向量降至2 维,缓解了维度灾难导致观点提取速度慢的问题;然后,采用DB-SCAN聚类算法(具有噪声的基于密度的聚类算法)对2维短语句向量进行聚类。为了使聚类效果达到最佳,采用Calinski-Harabasz 系数作为评价指标,用网格搜索法设置DB-SCAN 聚类算法的参数值:样本的邻域距离阈值和样本的距离阈值内的邻域中样本个数阈值,作DBSCAN 聚类参数调整图(图3),取离散点个数少、Calinski-Harabasz 系数高位置所在的参数作为DBSCAN 聚类算法的参数;接着,经式(2)计算每一簇中一向量与其余向量的欧式距离之和di:
图2 降维聚类流程图
图3 DBSCAN 聚类参数调整图
式中,n 为每一簇中短句的数量;(xi,yi)为短语句向量,取距离之和最小者min(d1,d2,d3,…,dn) 作为中心句。最后,统计每一簇中心句所对应类别的数量。
3.4 冗余观点合并
因为聚类得到的类别“长尾”现象严重,即观点冗余度大,如“交通方便”与“交通便利”、“早餐丰盛”与“早餐丰富”、“服务很好”与“服务优”等观点相关度很大,所以需要对冗余的观点进行合并处理。首先,计算观点间的Pearson 相关系数,然后设定Pearson 相关系数的阈值,将大于设定阈值的观点合并,并选择对应评论语句数量较多的观点作为冗余观点的中心句,累加冗余观点的数量,合并公式:
式中,Nview为观点对应的评论语句数量;Nviewi为除观点view 外其他观点viewi对应的评论语句数量;P=Pearson(view,viewi)(view≠viewi)为观点view 与其余观点viewi的Pearson 相关系数;th 为阈值;最后,将原始评论语句索引、短句在原评论语句中的位置索引、簇标签存入MySQL 数据库,为观点标注和展示作准备。
3.5 观点标注和展示
观点标注和展示即标注出所有观点在评论语句中出现的位置和展示观点抽取的结果。为了能直观展示观点标注和抽取结果,首先,采用HTML5 语言对前端界面进行设计,并使用AmazeUI 对界面进行美化;然后,前端采用延迟查询的方法从MySQL数据库中查找上传评论文本对应的观点、观点对应评论数量、原始评论语句索引、短句位置索引、簇标签等属性,将其组织成json 数据,通过Django 框架中的request 对象将json 数据传递到前端,采用JavaScript 语言解析并展示前端界面。
4 系统测试
4.1 冗余观点合并测试
该次测试是通过人工分析使用Pearson 相关系数合并冗余观点后的结果,判断经冗余观点合并处理后是否解决了观点冗余度大的问题,部分冗余观点合并结果见表2。中心句“服务很好”对应的“服务热情”、“服务好”等观点都在语义上一致,因此冗余观点合并效果良好。
表2 冗余观点合并结果表
4.2 界面测试
界面测试主要测试界面的2 个方面:①界面一致性,测试使用HTML 语言设计编写并使用AmazeUI 美化的界面是否和预期的界面一致;②数据处理正确性,测试jsp 代码是否能正确处理后台传递到前端的数据。界面测试结果见图4。界面设计能达到预期要求,且数据显示正常。
图4 界面测试结果图
4.3 性能测试
为了测试系统的负载承受能力,防止系统在处理大量数据时出现系统崩溃或“假死”现象,选取评论数量最多的酒店评论文本,共5 468 条酒店评论语句进行观点抽取性能测试,测试系统运行时间、CPU占用率、内存消耗。性能测试结果见表3,对5 468 条评论语句,该系统平均能在0.03 s 内完成每条评论语句观点的抽取,观点抽取速度快,所耗资源少。相较于人工标注寻找评论观点的方式,效率明显提升。
表3 性能测试结果表
5 结论
本文设计的基于Web 的酒店评论文本观点抽取系统采用聚类的方法,避免繁重的数据处理工作,实现了酒店评论文本观点的快速抽取。实验结果表明,对于5 468 条评论,该系统能在157.81 s 内完成酒店评论观点的抽取,相较于人工构建抽取规则及标注数据集训练模型的方式,效率显著提升,满足实际需求。
然而,该系统尚处于开发测试阶段,仍存在一些不足:一是忽视了隐性冗余观点的合并,“交通便利”与“靠近火车站”等在潜在语义上冗余的观点也需要进行合并,以提升系统的可靠性;二是对评论数量较少的酒店,该系统只是做了简单的去除操作,对系统泛化能力有一定的影响。今后工作将围绕这两个不足展开,提出良好的解决方法,打造更加完美的酒店评论文本观点抽取系统。