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-10 的 zh-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 条:
- 问:
fine-tune 大模型 时中文语料不足会有什么检索问题? - 期望:中英混合 query 偏向单一语区 embedding → 只召回中文或只召回英文文档;需多语言模型或双路翻译检索。
- 语料:lab/corpus/faq-version-conflict.md
实验记录 BM25-only / 向量-only / 混合 / +翻译 的 top-3 语言匹配度 与 RAGAS context_recall。
七、实验(半日)
- 固定 corpus:weknora-arch + faq-version-conflict + 2 篇英文 API stub(可放 lab/corpus/)。
- 跑 3 条混排 query(含 zh-008 问法变体):
WeKnora 三路检索 流程 是什么如何 fine-tune 大模型 在中文语料上PostgreSQL 连接池 配置
- 对比 embedding:
bge-m3vstext-embedding-3-small(若可配)。 - 失败则启用翻译双检索,记录额外 token 与 Recall 增益是否 worth it。
Excel/混排解析回归:case-1785 · 表格 HTML:case-1725。
八、贡献方向
- 中文停用词 / 产品专名词典 PR(
docreader或检索侧) - Ch20 增加 跨语言分区 10 条(中问英 doc / 英问中 doc)
- 分块器输出
langmetadata + 检索侧语言 boost(可选) - 文档:bge-m3 接入与 re-embed 检查清单
- CI:smoke-10 含 zh-008,PR 必附该条 context_recall
章末自检
- 说清中文 BM25 为何比英文难(分词边界 + 无空格)
- 解释 zh-008 失败时的两种修复路径(换 embed vs 翻译双检)
- 区分 #7「中文特化」与 #15「跨语言」的选题差异(各举一 PR)
- 设计 1 条「中文 query → 英文 API 文档」评测题并写 ground_truth