NLP学习笔记04:情感分析——从词典方法到 BERT

NLP学习笔记04:情感分析——从词典方法到 BERT作者 Ye Shun 日期 2026 04 15 情感分析 Sentiment Analysis 是自然语言处理 NLP 中最经典 应用也最广泛的任务之一 它的目标 是自动识别和分析文本中的主观信息 判断作者对某个对象 产品 事件或服务的态度是正面 负面还是中性 例如 这个手机真的很好用 正面 服务太差了 再也不会来了 负面 整体还可以 没有特别惊艳 中性

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



情感分析(Sentiment Analysis)是自然语言处理(NLP)中最经典、应用也最广泛的任务之一。它的目标,是自动识别和分析文本中的主观信息,判断作者对某个对象、产品、事件或服务的态度是正面、负面还是中性。

例如:

  • “这个手机真的很好用” → 正面
  • “服务太差了,再也不会来了” → 负面
  • “整体还可以,没有特别惊艳” → 中性

在互联网时代,大量文本都天然带有情感色彩,例如商品评论、社交媒体帖子、客服对话、电影评分、新闻评论等。因此,情感分析不仅是一个典型的 NLP 任务,也有很强的实际应用价值。

这篇笔记会围绕以下几个方面展开:

  1. 情感分析的基本概念与分类方式
  2. 基于词典的方法如何工作
  3. 基于机器学习的方法如何实现
  4. 什么是方面级情感分析
  5. 情感分析当前面临的挑战与发展方向

情感分析可以从不同角度进行分类,最常见的是按分析粒度和按情感维度划分。

1. 按分析粒度分类

文档级情感分析

把整篇文档当作一个整体,判断它的总体情感倾向。例如,一整篇电影评论可以被判定为“正面”或“负面”。

句子级情感分析

对单个句子进行情感判断。例如:

  • “这家店环境很好。” → 正面
  • “但是服务很慢。” → 负面

这种粒度比文档级更细,适合分析较短文本。

方面级情感分析

方面级情感分析(Aspect-Based Sentiment Analysis, ABSA)更进一步,不只是判断整体情感,而是识别文本中具体提到的“方面”及其对应情感。例如:

  • “这家餐厅环境很好,但服务太慢。”
    环境 → 正面
    服务 → 负面










这类任务更贴近真实业务,因为用户往往不是笼统地表达情绪,而是针对某个具体点进行评价。

2. 按情感维度分类

二分类

最常见的是正面 / 负面两类。

三分类

把情感划分为正面 / 中性 / 负面三类,这在评论分析中很常见。

多分类

进一步细分为愤怒、喜悦、悲伤、惊讶等更具体的情绪类别。

情感强度分析

不只判断极性,还量化情感强烈程度。例如:

  • “还不错” → 弱正面
  • “非常喜欢,强烈推荐” → 强正面

词典法是最传统的情感分析思路之一。它不依赖训练数据,而是依赖预先构建好的情感词典,通过统计文本中的情感词、否定词和程度副词来估计整体情感倾向。

1. 核心组件

一个典型的词典法情感分析器,通常包含以下几个部分:

情感词典

情感词典中保存了带有情感极性和强度的词。例如:

  • 正面词:喜欢、满意、优秀、推荐
  • 负面词:糟糕、失望、生气、差劲

英文中常见词典有:

  • SentiWordNet
  • AFINN
  • VADER

中文中常见词典有:

  • 知网 HowNet 情感词典
  • 大连理工大学情感词汇本体库
否定词

例如:

  • 没有
  • 绝非
  • 从不

否定词会改变情感方向,例如“好”是正面,“不好”则转为负面。

程度副词

例如:

  • 非常
  • 有点
  • 稍微

它们会调整情感强度,例如“非常好”通常比“好”情感更强。

2. 基本工作流程

词典法的流程可以概括为:

  1. 对文本进行分词
  2. 遍历分词结果
  3. 统计情感词得分
  4. 根据否定词和程度副词修正得分
  5. 输出归一化后的情感结果

伪代码如下:

def lexicon_based_sentiment(text): sentiment_score = 0 words = tokenize(text) for word in words: if word in positive_lexicon: sentiment_score += positive_lexicon[word] elif word in negative_lexicon: sentiment_score -= negative_lexicon[word] sentiment_score = apply_negation(words, sentiment_score) sentiment_score = apply_intensifier(words, sentiment_score) return normalize(sentiment_score) 

3. 优缺点分析

优点
  • 不需要标注训练数据
  • 实现简单,计算效率高
  • 可解释性较强
缺点
  • 严重依赖情感词典质量
  • 难以处理上下文变化
  • 对反语、讽刺、双重否定等复杂表达能力弱
  • 领域迁移能力有限

因此,词典法更适合作为入门思路、快速基线或小规模规则系统,而不是复杂场景下的最终方案。

相比词典方法,机器学习方法通过学习带标注数据中的模式来判断情感,更适合处理中等规模和结构较复杂的数据。

1. 典型特征工程

在传统机器学习中,文本通常要先转换成数值特征。常见特征包括:

  • 词袋模型(BoW)
  • TF-IDF
  • N-gram 特征
  • 情感词典特征

其中,TF-IDF + 线性分类器 是最经典、也最实用的一种组合。

2. 常见分类算法

常见做法包括:

  • 朴素贝叶斯
  • 支持向量机(SVM)
  • 逻辑回归
  • 随机森林

在情感分类任务中,线性 SVM 和逻辑回归通常都是很强的基线模型。

