1. 课程导入

在金融市场上,价格不仅由财报数字和宏观指标驱动,也由投资者对信息的解读与情绪驱动。一条央行措辞的微妙变化、一份研报中“谨慎乐观”的表述、社交媒体上突然升温的恐慌讨论,都可能在短时间内影响交易行为。金融文本情绪分析要解决的,正是把这类非结构化语言转化为可度量、可回测、可纳入策略的信号。本课程以 FinBERT 为核心工具,带你从零构建一套面向真实金融语料的情绪分析实战能力。

一、为什么金融文本情绪分析有价值

传统量化研究大量依赖结构化数据,但金融领域超过八成的重要信息以文本形式存在:公告、财报、电话会议记录、新闻、研报、论坛帖子、监管问询函等。通用情感模型在电商评论上表现良好,却在金融语境中频繁误判,原因在于金融语言具有三个特殊性。

  • 领域语义漂移:“风险”在普通语境中偏负面,但在“风险可控”“风险溢价”中未必是坏消息;“负债”在财报中只是会计科目,并不直接等于利空。
  • 方向依赖主体与时间:“公司下调指引”对股价偏负面,但“公司下调成本”可能偏正面;同一句话在盘前与盘后发布,市场反应也不同。
  • 表达含蓄且否定密集:“不及预期”“略低于此前指引”“尚未看到复苏迹象”等表述,需要模型理解程度副词、否定范围和比较结构。

因此,金融文本情绪分析的价值可以归纳为三条主线:信息提取(把文本转为情绪分数)、风险预警(捕捉负面情绪突变)、策略增强(将情绪因子与量价因子结合)。它既服务于投研,也服务于风控、舆情监测与合规审查。

二、FinBERT 的定位:不是通用模型,而是金融领域适配器

BERT 通过大规模预训练学习语言表示,再通过微调适配下游任务。FinBERT 则是在 BERT 架构基础上,使用金融领域语料继续预训练或直接微调得到的模型族。它的核心定位不是“更强的通用情感模型”,而是“更懂金融语言的领域适配器”。

与通用情感模型相比,FinBERT 的优势体现在:

对比维度 通用情感模型 FinBERT
训练语料 评论、社交媒体、通用网页 财报、新闻、研报、金融公告
标签体系 正/负/中性,偏口语 金融正/负/中性,常含不确定类
典型误判 把“负债”判为负面 对金融术语与否定结构更稳健
适用场景 泛舆情、客服、评论 财报、公告、研报、金融新闻

需要强调的是,FinBERT 并非万能。它对长文档、表格、图表和跨句推理仍有局限,通常需要配合分句、截断、聚合与规则后处理。课程后续会反复训练你判断“什么时候该用 FinBERT,什么时候该用规则或大模型”。

把 FinBERT 理解为“金融语境的情绪编码器”:它输出的是概率分布,而不是投资建议。分数只有经过阈值、聚合和回测,才可能成为可用信号。

三、从文本到信号:核心方法流程

一套完整的金融文本情绪分析流水线,通常包含以下环节。理解这条链路,比记住某个模型参数更重要。

  1. 数据采集:确定语料来源(新闻 API、公告 PDF、论坛帖子),记录时间戳与标的映射。
  2. 清洗与分句:去除页眉页脚、HTML 标签、重复段落,按句或按段切分,控制最大长度。
  3. 分词与编码:使用 FinBERT 对应的 tokenizer,处理特殊符号、数字与英文缩写。
  4. 模型推理:输出 positive / negative / neutral 概率,必要时加入不确定性标签。
  5. 聚合打分:按文档、按日、按标的聚合,构造情绪因子。
  6. 验证与回测:检查准确率、F1、IC、分层收益,避免前视偏差。

下面是一段最小可运行的推理示例,展示 FinBERT 的输入输出形态。实际课程中会替换为完整的数据管道与评估脚本。

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model_name = "ProsusAI/finbert"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

text = "公司下调全年营收指引,但毛利率保持稳定。"
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128)

with torch.no_grad():
    logits = model(**inputs).logits
    probs = torch.softmax(logits, dim=-1)

labels = ["positive", "negative", "neutral"]
for label, p in zip(labels, probs[0].tolist()):
    print(f"{label}: {p:.4f}")

运行后你会得到三个概率值。注意,模型输出的是“这句话在金融语境下的情绪倾向”,而不是“股价会涨还是会跌”。把情绪分数映射为交易信号,需要额外的假设与验证。

四、典型应用场景与常见误区

在真实业务中,金融文本情绪分析常见于以下场景:

  • 财报电话会议:管理层语气变化、分析师提问情绪,可作为业绩拐点的辅助观察。
  • 公告与监管文件:问询函、风险提示公告的负面情绪强度,用于事件驱动预警。
  • 新闻与研报:构建日频情绪因子,与动量、波动率因子结合。
  • 社交媒体舆情:监测散户情绪极端值,辅助判断短期拥挤度。
常见误区一:把情绪分数直接当作买卖信号。误区二:忽略时间戳,导致前视偏差。误区三:用通用模型评估金融文本,误判后归咎于“模型不行”。误区四:不做分句与截断,长文档情绪被平均稀释。误区五:只看准确率,不看类别不平衡下的 F1 与召回。

复盘这些问题会发现,金融文本情绪分析的难点往往不在模型本身,而在数据对齐、标签定义、聚合方式和评估设计。课程后续章节会围绕这些环节逐一拆解。

五、课程学习目标与整体知识框架

完成本课程后,你应当能够独立完成以下任务:

  1. 解释金融文本情绪分析的核心概念、价值边界与适用条件。
  2. 搭建 FinBERT 推理环境,完成数据清洗、分句、编码与批量推理。
  3. 设计情绪聚合规则,构造可按日、按标的使用的情绪因子。
  4. 使用准确率、F1、IC、分层回测等指标评估情绪信号。
  5. 识别并规避前视偏差、标签泄漏、样本不平衡等常见陷阱。
  6. 将情绪因子与量价因子结合,形成可复现的研究流程。

整体知识框架可以概括为“数据—模型—信号—验证”四层。下面的 SVG 展示了这四层之间的数据流与关键对象,帮助你建立全局视角。

金融文本情绪分析四层框架 数据 → 模型 → 信号 → 验证 数据层 新闻 / 公告 / 研报 清洗 · 分句 · 时间戳 标的映射 模型层 FinBERT Tokenizer 微调 / 推理 正 / 负 / 中性概率 信号层 按日 / 按标的聚合 情绪因子构造 阈值与平滑 验证层 准确率 / F1 / IC 分层回测 前视偏差检查 反馈回路 错误样本回流 标签修正 阈值再校准 核心原则:情绪分数必须经过聚合与验证,才可能成为可用信号

这张图强调一个关键原则:模型只是中间环节,真正决定研究质量的是数据对齐、信号构造与验证设计。接下来的章节将沿着这四层逐步展开,从环境搭建、数据清洗,到 FinBERT 推理、因子构造与回测评估,最终形成一套可复现的金融文本情绪分析工作流。