基于UIE的情感分析技术:一次用户体验的情绪探索

目录

 什么是情感分析?

 为什么情感分析对UIE重要?

如何进行情感分析?

 情感分析的挑战

安装环境

1. 快速体验:开箱即用的情感分析能力

1.1 语句级情感分析

1.2 属性级情感分析

1.3 多版本模型选择

2. 批量处理:从数据到情感分析可视化

2.1 数据描述

2.2 批量情感分析

2.3 情感分析可视化

3. 更进一步:结合业务分析经验,定制情感分析

3.1 数据描述

3.2 模型训练

3.3 模型评估

3.4 模型预测


情感分析(Sentiment Analysis)是近年来国内外研究的热点,旨在对带有情感色彩的主观性文本进行分析、处理、归纳和推理。情感分析具有广泛的应用场景,可以被应用于消费决策、舆情分析、个性化推荐等领域。

按照分析粒度可以大致分为三类:篇章级的情感分析(Document-Level Sentiment Classification)、语句级的情感分析(Sentence-Level Sentiment Classification)和属性级的情感分析(Aspect-Level Sentiment Classification)。其中属性级的情感分析又包含多项子任务,例如属性抽取(Aspect Term Extraction)、观点抽取(Opinion Term Extraction)、属性级情感分析(Aspect-Based Sentiment Classification)等。

PaddleNLP情感分析应用立足真实企业用户对情感分析方面的需求,同时针对情感分析领域的痛点和难点,基于前沿模型开源了细粒度的情感分析解决方案,助力开发者快速分析业务相关产品或服务的用户感受。针对情感分析应用,本项目不仅提供了基于Taskflow开箱即用的情感分析能力,还提供了从输入数据到情感分析结果可视化的能力,另外考虑到一些企业用户需要针对业务场景进行适配,本项目同时提供了完整的情感分析定制方案:数据标注 - 模型训练 - 模型测试 - 模型部署 - 情感分析可视化。

在用户界面工程(UIE)的实践中,理解用户的情绪变得越来越重要。情绪不仅影响用户与产品或服务的交互,而且还影响用户的满意度、忠诚度和最终的购买决定。情感分析是一种能够帮助我们理解用户情绪的技术。本文将深入探讨基于UIE的情感分析技术。

 什么是情感分析?

情感分析,也称为观点挖掘,是自然语言处理、文本挖掘和计算语言学的分支领域,旨在确定和提取写作中的主观信息。这些主观信息通常是作者的观点、评价、感受和情感。

 为什么情感分析对UIE重要?

在UIE中,我们的目标是创造出让用户满意的用户体验。用户的满意度受多种因素影响,其中包括他们的情绪。因此,通过情感分析,我们可以获得更深入的用户反馈,从而提升用户体验。

如何进行情感分析?

情感分析的一般步骤如下:

  • 数据收集:首先,我们需要收集包含用户反馈的数据。这可能来自用户调查、社交媒体、用户评论等。

  • 预处理:然后,我们需要将数据清洗和格式化,以便于后续的处理。

  • 特征提取:接着,我们需要从数据中提取出有意义的特征,这可能包括文本的单词、短语、句子结构等。

  • 模型训练:然后,我们使用机器学习算法来训练情感分析模型。这可能包括朴素贝叶斯、支持向量机、深度学习等算法。

  • 情感预测:最后,我们使用训练好的模型来预测新的用户反馈的情感。

 情感分析的挑战

尽管情感分析有很多潜力,但也存在一些挑战:

  • 讽刺和幽默:人们在交流中经常使用讽刺和幽默,这对情感分析来说是一个挑战。因为这需要理解语言的上下文和文化背景。

  • 多语言和方言:情感的表达方式在不同的语言和方言中可能会有所不同。因此,开发一个能够处理多语言和方言的情感分析系统是一个挑战。

  • 隐私和伦理:在收集和处理用户数据的过程中,我们需要考虑隐私和伦理问题。我们需要确保用户的数据是安全的,且用于合法和正当的目的。

安装环境

开始运行之前请先确保安装如下依赖。

In [ ]

!pip install -U paddlenlp
!pip install wordcloud==1.8.2.2

1. 快速体验:开箱即用的情感分析能力