3. 使用 Scikit-learn 实现情感分类

下面是一个典型的机器学习情感分类思路:

from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.pipeline import Pipeline from sklearn.svm import LinearSVC sentiment_clf = Pipeline([ ("tfidf", TfidfVectorizer(ngram_range=(1, 2))), ("clf", LinearSVC()) ]) sentiment_clf.fit(train_texts, train_labels) prediction = sentiment_clf.predict(["这个产品非常好用,强烈推荐!"]) print(prediction) 

这段代码背后的逻辑其实很清楚:

  • TfidfVectorizer 负责把文本转换成数值向量
  • LinearSVC 学习这些向量和情感标签之间的关系
  • 管道 Pipeline 把两步封装成一个完整流程

4. 机器学习方法的特点

优点
  • 比词典法更灵活
  • 能自动从数据中学习模式
  • 对常见分类任务效果通常更好
缺点
  • 依赖标注数据
  • 需要额外的特征工程
  • 对上下文和语义的理解仍然有限

因此,传统机器学习方法适合作为情感分析的重要中间阶段:比词典法强,比深度学习轻。

在真实评论中,用户常常会同时表达多种情感,而且这些情感往往对应不同方面。比如:

“餐厅的环境很棒,但服务太慢了。”

这句话如果只做整体情感分类,会丢失很多关键信息。因为用户其实是在表达两种不同判断:

  • 环境 → 正面
  • 服务 → 负面

这正是方面级情感分析要解决的问题。

1. ABSA 的核心子任务

方面提取

识别文本中被评价的对象或属性。

  • 显式方面:“手机的电池续航很好” → 电池
  • 隐式方面:“拍出来的照片很清晰” → 摄像头
情感分类

针对每个识别出的方面,判断它对应的情感极性。

2. 常见实现方式

方法类型 代表思路 优点 缺点 流水线方法 先提取方面,再分类情感 模块清晰,易调试 容易误差传播 端到端方法 直接联合建模方面和情感 性能通常更好 对数据要求更高 多任务学习 同时学习多个相关任务 能共享知识 训练更复杂

3. 基于 BERT 的方面级情感分析

预训练语言模型出现后,ABSA 的效果有了明显提升。BERT 之所以适合这种任务,是因为它擅长理解上下文,也能更好建模“方面词”和“评价语句”之间的关系。

示意代码如下:

from transformers import BertTokenizer, BertForSequenceClassification import torch model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=3) tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") text = "餐厅的环境很棒,但服务太慢了。" aspect = "服务" inputs = tokenizer(f"[CLS] {aspect} [SEP] {text} [SEP]", return_tensors="pt") outputs = model(inputs) predictions = torch.argmax(outputs.logits, dim=1) print(predictions) 

这类做法的核心思想是:把“方面”和“原句”一起输入模型,让模型学习它们之间的关系,再判断该方面对应的情感。

情感分析虽然经典,但远没有表面看起来那么简单。真实语言中的主观表达非常复杂,很多问题并不是简单看几个词就能解决的。

1. 上下文依赖

同一个词在不同语境下,情感极性可能不同。例如“厉害”有时是夸奖,有时也可能带有讽刺。

2. 领域适应

在电影评论上训练出的模型,拿去分析医疗评论、商品评论或金融舆情时,效果往往会下降。

3. 多语言与跨语言问题

不同语言表达情感的方式差异很大,同一套规则或模型不一定能直接迁移。

4. 讽刺和反语

例如:

  • “这服务真是太好了,等了一个小时才上菜。”

表面看似正面,真实情感却明显是负面的。这类表达对模型来说非常困难。

5. 情感原因提取

很多业务不只想知道“正面还是负面”,还想知道“为什么负面”。这就引出了更高级的任务,例如情感原因抽取和意见摘要。

随着大模型和多模态技术的发展,情感分析也在不断演进。

1. 多模态情感分析

不仅看文本,还结合图像、语音、视频来判断情绪状态。

2. 跨语言情感分析

利用多语言模型和迁移学习,提高低资源语言的情感分析能力。

3. 情感原因提取

不只判断情感,还识别触发情感的原因。

4. 个性化情感分析

将用户历史行为、表达习惯、领域背景纳入分析,提高个体层面的判断精度。

如果你刚开始学习情感分析,我比较建议按下面的顺序练习:

1. 先实现一个词典法情感分析器

目的不是追求高精度,而是理解情感词、否定词、程度副词是怎么影响最终判断的。

2. 再实现一个机器学习版本

例如:

  • TF-IDF + 朴素贝叶斯
  • TF-IDF + 逻辑回归
  • TF-IDF + SVM

通过比较不同模型的结果,你会更清楚什么是“特征工程”和“分类器差异”。

3. 最后再接触 BERT 类模型

当你已经理解前两类方法之后,再学习基于预训练模型的情感分析,会更容易看出它们到底解决了什么问题。

情感分析是 NLP 中非常基础但又极具现实价值的任务。它既可以作为入门任务帮助我们理解文本处理流程,也能进一步延伸到更复杂的研究方向,如方面级情感分析、跨领域迁移、多模态情感识别等。

从方法演进来看:

  • 词典法强调规则和可解释性
  • 机器学习方法强调从数据中学习分类边界
  • BERT 等预训练模型则进一步提升了上下文理解能力

在实际应用中,并不是越复杂的方法就一定越合适。很多时候,真正有效的方案,是根据任务场景、数据规模和资源条件做平衡。

小讯
上一篇 2026-04-20 17:51
下一篇 2026-04-20 17:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/265539.html