4. 情感词典构建:通用词典与领域自定义词典的融合方法
情感词典,说白了就是给每个词贴上一个「情绪标签」。
正面词加分,负面词减分。听起来简单吧?
但真正做起来,坑多得很。我最早做金融舆情分析时,直接用SnowNLP的通用词典跑了一遍,结果发现「涨停」被标成了中性词,「减持」居然也是中性。嗯,这显然不对。
4.1 通用词典的局限性
通用词典,比如SnowNLP、BosonNLP、知网Hownet,它们覆盖的是日常用语。
「开心」「难过」「漂亮」「丑陋」——这些词它们认得。
但到了金融领域,问题就来了:
- 「做空」——在通用词典里可能是中性,但在股市里明显偏负面
- 「放量」——中性词,但结合上下文可能是利好也可能是利空
- 「ST」——退市风险警示,绝对是负面,但通用词典根本不认识
为什么会这样?因为通用词典的训练语料是微博、新闻、影评。你想想看,影评里哪来的「市盈率」?
核心问题:通用词典的领域覆盖度不足,导致大量金融专业术语被误判为中性词,直接拉低了情感分析的准确率。
4.2 领域自定义词典的构建思路
我个人的习惯是:先跑一遍通用词典,然后人工标注一批金融文本,找出那些被误判的词。
具体怎么做?分三步走:
- 种子词收集:从金融研报、股吧评论、公告中提取高频词汇
- 情感极性标注:让3-5个标注员独立打分(-2到+2),取平均值
- 词典合并:将新词与通用词典融合,冲突时以领域词典为准
我曾经在一个项目中,光「减持」这个词就折腾了两天。为什么?因为「减持」本身是负面,但「减持计划完成」反而是利好。你看,同一个词,上下文不同,情感完全相反。
小技巧:构建领域词典时,不要只看单字词。像「业绩预增」「股东增持」「商誉减值」这类四字短语,情感倾向更明确,建议直接作为整体加入词典。
4.3 融合方法:加权投票与优先级覆盖
通用词典和领域词典怎么融合?我试过好几种方法,最后觉得最靠谱的是「优先级覆盖法」。
逻辑很简单:
- 如果领域词典里有这个词,就用领域词典的分数
- 如果领域词典里没有,才去查通用词典
- 两个词典都没有,标记为中性(0分)
但这里有个坑:领域词典的覆盖度不可能100%。你想想看,金融文本里经常出现新词、网络用语,比如「韭菜」「割肉」「上车」。这些词领域词典可能没收录,但通用词典反而有。
所以我建议用「加权投票法」:
def fusion_score(word, domain_dict, general_dict, alpha=0.7):
"""
融合打分:领域词典权重0.7,通用词典权重0.3
"""
domain_score = domain_dict.get(word, None)
general_score = general_dict.get(word, None)
if domain_score is not None and general_score is not None:
# 两个词典都有,加权平均
return alpha * domain_score + (1 - alpha) * general_score
elif domain_score is not None:
return domain_score
elif general_score is not None:
return general_score
else:
return 0.0 # 中性
这段代码看起来简单,但实际效果很好。alpha值我一般设0.7,因为领域词典更可信。但如果你做的是跨领域分析,比如同时分析金融和科技新闻,alpha可以降到0.5。
4.4 词典质量评估:别光看准确率
词典建好了,怎么知道好不好?
很多人只看准确率,但我建议看三个指标:
| 指标 | 含义 | 我的经验阈值 |
|---|---|---|
| 覆盖度 | 词典能覆盖多少文本中的词汇 | ≥ 85% |
| 准确率 | 情感判断与人工标注的一致性 | ≥ 80% |
| 区分度 | 正面/负面分数的方差大小 | 方差 ≥ 0.5 |
区分度这个指标容易被忽略。我遇到过一种情况:准确率90%,但所有词的分数都在-0.2到+0.2之间。说白了,就是词典不敢给高分也不敢给低分,全在中间晃悠。这样的词典,做出来的情感曲线几乎是一条直线,毫无意义。
避坑指南:我曾经用了一个覆盖度95%的词典,结果发现它把「暴跌」标成了-0.3,「微跌」标成了-0.2。这显然不对。后来一查,原来是标注员偷懒,所有负面词都给了差不多的分数。所以,一定要检查分数的分布情况。
4.5 知识体系图:情感词典构建全流程
下面这张图,是我自己总结的词典构建流程。每次做新项目,我都会先过一遍这张图,确保没有遗漏。
这张图里,最容易被忽略的是第6步「迭代优化」。很多人建完词典就觉得完事了,但金融领域的新词层出不穷。比如2020年出现的「赛道股」「宁组合」,2023年的「中特估」。你不更新词典,模型就会慢慢失效。
4.6 实战建议:从0到1搭建你的金融情感词典
如果你现在要动手做,我建议按这个顺序来:
- 先拿SnowNLP跑一遍,看看基线效果
- 找1000条金融文本,人工标注情感
- 对比标注结果和SnowNLP结果,找出差异最大的词
- 把这些词加入领域词典,用加权投票法融合
- 再跑一遍,看准确率提升了多少
我做过一个实验:只用SnowNLP,准确率62%。加入200个金融领域词后,准确率直接跳到81%。你看,20%的提升,其实就是多花了半天时间标注而已。
记住:情感词典的质量,决定了情感分析的天花板。模型再花哨,词典不行,一切都是白搭。
好了,这一章的内容就到这里。下一章我们会聊情感分析的实战应用,到时候我会拿真实的股票数据来演示。