SetFitABSA: 基于 SetFit 的少样本、方面级情感分析

这篇具有很好参考价值的文章主要介绍了SetFitABSA: 基于 SetFit 的少样本、方面级情感分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


SetFitABSA 是一种可以有效从文本中检测方面级情感的技术。

方面级情感分析 (Aspect-Based Sentiment Analysis,ABSA) 是一种检测文本中特定方面的情感的任务。例如,在“这款手机的屏幕很棒,但电池太小”一句中,分别有“屏幕”和“电池”两个方面,它们的情感极性分别是正面和负面。

ABSA 应用颇为广泛,有了它我们可以通过分析顾客对产品或服务的多方面反馈,并从中提取出有价值的见解。然而,ABSA 要求在样本标注时对训练样本中涉及的各个方面进行词元级的识别,因此为 ABSA 标注训练数据成为了一件繁琐的任务。

为了缓解这一问题,英特尔实验室和 Hugging Face 联袂推出了 SetFitABSA,以用于少样本场景下的特定领域 ABSA 模型训练。实验表明,SetFitABSA 性能相当不错,其在少样本场景下表现甚至优于 Llama2 和 T5 等大型生成模型。

与基于 LLM 的方法相比,SetFitABSA 有两个独特优势:

🗣 无需提示: 在使用基于 LLM 的少样本上下文学习时,提示的作用非常关键,因此一般需要精心设计,这一要求使得最终效果对用词十分敏感且非常依赖用户的专业知识,因此整个方案会比较脆弱。SetFitABSA 直接从少量带标签的文本示例中生成丰富的嵌入,因此可完全无需提示。

🏎 快速训练: SetFitABSA 仅需少量的已标注训练样本。此外,其训练数据格式非常简单,无需专门的标注工具,因此数据标注过程简单而快速。

本文,我们将解释 SetFitABSA 的工作原理以及如何使用 SetFit 库 训练你自己的模型。我们开始吧!

工作原理与流程


SetFitABSA 的三段式训练流程

SetFitABSA 主要分三步。第一步从文本中提取候选方面; 第二步从候选方面中筛选出真正的方面,这一步主要由一个候选方面分类器来完成; 最后一步对每个方面判断其情感极性。其中,第二步和第三步均基于 SetFit 模型。

训练

1. 候选方面提取

这里我们假设: 方面一般指的是产品和服务的特性,因此其主要是名词或复合名词 (即几个相邻名词组成的字符串)。我们使用 spaCy 从少样本训练集的句子中提取并标注出名词/复合名词。由于并非所有提取的名词/复合名词都是方面,因此我们叫它们 候选方面

2. 方面/非方面分类

有了候选方面后,我们还需要训练一个模型,以便能够区分这些候选方面中哪些是真正的方面。为此,我们需要一些带有方面/无方面标签的训练样本。如果候选方面存在于训练集中我们即视其为 True ,否则视其为 False :

  • 训练样本: “Waiters aren’t friendly but the cream pasta is out of this world.”
  • 分词: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]
  • 提取候选方面: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]
  • 训练集标签,其格式为 BIO: [B-ASP, O, O, O, O、O、B-ASP、I-ASP、O、O、O、O、O、.]
  • 根据训练集标签,生成方面/非方面标签: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]

至此,我们对所有候选方面进行了标注,下一步就是如何训练方面分类模型?也就是说,我们如何使用 SetFit 这一句子分类框架来对词元进行分类?我们使用的方法是: 将每个候选方面与其所在的句子串接起来,我们使用以下模板创建训练样本:

候选方面:所在句子

将该模板应用于上面的例子,我们会生成 3 个训练样本 - 其中 2 个标签为 True ,1 个标签为 False :

文本 标签
Waiters:Waiters aren't friendly but the cream pasta is out of this world. 1
cream pasta:Waiters aren't friendly but the cream pasta is out of this world. 1
world:Waiters aren't friendly but the cream pasta is out of this world. 0
... ...

生成训练样本后,我们就可以借助 SetFit 的强大功能仅用少许样本训练一个特定领域的二元分类器,以从输入文本评论中提取出方面。这是我们第一个微调 SetFit 模型。

3. 情感极性分类

一旦系统从文本中提取到方面,它需要判断每个方面的情感极性 (如积极、消极或中性)。为此,我们需要第二个 SetFit 模型,其训练方式与上面相似,如下例所示:

  • 训练样本: “Waiters aren’t friendly but the cream pasta is out of this world.”
  • 分词: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]
  • 标签: [NEG, O, O, O, O, O, POS, POS, O, O, O, O, O, .]
文本 标签
Waiters:Waiters aren't friendly but the cream pasta is out of this world. NEG
cream pasta:Waiters aren't friendly but the cream pasta is out of this world. POS
... ...

注意,与方面提取模型不同,这里训练集中就不用包含非方面样本了,因为任务是对真正的方面进行情感极性分类。

推理

推理时,我们首先使用 spaCy 对输入句子进行候选方面提取,并用模板 aspect_candidate:test_sentence 生成推理样本。接下来,用方面/非方面分类器过滤掉非方面。最后,过滤出的方面会被送到情感极性分类器,该分类器预测每个方面的情感极性。

