前面我们已经讲过SnowNLP、VADER、TextBlob和情感词典法。
这些方法都能做情感分析,但它们有一个共同特点:要么主要依赖情感词典,要么更适合比较简单、表达直接的短文本。
比如“这个商品很好”这种句子,词典法很容易判断;但如果评论变成下面这样:
“本来以为质量会很差,结果用了以后居然还不错。”
这句话里同时出现了“差”和“不错”。如果只是简单匹配积极词、消极词,结果就不一定稳定;但从整体意思来看,它实际表达的是一种偏积极的评价。
这时候,就可以考虑使用BERT 类情感分类模型。
很多同学一听到 BERT,就会觉得一定要自己准备数据、训练模型、调参数、跑显卡。其实并不一定。现在很多平台已经提供了训练完成的情感分类模型,我们可以先直接调用,看看它是否适合自己的中文评论、英文评论、电商评价、推文或金融文本。
这一篇文章就来讲清楚四个问题:
一、BERT 是什么?为什么它比情感词典更能理解上下文?
BERT可以理解为一种“已经提前学过大量语言规律”的文本理解模型。
它在预训练阶段读过很多文本,因此能够学习词语和上下文之间的关系。它不是只看单独一个词,而是会结合前后句子共同判断含义。
💡例如下面的场景:
- “这个服务不是很好。” 词典法可能先识别到“好”是积极词,然后再通过否定词规则把方向反转。这个过程没有问题,但规则会比较机械。而BERT 类模型会把“不是很好”当作一个整体来理解,更容易判断出这句话整体偏负面。
- “价格不低,但质量确实不错。” 这句话既有“价格不低”带来的负面表达,也有“质量不错”带来的正面表达。BERT 类模型会结合“但”前后的语义关系,判断评论究竟更偏向满意、不满,还是比较中性。
所以,BERT 的优势不是“看到某个词就打分”,而是尽量结合整句话甚至上下文来判断。
当然,这也不代表 BERT 一定比所有方法都准。模型效果仍然和训练数据、文本语言、领域场景、评论长度有关。中文电商评论、英文推文、财经新闻、旅游评价的表达方式都不同,适合的模型也不一样。
二、什么叫“现成 BERT 情感分类模型”?
普通 BERT 可以理解文本,但它一开始并不知道“好评”“差评”“中性”“愤怒”这些标签具体代表什么。
要让它能够做情感分析,通常还需要再进行一步训练,也就是把已经标注好的情感数据交给模型学习。
比如训练数据可能长这样:
{"text": "味道很好,下次还会再来", "label": "积极"}{"text": "配送太慢了,食物也凉了", "label": "消极"}
模型看过大量类似“文本 + 标签”的样本后,就会逐渐学习:哪些表达通常和积极有关,哪些表达通常和消极有关,否定词、转折词、程度词又会怎样影响整体意思。
这个过程通常叫做微调。
简单来说,一个现成 BERT 情感分类模型,可以理解为:
预训练语言模型→再用情感标注数据训练→已经具备情感分类能力的成品模型
因此,当我们使用微调模型时,并不是自己重新训练一个 BERT,而是直接调用别人已经训练好的模型权重和分类规则。
这也是它适合入门的原因:不需要一开始就准备几千条、几万条人工标注数据,也不用马上研究复杂的训练参数。
三、如果自己训练 BERT,基本流程是什么?
虽然这篇文章重点是介绍现成模型,但了解训练流程也很重要。自己训练 BERT 情感分类模型,大体可以分成五步。
- 第一步,是准备带标签的数据。例如你需要有一列评论文本,再配上一列标签。最常见的是二分类:积极 = 1,消极 = 0。如果想做三分类,也可以设置:积极、中性、消极。
- 第二步,是选择一个基础模型。中文数据通常选择中文 BERT、中文 RoBERTa、MacBERT、StructBERT等;英文数据通常选择英文 BERT、RoBERTa、DistilBERT等。这里要注意一个很常见的问题:英文模型不要直接拿来训练中文评论。例如
distilbert-base-uncased是英文模型,更适合英文文本任务;如果你的数据是中文外卖评论、中文商品评价或中文问卷开放题,就应该换成中文基础模型或中文情感分类模型。 - 第三步,是把文本转换成模型能够识别的 token。模型不能直接读“这个商品质量很好”,需要先由分词器把文本转换成数字编码,再送入模型。
- 第四步,是训练和验证。训练时,模型根据真实标签不断调整参数;验证时,我们通过准确率、精确率、召回率、F1 值、混淆矩阵等指标判断它在未见数据上的效果。
- 第五步,是保存模型并预测新文本。训练完成后,可以把模型保存下来,以后输入一条新评论,就可以得到积极、消极、中性或其他类别的预测结果。
但对于刚接触文本情感分析的同学来说,建议先从现成模型开始。先测试模型是否适合自己的数据,再决定要不要做微调,会更省时间。
四、中文文本可以先看哪些现成模型?
如果你的数据是中文评论、中文问卷开放题、中文平台反馈或中文社交媒体文本,下面几类模型比较值得了解。
1. StructBERT 中文通用情感分类模型
StructBERT可以理解为 BERT 路线下的一类中文预训练模型。
其中,中文通用情感分类模型主要用于判断文本整体是偏积极还是偏消极。它适合一般中文短文本,例如商品评价、餐饮评论、酒店评论、景区评价、服务反馈和问卷开放题。
📌常见匹配场景:
这类模型比较适合做基础的中文正负向判断。如果你只是想快速看看一批中文评论整体偏积极还是偏消极,通用模型通常是一个比较稳妥的起点。
但它毕竟是通用模型。假如你的数据是非常专业的医疗评论、金融论坛、法律文本、地方方言评论,结果仍然需要结合人工抽样进行验证。
2. StructBERT 中文电商情感模型
电商评论和一般评论不完全一样。
在淘宝、京东、拼多多等商品评论中,用户通常会反复讨论质量、价格、物流、包装、尺码、客服、售后、耐用性等问题。
📌常见匹配场景:
这类表达和普通新闻评论、旅游评论并不完全相同。因此,如果你的数据主要来自商品评价平台,优先尝试电商情感模型通常比直接使用通用模型更贴近真实场景。
不过也不要简单认为“电商模型一定最好”。如果你的数据不是电商评论,比如微博热点评论、政策文本、学生课程评价,就应该先尝试通用模型或更匹配领域的模型。
3. StructBERT 中文七分类情绪模型
有些研究不只想知道一条文本是积极还是消极,还想进一步知道它表达的是哪一种情绪。
📌常见匹配场景:
这时,七分类情绪模型就会比简单正负向分类更有价值。
它不是只输出“积极”或“消极”,而是进一步把文本划分为若干预设情绪类别。它更适合用于社交媒体舆情、公共事件评论、用户投诉、心理感受类问卷、网络情绪传播等场景。
⚠️这类模型需要注意一点:情绪分类和情感极性分类不是一回事。例如,“惊讶”不一定是积极情绪,“恐惧”也不只是一般意义上的消极评价。因此,在论文解释时,不建议把七分类结果简单加总成“好评率”和“差评率”,而要围绕不同情绪类别分别分析。
4. 二郎神 Erlangshen-RoBERTa 情感分类模型
你可能会在模型平台上看到IDEA-CCNL、二郎神、Erlangshen-RoBERTa等名称。
它们同样属于中文预训练语言模型路线,其中情感分析版本是在多个中文情感数据集上微调得到的。比较常见的型号包括:
Erlangshen-Roberta-110M-SentimentErlangshen-Roberta-330M-SentimentErlangshen-MegatronBert-1.3B-Sentiment
其中,110M、330M、1.3B 代表模型参数规模不同。
对初学者来说,建议不要一开始就追求最大的模型。模型越大,通常对内存、显存、下载时间和运行环境要求越高。如果只是想先测试中文评论,110M 或 330M的情感模型一般已经足够作为入门尝试。
五、英文文本可以先看哪些现成模型?
如果你的数据是英文商品评论、英文推文、YouTube 评论、英文 App 评价、英文社交媒体帖子或英文财经新闻,就可以优先考虑英文模型。
1. Twitter-RoBERTa Sentiment
Twitter-RoBERTa Sentiment是面向英文社交媒体文本的情感分类模型。它通常输出三类结果:
它适合英文推文、英文短评论、英文社交媒体帖子、英文 YouTube 评论、英文 App 评论等。
如果你的英文文本表达比较短、比较口语化、包含感叹号、缩写、话题词或网络表达,这类模型通常比普通词典法更容易处理上下文。
但它主要是在推文语境下训练,因此不建议直接把它当成所有英文文本的万能工具。例如,长篇学术论文摘要、正式法律文本、医学报告等,就不一定适合直接使用推文模型。
2. Twitter-RoBERTa Emotion
普通情感分析通常只回答“积极、消极、中性”。但有些研究想进一步知道:用户到底是在高兴、愤怒、悲伤,还是乐观?
Twitter-RoBERTa Emotion就属于更细的情绪识别模型。它适合英文社交媒体情绪研究,例如热点事件评论、品牌危机评论、粉丝评论、公共议题讨论等。
这类模型的优势是,它不只是告诉你“整体偏正面还是负面”,而是可以帮助你进一步识别更具体的情绪类型。
如果你的研究问题是“公众对某一事件是否满意”,普通三分类情感模型可能就够了;但如果你的研究问题是“公众在不同阶段表现出怎样的情绪变化”,情绪识别模型会更合适。
3. Twitter-RoBERTa Emotion Multilabel
多标签情绪模型比普通情绪分类更进一步。普通分类模型通常要求一条文本只归属于一个类别,例如“高兴”或“悲伤”。但真实文本往往是混合情绪。
📌混合情绪示例:“*I am happy about the news, but worried about what happens next.*”
这句话可能同时包含高兴和担忧。多标签模型允许一条文本同时拥有多个情绪标签。它通常会为anger、anticipation、disgust、fear、joy、love、optimism、pessimism、sadness、surprise、trust等情绪分别输出得分。
因此,它更适合英文社交媒体舆情、网络情绪传播、公共事件讨论、品牌危机和复杂用户情绪研究。
⚠️多标签结果更丰富,也意味着后续解释更复杂。第一次做情感分析时,不建议一开始就上多标签模型。先使用积极—中性—消极三分类模型,理解基本流程后再做多情绪分析,会更稳。
4. FinBERT
FinBERT是金融领域的情感分析模型。它主要用于英文财经新闻、财报、证券市场评论、投资者讨论、金融社交媒体文本等。
📌专业语境示例:
- “*Revenue increased significantly this quarter.*” —— 在金融语境下,这通常偏积极。
- “*Operating losses widened sharply.*” —— 在金融语境下,这通常偏消极。
FinBERT的标签一般也是positive、negative、neutral,但它的“积极”和“消极”是建立在金融语境上的。
所以,它适合英文金融文本,不适合直接拿来分析普通商品评论、酒店评价或旅游评论。模型的名字不是越高级越好,模型训练领域和你的数据越接近才更重要。
六、现成模型怎么选?不要只看“模型大不大”
选择模型时,可以先问自己三个问题。
- 第一个问题:我的文本是什么语言?中文数据优先选中文模型;英文数据优先选英文模型。不要拿英文模型直接分析中文评论,也不要拿中文模型去处理英文推文。
- 第二个问题:我的文本来自什么场景?电商评价优先看电商模型;推文或英文社交媒体优先看 Twitter-RoBERTa;金融新闻优先看 FinBERT;普通中文评论可以先尝试 StructBERT 通用模型或二郎神情感模型。
- 第三个问题:我到底想得到什么结果?如果只想看总体满意度,二分类或三分类模型就够了。如果想看喜悦、愤怒、悲伤、恐惧等情绪类型,就选择情绪识别模型。如果想研究一条文本中是否同时存在多种情绪,就可以考虑多标签情绪模型。
📋核心场景速查指南:
- 普通中文评论StructBERT 通用模型 / 二郎神情感模型
- 中文舆情和具体情绪StructBERT 七分类情绪模型
- 英文推文或社交媒体评论Twitter-RoBERTa Sentiment
- 英文多情绪研究Twitter-RoBERTa Emotion 或 Multilabel
七、怎么用几行 Python 代码调用现成模型?
现在很多模型都可以用 Hugging Face 的transformers库直接调用。首先安装环境:
pip install transformers torch
下面以中文二郎神情感模型为例:
from transformers import pipelinemodel_name = "IDEA-CCNL/Erlangshen-Roberta-110M-Sentiment"classifier = pipeline("text-classification", model=model_name)result = classifier("这个商品质量很好,物流也很快。")print(result)
运行后,模型会返回预测标签和对应概率。不过第一次使用时,一定要先看模型说明和标签映射。
因为不同模型的标签命名方式不一样。有些模型会直接输出:positive、negative、neutral。但也有一些模型会输出:LABEL_0、LABEL_1、LABEL_2。如果出现LABEL_0、LABEL_1,不要直接猜它代表积极还是消极,而要查看模型卡里的标签说明,确认映射关系后再做统计。
英文模型调用也是类似的。例如调用英文 Twitter-RoBERTa 情感分类模型:
from transformers import pipelineclassifier = pipeline("text-classification", model="cardiffnlp/twitter-roberta-base-sentiment-latest")result = classifier("The product is great and I really love it.")print(result)
如果分析金融英文文本,可以换成FinBERT:
from transformers import pipelineclassifier = pipeline("text-classification", model="ProsusAI/finbert")result = classifier("The company reported strong revenue growth this quarter.")print(result)
可以看到,调用已微调模型的逻辑并不复杂。真正需要花时间的,往往不是“把模型跑起来”,而是判断这个模型是否适合你的文本,以及后面如何解释结果。
八、怎样批量分析 Excel 中的一列评论?
假设你的 Excel 文件里有一列评论,列名叫做comment。可以先读取数据:
import pandas as pddf = pd.read_excel("评论数据.xlsx", engine="openpyxl")df = df.dropna(subset=["comment"])
然后定义一个预测函数:
defpredict_sentiment(text): result = classifier(str(text))[0]return pd.Series({"预测标签": result["label"],"预测概率": result["score"] })
开始批量分析:
df[["预测标签", "预测概率"]] = df["comment"].apply( predict_sentiment)df.head()
最后保存结果:
import osos.makedirs("result", exist_ok=True)df.to_excel("./result/BERT情感分析结果.xlsx", index=False, engine="openpyxl")
保存后的表格中,通常会增加预测标签和预测概率两列。
- 预测标签:可以用来统计积极、消极、中性或具体情绪类别的数量。
- 预测概率:可以帮助我们观察模型对当前判断有多确定。
⚠️注意:预测概率高,不等于结果绝对正确。它只是模型对当前标签的置信程度,不是人工判断的真实准确率。
九、现成模型和自己训练模型有什么区别?
现成模型最大的优点是快。它不需要自己从零准备训练集,也不需要一开始就训练很久。对于课程论文、初步研究、数据试跑或项目原型来说,先调用现成模型是很方便的。
但它也有局限:
- 第一,模型训练时使用的数据,不一定和你的数据完全一致。例如,一个电商模型用来分析旅游评论,可能还能运行,但不一定最适合。
- 第二,公开模型的准确率,不等于它在你自己数据上的准确率。模型卡里的指标通常来自特定公开数据集。你的文本来源、语言风格、评论长度、领域词汇都可能不同。
- 第三,特殊领域最好考虑微调。比如医疗服务评论、地方方言评论、小红书特定领域评论、专业金融评论、政策态度文本、教育评价数据等,都有自己的表达方式。
💡比较稳妥的科研流程是:
先调用现成模型随机抽取部分文本人工核对判断模型是否适合如果效果不够好,再考虑自己准备标注数据进行微调
十、论文里可以怎么写?
如果你使用的是现成 BERT 情感分类模型,方法部分可以这样写:
本文采用预训练语言模型对评论文本进行情感倾向识别。与基于情感词典的规则匹配方法不同,预训练语言模型能够结合文本上下文信息进行分类判断。本文根据文本语言、数据来源和研究场景选择适配的现成情感分类模型,对样本文本进行情感识别,并输出预测类别及对应概率。为增强结果可信度,进一步对部分样本进行人工抽样核验。
如果使用的是中文正负向模型,可以这样写:
本文采用基于中文预训练语言模型微调得到的情感分类模型,对评论文本进行积极与消极情感识别。模型输出每条评论的预测类别及概率得分,据此统计样本整体情感分布,并进一步比较不同主题、不同类别或不同时间阶段下的情感差异。
如果使用的是多标签情绪模型,可以这样写:
本文采用多标签情绪识别模型对文本进行分析。与单一情感分类不同,该模型允许一条文本同时具有多种情绪标签。本文根据不同情绪标签的预测得分,识别样本中愤怒、喜悦、悲伤、恐惧、乐观等情绪的分布特征,并分析其变化趋势。
十一、使用现成 BERT 模型时要注意什么?
现成模型很方便,但下面几个问题一定要注意。
- ❌首先,要注意语言。中文评论优先使用中文模型,英文评论优先使用英文模型。不要用英文
distilbert-base-uncased直接训练或分析中文外卖评论。 - ❌其次,要注意领域。电商模型适合商品评价,金融模型适合财经文本,推文模型适合社交媒体短文本。模型和数据场景越接近,结果通常越有参考价值。
- ❌再次,要注意标签含义。有些模型输出积极、消极、中性;有些模型输出愤怒、高兴、悲伤等;还有些模型只显示
LABEL_0、LABEL_1。使用前一定要确认标签代表什么。 - ❌最后,要进行人工抽样验证。论文或研究报告中,不建议完全依赖模型自动分类结果。可以随机抽取一部分文本,人工判断其情感类别,再与模型结果进行对比。这样不仅能发现明显错误,也能增强结果解释的可信度。
十二、总结:现成 BERT 情感模型适合谁?
如果你已经会用 SnowNLP、VADER、TextBlob 或情感词典法,但想进一步尝试更能理解上下文的文本情感分析方法,现成 BERT 情感分类模型就是一个很合适的下一步。
📋方法工具大盘点:
- 情感词典法适合规则透明、需要解释情感词来源的研究;
- 现成 BERT 情感分类模型适合不想从零训练、但希望使用深度学习模型的任务;
- 自己微调 BERT 模型则更适合已经有标注数据、希望提高领域适配性的项目。
现成微调模型的价值,不是让我们随便选一个就直接下结论,而是帮助我们用更低的门槛接触预训练语言模型,并先判断它是否适合自己的研究数据。
🛠️ 技术支持与服务
如果你手里已经有文本数据或者有想收集的数据,但不知道怎么清洗、建模和解释,或者你想做一篇文本挖掘、主题分析、情感分析相关的课程作业、论文实证部分或研究报告,我们可以提供相关技术支持:
除文本分析外,我们也承接中/英文及多语言 Python 文本分析,包括数据采集、文本清洗、LDA、BERTopic、BTM、DTM、TopicGPT、SnowNLP、VADER、TextBlob、情感词典、BERT 情感分类、主题演化分析及语义网络关系图等;同时也可提供深度学习、Matlab、Simulink 仿真建模,以及基于SPSS、R、Mplus等软件的量化分析支持。
量化分析方向包括:z 检验、t 检验、方差分析、回归分析、卡方检验、相关分析、样本量计算、结构方程模型、中介效应与调节效应检验、量表信效度分析、机器学习算法等,具体需求均可根据研究主题和数据情况进行定制。
📬 如果你正好有文本数据、问卷数据想分析,或者目前还没有数据、想先获取公开文本数据,也欢迎通过本公众号后台留言或淘宝搜索数锐研学馆联系我们。
如果你觉得内容对你有帮助,欢迎收藏、点赞并关注本公众号。后续会持续更新数据分析相关内容,也欢迎分享给更多需要的人。无论你想了解哪种统计方法,都可以在评论区留言一起交流。