4. 金融数据采集与预处理
在金融RAG系统中,模型能力往往不是第一瓶颈,数据质量才是决定召回上限的关键变量。金融数据来源分散、格式异构、噪声密集,若采集与预处理环节失守,后续再强的向量模型也只能在“垃圾进、垃圾出”的循环中空转。本节围绕数据源选择、多格式解析、OCR处理、文本清洗与分块元数据设计,构建一条可落地的端到端预处理流水线。
一、核心原理:为什么金融数据预处理格外难
金融文本具有三个显著特征:时效性强、结构混杂、术语密集。一份上市公司年报可能同时包含段落文本、合并财务报表、脚注、图表标题;一份研报PDF可能是扫描件,也可能是双栏排版;交易所公告则常以HTML表格承载关键数字。若直接按固定长度切分,极易把“营业收入”与“同比变化”拆到两个块中,导致检索时语义断裂。
因此,预处理的目标不是“把文件读成字符串”,而是在保留金融语义边界的前提下,把异构数据转化为带元数据的可检索单元。这要求我们同时关注解析精度、清洗强度与分块策略三者的平衡。
二、方法流程:五步构建可复用预处理管道
- 数据源选择与合规校验:优先选择交易所公告、巨潮资讯、公司官网投资者关系页等权威来源;对第三方数据需确认授权范围。采集时记录来源URL、抓取时间、文件哈希,便于溯源与增量更新。
- 多格式解析:PDF优先使用PyMuPDF或pdfplumber提取文本与表格;HTML使用BeautifulSoup或trafilatura去除导航与广告;Excel/CSV表格需识别表头层级与合并单元格。
- OCR处理:对扫描版PDF或图片型公告,使用PaddleOCR或Tesseract进行识别,并保留坐标信息以恢复阅读顺序。金融数字识别需重点校验“0/O”“1/l”“5/S”等易混字符。
- 文本清洗与去噪:去除页眉页脚、水印、重复免责声明、乱码字符;统一全半角、货币符号与日期格式;对表格中的空值、单位缺失进行标注而非直接删除。
- 分块与元数据注入:按标题层级与语义段落切分,表格独立成块并保留表头;每个块写入doc_id、公司代码、报告期、页码、chunk_type等元数据,供检索时过滤与重排。
关键参数建议:金融文本分块长度建议控制在300~600字符,重叠50~100字符;表格块可放宽至800字符但必须保留表头;元数据字段至少包含source、company_code、report_period、page、chunk_type五类。
三、案例场景:一份年报PDF的预处理实战
假设我们需要处理某上市公司2023年年度报告PDF,其中第45页为合并资产负债表。直接按固定长度切分会导致“货币资金”与金额分离。更合理的做法是:先用pdfplumber提取表格,识别表头行与数据行,将整张表作为一个独立chunk,并在元数据中标记chunk_type=table、table_name=合并资产负债表、unit=元。对于正文段落,则按“第X节 管理层讨论与分析”等标题层级切分,保留父级标题作为上下文前缀。
# 示例:表格块元数据注入
chunk = {
"doc_id": "annual_2023_600519",
"company_code": "600519",
"report_period": "2023-12-31",
"page": 45,
"chunk_type": "table",
"table_name": "合并资产负债表",
"unit": "元",
"text": "货币资金 | 1,234,567,890.00 | ..."
}
这样在检索“某公司2023年末货币资金”时,元数据过滤可先锁定公司代码与报告期,再在表格块中精确匹配,显著降低跨公司、跨期混淆。
四、误区与复盘:预处理中最容易踩的坑
| 常见误区 | 后果 | 改进策略 |
|---|---|---|
| PDF直接按字符数切分 | 表格断裂、语义碎片化 | 先解析结构,再按语义边界切分 |
| OCR结果不做数字校验 | 财务数据错误,检索结果不可信 | 对数字字段做正则校验与人工抽检 |
| 清洗时删除所有“噪声” | 误删脚注中的关键解释 | 区分页眉页脚与正文脚注,保留有效信息 |
| 元数据字段缺失 | 无法按公司、报告期过滤 | 建立统一元数据Schema并强制校验 |
| 忽略增量更新 | 旧报告与新公告冲突 | 记录文件哈希与抓取时间,支持版本管理 |
复盘提醒:预处理不是一次性任务。金融数据每日更新,建议将采集、解析、清洗、分块封装为可调度的Pipeline,并对每次运行输出质量报告,包括解析成功率、OCR置信度均值、分块数量与元数据完整率。只有可观测,才能持续优化。
综上,金融RAG的预处理环节需要以“语义保真”为核心,在解析精度、清洗强度与分块策略之间找到平衡。数据源选择决定上限,解析与OCR决定下限,而分块与元数据设计则直接决定检索的精准度。把这一层做扎实,后续的向量化与生成才有可靠的知识底座。