一、明确学习目标:理解现代智能搜索与RAG系统的工作机制
我们首先要搞清楚的是:当我们在使用如ChatGPT这类大模型提问时,它为何能从海量信息中迅速提取出最相关的答案?其背后依赖的核心技术主要有两个步骤:
- 第一步:快速召回可能相关的内容(即检索/召回)
- 第二步:从中精准筛选最优结果(即重排序/精排)
这就像你在百度搜索“如何做红烧肉”,系统会先返回100个相关菜谱,然后你逐个浏览,最终选出最可信、最详细的那一份。整个过程分为“广撒网”和“精挑细选”两个阶段。
二、“两步走”策略详解:从粗筛到精排
第一阶段:大海捞针——检索(Recall)
- 目标:在百万级文档中快速锁定前100个潜在相关项
- 特点:速度极快,强调效率
- 核心技术:Embedding模型(也称“双塔模型”)
第二阶段:优中选优——重排序(Reranking)
- 目标:对初步筛选出的100个候选结果进行深度评估,选出最匹配的前10个
- 特点:精度极高,强调准确性
- 核心技术:Rerank模型(又称“交互式模型”)
形象比喻:找对象的过程与此类似。首先根据年龄、城市、学历等硬性条件筛选出100位候选人(检索),再通过深入交流了解性格、三观等细节,最终确定最适合的3人(重排序)。
三、任务类型的区分:对称性 vs 非对称性
对称性任务
- 特征:两句话可以互换位置而不影响语义相似度
- 示例:
- “我的快递到哪了?” 与 “查一下我的包裹状态”
- “今天天气怎么样?” 与 “天气情况如何?”
- 判断标准:A对B的相似度等于B对A的相似度
非对称性任务
- 特征:查询简短,文档详尽;二者角色不可互换
- 示例:
- 查询:“感冒吃什么药?”(简洁直接)
- 文档:“感冒时建议服用板蓝根、感冒灵等中成药,同时多喝水、多休息……”(内容丰富)
- 关键点:问题和文档不具备可交换性
在RAG架构中,非对称性任务是检索阶段的核心挑战——即如何利用一个简短的问题,从大量长文本中找出最相关的资料。
四、Embedding模型:高效的信息筛选器
什么是Embedding?
将文字转化为数字向量,使计算机能够“理解”语义。语义相近的句子,其对应的向量也会更接近。
类比说明:为每个人分配一个“身份证号”,家庭成员的编号前几位往往相似,代表他们属于同一语义家族。
Embedding技术的三大演进阶段:
- 传统词嵌入
- 原理:基于统计频率,类似查字典
- 典型代表:TF-IDF
- 优点:简单高效
- 缺点:无法识别语义,“苹果公司”和“吃的苹果”会被视为相同
- 静态词嵌入
- 每个词拥有固定向量
- 代表模型:Word2Vec、GloVe
- 进步之处:能捕捉部分语义关系(如“国王-男人+女人=女王”)
- 局限性:无法处理一词多义
- 动态词嵌入
- 根据上下文动态调整词向量
- 代表模型:BERT、BGE系列
- 重大突破:同一个词在不同语境下向量不同
- 例如:“苹果股价上涨”中的“苹果” vs “苹果真好吃”中的“苹果”——向量完全不同
双塔模型工作原理
[查询编码器] --(编码)--> [查询向量]
↓
[向量相似度计算]
↑
[文档编码器] --(编码)--> [文档向量]
为何速度快?
文档可提前编码并存储,用户提问时仅需对查询进行编码,并计算其与预存向量的相似度,极大提升响应效率。
在LangChain/RAG中的应用
Retrieval常用于将文档转换为向量并存入向量数据库(如Milvus),以便后续快速检索。
关键参数与指标
- 维度:向量长度
- GPT-2:768维(具备基本语义描述能力)
- DeepSeek-V3:7168维(更高精度表达)
- 权衡点:维度越高表达越强,但计算开销越大
- 相似度计算方式
- 余弦相似度(最常用):衡量向量方向的一致性
- 点积相似度
- 欧氏距离
五、Rerank模型:决定胜负的“终极裁判”
交互式模型工作原理
将查询与文档拼接后共同输入模型,让两者发生深度交互,由模型输出相关性得分。
输入:[CLS] 查询文本 [SEP] 文档文本 [SEP]
输出:相关性分数(0-1)
真实优缺点分析
- 优点:极其准确,因模型能看到完整的上下文交互
- 缺点:非常耗时,每个查询-文档对都需要单独推理一次
在RAG流程中的定位:
通常置于初步检索之后,用于对Top K(如50~100)个候选结果进行精细化排序。
实际应用建议:
- 适用于候选集较小的情况(少于100条)
- 高精度要求场景优先考虑
- 最佳实践:与Embedding模型配合使用——前者负责快速召回,后者负责精细打分
六、模型效果如何评估?主流评测基准介绍
MTEB:全球通用的“模型奥林匹克”
- 涵盖8大类自然语言任务:检索、重排、分类、聚类等
- 支持100+种语言
- 综合性强,被誉为NLP模型的全能测试平台
C-MTEB:专为中文优化的评测榜单
- 完全聚焦中文语境
- 重点考察检索与重排能力
核心评价指标:nDCG@10
- 衡量前10个检索结果的整体质量
- 分数范围0~1,越高越好
实战代码示例
# 使用mteb库评估模型
from mteb import MTEB
# 选择科学事实检索任务
evaluation = MTEB(tasks=["SciFact"])
results = evaluation.run(model)
print(f"nDCG@10分数: {results['ndcg_at_10']}")
七、BGE-M3模型:中文场景下的全能利器
被誉为“中国人的瑞士军刀”,集三大核心技术于一身:
- 密集检索:基于语义理解进行匹配(像人类一样“读懂意思”)
- 稀疏检索:基于关键词匹配(类似传统搜索引擎)
- 多向量检索:采用ColBERT风格,实现细粒度匹配
代码调用方式
from FlagEmbedding import BGEM3FlagModel
# 加载模型
model = BGEM3FlagModel("BAAI/bge-m3")
在构建高效的检索系统时,向量化处理是关键步骤之一。以下是对核心流程的详细说明:
首先进行向量编码操作:
# 对查询内容进行编码
query_vec = model.encode_queries("如何学习编程?")
# 对文档内容进行编码
doc_vec = model.encode_corpus("学习编程需要掌握基础知识...")
# 计算两者之间的余弦相似度
similarity = cosine_similarity(query_vec, doc_vec)
通过上述指令可实现查询与文档的向量表示,并计算其语义相似性。
指令机制解析
为了提升模型对任务类型的识别能力,可以为查询和文档分别设置特定提示语:
model = BGEM3FlagModel(
model_path,
query_instruction_for_retrieval="为这个检索问题生成向量:",
passage_instruction_for_retrieval="为这段用于检索的文字生成向量:"
)
用户问题 → [Embedding模型] → 查询向量 → [向量数据库检索] → 候选文档
候选文档 → [Rerank模型] → 重排序 → Top 3文档 → [LLM生成答案]
这种设计有助于模型明确区分当前处理的是问题还是文本段落,从而增强语义匹配的准确性。
实际RAG系统中的应用流程
典型的基于LangChain的RAG架构包含多个阶段,从初始检索到最终排序,确保返回结果的相关性和质量。
参数配置建议
- Embedding维度:推荐使用768至1024维,兼顾性能与效率。
- 检索数量:初步召回50-100个候选结果,随后通过重排序精简至3-5条高相关性内容。
- 相似度阈值:设定最低相似度标准,自动过滤掉无关度较高的干扰项。
评估指标说明
检索阶段常用指标:
- 召回率@K:衡量前K个检索结果中是否包含正确答案的比例。
- 响应时间:反映用户端感受到的系统延迟,影响整体体验。
重排序阶段关注指标:
- nDCG@K:评估排序结果的质量,强调高相关性项目的位置优先性。
- MRR(平均倒数排名):关注第一个正确答案出现的平均位置,数值越高越好。
核心要点总结
- Embedding速度快但粒度较粗,适用于快速筛选,类似“快速扫描仪”。
- Rerank过程更精准但耗时较长,适合精细排序,如同“显微镜”。
- 中文任务应参考C-MTEB榜单表现,重点关注nDCG@10指标。
- BGE系列模型在中文场景下表现优异,支持多种检索模式。
- 实际部署需综合考虑速度、精度与成本三者之间的平衡。


雷达卡


京公网安备 11010802022788号