本项目以通用信息抽取模型UIE为训练底座,提供了语句级情感分析和属性级情感分析能力、覆盖情感分类、属性抽取、观点抽取等常用情感分析能力,如下图所示。

图1 情感分析示例图

为方便用户体验和使用,本项目提供的情感分析能力已经集成到了 Taskflow,可以通过Taskflow开箱即用的的能力快速体验情感分析的功能。下面赶快体验一下吧~

1.1 语句级情感分析

In [ ]

from paddlenlp import Taskflow
from pprint import pprint

schema = ['情感倾向[正向,负向]']
senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema)
pprint(senta('蛋糕味道不错,店家服务也很好'))

1.2 属性级情感分析

除语句级情感分析之外,本项目同时支持属性级情感分析,包括属性抽取(Aspect Term Extraction)、观点抽取(Opinion Term Extraction)、属性级情感分析(Aspect Based Sentiment Classification)等等。可以通过设置相应的schema进行对应信息的抽取,其调用示例如下。

In [ ]

from paddlenlp import Taskflow
from pprint import pprint

schema =  [{"评价维度":["观点词", "情感倾向[正向,负向,未提及]"]}]
senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema)
pprint(senta('蛋糕味道不错,店家服务也很热情'))

更进一步地,在某些业务场景中,特别是一些垂域场景,用户可能比较关注固定的某些属性。在这种情况下,可以预先提供相应的属性集合,则本项目将只会在该属性集上进行情感分析,分析和抽取该集合中各个属性的信息。

针对固定属性的情感分析示例如下,需要将属性集合传入参数 aspects 中,后续将只针对这些属性进行分析。可以看到在示例中,传入了属性 房间,位置 和 价格,针对 房间 和 价格 均分析到了观点词和情感倾向,但是位置由于在样本中并未提及,因此相应观点词为空,情感倾向为 未提及。

In [ ]

from paddlenlp import Taskflow
from pprint import pprint

# define schema for pre-defined aspects, schema
schema = ["观点词", "情感倾向[正向,负向,未提及]"]
aspects = ["房间", "位置", "价格"]
# set aspects for Taskflow
senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema, aspects=aspects)
pprint(senta("这家店的房间很大,店家服务也很热情,就是价格有点贵"))

1.3 多版本模型选择

为方便用户实际业务应用情况,本项目多个版本的模型,可以根据业务对于精度和速度方面的要求进行选择,下表展示了不同版本模型的结构以及在测试集上的指标。

图3 不同模型对比图

在Taskflow中,可以直接指定相应模型名称进行使用,使用uie-senta-mini版本的示例如下:

In [ ]

from paddlenlp import Taskflow
from pprint import pprint

schema =  [{"评价维度":["观点词", "情感倾向[正向,负向,未提及]"]}]
senta = Taskflow("sentiment_analysis", model="uie-senta-mini", schema=schema)
pprint(senta("蛋糕味道不错,店家服务也很热情"))

2. 批量处理:从数据到情感分析可视化

为方便使用,本项目提供了批量处理的功能,支持以文件形式输入,批量进行情感分析。同时打通了从数据到情感分析结果可视化的流程,帮助用户可以更加快速获取情感分析结果,聚焦于业务分析方面。

2.1 数据描述

输入数据如下方式进行组织,每行表示一个文本评论。

非常好的酒店 不枉我们爬了近一个小时的山,另外 大厨手艺非常棒 竹筒饭 竹筒鸡推荐入住的客人必须要点,
房间隔音效果不好,楼下KTV好吵的
酒店的房间很大,干净舒适,服务热情
怎么说呢,早上办理入住的,一进房间闷热的一股怪味,很臭,不能开热风,好多了,虽然房间小,但是合理范围
总台服务很差,房间一般

2.2 批量情感分析

通过脚本 batch_predict.py 批量进行情感分析,通过 file_path 指定要进行情感分析的文件路径,处理完后,结果将会保存在 save_path 指定的文件中,示例如下:

In [ ]

!python batch_predict.py \
    --file_path "./data/data184040/test_hotel.txt" \
    --save_path "./outputs/sentiment_analysis.json" \
    --model "uie-senta-base" \
    --schema "[{'评价维度': ['观点词', '情感倾向[正向,负向,未提及]']}]" \
    --batch_size 4 \
    --max_seq_len 512