因此,我们的系统可以接收普通文本作为输入,并输出文本中的方面及其对应的情感:

模型输入:

"their dinner specials are fantastic."

模型输出:

[{'span': 'dinner specials', 'polarity': 'positive'}]

基准测试

我们将 SetFitABSA 与 AWS AI 实验室 和 Salesforce AI 研究院 的最新成果进行比较,这两项工作主要采用了对 T5 和 GPT2 进行提示微调的方法以实现方面级情感分析。为了对我们的工作进行全面测评,我们还将我们的模型与基于上下文学习的 Llama-2-chat 进行了比较。

我们采用的测评数据集是 2014 年语义评估挑战赛 (SemEval14) 中的 Laptop14 和 Restaurant14 ABSA 数据集。测评任务选择的是术语提取中间任务 (SB1) 及完整 ABSA 任务 (包括方面提取及情感极性预测,即 SB1+SB2)。

模型尺寸比较

模型 尺寸 (参数量)
Llama-2-chat 7B
T5-base 220M
GPT2-base 124M
GPT2-medium 355M
SetFit (MPNet) 2x 110M

请注意,SB1 任务使用的 SetFitABSA 的参数量为 110M; SB2 任务再加上一个 110M 的模型。因此 SB1+SB2 时, SetFitABSA 的总参数量为 220M。

性能比较

我们看到,当训练样本较少时,SetFitABSA 有明显优势,尽管它比 T5 小 2 倍,比 GPT2-medium 小 3 倍。即便是与 64 倍参数量的 Llama 2 相比,SetFitABSA 也能获得相当或更好的效果。

SetFitABSA vs GPT2

SetFitABSA vs T5

请注意,为公平起见,在比较 SetFitABSA 与各基线 (GPT2、T5 等) 时,我们使用了相同的数据集划分。

SetFitABSA vs Llama2

我们注意到,增加 Llama2 提示中的上下文样本的数目并不能改善效果。这种现象 之前也在 ChatGPT 中发现过,我们认为后续值得深入调查一下。

训练你自己的模型

SetFitABSA 是 SetFit 框架的一个功能。要训​​练 ABSA 模型,首先需要安装包含 absa 功能的 setfit :

python -m pip install -U "setfit[absa]"

此外,我们必须安装 en_core_web_lg 版的 spaCy 模型:

python -m spacy download en_core_web_lg

接着开始准备训练数据集。训练集是一个 Dataset 对象,其包含 textspanlabelordinal 四列:

  • text: 含有方面的完整句子或文本。
  • span: 句子中包含的方面。可以是一个单词或多个单词,如 “food”。
  • label: 每个 span (即方面) 的情感极性标签,如 “positive”。这些标签的名称是在标注时确定的。
  • ordinal: 如果某一方面在文本中出现了多次,则该列表示其在文本中出现的次序。这个值通常是 0,因为每个方面通常在对应文本中只出现一次。

举个例子,训练文本 “Restaurant with wonderful food but worst service I ever seen” 中包含两个方面,因此其在训练集表中占据两行,如下:

text span label ordinal
Restaurant with wonderful food but worst service I ever seen food positive 0
Restaurant with wonderful food but worst service I ever seen service negative 0
... ... ... ...

一旦准备好训练数据集,我们就可以创建一个 ABSA 训练器并运行训练。SetFit 模型的训练效率相当高,但由于 SetFitABSA 涉及两个依次训练的模型,因此建议使用 GPU 进行训练,以缩短训练时间。例如,以下训练脚本在免费的 Google Colab T4 GPU 上仅需约 10 分钟就可以完成 SetFitABSA 模型的训练。

from datasets import load_dataset
from setfit import AbsaTrainer, AbsaModel

# Create a training dataset as above
# For convenience we will use an already prepared dataset here
train_dataset = load_dataset("tomaarsen/setfit-absa-semeval-restaurants", split="train[:128]")

# Create a model with a chosen sentence transformer from the Hub
model = AbsaModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")

# Create a trainer:
trainer = AbsaTrainer(model, train_dataset=train_dataset)
# Execute training:
trainer.train()

好了!自此,我们成功训得一个特定领域的 ABSA 模型。我们可以将训得的模型保存到硬盘或将其上传到 Hugging Face Hub。请记住,该模型包含两个子模型,因此每个子模型都需有自己的路径:

model.save_pretrained(
    "models/setfit-absa-model-aspect",
    "models/setfit-absa-model-polarity"
)
# 或
model.push_to_hub(
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity"
)

现在我们使用训得的模型进行推理。首先加载模型:

from setfit import AbsaModel

model = AbsaModel.from_pretrained(
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity"
)

然后,使用模型的预测 API 进行推理。输入一个字符串列表,其中每个字符串代表一个评论文本:

preds = model.predict([
    "Best pizza outside of Italy and really tasty.",
    "The food variations are great and the prices are absolutely fair.",
    "Unfortunately, you have to expect some waiting time and get a note with a waiting number if it should be very full."
])

