想做智能客服、企业知识库、RAG 应用?你绕不开的问题是:该用什么向量模型?用什么库?用什么排序器?本篇一次讲清
一、向量模型
向量模型是整个语义检索链路的第一步,选错模型,后面再怎么优化都救不回来。
1.什么是向量模型?核心关注点有哪些?
一个文本 embedding 模型的核心目标是:
把文本映射成一个能表达语义的向量,供向量库做检索、排序或相似度计算。
我们选模型时,主要看这几个维度:
|
|
---|---|
语义表达能力(semantic fidelity) |
|
压缩率(是否能低维表达) |
|
领域适应性 |
|
中英文支持 |
|
模型大小/部署难度 |
|
是否能用于 rerank |
|
2.常见向量模型选型建议(中文语境为主)
|
|
|
|
|
---|---|---|---|---|
BGE-M3 |
|
|
|
BAAI/bge-m3 |
BGE-small-zh |
|
|
|
BAAI/bge-small-zh |
text2vec-base-chinese |
|
|
|
shibing624/text2vec-base-chinese |
GTE-base |
|
|
|
thenlper/gte-base |
E5 系列 |
|
|
|
intfloat/multilingual-e5-base |
Cohere embed-multilingual-v3 |
|
|
|
|
📌 简单选型建议:
-
个人轻量测试、本地化 → bge-small-zh
或text2vec-base-chinese
-
公司级、支持 rerank → bge-m3
-
中英混合、国际化场景 → GTE-base
或E5
3.向量维度 ≠ 精度,二者的区别?
很多人以为维度高 = 精度高,其实不对,这两个概念要分开:
|
|
---|---|
维度(Dimension) |
|
精度(Precision) |
|
举个例子 |
|
二、向量库
有了好向量,还要有好仓库,否则查得慢、存得乱、删不掉。
1.什么是向量库?为什么不能直接用 list 存向量?
向量库的主要功能就是:
快速存储 + 检索向量,支持近似最近邻搜索(ANN)。
为什么不用列表存呢?比如你有 100 万条文档,每条都是 768 维的向量,用户来一个 Query,你不能每次都和所有向量算一遍余弦距离,太慢了。所以你需要专业的向量库,用各种**加速算法(如 IVF、HNSW)**来快速找到最接近的 K 条向量。
📚 2.主流向量库差异对比
|
|
|
|
|
---|---|---|---|---|
FAISS |
|
|
|
|
Milvus |
|
|
|
|
Qdrant |
|
|
|
|
Weaviate |
|
|
|
|
ElasticSearch |
|
|
|
|
Chroma |
|
|
|
|
✅ 推荐选型策略(看你是哪类项目)
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
🔧 3.插入 / 删除 / 更新文档时,如何管理向量?
这一点很重要,但很多人忽略,尤其是在做“文档知识库问答”时:
✅ 插入:
-
新增文档 → 切片 → 向量化 → 存入向量库要记得带上对应的 metadata,比如标题、时间、部门等。
✅ 删除:
-
按 document_id
删除,不仅要删 metadata,还要删对应向量 -
有些库(如 Qdrant)支持按标签批量删除
✅ 更新:
不要直接覆盖!
-
通常要先删除旧的,再插入新的切片 + 向量 -
原因是:一段文档可能被切成多个 chunk,如果直接“覆盖”,很容易残留旧片段
✍️ 补充技巧:
-
插入时建议带上 chunk_id
、doc_id
,方便追踪和更新 -
如果向量模型更新了,旧向量也要重算(不然新旧向量不一致)
三、检索
检索 = 信息命中的关键策略,关键词 vs 向量 vs 混合,各有千秋,选错方法可能“差之毫厘谬以千里”。
🎯 1.常见检索方式总览
|
|
|
|
|
---|---|---|---|---|
关键词检索 |
|
|
|
|
向量检索 |
|
|
|
|
混合检索 |
|
|
|
|
🔍 2.关键词检索(Keyword-based Retrieval)
1. 原理
-
文档、问题 → 分词 → 统计词频(TF-IDF)或 BM25 打分 → 选出包含关键词的文档 -
不理解「语义」层面,比如“结婚”≠“婚礼”
2. 关键词检索优点
-
快、可解释:你知道它为啥命中,因为你看到词了 -
适合标题、标签、代码搜索等场景
3. 常用工具
-
BM25
是最常见的关键词匹配算法(Elasticsearch、Whoosh、Lucene) -
搜索引擎、电商站内搜索、PDF关键词命中
🧠 3.向量检索
1. 原理
-
每段文本 → 转成向量(用 Embedding 模型) -
问题 → 也转成向量 -
相似度计算(通常是余弦相似度) → 得出最相近的文本段落
2. 向量检索优点
-
可理解语言语义,如“我累了”≈“我想休息一下” -
能找到意思相近但没有关键词重合的内容
3. 缺点
-
不解释为什么召回了这些文本 -
不适合精确查找、对结构敏感的信息(比如合同条款)
⚖️ 4.混合检索(Hybrid Retrieval)
通常是以下结构:
1. 问题 -> Embedding 向量
2. 向量检索召回 Top-K 文档(广撒网)
3. + BM25/关键词命中过滤(精准查找)
4. + Reranker 精排打分(语义判断)
适合高精度场景,比如医疗、法律文档检索。
🏷️ 5.元数据过滤(Metadata Filtering)
在检索过程中,可以结合结构化的元数据做“筛选”:
-
每条文档不仅有文本,还有:类型(FAQ、新闻)、来源(文档名、网页)、时间(2024年)、语言等信息 -
举例:只要「2023年以后的医学文献」+「PDF 提取的内容」
元数据存储在哪里?
通常写在 切片的时候,或者嵌入的时候一起加入向量库中,比如:
{
"content": "XXXX",
"metadata": {
"source": "合同A.pdf",
"type": "付款条款",
"page": 12,
"created_at": "2023-10-01"
}
}
这时候你就可以在检索前,先用 metadata 做「结构化过滤」。
四、排序
🧠 1.什么是 TopK?
TopK 是一个很常见的术语,意思是:
从所有候选结果中,取出相关性最高的前 K 个文档。
比如:
-
你有 10 万条 FAQ; -
用户提问:“怎么退货”; -
系统通过某种相似度算法(BM25、embedding 等)打分后,取得相关性最高的前 3 条——这就是 top3。
所以:
-
✅ “K”是你设定的参数; -
✅ “相关性”是通过评分函数来的,评分函数的计算方式取决于检索方法; -
✅ 适合用户提问比较明确的场景,通常会搭配 rerank 使用。
🧠 2.TopK 背后的“相关性”是怎么判断的?
这取决于你使用的检索方法,不同方式的评分函数不同:
|
|
---|---|
BM25 |
|
向量检索 |
|
语义 rerank |
|
总结:不同的检索方法,用不同的“评分机制”来判断文档是否 relevant。
⚔️ 3.召回(Recall) vs 精排(Rerank)
这是现代大模型知识检索系统里的一个经典两阶段流程:
✅ 1. 召回(Recall)
-
目的:快速从海量文本中挑出一批“可能相关”的文档;
-
常用方法:
-
BM25、向量相似度(embedding); -
通常取 Top50、Top100,比较宽松; -
快但不准,就像捞鱼捞上来一堆。
✅ 2. 精排(Rerank)
-
目的:对召回出来的这 50~100 条再精细排序,找出语义上最贴合的问题的内容;
-
方法:
-
用更大的模型打分(如 bge-reranker
、ColBERT、MiniLM 等); -
成本高一点,但准确度提升显著; -
就像把捞上来的鱼一个个检查,再选出最肥美的几条。
这就像在面试筛选简历一样:先粗筛(召回)→再精排打分。
五、数据清洗 & 🪓 切片策略(别忽视!)
在 embedding 之前,清洗和切片是影响效果的“隐性关键因素”,但很多人忽略了它们的重要性。
1.数据清洗建议:
-
删掉无效字段(如页眉、页脚、水印、页码、二维码识别失败字符等); -
保留标题、段落、表格、列表等结构信息,别做成纯文本流; -
清除乱码 / HTML tag / 多余空格等噪音; -
PDF / 扫描图请先 OCR,但 OCR 后的结构往往极差,建议后处理重建结构(如文档树 / JSON 格式)。
2.切片策略:
文档不是越长越好,也不是越短越强 —— 切片策略=召回质量的下限
-
常见方式:
-
固定长度 + 滑动窗口(适合结构化文档); -
按语义/标题/换段切分(适合 Markdown、手册类); -
建议每段 200~500 字左右,太长影响召回精度,太短会语义不完整;
-
每个 chunk 加上
chunk_id
、doc_id
,方便更新 & 溯源; -
有结构的内容(如 FAQ)建议保留原始字段结构,别拆散。
👉 我之前专门写过两篇推文讲数据清洗和切片策略,不难,很好理解,有兴趣的可以看看:
https://mp.weixin.qq.com/s/v5-UckKIAFyROHrE3quCSg
卷心菜ai,公众号:卷心菜ai知识库常见数据清洗难题:结构提取失败了怎么办?
https://mp.weixin.qq.com/s/x_RERnaJREedPp8evVtcFQ
卷心菜-又卷又菜,公众号:卷心菜ai一文搞懂知识库的“切片”:如何处理 Word、PDF、Excel、HTML 等格式?