2.3 情感分析可视化

在情感分析处理之后,可以根据情感分析的保存结果进行可视化展示,帮助用户更友好地分析业务特点。默认情况下,可视化功能支持围绕属性、观点、属性+观点、属性+情感、指定属性+观点分析功能。在各项分析中,均支持词云和直方图两类图像展示。特别说明的是,当前只支持如下schema分析后的数据,后续将支持自定义不同分析类型的可视化。

schema = [{'评价维度': ['观点词', '情感倾向[正向,负向,未提及]']}]

In [ ]

!python visual_analysis.py \
    --file_path "./outputs/sentiment_analysis.json" \
    --save_dir "./outputs/images" \
    --font_path "./SimHei.ttf"

运行后图片将保存在save_dir指定的目录中,其中可视化结果展示如下。

图4 情感分析可视化结果图

3. 更进一步:结合业务分析经验,定制情感分析

考虑到用户在对业务数据进行情感分析时,往往聚焦于某个特定场景或领域,为满足用户更高的情感分析要求,本项目支持从以下方面协助用户,结合业务经验,进一步定制情感分析能力,提高模型对业务数据的理解和分析能力。

  • 数据层面:打通 label-studio 平台,定制了情感信息的标注规则,支持根据标注数据自动转换为模型输入样本。
  • 属性聚合:结合业务经验,支持传入同义的属性集合,可以增强模型对于数据聚合的能力。
  • 隐性观点抽取:结合业务经验,支持自定义隐性观点词表,可以增强模型对于隐性观点的抽取能力。

在本AiStudio项目中,默认已处理好相应的训练、验证和测试数据,并已将相应的训练、验证和测试集存放于data目录下。关于数据标注,样本构建,属性聚合、隐性观点抽取等能力。

下面以酒店场景为例,讲解定制酒店垂域的情感分析能力。

3.1 数据描述

我们开源了4000+条训练数据、530条验证数据和530条测试数据,其中每份数据集包含一些负样本。下面展示了部分数据示例。

{"content": "房间干净,服务员态度也不错,只是隔音一般吧", "result_list": [{"text": "干净", "start": 2, "end": 4}, {"text": "一般", "start": 18, "end": 20}, {"text": "不错", "start": 11, "end": 13}], "prompt": "观点词"}
{"content": "感觉卫生一般,房间比较旧,设施还是齐全的,性价比一般,", "result_list": [{"text": "旧", "start": 11, "end": 12}], "prompt": "房间的观点词"}
{"content": "只能睡后面的房间,房间很大,浴室也超大,干净卫生,老板自己家的别墅,川菜味道很好,第一二张是别墅外景,视野很好很漂亮", "result_list": [{"text": "未提及", "start": -5, "end": -2}], "prompt": "接送机服务的情感倾向[负向,正向,未提及]"}

3.2 模型训练

本项目将基于uie-senta-base模型进行训练,命令如下。

In [ ]

!python finetune.py \
  --train_path ./data/data184040/train.json \
  --dev_path ./data/data184040/dev.json \
  --save_dir ./checkpoint \
  --learning_rate 1e-5 \
  --batch_size 16 \
  --max_seq_len 512 \
  --num_epochs 3 \
  --model uie-senta-base \
  --seed 1000 \
  --logging_steps 10 \
  --valid_steps 100 \
  --device gpu

3.3 模型评估

通过运行以下命令进行对酒店场景的测试集进行评估:

In [ ]

!python evaluate.py \
    --model_path ./checkpoint/model_best \
    --test_path ./data/data184040/test.json \
    --batch_size 16 \
    --max_seq_len 512

3.4 模型预测

paddlenlp.Taskflow装载定制模型,通过task_path指定模型权重文件的路径,路径下需要包含训练好的模型权重文件model_state.pdparams。

In [ ]

from paddlenlp import Taskflow
from pprint import pprint

schema = [{'评价维度': ['观点词', '情感倾向[正向,负向,未提及]']}]
senta = Taskflow("sentiment_analysis", model="uie-senta-base", schema=schema, task_path="./checkpoint/model_best")
pprint(senta("这家点的房间很大,店家服务也很热情,就是房间隔音不好"))

猜你喜欢

转载自blog.csdn.net/m0_68036862/article/details/131359233
今日推荐