犀牛鸟 2026 研究笔记 estelledc.github.io

Ch44: 挑战深读⑥——中文 BM25 与跨语言检索

Part 10 · 合并 challenges #7 + #15 · Ch20 中文 Benchmark · 锚题:zh-008

结论先行:开源 RAG 栈多 英文先验——#7 体现在 BM25 无空格分词、jieba 切碎英文术语、停用词与专名不对齐;#15 体现在中英混排 query/doc 在 embedding 空间里 偏向某一语区,「fine-tune 大模型」可能只召回中文或只召回英文 chunk。大师默认:bge-m3 等多语言 embed + BM25 专名保护 + 必要时翻译双检索;验收必跑 smoke-10zh-008


一、日常类比:双语书架与索引卡

书架左中文右英文,索引系统若只懂一种语言,搜「微服务」就漏掉 Microservices。#7 是 中文侧:索引卡按字切、「向量库」变单字堆。#15 是 跨语区:问句里中英混写,向量被拉向训练数据更多的那一侧——像用偏科字典查双语词条,总少一半书。


二、#7 中文特化:典型坑

后果
BM25 按字/词切不当 Recall 低 检索
「WeKnora」≠「微诺拉」 双路 miss 词典
英文 embedding 主导 FAQ 中文口语问法差 嵌入
jieba 切 fine-tune 英文术语碎裂 分词
全角符号、混排 PDF token 噪声 解析 Ch39

三、#15 跨语言:三类问题

问题 例子 策略
混合 query 偏移 fine-tune 大模型 流程 bge-m3 + 双检
混合 doc 单 chunk EN 代码 + CN 解释同块 语言边界分块 lang: zh\|en
跨语言检索 中文问英文 API 文档 翻译 merge 或跨语 embed

与 #6 向量失真交叉:768 维装不下「同一 chunk 双语精义」→ 见 Ch43 混合检索。


四、分层对策矩阵

#7 手段 #15 手段 成本
解析 中文版面/表 case-1725 语言段检测
分词 产品词典、混排保护 英文 token 整词
嵌入 中文榜 bge-m3 多语言 embed 对比
检索 BM25+向量 RRF 查询翻译 + 双路 merge +1 LLM
评估 smoke-10 全量 zh-008 hard

翻译双检索伪流程

results_zh = retrieve(q)
q_en = translate(q)          # 仅术语对齐差或 zh-008 类失败时启用
results_en = retrieve(q_en)
merged = RRF(results_zh, results_en)

风险:翻译偏移专有名词;需 cache 同 rewrite。


五、平台简表

项目 中文 BM25 多语言 embed 混排分词
WeKnora ★ 三路 可配 bge-m3 可改进
FastGPT jieba 可配 英文词易碎
Dify 依赖配置 可配 工作流自定
RAGFlow DeepDoc 中文 可配 解析偏强

六、benchmark 锚题 zh-008

smoke-10.jsonl 第 8 条:

实验记录 BM25-only / 向量-only / 混合 / +翻译 的 top-3 语言匹配度 与 RAGAS context_recall。


七、实验(半日)

  1. 固定 corpus:weknora-arch + faq-version-conflict + 2 篇英文 API stub(可放 lab/corpus/)。
  2. 3 条混排 query(含 zh-008 问法变体):
    • WeKnora 三路检索 流程 是什么
    • 如何 fine-tune 大模型 在中文语料上
    • PostgreSQL 连接池 配置
  3. 对比 embedding:bge-m3 vs text-embedding-3-small(若可配)。
  4. 失败则启用翻译双检索,记录额外 token 与 Recall 增益是否 worth it。

Excel/混排解析回归:case-1785 · 表格 HTML:case-1725


八、贡献方向


章末自检


延伸阅读