4. 金融文本预处理
在FinBERT实战中,模型效果的上限往往在预处理阶段就已经被决定。金融文本不同于通用语料:它夹杂财报表格、公告编号、HTML标签、全角符号、股票代码、百分比、货币单位与大量行业术语。若直接把这些原始文本送入分词器,模型看到的将是噪声与碎片,注意力被无意义符号稀释,情绪判断自然失准。本节围绕分词、去噪、标准化、金融术语处理、句子切分与数据清洗流程,建立一条可复用的预处理流水线。
核心原理:为什么金融文本必须专门预处理
FinBERT的预训练语料以英文金融新闻、SEC文件为主,其词表对中文金融文本并不天然友好。中文没有空格分词,若用通用分词器切分“净利润同比增长”可能得到“净/利润/同比/增长”,而金融语境下“净利润”“同比”更应作为整体语义单元。同时,金融文本中的数字与符号具有强情绪信号:+12.5%、-3.2亿、扭亏为盈、商誉减值,这些若被去噪规则误删,情绪极性就会丢失。因此预处理的目标不是“把文本变干净”,而是“在保留金融语义的前提下降低噪声”。
预处理三原则:保留极性信号(涨跌、盈亏、增减)、保留实体边界(公司名、指标名)、保留结构信息(标题、段落、表格行)。任何清洗规则若违反其中一条,都应重新评估。
方法流程:六步预处理流水线
下面给出一条从原始语料到模型输入的完整流程,每一步都可独立测试与回滚。
- 原始采集与编码统一:将PDF、HTML、CSV统一转为UTF-8纯文本,去除BOM与不可见控制字符。
- 去噪:删除HTML标签、脚本、页眉页脚、公告编号、免责声明模板句,但保留数字、百分号、货币符号与括号内的同比数据。
- 标准化:全角转半角、统一货币与单位、繁简统一、英文大小写归一(保留股票代码大写)。
- 金融术语处理:构建领域词典,对“归母净利润”“扣非”“同比”“环比”等做保护性分词或合并。
- 句子切分:按中文标点与金融句式切分,避免在“3.5亿元”或“2024.06”处误切。
- 数据清洗与质检:去重、长度过滤、标签一致性校验,输出可追溯的清洗日志。
金融术语处理与句子切分的关键细节
术语处理的核心是“保护性分词”。以jieba为例,可通过自定义词典把“归母净利润”“扣非净利润”“经营活动现金流”加入词表,并设置词性标记,避免被切碎。对于英文缩写如EPS、ROE、PE,应统一大写并加入白名单,防止被当作普通英文单词小写化。
import jieba
jieba.load_userdict("fin_terms.txt") # 每行:词语 词频 词性
text = "公司归母净利润同比增长12.5%,扣非后仍亏损3.2亿元。"
tokens = jieba.lcut(text)
print(tokens)
# ['公司', '归母净利润', '同比', '增长', '12.5%', ',', '扣非', '后', '仍', '亏损', '3.2亿元', '。']
句子切分不能简单按句号切。金融文本中“3.5亿元”“2024.06”“A股”“U.S.”都含点号。建议采用“标点+规则”的混合策略:先按。!?;切分,再对含小数、日期、缩写的片段做合并修复。对于超长公告,可按“一、二、三”或“(一)(二)”标题层级切分,保留段落结构。
实用技巧:把“同比”“环比”“较上年同期”作为切分边界词,它们常标志一个独立情绪单元。例如“营收增长10%,但净利润下降5%”应切成两句,否则模型会混淆正负极性。
案例场景:一条公告的清洗全过程
原始片段:<p>【XX股份】2024年半年度业绩预告:预计归母净利润为-1.2亿元至-0.8亿元,上年同期为盈利0.5亿元。</p>
| 步骤 | 处理动作 | 输出示例 |
|---|---|---|
| 去噪 | 删除HTML标签与【】公告标记 | 2024年半年度业绩预告:预计归母净利润为-1.2亿元至-0.8亿元,上年同期为盈利0.5亿元。 |
| 标准化 | 全角转半角,统一“亿元” | 2024年半年度业绩预告:预计归母净利润为-1.2亿元至-0.8亿元,上年同期为盈利0.5亿元。 |
| 术语处理 | 保护“归母净利润”“上年同期” | 归母净利润 / 上年同期 作为整体 |
| 句子切分 | 按冒号与逗号切分情绪单元 | 句1:预计归母净利润为-1.2亿元至-0.8亿元;句2:上年同期为盈利0.5亿元。 |
| 清洗质检 | 长度、重复、标签校验 | 通过,标签为负面 |
误区与复盘
- 误区一:过度去噪。把百分号、负号、货币符号全部删除,导致“下降5%”变成“下降”,情绪强度丢失。应保留数字与符号,仅去除格式噪声。
- 误区二:统一小写。把
EPS、ROE、股票代码小写化,破坏金融实体识别。应维护白名单,仅对普通英文小写化。 - 误区三:按固定长度切分。金融句子常含多个极性,固定长度会切断语义。应优先按标点与逻辑边界切分。
- 误区四:忽略标签一致性。同一文本被多人标注时,需用Kappa系数校验,低于0.8应重新对齐标注规范。
复盘要点:预处理不是一次性脚本,而应版本化。每次修改词典或清洗规则,都要在验证集上对比F1变化。建议保存raw_text、clean_text、tokens三列,便于回溯与错误分析。
完成本节流水线后,你将得到结构清晰、术语完整、极性可辨的金融文本,为后续FinBERT微调与情绪分类打下可靠基础。