3. 金融文本特性

在金融RAG系统中,分块、召回与混合搜索的优化策略,必须建立在对金融文本特性的深刻理解之上。金融文本并非同质语料,财报、研报、公告、新闻、法规五类文本在结构、术语密度、语义复杂性上差异显著。若用统一的分块粒度和召回策略处理所有文本,必然导致“财报表格被切碎、研报逻辑被割裂、法规条款召回不准”等问题。本节将逐类拆解其特性,并给出对RAG优化的直接启示。

一、核心原理:五类金融文本的结构与语义差异

金融文本的差异可以从三个维度刻画:结构规整度(是否具有稳定的章节、表格、条款编号)、术语密度(专业术语与实体在单位文本中的占比)、语义复杂性(跨句、跨段、跨文档的依赖程度)。三者共同决定了分块边界、召回方式和重排序策略。

五类金融文本的三维特性分布 结构规整度 → 术语密度 → 财报 高结构·高术语·中语义 研报 中结构·高术语·高语义 公告 高结构·中术语·低语义 新闻 低结构·中术语·中语义 法规 高结构·高术语·高语义

从图中可见,财报与公告结构规整度高,适合按章节、表格、条目切分;研报与法规语义复杂,跨段依赖强,需要更大的上下文窗口或父子块策略;新闻结构松散,术语密度中等,适合按段落加实体锚点切分。

二、方法流程:按文本类型定制分块与召回策略

基于上述特性,RAG系统应建立“文本类型识别 → 分块策略选择 → 召回通道配置”的流水线。具体流程如下:

  1. 类型识别:通过文件名、来源域名、文档元数据或轻量分类器判定文本类型。
  2. 结构解析:财报解析XBRL或PDF表格,公告解析标题层级,法规解析条款编号,研报解析章节与图表标题。
  3. 分块策略:财报按“报表+附注”切分,公告按“事项”切分,法规按“条-款-项”切分,研报按“章节+段落”切分,新闻按“段落+实体”切分。
  4. 召回通道:财报和公告以关键词+表格结构化检索为主,研报和法规以向量召回+重排序为主,新闻以混合搜索为主。
  5. 元数据注入:为每个块附加公司代码、报告期、条款号、发布机构等字段,供过滤和重排使用。
关键参数示例:财报表格块建议保留完整表格,最大不超过1500字符;法规条款块按“条”切分,单条超过800字符时按“款”再切;研报段落块建议512~800字符,并保留所属章节标题作为父块。

三、案例场景:同一问题在不同文本中的召回差异

假设用户提问:“某公司2023年净利润是多少?”

文本类型 典型结构 术语密度 语义复杂性 推荐分块 召回策略
财报 报表+附注,表格密集 高 中 表格整块+附注段落 结构化过滤+关键词
研报 章节+图表+分析 高 高 段落+父章节 向量+重排序
公告 标题+事项+附件 中 低 事项级块 关键词+元数据
新闻 段落+引述 中 中 段落+实体锚点 混合搜索
法规 章-节-条-款 高 高 条款级块 向量+条款号过滤

若统一按512字符切分,财报表格会被拦腰截断,净利润数字与“归属于母公司”等限定词分离,召回后答案错误;法规条款被切碎后,“前款所称”指代丢失,语义完全断裂。因此,分块策略必须与文本类型绑定。

四、误区与复盘:常见错误及修正

误区一:所有文本统一分块粒度。财报表格、法规条款、新闻段落对块大小的容忍度完全不同。修正:按类型配置分块器,至少区分“结构化块”和“语义块”。
误区二:忽视术语密度对向量化的影响。金融术语如“商誉减值”“递延所得税资产”在通用嵌入模型中区分度低。修正:使用金融领域嵌入模型,或在召回后加入术语匹配重排。
误区三:公告与新闻混用召回通道。公告需要精确匹配事项标题,新闻需要语义泛化。修正:公告走关键词+元数据过滤,新闻走混合搜索。
复盘要点:每类文本至少保留一个“最小完整语义单元”作为块边界。财报的最小单元是“一张报表或一条附注”,法规是“一条”,公告是“一个事项”,研报是“一个分析段落”,新闻是“一个事实段落”。块边界清晰,召回质量才有保障。
# 分块配置示例(YAML)
chunking:
  financial_report:
    strategy: table_aware
    max_chars: 1500
    keep_table_intact: true
  research_report:
    strategy: section_paragraph
    max_chars: 800
    parent_block: section_title
  announcement:
    strategy: item_level
    max_chars: 600
    metadata: [company_code, event_type]
  news:
    strategy: paragraph_entity
    max_chars: 500
    entity_anchor: true
  regulation:
    strategy: article_clause
    max_chars: 800
    metadata: [law_name, article_no]