Aspect-Based-Sentiment-Analysis
Aspect-Based-Sentiment-Analysis 是一个基于 Transformer 架构的开源自然语言处理工具,专注于细粒度的情感分析。与传统仅判断整段文本情感倾向的方法不同,它能针对长文中指定的多个具体方面(如产品的“价格”、“服务”或“功能”)分别识别其情感色彩(正面、负面或中性)。
该工具主要解决了现有开源项目难以商业化复用以及模型预测缺乏透明度的痛点。在许多实际场景中,用户不仅需要知道结果,更需要了解模型为何得出该结论。为此,Aspect-Based-Sentiment-Analysis 创新性地引入了名为"Professor"的解释组件。在模型做出预测后,该组件会审查内部状态并提供近似决策解释,帮助用户评估预测的可信度,甚至在发现异常时驳回不可靠的结果。
这款工具非常适合需要构建高精度情感分析系统的开发者、希望深入研究可解释性机器学习的研究人员,以及需要将非结构化用户反馈转化为结构化数据的商业分析师。其设计简洁独立,支持通过简单的 Python 代码快速加载预训练模型并投入使用,同时也允许用户根据自身数据定制和微调模型,以获取更稳定、准确的分析效果。
使用场景
某电商数据团队需要每日处理数万条包含多产品评价的长文本评论,以提取用户对“电池续航”、“屏幕清晰度”及“客服态度”等具体维度的反馈。
没有 Aspect-Based-Sentiment-Analysis 时
- 粒度粗糙导致误判:传统情感分析只能给出整条评论的单一得分,无法区分用户“喜欢屏幕但讨厌电池”的复杂态度,导致产品改进方向模糊。
- 黑盒决策缺乏信任:模型直接输出结果却无法解释依据,分析师难以判断是模型学到了规律还是产生了幻觉,不敢直接将数据用于高层汇报。
- 长文本处理能力弱:面对篇幅较长的详细评测,现有开源方案往往丢失关键上下文信息,或需要耗费大量精力进行人工规则清洗和分段处理。
使用 Aspect-Based-Sentiment-Analysis 后
- 精准定位多维情感:利用其基于 Transformer 的架构,能一次性从长文中精准识别并分类多个特定方面(如同时判定“屏幕”为正、“电池”为负),直接生成结构化洞察。
- 可解释性增强可信度:内置的"Professor"组件会自动审查模型预测并提供近似决策解释,让团队能直观看到模型为何做出该判断,快速剔除不可靠的异常预测。
- 开箱即用降低门槛:通过简单的
load函数即可部署就绪的流水线,无需重新造轮子处理复杂的输入编码与后处理,大幅缩短了从原始数据到商业洞察的周期。
Aspect-Based-Sentiment-Analysis 的核心价值在于将不可控的黑盒预测转化为透明、可解释且细粒度的商业情报,让企业真正敢于信赖并落地 AI 情感分析能力。
运行环境要求
- 未说明
未说明
未说明

