3. NLP与Transformer核心概念
在进入FinBERT实战之前,我们需要先建立一条清晰的技术脉络:文本如何变成数字、数字如何被赋予上下文语义、模型如何通过注意力机制捕捉长距离依赖,以及BERT如何借助预训练与微调范式适配金融情绪分析任务。本节将围绕词向量、注意力机制、Transformer架构、BERT原理与微调范式四个核心概念展开,为后续代码实战打下理论基础。
一、从词向量到上下文表示
计算机无法直接理解“盈利超预期”这样的文字,必须先将词映射为向量。早期方法如One-Hot编码维度高且无法表达词间相似性;Word2Vec、GloVe等静态词向量通过共现关系训练出低维稠密向量,使“上涨”与“攀升”在向量空间中距离更近。但静态词向量有一个致命缺陷:同一个词在不同语境下向量相同。例如“苹果”在“苹果发布财报”与“苹果价格上涨”中含义不同,静态向量无法区分。
因此,现代NLP转向上下文相关表示。BERT通过多层Transformer编码,使每个词的向量都融合了句子中其他词的信息,从而动态调整语义。这一转变是理解FinBERT的起点。
二、注意力机制:让模型学会“看哪里”
注意力机制的核心思想是:在处理某个词时,模型应动态决定关注句子中哪些其他词。以金融句子“尽管营收增长,但净利润大幅下滑导致股价承压”为例,判断情绪时“下滑”“承压”应获得更高权重,而“增长”虽然正面,但被“尽管”转折削弱。
注意力计算通常分为三步:
- 生成Query、Key、Value:每个词向量分别乘以三个可学习矩阵,得到查询向量Q、键向量K、值向量V。
- 计算注意力分数:用Q与所有K做点积,衡量当前词与其他词的相关性。
- 加权求和:对分数做Softmax归一化,再对V加权求和,得到融合上下文的输出。
多头注意力则并行执行多组上述过程,让模型同时从语法、语义、指代等不同角度捕捉关系。例如一个头关注“下滑”与“净利润”的修饰关系,另一个头关注“尽管”带来的转折逻辑。
三、Transformer架构与BERT原理
Transformer完全抛弃循环结构,依靠自注意力和位置编码并行处理整个序列。其编码器由多头自注意力、前馈网络、残差连接和层归一化组成,可堆叠多层。BERT(Bidirectional Encoder Representations from Transformers)正是Transformer编码器的双向堆叠版本。
BERT的关键设计包括:
- 双向编码:每个词同时看到左右两侧上下文,比单向语言模型更适合理解完整语义。
- 输入表示:词元嵌入 + 段嵌入 + 位置嵌入三者相加。
- 特殊标记:[CLS]用于聚合句子级表示,[SEP]用于分隔句子对。
- 预训练目标:MLM随机遮盖15%词元并预测,NSP判断两句是否连续。
FinBERT在此基础上,使用金融新闻、研报、公告等语料继续预训练,使模型熟悉“息差”“拨备覆盖率”“同比扭亏”等金融表达,再通过情绪分类微调获得领域适配能力。
四、预训练与微调范式:方法流程与参数要点
BERT的成功依赖“预训练 + 微调”两阶段范式。预训练阶段在海量无标注文本上学习通用语言表示,成本高但可复用;微调阶段在少量标注数据上更新全部或部分参数,快速适配下游任务。
| 阶段 | 数据要求 | 主要目标 | 典型学习率 | 输出 |
|---|---|---|---|---|
| 预训练 | 大规模无标注金融文本 | MLM + NSP | 1e-4 ~ 5e-5 | 通用金融语言表示 |
| 微调 | 数千至数万条标注情绪数据 | 三分类交叉熵 | 2e-5 ~ 5e-5 | 金融情绪分类模型 |
微调时通常只需在[CLS]向量后接一个线性分类层。以下是一个典型的微调参数配置示例:
model_name: "ProsusAI/finbert"
num_labels: 3
max_length: 128
batch_size: 16
learning_rate: 2e-5
epochs: 4
warmup_ratio: 0.1
weight_decay: 0.01
metric: "f1_macro"
五、常见误区与复盘
- 误区一:把静态词向量等同于BERT表示。Word2Vec无法区分多义词,而BERT的动态表示会随上下文变化,金融术语尤其明显。
- 误区二:忽视位置编码。自注意力本身无序,位置编码是模型理解语序的关键,缺失会导致“营收增长”与“增长营收”难以区分。
- 误区三:微调学习率过大。BERT微调通常使用较小学习率(2e-5左右),过大容易破坏预训练知识,导致灾难性遗忘。
- 误区四:数据标注不一致。金融情绪边界模糊,“中性”样本的标注标准必须统一,否则模型难以收敛。
掌握词向量、注意力、Transformer与BERT预训练微调范式后,我们已经具备理解FinBERT内部机制的基础。下一阶段将进入数据准备与模型加载的实操环节。