知识库/索引与分词(BM25 / KNN / Hybrid)
4.5 索引与分词(BM25 / KNN / Hybrid)
Pop 的知识库检索系统由三大核心技术组成:
BM25(关键词检索) + KNN 向量检索(语义检索) + Hybrid 混合检索(融合两者优势)。
本节将详细解释它们的原理、存储结构、优缺点以及最佳使用场景。
📚 一、Pop 的检索系统架构
Pop 使用双索引结构:
Chunk 文本数据
├── BM25 索引库(关键词倒排索引)
└── 向量索引库(Embedding 语义检索)
前端选择不同检索方式时,Pop 会分别调用对应的索引模块。
🔍 二、BM25(关键词检索)
BM25 是传统搜索引擎使用的检索算法,它基于“词匹配”而非语义理解。
2.1 BM25 原理简介
BM25 根据三类因素计算相似度:
| 因素 | 作用 |
|---|---|
| 词频 TF | 某个词在 Chunk 中出现多少次 |
| 逆文档频率 IDF | 词的稀有程度(越稀有越重要) |
| Chunk 长度 | 避免长文本得分过高 |
2.2 BM25 适用场景
| 场景 | 说明 |
|---|---|
| 查询包含专业术语 | 例如 API 文档、型号、指令、变量名 |
| 查询拼写非常准确 | 如 “SR-71”、“gpt-embedding-api” |
| 查询短句或关键词 | FAQ、标题搜索、精确定位 |
2.3 BM25 的优点
- 不需要 Embedding,速度快
- 对专业名词、代码片段识别能力强
- 不受模型质量影响
2.4 BM25 的缺点
- 无法理解语义
- “同义词”“解释类问题”效果弱
- 不能回答描述型问题(如 “这个功能是做什么的?”)
🧠 三、KNN(向量检索)
KNN(k-nearest neighbors)基于 Embedding 向量,通过计算相似度找到语义上最接近的 Chunk。
3.1 原理
流程如下:
- 对 Chunk 生成 Embedding(向量,如 1024 维)
- 将向量写入向量数据库
- 查询时对 Query 生成嵌入
- 使用余弦相似度 / 内积 找最近 K 个 Chunk
距离越近 → 语义越相似。
3.2 KNN 的优势
- 能理解语义,不需要关键词匹配
- 同义词、改写、模糊表达都能检索
- 在智能问答场景中表现最佳
例如:
用户问:“如何设置域名绑定?”
即使文档写的是“站点域名配置”,KNN 仍能命中。
3.3 KNN 的不足
- 对专业词、代码、参数名表现不如 BM25
- 依赖向量模型,质量与模型能力高度相关
- 向量库体量大时需要更强整合(索引构建)
⚡ 四、Hybrid(混合检索)
Hybrid 是 BM25 与 KNN 的融合策略,结合两者优势,Pop 默认优先使用 Hybrid 模式。
4.1 Hybrid 的工作原理
常见融合方式:
Hybrid Score = α * BM25_Score + β * Embedding_Score
Pop 使用权重融合 + 分段排序策略,确保:
- 专业术语由 BM25 命中
- 描述性问题由 KNN 命中
- 综合排序后返回最优的前 N 个片段
4.2 Hybrid 的最佳场景
| 场景 | BM25 | KNN | Hybrid |
|---|---|---|---|
| 代码、命令 | ✔️ | ❌ | ✔️ |
| 专业术语 | ✔️ | ❌ | ✔️ |
| 模糊提问 | ❌ | ✔️ | ✔️ |
| 长句描述 | ❌ | ✔️ | ✔️ |
| FAQ 类问答 | ✔️ | ✔️ | ✔️ |
| 大型综合知识库 | ❌ | ❌ | ⭐ 必须使用 |
因此 Hybrid 是“通用最佳策略”。
🔡 五、Pop 的分词机制
5.1 BM25 分词
Pop 对 BM25 使用:
- 中文分词器(自动切词)
- 英文、数字按空格与符号拆分
- 特殊符号处理(如 URL、路径)
例如:
"如何绑定域名到网站?"
→ ["如何", "绑定", "域名", "网站"]
5.2 KNN 分词
KNN 依赖 Embedding 模型,而不是传统分词:
- 模型会自动处理中文
- 自动识别语义单元
- 无需手动分词
例如 OpenAI 的 Embedding 会自动理解:
“绑定域名” ≈ “域名配置”
📊 六、权重调整与排序规则
Pop 的 Hybrid 检索采用多步排序:
- BM25 得分排序
- Embedding 相似度排序
- 权重融合
- 去重
- 按文档优先级重新排序
- 综合评分产出最终结果
这种排序在大多数知识库中表现稳定可靠。
📌 七、建议使用策略
| 你的知识库类型 | 推荐检索方式 |
|---|---|
| 技术文档 / API / 代码库 | Hybrid(最优) |
| FAQ、标准文档 | Hybrid |
| 纯文本书籍 | KNN |
| 超多公式 / 专业符号 | BM25 + Hybrid |
| 索引规模巨大(> 1e6 chunks) | KNN + 限定 BM25 |
✅ 总结
Pop 的三种检索方式各有优势:
| 检索方式 | 擅长 | 不擅长 |
|---|---|---|
| BM25 | 专业名词、精确匹配 | 语义理解弱 |
| KNN | 同义/模糊查询、长句提问 | 专业词效果弱 |
| Hybrid | 综合最强、默认推荐 | 需双索引、占用资源较多 |
Hybrid 是 Pop 默认的核心检索方式,也是最适合大多数知识库问答的选择。