快速开始
基于方面的情感分析
任务是对包含多个方面的潜在长文本进行情感分类。核心思想是构建一个现代化的自然语言处理工具包,支持对模型预测结果的解释。近似的决策解释有助于推断预测结果的可靠性。该工具包是独立、可扩展的,并可根据需求自由扩展。我们在文章中总结了相关思考:
GitHub 上有超过 100 个与情感分析相关的仓库 1 2 3 4 5 6 7 8 9 。 这些项目大多难以商业化,且多为开源研究项目,复用性有限。我们致力于将这些优秀的研究成果加以整理和优化。如果你喜欢这个项目,请为它点亮星标,这对我们保持项目的持续发展至关重要。
快速入门
目标是针对给定的方面对文本的情感进行分类。为了使服务更具实用性,我们做出了一些假设:待处理的文本可以是整篇文档;方面可能由多个词组成,从而定义得更加精确;最重要的是,服务应提供对每项决策的近似解释,以便用户能够立即判断预测结果的可靠性。
import aspect_based_sentiment_analysis as absa
nlp = absa.load()
text = ("我们是 Slack 的忠实粉丝,但希望订阅方案能更易于小型初创企业接受。")
slack, price = nlp(text, aspects=['slack', 'price'])
assert price.sentiment == absa.Sentiment.negative
assert slack.sentiment == absa.Sentiment.positive
以上示例展示了如何快速开始使用我们的开源工具包。你只需调用 load 函数即可设置好即用的流水线 nlp。你可以显式指定要使用的模型名称(可用模型列表见下文),或提供自定义模型的路径。尽管微调模型使用起来很简单,但我们仍鼓励你根据自身数据构建定制化模型,这样预测结果会更加准确和稳定。
流水线:确保流程顺畅
流水线提供了一个易于使用的接口来生成预测结果。即使模型非常精准,如果输入准备和输出解读不明确,也毫无意义。为了解决这一问题,我们引入了与模型紧密关联的流水线。了解整个流程的工作方式尤为重要,尤其是当你计划构建自定义模型时。
上图展示了流水线各阶段的概览。通常,在最开始阶段会对输入进行预处理。我们将文本和方面转换为一个 task 对象,其中包含文本与方面的配对样本,随后这些样本会被进一步分词、编码并传递给模型。模型完成预测后,流程会发生变化:我们没有直接对模型输出进行后处理,而是增加了一个审查环节,由一个名为 professor 的独立组件负责监督并解释模型的预测结果。如果模型内部状态或输出显得可疑,professor 可以否决该预测。在此处的文章中,我们详细讨论了模型和 professor 的工作原理。
import aspect_based_sentiment_analysis as absa
name = 'absa/classifier-rest-0.2'
model = absa.BertABSClassifier.from_pretrained(name)
tokenizer = absa.BertTokenizer.from_pretrained(name)
professor = absa.Professor(...) # 后续会详细说明。
text_splitter = absa.sentencizer() # 使用 SpaCy 的英文 CNN 模型。
nlp = absa.Pipeline(model, tokenizer, professor, text_splitter)
# 分解流水线的 `call` 方法。
task = nlp.preprocess(text=..., aspects=...)
tokenized_examples = nlp.tokenize(task.examples)
input_batch = nlp.encode(tokenized_examples)
output_batch = nlp.predict(input_batch)
predictions = nlp.review(tokenized_examples, output_batch)
completed_task = nlp.postprocess(task, predictions)
以上示例展示了如何直接初始化流水线,并通过代码逐步解析流水线调用背后的具体流程。我们省略了许多不重要的细节,但有一点值得强调:长文本的情感往往较为模糊且偏向中性。因此,你可能需要将文本拆分为较小的独立片段,有时称为“跨度”。这些跨度可以是一个句子,也可以是几个句子,具体取决于 text_splitter 的工作方式。在此例中,我们使用 SpaCy 的 CNN 模型,它会将文档按句子分割,从而使每个句子都能被独立处理。需要注意的是,较长的跨度通常包含更丰富的上下文信息,因此模型在作出预测时会有更多参考依据。请参阅流水线的详细实现这里。
监督模型预测
现在是时候解释模型的推理过程了,而这是一件极其困难的事情。
关键概念是将解释模型决策的问题视为一个独立的任务,在这个任务中,
一个辅助模型——模式识别器——会根据模型的输入、输出和内部状态来预测模式(如下文所示的标记加权组合)。
由于时间限制,我们最初并不打算研究和构建一个可训练的模式识别器。
相反,我们决定从基于观察和先验知识的模式识别器入手。
该模型,即基于方面的情感分类器,基于Transformer架构,其中自注意力层占据了最多的参数。
因此,人们可能会得出结论:理解自注意力层可以很好地反映对整个模型的理解。
相应地,有许多文章以简单易懂的方式,直接利用注意力值(自注意力层的内部状态)来解释模型的决策。
受这些文章的启发,我们也分析了注意力值(处理训练示例时的注意力值),以寻找任何有意义的见解。
这项探索性研究促使我们创建了BasicPatternRecognizer(详细信息请参见这里)。
import aspect_based_sentiment_analysis as absa
recognizer = absa.aux_models.BasicPatternRecognizer()
nlp = absa.load(pattern_recognizer=recognizer)
completed_task = nlp(text=..., aspects=['slack', 'price'])
slack, price = completed_task.examples
absa.summary(slack)
absa.display(slack.review)
absa.summary(price)
absa.display(price.review)
这些解释只有在正确的情况下才有用。 为了构建基本的模式识别器,我们做了一些假设(先验信念), 因此我们在解读这些解释时应谨慎,不要过于字面化。 即使注意力值具有一些引人深思的特性,例如它们能够编码丰富的语言关系, 目前也尚未有确凿的因果链证明这一点。 有许多文章指出了各种担忧,说明直接从注意力值推断模型的推理过程可能会产生误导。 在这篇文章中,我们对这些解释进行了详细的验证和分析。
即用型模型
下表展示了我们在SemEval 2014评测数据集上的最先进结果 (数据集详情请见这里)。 目前有两个可用的模型,分别适用于餐厅和笔记本电脑领域。 模型的具体实现细节请参见这里。 超参数优化(以及如何训练模型的说明)请参见这里。 您可以轻松复现我们的评估结果,并查看性能测试这里。
| 模型名称 | 餐厅准确率 | 笔记本准确率 | 发布日期 |
|---|---|---|---|
| LCF-ATEPC [代码][论文] | 90.18 | 82.29 | 2020年1月 |
| BERT-ADA [代码][论文] | 87.89 | 80.23 | 2019年11月 |
| BAT [代码][论文] | 86.03 | 79.35 | 2020年2月 |
classifier-rest-0.2 |
85.17 | ||
classifier-lapt-0.2 |
79.78 |
安装
您可以使用pip进行安装:
pip install aspect-based-sentiment-analysis
或者,您也可以克隆代码并使用conda创建一个新的环境:
git clone git@github.com:ScalaConsultants/Aspect-Based-Sentiment-Analysis.git
conda env create -f=environment.yml
conda activate Aspect-Based-Sentiment-Analysis
该软件包支持Python 3.7版本(与Colab 2021版本相同)。
参考文献
如何在基于方面的情感分析中使用语言模型:
- 通过构建辅助句子利用 BERT 进行基于方面的情感分析(NAACL 2019) [代码][论文]
- 针对评论阅读理解和基于方面的情感分析的 BERT 后训练(NAACL 2019) [代码][论文]
- 利用 BERT 实现端到端的基于方面的情感分析 [代码][论文]
BERT 可解释性简介:
- 十六个注意力头真的比一个更好吗? [代码][论文]
- BERT 学入门:我们所知道的 BERT 工作原理 [论文]
- BERT 关注的是什么?对 BERT 注意力机制的分析 [代码][论文]
- 可视化与测量 BERT 的几何结构 [代码][论文]
- BERT 真的稳健吗?针对文本分类和蕴含任务的自然语言攻击的强大基线 [论文]
- 基于 BERT 的对抗训练用于基于方面的情感分析 [论文]
- Adv-BERT:BERT 对拼写错误并不鲁棒!在 BERT 上生成自然对抗样本 [论文]
- exBERT:一种用于探索 Transformer 模型中学习表示的可视化分析工具 [代码][论文]
- BERT 是否有意义?利用上下文嵌入进行可解释的词义消歧 [代码][论文]
- 注意力并非解释 [代码][论文]
- 注意力并不是非解释 [代码][论文][博客文章]
- 针对神经网络预测的层次化解释 [代码][论文]
- 神经 NLP 中的分析方法 [代码][论文]
- 具有注意力机制的序列神经网络可视化 [代码]
- NeuroX:用于发现和分析神经网络中重要神经元的工具包 [代码][论文]
当前最先进成果:
- 面向中文的多任务学习模型,用于方面极性分类和方面术语抽取 [代码][论文]
- 适应或落后:通过 BERT 语言模型微调实现领域自适应,用于方面—目标情感分类 [代码][论文]
- 基于 BERT 的对抗训练用于基于方面的情感分析 [代码][论文]
其他有趣内容:
- 从评论中提取评分的多维解释 [论文]
- 从 Transformer 编码器的自注意力中提取句法树 [论文]
- 硕士论文:利用 Google Transformer 架构进行迁移学习和多任务学习,用于基于方面的情感分析 [代码]
- 为 Jupyter 笔记本创建交互式文本热图 [代码]
- DeepMoji 模型的 PyTorch 实现:用于分析情感、情绪、讽刺等的最先进深度学习模型 [代码]
- 更多内容请参见 这里。
由 Scalac 开发
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。