Embedding与Rerank模型通俗易懂教学指南

📚 一:先明白我们要做什么——学习目标

简单说,我们要搞懂现代智能搜索和RAG系统是怎么工作的。你问ChatGPT一个问题,它为什么能快速从海量资料中找到最相关的答案?这背后就靠两招:

  1. 快速找一堆可能相关的答案(检索/召回)

  2. 从里面挑出最准的那个(重排序/精排)

就像你先用百度搜“怎么做红烧肉”,出来100个结果,然后你一个个看,把最靠谱的那个菜谱挑出来。

🔄 二:搜索系统的“两步走”策略

第一阶段:大海捞针(检索/召回)

  • 目标:从百万文档中快速找出前100个可能相关的

  • 特点:快!非常快!

  • 用的武器:Embedding模型(也叫“双塔模型”)

第二阶段:精挑细选(重排序/精排)

  • 目标:从100个候选里找出最相关的10个

  • 特点:准!非常准!

  • 用的武器:Rerank模型(也叫“交互式模型”)

比喻:就像找对象,先根据“年龄、城市、学历”快速筛选100个人(检索),再跟这100人详细聊天,找出最合适的3个(重排序)。

⚖️ 三:两种不同的任务类型

对称性任务:两句话角色平等

  • 特点:两句话可以互换位置,意思不变

  • 例子

    • “我的快递到哪了?” vs “查一下我的包裹状态”

    • “今天天气怎么样?” vs “天气情况如何?”

  • 判断标准:A对B的相似度 = B对A的相似度

非对称性任务:问题和答案的关系

  • 特点:查询短小精悍,文档详细丰富

  • 例子

    • 查询:“感冒吃什么药?”(简短)

    • 文档:“感冒时建议服用板蓝根、感冒灵等中成药,同时多喝水、多休息……”(详细)

  • 关键:查询和文档角色不同,不能互换!

在RAG中的位置:非对称性任务正是检索(Retrieval)阶段要解决的核心问题——如何根据简短的问题找到最相关的长文档。

🏗️ 四:Embedding模型——你的“快速筛选器”

什么是Embedding?

把文字变成一串数字(向量),让计算机能“理解”文字的意思。相似的文字会有相似的数字串。

比喻:给每个人一个“身份证号码”,相似的人(比如同一家人)身份证号前几位会很像。

Embedding的三种进化形态:

  1. 传统词嵌入:基于统计,像查字典

    • 例子:TF-IDF

    • 优点:简单快速

    • 缺点:不懂语义,“苹果公司”和“吃的苹果”分不清

  2. 静态词嵌入:每个词有固定“身份证”

    • 例子:Word2Vec、GloVe

    • 进步:能捕捉一些语义关系

    • 局限:一词多义处理不好

  3. 动态词嵌入:根据上下文动态变化

    • 例子:BERT、BGE系列

    • 重大突破:同一个词在不同句子中向量不同!

    • “苹果股价上涨” vs “苹果真好吃”——两个“苹果”向量完全不同

双塔模型工作原理

[查询编码器] --(编码)--> [查询向量]
                      ↓
                 [向量相似度计算]
                      ↑  
[文档编码器] --(编码)--> [文档向量]
  • 为什么快?文档可以提前编码存好,用户提问时只需编码查询+计算相似度

  • 在LangChain/RAG中:通常用于Retrieval环节,生成文档的向量存入向量数据库(如Milvus)

重要参数和指标

  • 维度:向量的长度

    • GPT-2:768维(像有768个特征描述一个词)

    • DeepSeek-V3:7168维(描述更精细)

    • 权衡:维度越高表达能力越强,但计算越慢

  • 相似度计算方式

    • 余弦相似度(最常用):看两个向量方向的接近程度

    • 点积相似度

    • 欧氏距离

🎯 五:Rerank模型——你的“终极裁判”

交互式模型工作原理

把问题和文档拼在一起输入模型,让它们“深度交流”后打分。

输入:[CLS] 查询文本 [SEP] 文档文本 [SEP]
输出:相关性分数(0-1)

优缺点大实话

  • 优点:准!非常准!因为模型能看到查询和文档的全部交互

  • 缺点:慢!非常慢!每个查询-文档对都要单独计算

在RAG中的位置:通常接在初步检索之后,对top K(如50-100)个结果进行精细排序。

实际使用建议

  • 候选文档少的时候用(<100)

  • 对精度要求极高的场景用

  • 通常和Embedding模型搭配使用:Embedding快速找候选,Rerank精细排序

📊 六:怎么知道哪个模型好?——评测基准

MTEB:世界级“模型奥运会”

  • 包含8大类任务:检索、重排、分类、聚类等

  • 覆盖100+语言

  • 就像综合全能比赛

