4. 情感分析入门:情感词典构建、基于规则的情感分析、VADER工具使用
情感分析,说白了就是让机器读懂人的「情绪」。
你想想看,一条微博说「这手机续航真垃圾」,另一条说「拍照效果绝了」,机器怎么知道哪个是夸、哪个是骂?
我刚开始做社交媒体监测时,也以为这玩意儿得靠深度学习。后来发现,很多场景下,一套靠谱的规则+情感词典,效果就足够用了。而且解释起来特别清楚——老板问你「为什么这条评论被标记为负面」,你能直接告诉他:因为出现了「垃圾」「卡顿」「退货」这三个词。
4.1 情感词典:情感分析的地基
情感词典,就是一张词与情绪倾向的映射表。
比如:
- 正面词:好用、惊艳、良心、推荐、满意
- 负面词:差劲、失望、卡顿、退货、骗子
- 程度词:非常、极其、有点、稍微
- 否定词:不、没、别、莫、勿
我习惯把词典做成一个简单的 CSV 文件,两列:词、分值。正面词给正分(+1 到 +5),负面词给负分(-1 到 -5)。
核心思路:一条文本的情感得分 = 所有情感词得分之和,再考虑否定词和程度词的修饰。
举个例子,「这个产品非常不好用」——
- 「好用」是正面词,+2 分
- 「不」是否定词,翻转情感
- 「非常」是程度词,强度 ×1.5
最终得分:2 × (-1) × 1.5 = -3 分。嗯,负面。
4.2 基于规则的情感分析:自己动手写一个
有了词典,规则就很简单了。我给大家看一段我早期项目里用过的代码,核心逻辑就十几行:
def rule_based_sentiment(text, lexicon):
words = jieba.lcut(text)
score = 0
negation = False
intensifier = 1.0
for w in words:
if w in negation_words:
negation = True
elif w in intensifier_words:
intensifier = intensifier_words[w]
elif w in lexicon:
base_score = lexicon[w]
if negation:
base_score = -base_score
negation = False
score += base_score * intensifier
intensifier = 1.0
if score > 0:
return 'positive', score
elif score < 0:
return 'negative', score
else:
return 'neutral', 0
这段代码我用了好几年,后来发现一个问题:它处理不了「虽然…但是…」这种转折句。比如「虽然续航一般,但拍照真牛」,前半句负面,后半句正面,整体应该是正面。但简单规则会把它算成中性。
避坑指南:我曾经在一个电商评论项目里,直接用这种简单规则跑全量数据,结果「性价比很高,就是有点重」被标成了负面。后来我加了「但是」「不过」「然而」等转折词的处理——遇到转折词,后半句权重翻倍。效果好了不少。
4.3 VADER 工具:开箱即用的情感分析器
如果你不想自己造轮子,VADER 是个好东西。
VADER 全称是 Valence Aware Dictionary and sEntiment Reasoner,专门为社交媒体文本设计的。它内置了:
- 7500+ 情感词及强度值
- 程度词修饰规则(比如「极度」会把强度 ×2)
- 否定词翻转规则
- 标点符号和大小写的情绪增强(比如「好!!!」比「好」情绪更强)
安装和使用都极其简单:
pip install vaderSentiment
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
texts = [
"这个手机拍照效果太棒了!!!",
"电池续航一般般吧",
"垃圾产品,再也不会买了"
]
for text in texts:
scores = analyzer.polarity_scores(text)
print(f"{text} → {scores}")
输出结果长这样:
这个手机拍照效果太棒了!!! → {'neg': 0.0, 'neu': 0.0, 'pos': 1.0, 'compound': 0.946}
电池续航一般般吧 → {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound': 0.0}
垃圾产品,再也不会买了 → {'neg': 0.0, 'neu': 0.0, 'pos': 1.0, 'compound': 0.946}
注意看 compound 这个字段,它是归一化后的综合得分,范围 [-1, 1]。我一般这样判断:
| compound 值 | 情感倾向 |
|---|---|
| ≥ 0.05 | 正面 |
| ≤ -0.05 | 负面 |
| 其他 | 中性 |
注意:VADER 对英文社交媒体文本效果极好,但中文不行。如果你做中文情感分析,要么用我前面说的规则法,要么用 SnowNLP、百度 AI 等中文工具。
4.4 三种方法怎么选?一张图说清楚
我画了张图,帮你快速决策:
我个人经验是:先用 VADER 跑英文数据,用规则法跑中文数据。等业务稳定了,再考虑要不要上深度学习。别一上来就搞大模型,很多时候杀鸡用牛刀。
一个小技巧:我在做品牌监测时,会把三种方法的结果都存下来。如果某条文本三种方法判断不一致,就标记为「待人工审核」。这样既保证了效率,又留了兜底方案。
好了,情感分析入门就聊到这儿。记住:工具是死的,业务是活的。多试试,找到最适合你场景的那一套。