以思维链为线索推理隐含情感

server/2024/11/26 8:25:24/

在这里插入图片描述
在这里插入图片描述

❀ 以思维链为线索推理隐含情感

  • 简介
  • 摘要
  • 引言
  • THOR
  • THOR核心代码
  • 实验结果
  • 代码运行
  • 总结

简介


本文主要对2023ACL论文《Reasoning Implicit Sentiment with Chain-of-Thought Prompting》主要内容进行介绍。

摘要


尽管情绪分析任务常依据文本中的直接意见表达来判定目标的情绪倾向,但在隐式情绪分析(ISA)场景下,这些意见线索往往不那么明显或直接,而是隐含且微妙的。因此,准确捕捉并解读这些隐含情绪,需要借助常识及复杂的多步骤推理能力,以揭示潜在的意见意图。受思想链(CoT)理论的启发,本研究引入了一个三阶段推理(THOR)的CoT框架,旨在模拟人类在进行ISA时的推理过程。THOR框架遵循一个精心设计的三步提示策略,依次引导识别隐含的方面、挖掘潜在观点,并最终确定情绪极性。在监督微调下,THOR结合Flan-T5(11B)模型,将数据集上的最优性能(SoTA)提升了6%以上。尤为值得一提的是,在无需训练样本的零样本设置下,THOR搭配GPT3(175B)模型,更是将SoTA成绩提高了惊人的50%以上。

  • 参考文献:本文所涉及的所有资源的获取方式:https://www.aspiringcode.com/content?id=17091747727569&uid=e993013ab4384899add70d8e9a98c176

引言


在这里插入图片描述

情感分析(SA)的任务在于,根据提供的文本内容,判断针对特定目标的情绪倾向。SA可以细分为显性情感分析(ESA)和隐性情感分析(ISA)两大类别。当前,ESA占据主流地位,其情感表达往往直接且明确地体现在文本之中。相比之下,ISA则显得更具挑战性,因为它要求从仅包含事实描述的文本中解读出情绪。例如,面对文本“尝尝这道烤鲑鱼吧!”,由于缺少明显的情感提示,现有的大多数情绪分类系统都会将“烤鲑鱼”判定为中性情绪。然而,人类却能轻松准确地捕捉到其中的情绪色彩,因为我们擅长从文字背后挖掘出隐藏的真实意图或观点。正因如此,如果未能深入理解情绪产生的根源,传统的SA方法在应对ISA时往往力不从心。

THOR


近期大模型的崛起,让我们看到了机器对文本的理解有了新的高度。受到大模型中CoT的启发,文章提出了THOR( Three-hop Reasoning CoT framework),一个三段式的提问框架,能够通过循循善诱地方法,很好的让机器对隐形情感进行挖掘并预测,提升了ISA任务的性能。
在这里插入图片描述

如上图所示:
Traditional Prompting,表明传统的提示学习方法就是直接问模型,这句话中这个词的情感极性是什么。

Three-hop Reasoning with CoT Prompting,则是本文提出基于大模型思维链(CoT)的方法,提出的三段式提问框架。首先询问句子在讲述方面词的什么方面;其次,将回答整合后,将整合后的答案继续问方面词背后有什么隐含观点;最后,再次整合前面的回答,最后问方面词的情感极性是什么。

通过THOR我们可以看到,使用CoT的方法循循善诱模型得到的答案为positive是正确的,而传统的提问时neutral是不正确的。

THOR框架具体设置如下:
假设我们要预测的句子为:“The new mobile phone can be just put in my pocket.”
其中要预测的方面词为“The new mobile phone”
不妨设句子为X,设方面词为t

在这里插入图片描述

以上述设置为例:
第一步,模型的输入为 Given the sentence “X”, which specific aspect of t is possibly mentioned?
假设模型得到的结果为"The specific aspect of the new mobile phone mentioned in the sentence is the size or portability",记为A
在这里插入图片描述

第二步,模型的输入为Given the sentence “X”, A(第一问结果). Based on the common sense, what is the implicit opinion towards the mentioned aspect of the new mobile phone, and why?

假设模型输出为"Based on the mentioned aspect of size and portability, the sentence implies that the phone is small enough to fit in the speaker’s pocket. According
to common sense, the implicit opinion of speaker towards the portability is good, because the speaker is able to easily carry the phone with them by
placing it in their pocket, and find the phone to be convenient and easy to use."这个答案不妨记作O。

在这里插入图片描述

第三步,模型的输入为Given the sentence “X”, A(第一问结果), O(第二问的结果). Based on such opinion, what is the sentiment polarity towards the new mobile phone?

此时假设模型的输出为"The sentiment polarity towards the new mobile phone based on the given sentence is positive. The speaker finds the phone to be convenient and easy
to use, implying having a favorable view of the phone."

此时我们可以看到,模型得到了我们需要的预测结果为positive。
在这里插入图片描述

此时再来看这幅图,应该是一目了然了吧。

THOR核心代码


def prompt_for_aspect_inferring(context, target):new_context = f'Given the sentence "{context}", 'prompt = new_context + f'which specific aspect of {target} is possibly mentioned?'return new_context, promptdef prompt_for_opinion_inferring(context, target, aspect_expr):new_context = context + ' The mentioned aspect is about ' + aspect_expr + '.'prompt = new_context + f' Based on the common sense, what is the implicit opinion towards the mentioned aspect of {target}, and why?'return new_context, promptdef prompt_for_polarity_inferring(context, target, opinion_expr):new_context = context + f' The opinion towards the mentioned aspect of {target} is ' + opinion_expr + '.'prompt = new_context + f' Based on such opinion, what is the sentiment polarity towards {target}?'return new_context, prompt