print(preds)
# [
# [{'span': 'pizza', 'polarity': 'positive'}],
# [{'span': 'food variations', 'polarity': 'positive'}, {'span': 'prices', 'polarity': 'positive'}],
# [{'span': 'waiting time', 'polarity': 'neutral'}, {'span': 'waiting number', 'polarity': 'neutral'}]
# ]

有关训练选项、如何保存和加载模型以及如何推理等更多详细信息,请参阅 SetFit 文档。

参考文献

  • Maria Pontiki, Dimitris Galanis, John Pavlopoulos, Harris Papageorgiou, Ion Androutsopoulos, and Suresh Manandhar. 2014. SemEval-2014 task 4: Aspect based sentiment analysis. In Proceedings of the 8th International Workshop on Semantic Evaluation (SemEval 2014), pages 27–35.
  • Siddharth Varia, Shuai Wang, Kishaloy Halder, Robert Vacareanu, Miguel Ballesteros, Yassine Benajiba, Neha Anna John, Rishita Anubhai, Smaranda Muresan, Dan Roth, 2023 “Instruction Tuning for Few-Shot Aspect-Based Sentiment Analysis”. https://arxiv.org/abs/2210.06629
  • Ehsan Hosseini-Asl, Wenhao Liu, Caiming Xiong, 2022. “A Generative Language Model for Few-shot Aspect-Based Sentiment Analysis”. https://arxiv.org/abs/2204.05356
  • Lewis Tunstall, Nils Reimers, Unso Eun Seo Jo, Luke Bates, Daniel Korat, Moshe Wasserblat, Oren Pereg, 2022. “Efficient Few-Shot Learning Without Prompts”. https://arxiv.org/abs/2209.11055

英文原文: https://hf.co/blog/setfit-absa

原文作者: Ronen Laperdon,Tom Aarsen,Lewis Tunstall,Daniel Korat,Oren Pereg,Moshe Wasserblat

译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的应用及大规模模型的训练推理。文章来源地址https://www.toymoban.com/news/detail-804362.html

到了这里,关于SetFitABSA: 基于 SetFit 的少样本、方面级情感分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的中文情感分类 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate Convolutional Neural Networks for Sentence Classification 模型结构 在短文本分析任务中,由于

    2024年02月09日
    浏览(57)
  • 基于SnowNLP的商品评论文本情感分析

           摘要: 情感文本电商情感标注分析研究是当前电商数据情感挖掘学术研究的重要热点,具有极高的国际应用价值。对当前电商手机在线商品评论词典进行情感文本电商情感标注分析与词典数据情感挖掘研究具有很高的国际学术研究价值和重大社会意义经济效益。针对当

    2024年02月04日
    浏览(46)
  • 计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

    🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 其实,很明显这个项目和微博谣言检测是一样的,也是个二分类的问题,因此,我们

    2024年02月11日
    浏览(49)
  • 基于pytorch使用LSTM进行文本情感分析

    大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10 语言环境:python3.7 编译器:PyCharm PyTorch版本:

    2024年02月07日
    浏览(48)
  • 基于python舆情分析可视化系统+情感分析+爬虫+机器学习(源码)✅

    大数据毕业设计:Python招聘数据采集分析可视化系统✅ 毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅 感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关

    2024年01月20日
    浏览(49)
  • 毕设成品 基于大数据情感分析的网络舆情分析系统(源码+论文)

    # 简介 今天学长向大家介绍一个大数据毕设项目 毕设分享 基于大数据情感分析的网络舆情分析系统(源码+论文) 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 项目获取: https://gitee.com/assistant-a/project-sharing 实现效果 毕业设计 基于大数

    2024年04月25日
    浏览(35)
  • 数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、项目介绍 二、数据集介绍 三、实验过程 3.1导入数据() ​3.2数据预处理 3.3数据

    2024年02月07日
    浏览(42)
  • 论文阅读-基于深度学习的多模态情感分析研究综述

    非核心 原文链接:基于深度学习的多模态情感分析研究综述 - 中国知网 (cnki.net) 深度学习完成多模态情感分析综述。主要介绍 多模态情感分析 的概念、背景、意义。总结了 多模态融合技术和交互技术 ,讨论多模态情感分析 未来发展 。 目前经典的多模态情感分析研究已经

    2024年02月04日
    浏览(49)
  • 孤注一掷——基于文心Ernie-3.0大模型的影评情感分析

    前些天看了 《孤注一掷》 ,感觉是一个很不错的电影, 狠狠劝赌! 人有两颗心,一颗贪心,一颗不甘心,诱惑的背后只有陷阱,恐惧的尽头只剩绝望。 希望大家提高防诈骗意识, 别信,别贪,别冲动! 这个项目使用文言一心大模型,对爬取的电影评论数据进行小样本的预

    2024年02月11日
    浏览(38)
  • Python基于微博的舆论分析,微博评论情感分析可视化系统(V5.0),附源码

    博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 2022-2024年最全的计算机软件毕业设计选

    2024年04月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包