3. 金融文本预处理
金融文本预处理是金融NLP端到端项目中最容易被低估、却最影响最终效果的环节。与通用语料不同,金融文本混杂着公告、研报、财报、新闻、股吧评论、监管问询函等多种体裁,既有严谨的书面表达,也有口语化、缩写、黑话与噪声。若预处理不到位,后续的情感分析、事件抽取、知识图谱构建都会建立在“脏数据”之上。本节围绕分词、去停用词、词性标注、命名实体识别与金融领域词典构建五个核心任务展开,帮助大家建立可复用的金融文本预处理流水线。
一、核心原理:金融文本为何“难处理”
中文金融文本没有天然空格分隔,分词是第一道门槛。通用分词器(如jieba、HanLP、LTP)在新闻语料上表现良好,但遇到“贵州茅台”“宁德时代”“10转5派3”“可转债强赎”“北向资金”等金融专有表达时,常出现切分错误。例如“10转5派3”若被切成“10/转/5/派/3”,语义完全丢失;而“破净”“戴帽”“摘帽”等股市术语,通用词典往往未收录。
去停用词的目标是过滤“的、了、在、是、和”等高频低信息词,但金融场景需谨慎:否定词“不、未、无”若被误删,情感极性会反转;程度副词“大幅、显著、略微”影响事件强度判断,也不应简单丢弃。词性标注则为后续句法分析与关系抽取提供支撑,例如识别“贵州茅台(ORG)发布(VERB)公告(NOUN)”中的主谓宾结构。
命名实体识别(NER)在金融领域需识别公司、股票代码、人物、机构、产品、金额、日期、指标等。通用NER模型对“证监会”“上交所”“科创板”识别尚可,但对“中证500”“LPR”“MLF”等金融专有实体召回不足。因此,构建金融领域词典并与分词、NER联动,是提升整体效果的关键。
二、方法流程:五步预处理流水线
下面给出一条可落地的金融文本预处理流程,建议按顺序执行,并将词典构建贯穿始终。
- 文本清洗:去除HTML标签、乱码、多余空白、页眉页脚;统一全角半角;处理繁简转换。
- 分词:加载金融自定义词典,使用jieba或HanLP进行切分,保留词性标注结果。
- 去停用词:使用金融停用词表,但保留否定词、程度副词、时间词与数量词。
- 词性标注与NER:基于分词结果进行POS与NER,识别公司、机构、金额、指标等实体。
- 词典迭代:将NER新发现的实体、别名、股票代码回填至金融词典,形成闭环。
import jieba
import jieba.posseg as pseg
# 加载金融自定义词典
jieba.load_userdict("finance_dict.txt")
text = "贵州茅台发布公告,拟以10转5派3方案进行利润分配。"
# 分词与词性标注
words = pseg.cut(text)
for word, flag in words:
print(f"{word}\t{flag}")
# 输出示例:
# 贵州茅台 ORG
# 发布 v
# 公告 n
# 拟 d
# 以 p
# 10转5派3 FIN
# 方案 n
# 进行 v
# 利润分配 n
贵州茅台,600519,茅台,贵州茅台酒股份有限公司。这样既能提升分词召回,也能为NER提供候选实体。
三、案例场景:从股吧评论到结构化事件
假设我们要从股吧评论中抽取“公司—事件—情感”三元组。原始文本为:“宁德时代今天大涨,主要是麒麟电池量产超预期,但估值有点贵了。”
经过预处理后:分词得到“宁德时代/今天/大涨/麒麟电池/量产/超预期/估值/贵”;去停用词保留“大涨、超预期、贵”;词性标注识别“大涨”为动词、“贵”为形容词;NER识别“宁德时代”为ORG、“麒麟电池”为产品实体。最终可形成结构化输出:
| 实体 | 类型 | 事件 | 情感 |
|---|---|---|---|
| 宁德时代 | 公司 | 股价上涨 | 正面 |
| 麒麟电池 | 产品 | 量产超预期 | 正面 |
| 估值 | 指标 | 偏高 | 负面 |
这个案例说明:预处理不是“清洗完就结束”,而是要为下游任务保留可解释的标签与实体边界。若把“贵”误删为停用词,负面情感就会丢失;若“麒麟电池”未被识别为产品实体,事件抽取就会失败。
四、误区与复盘:常见坑与改进建议
复盘时建议记录三类指标:分词准确率(人工抽样)、实体召回率(对比标注集)、下游任务F1(如情感分类)。只有将预处理效果与业务指标挂钩,才能判断词典与停用词表是否真正有效。