实验结果


文章实验主要是基于Flan-T5大模型做的(因为这是为数不多开源且效果不错的大模型)
在这里插入图片描述

这个结果是使用数据集进行监督微调训练后的结果,监督微调大模型确实能够使得模型有更好的表现,但是随着现在预训练大模型越来越大,我们微调的成本也越来越大了。

在这里插入图片描述

这个成果是在zero-shot(零样本)设置下取得的,意味着没有针对大型模型进行微调,而是直接通过THOR框架或直接利用prompt进行查询,从而节省了微调大型模型所需的时间和资源。尽管如此,这种方法的整体效果还是略逊于经过监督微调的结果。不过,值得注意的是,采用THOR方法相较于直接使用prompt,展现出了更优的性能。特别地,当使用GPT3作为大型模型进行查询时,效果更是显著提升,这主要得益于GPT3远超Flan-T5的参数量。值得注意的是,GPT3并未开源,使用时可能需要支付一定费用。这一成果表明,当前大型模型在自然语言理解方面的能力已经有了显著的飞跃。

代码运行


首先创建虚拟环境

conda create -n thor python=3.8

按照自己电脑的cuda版本安装pytorch

首先可以查看自己gpu的版本(如果你的电脑有且可以用的话)
打开命令行
输入:

nvidia-smi

在这里插入图片描述

可以查看自己gpu的版本
然后去pytorch官网查看对应gpu版本的安装命令
下面是一些版本的实例,可供参考

# CUDA 10.2
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=10.2 -c pytorch# CUDA 11.3
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge# CUDA 11.7
conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.7 -c pytorch -c nvidia

最后安装一些必备的库
下载代码打开后在终端运行安装即可。

pip install -r requirements.txt

打开main.py后可以看到参数的设置,直接运行是进行laptop数据集+THOR框架+零样本进行评估
目前支持prompt和zero-shot两种,使用GPT3因为需要密钥,需要自己去获取。

if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('-c', '--cuda_index', default=0)parser.add_argument('--reasoning', default='thor', choices=['prompt', 'thor'],help='with one-step prompt or multi-step thor reasoning')parser.add_argument('-z', '--zero_shot', action='store_true', default=True,help='running under zero-shot mode or fine-tune mode')parser.add_argument('-d', '--data_name', default='laptops', choices=['restaurants', 'laptops'],help='semeval data name')parser.add_argument('-f', '--config', default='./config/config.yaml', help='config file')args = parser.parse_args()template = Template(args)template.forward()

完整可运行的代码(包含Flan-T5 250M)附件可下载。
由于大模型文件太大上传不了,需要通过网盘下载大模型,链接也在附件中哦。

总结


  • 参考文献:本文所涉及的所有资源的获取方式:https://www.aspiringcode.com/content?id=17091747727569&uid=e993013ab4384899add70d8e9a98c176

这篇文章使用大模型思维链的思路优化了隐式情感分析中,隐含观点等难以挖掘的难题,使得ISA任务能够有较大性能的提升。随着近些年prompt learning的兴起,提示学习也逐渐成为NLP中的新范式,也让我们逐渐发现,训练出的大模型有很强的能力等待我们去挖掘,就好像一个聪明的小孩,你教他一遍怎么做,他就能帮你把任务做的不错了。



http://www.ppmy.cn/server/145007.html

相关文章

vulnhub靶场之breakout

empire靶场2 前言 靶机:breakout 攻击:kali 续接上个靶场empire1的继续学习 主机发现 使用arp-scan扫描或者直接查看虚拟机的ip地址 信息收集 使用nmap扫描 端口80apache 2.4.51开启smb服务的两个端口139、445,版本4.6.2两个http服务采…

day23|leetCode 39. 组合总和 , 40.组合总和II , 131.分割回文串

5.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

微服务系统架构图

微服务架构是一种将单一应用程序开发为一组小型服务的架构风格。每个服务都在自己的进程中运行,它们之间采用轻量级的通信机制(如 HTTP/REST 或消息队列)进行相互协作。以下是关于微服务系统架构的简要介绍:一、核心特点独立部署 …

springboot欢迪迈手机商城设计与开发论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本欢迪迈手机商城就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

DataGrip 连接 Redis、TongRDS

连接 Redis 或 TongRDS 有些旧版本 没有 redis 驱动用不了 1)选择驱动 2)添加连接信息 3)测试连接 4)保存连接 5)使用案例

如何在 Eclipse 中调试ABAP程序

原文链接:Debugging an ABAP Program ADT 中的调试器是一个重要的诊断工具,可用于分析 ABAP 应用程序。 使用调试器,您可以通过在运行时 Debug 单步执行(F5)程序来确定程序无法正常工作的原因。这使您可以看到正在执…

wordpress获取文章总数、分类总数、tag总数等

在制作wordpress模板的时候会要调用网站的文章总数分类总数tag总数等这个数值&#xff0c;如果直接用count查询数据库那就太过分了。好在wordpress内置了一些标签可以直接获取到这些数值&#xff0c;本文整理了一些常用的wordpress网站总数标签。 文章总数 <?php $count_…