4. 情感词典构建:通用情感词典、金融领域词典与自定义扩展

做金融文本情感分析,词典是绕不开的基础设施。

很多人一上来就怼深度学习模型,觉得词典太老土。我刚开始也这么想,结果被现实狠狠教育了一回——模型在通用场景下表现不错,但一遇到「降准」、「逆回购」、「黑天鹅」这些金融术语,直接就懵了。

说白了,词典是规则派的根基,也是数据增强的利器。今天咱们就聊聊怎么把这三层词典搭起来。

4.1 通用情感词典:BosonNLP 的取舍

通用情感词典里,我比较常用的是 BosonNLP。它基于微博数据构建,覆盖了约 10 万个情感词,正负面都有。

但有个坑——它太「社交化」了。比如「涨停」在 BosonNLP 里是正面词,但在某些场景下(比如「连续涨停后开板」),它其实是风险信号。

我的建议:通用词典适合做基础过滤,但不能直接用于金融场景。我一般用它做情感词的「种子集」,再结合金融语料做领域迁移。

BosonNLP 的格式很简单,每行一个词,用空格分隔情感值:

# 示例:BosonNLP 情感词典片段
利好 1.5
利空 -1.8
上涨 1.2
下跌 -1.3
震荡 0.1
突破 1.0
崩盘 -2.0

情感值范围通常在 -2 到 2 之间。正值表示正面,负值表示负面,绝对值越大情感越强烈。

4.2 金融领域情感词典:LM 词典的实战应用

说到金融情感词典,就不得不提 Loughran-McDonald(LM)词典。这是学术界公认的金融情感词典标杆。

LM 词典把金融文本中的词分成六类:正面、负面、不确定性、诉讼、强语气、弱语气。我当年做财报情感分析时,就靠它撑起了整个基线系统。

类别 示例词 情感倾向
正面 profit, growth, successful +1
负面 loss, default, bankruptcy -1
不确定性 uncertain, volatility, risk 0(但需关注)
诉讼 lawsuit, litigation, claim -1
强语气 must, always, never ±1(视上下文)
弱语气 maybe, possibly, might 0(削弱情感)
一个小技巧:LM 词典是英文的,但你可以用翻译+人工校验的方式构建中文版。我做过一次,准确率能达到 85% 以上。关键是保留它的分类体系,尤其是「不确定性」和「强语气」这两类,对风险预警特别有用。

4.3 自定义词典的构建与扩展

通用词典和领域词典都有了,但还不够。为什么?因为金融行业变化太快了。

我记得 2020 年「熔断」这个词突然爆火,LM 词典里根本没有。如果你只靠现成词典,那段时间的文本分析基本是废的。

所以,自定义词典的构建能力,才是真正的核心竞争力。

4.3.1 基于规则的模式扩展

最简单的方法,是用词根+后缀的模式。比如:

# 模式扩展示例
# 核心词:涨
涨 -> 上涨、暴涨、疯涨、涨停、连涨
# 核心词:跌
跌 -> 下跌、暴跌、狂跌、跌停、连跌
# 核心词:风险
风险 -> 信用风险、市场风险、操作风险、流动性风险

嗯,这里要注意:不是所有组合都有情感倾向。比如「涨」本身是正面,但「涨速放缓」就偏中性了。我一般会加一个「上下文修饰词」的规则来兜底。

4.3.2 基于词向量的语义扩展

如果你有金融语料,用 Word2Vec 或 FastText 做语义扩展会更高效。

# 伪代码示例:基于词向量的情感词典扩展
from gensim.models import Word2Vec

# 假设已有金融语料训练好的模型
model = Word2Vec.load('finance_corpus.model')

# 种子词
seed_words = ['利好', '利空', '风险', '收益']

# 扩展:找最相似的 10 个词
for word in seed_words:
    similar_words = model.wv.most_similar(word, topn=10)
    print(f"{word} 的相似词: {similar_words}")

这样做的好处是能发现一些「隐性关联」。比如「利好」的相似词里可能会出现「政策扶持」、「资金流入」这些在通用词典里找不到的词。

避坑指南:我曾经用词向量扩展时,发现「风险」和「收益」居然被聚在一起了。后来一查,是因为语料里「高风险高收益」这个短语出现太频繁。所以,扩展后的词一定要人工审核,别全信模型。

4.3.3 基于半监督的迭代扩展

这是我最常用的方法。流程如下:

  1. 用种子词典对金融文本做初步情感标注
  2. 提取标注结果中「高频但未登录」的词
  3. 人工判断这些词的情感倾向
  4. 加入词典,重新标注
  5. 重复 2-4 步,直到词典覆盖率达到 90% 以上

说白了,就是「机器初筛 + 人工精标」的循环。虽然听起来笨,但效果最稳。

4.4 知识体系总览

下面这张图,是我做情感词典构建时的核心思路。你可以把它当成一个「施工蓝图」:

情感词典构建三层架构 第一层:通用情感词典(BosonNLP) 基础情感词覆盖,约10万词,情感值范围[-2, 2] 作用:提供种子词集,做基础情感过滤 局限:社交化倾向,金融领域覆盖不足 第二层:金融领域情感词典(LM词典) 六分类体系:正面、负面、不确定性、诉讼、强语气、弱语气 作用:精准识别金融文本中的情感信号 局限:英文为主,需中文适配;新词覆盖滞后 第三层:自定义词典(动态扩展) 三种扩展方式:规则模式、词向量语义、半监督迭代 作用:覆盖新词、行业术语、突发事件相关词 核心:人工审核 + 持续迭代,保证词典质量 三层词典叠加使用,覆盖率达到 95% 以上方可投入生产

4.5 词典融合策略

三层词典都有了,怎么融合?我一般按优先级处理:

  • 自定义词典 > 领域词典 > 通用词典:自定义词典的权重最高,因为它最贴近业务
  • 情感值加权平均:如果同一个词在多个词典中出现,取加权平均(自定义词典权重 0.6,领域词典 0.3,通用词典 0.1)
  • 冲突处理:如果情感倾向相反(比如通用词典标正面,领域词典标负面),以领域词典为准
实战经验:我做过一个测试,只用通用词典做金融情感分析,准确率只有 62%。加上 LM 词典后提升到 78%,再叠加上自定义词典,最终达到 89%。词典的质量,直接决定了你模型的天花板。

好了,情感词典这块就聊到这儿。记住一句话:词典不是一次性工程,而是需要持续维护的活资产。你投入多少精力在词典上,你的情感分析系统就会回报你多少。

专注资料整理