C-MTEB:中文专属“擂台赛”

  • 完全针对中文场景

  • 重点关注检索任务

  • 关键指标:nDCG@10

    • 衡量前10个结果的质量

    • 分数越高越好(满分1.0)

实战评测示例


# 使用mteb库评估模型
from mteb import MTEB

# 选择科学事实检索任务
evaluation = MTEB(tasks=["SciFact"])
results = evaluation.run(model)
print(f"nDCG@10分数: {results['ndcg_at_10']}")

🚀 七:BGE-M3模型——中国人的“瑞士军刀”

三大绝招集成一身

  1. 密集检索:语义匹配(像人一样理解意思)

  2. 稀疏检索:词法匹配(像传统搜索匹配关键词)

  3. 多向量检索: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="为这段用于检索的文字生成向量:"
)

**为什么有用**?让模型更清楚当前编码的是查询还是文档,提高检索精度。

🎯 八:在真实RAG系统中怎么用?

典型LangChain RAG流程

用户问题 → [Embedding模型] → 查询向量 → [向量数据库检索] → 候选文档
候选文档 → [Rerank模型] → 重排序 → Top 3文档 → [LLM生成答案]

参数选择指南

  • Embedding维度:768-1024维平衡效果和速度

  • 检索数量:先取50-100个(Embedding),再精排到3-5个(Rerank)

  • 相似度阈值:设置最低相似度,过滤完全不相关的结果

性能衡量指标

  1. 检索阶段

    • 召回率@K:前K个结果中包含正确答案的比例

    • 响应时间:用户感受的延迟

  2. 重排序阶段

    • nDCG@K:排序质量

    • MRR(平均倒数排名):第一个正确答案出现的位置

💎 九:一句话记住重点

  1. Embedding快但粗,像快速扫描仪

  2. Rerank准但慢,像显微镜

  3. 中文场景看C-MTEB,重点关注nDCG@10

  4. BGE系列中文强,支持多种检索模式

  5. 实际应用要权衡:速度、精度、成本三者的平衡

深入探索,请看下回分解~

### Embedding模型Rerank模型的概念 #### Embedding模型概念 Embedding模型是一种将离散的对象(如单词、文档或其他类型的实体)映射到连续向量空间的技术。这种技术能够捕捉对象之间的语义相似性和关系,广泛应用于自然语言处理领域。通过训练过程中的优化算法,嵌入表示可以反映不同维度上的特征差异,从而实现更有效的信息检索和分类任务[^1]。 #### Rerank模型概念 相比之下,Rerank模型专注于改进初始排序列表的质量。通常情况下,在初步筛选阶段会得到一组候选项;而Rerank模型则基于更加复杂的评估标准重新排列这些选项的位置,以提高最终展示给用户的推荐结果的相关度和满意度。这类模型往往依赖于额外的信息源以及更为精细的设计来完成其目标[^2]。 ### 区别应用场景 #### 数据需求的不同 对于Embedding模型而言,主要关注点在于构建高质量的词向量表征,因此需要大量标注良好的文本样本用于监督学习或无监督预训练。而在实际部署过程中,则侧重于如何利用已有的嵌入层快速适应新的业务场景而不必每次都从头开始训练整个网络结构[^3]。 另一方面,Rerank模型更多地涉及到对已有搜索结果进行二次加工的过程。这意味着除了原始查询外还需要获取关于各个备选方案的具体描述以及其他辅助属性等多方面资料作为输入条件之一。由于涉及到了具体的应用逻辑层面的操作,所以一般不会像前者那样容易迁移至完全不同性质的任务当中去。 #### 应用场景对比 - **Embedding模型**适用于任何需要理解词语之间内在联系并据此做出决策的地方,比如机器翻译、情感分析或是问答系统等领域内都发挥着重要作用; - **Rerank模型**更适合那些已经具备一定规模的基础索引库但希望进一步提升用户体验质量的服务提供商采用,例如电子商务平台的商品推荐引擎、搜索引擎的结果页面优化等方面均能见到此类方法的身影。 ```python # 示例代码:简单的Embedding操作 import torch.nn as nn class SimpleEmbedding(nn.Module): def __init__(self, vocab_size, embedding_dim): super(SimpleEmbedding, self).__init__() self.embedding = nn.Embedding(vocab_size, embedding_dim) def forward(self, inputs): return self.embedding(inputs) # 示例代码:基本的重排序函数框架 def rerank_items(query_vector, item_vectors_list): scores = [] for idx, vec in enumerate(item_vectors_list): score = compute_similarity(query_vector, vec) # 假设有一个计算相似性的函数 scores.append((idx, score)) sorted_scores = sorted(scores, key=lambda x: x[1], reverse=True) ranked_indices = [item[0] for item in sorted_scores] return ranked_indices ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peter_Monster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值