游乐游手机版
首页/AI热点日报/热点详情

RAG应用选择最佳Embedding模型完整指南

类型:热点整理2026-06-28
首先,需要明确一个关键问题:在 RAG 应用中,Embedding 模型扮演着“翻译官”的角色,它将文本、图像等数据对象转化为数值向量,从而让机器能够理解语义。然而,面对市面上众多模型,如何挑选出最适合的那一个?答案非常直接:取决于你的具体业务场景和实际需求。接下来,我们将一步步深入分析这一过程。

首先,需要明确一个关键问题:在 RAG 应用中,Embedding 模型扮演着“翻译官”的角色,它将文本、图像等数据对象转化为数值向量,从而让机器能够理解语义。然而,面对市面上众多模型,如何挑选出最适合的那一个?答案非常直接:取决于你的具体业务场景和实际需求。接下来,我们将一步步深入分析这一过程。

01. 确定具体用例

在着手选择模型之前,先理清以下几个问题:

  • 通用模型能否满足我的需求?
  • 或者,是否存在特殊诉求?比如数据处理上是否只涉及文本、图片这类单一模态,还是需要多模态?另外,数据是否集中在某个特定领域,例如法律、医学这类专业性极强的场景。

坦诚而言,大多数情况下,针对你所需要的模态,选择一个通用模型就已足够。不必一开始就把问题复杂化。

02. 选择通用模型

那么,通用模型该如何挑选?HuggingFace 上的 MTEB 排行榜是一个不错的参考入口。该榜单列出了市面上各类开源和专有文本 Embedding 模型,每个模型都附带参数规模、内存占用、向量维度、最大 token 数等硬性指标,以及在检索、摘要等任务上的具体得分。

在为 RAG 应用选择模型时,需要重点关注以下几个维度:

任务:MTEB 排行榜顶部提供了多种任务选项卡。由于 RAG 的核心是检索(Retrieval),直接点击该标签即可。

语言:必须与你的数据集语言完全对齐,这一点无需赘述。

得分:它反映了模型在特定基准上的表现。不同任务采用的评估指标不同,但总体范围都在 0 到 1 之间,分数越高越好。

模型规模与内存:这是一个硬性约束。模型越大,检索性能通常越好,但延迟也会更高。而且,有时大模型可能出现过拟合,在生产环境中表现反而不如小模型。一个务实的做法是:先用一个轻量级的小模型快速搭建 RAG 原型,待整套流程跑通后,再更换更大、性能更强的模型进行精调。

向量维度:维度越长,理论上能捕获的数据细节越丰富。但真的有必要将文档数据用 8192 维来表示吗?大概率不需要。相反,维度小一些,推理速度更快,存储也更节省。关键在于信息捕获与运行效率之间找到平衡点。

最大 token 数量:对于多数 RAG 场景来说,将分块粒度控制在单个段落即可,512 token 的模型基本能满足需求。只有在处理超长文本的特殊场景时,才需要 token 数量更大的模型。

03. 在 RAG 应用中评估模型

MTEB 排行榜的参考价值很大,但需要谨慎使用。因为那些结果是由模型方自行报告的,不排除有些模型将 MTEB 数据集纳入训练数据,导致分数虚高。更关键的是,基准数据集与你的真实业务数据往往存在偏差。因此,最终判断必须基于你自己的数据进行评估。

3.1 数据集

从 RAG 应用的数据中,抽取一小部分制作成标注好的数据集。例如下面这个示例:

LanguageDescription
C/C++A general-purpose programming language known for its performance and efficiency...
JavaA versatile, object-oriented programming language designed to have as few implementation dependencies as possible...
PythonA high-level, interpreted programming language known for its readability and simplicity...
JavaScriptA high-level, dynamic programming language primarily used for creating interactive and dynamic content on the web...
C#A modern, object-oriented programming language developed by Microsoft...
SQLA domain-specific language used in programming and managing relational databases...
PHPA server-side scripting language designed primarily for web development...
GolangA statically typed, compiled programming language designed by Google...
RustA systems programming language focused on safety and concurrency...

3.2 创建 Embedding

接下来,利用 PyMilvus 中的模型工具,为这些数据生成向量。代码示例如下:

def gen_embedding(model_name):
    openai_ef = model.dense.OpenAIEmbeddingFunction(
        model_name=model_name, 
        api_key=os.environ["OPENAI_API_KEY"]
    )
    
    docs_embeddings = openai_ef.encode_documents(df['description'].tolist())
    return docs_embeddings, openai_ef

然后将生成的 Embedding 存入 Milvus 的 collection 中:

def sa ve_embedding(docs_embeddings, collection_name, dim):
    data = [
        {"id": i, "vector": docs_embeddings[i].data, "text": row.language}
        for i, row in df.iterrows()
    ]
    
    if milvus_client.has_collection(collection_name=collection_name):
        milvus_client.drop_collection(collection_name=collection_name)
    milvus_client.create_collection(collection_name=collection_name, dimension=dim)
    
    res = milvus_client.insert(collection_name=collection_name, data=data)

3.3 查询

定义好查询函数,便于后续检索:

def query_results(query, collection_name, openai_ef):
    query_embeddings = openai_ef.encode_queries(query)
    res = milvus_client.search(
        collection_name=collection_name, 
        data=query_embeddings, 
        limit=4,  
        output_fields=["text"],
    )
    result = {}
    for items in res:
        for item in items:
            result[item.get("entity").get("text")] = item.get('distance')
    return result

3.4 评估 Embedding 模型性能

我们以 OpenAI 的两个模型——text-embedding-3-smalltext-embedding-3-large——进行一次对比。评估指标很多,这里重点看两个最基本且直观的:准确率(Precision)和召回率(Recall)。

准确率:检索结果中,真正相关的内容占比。

Precision = TP / (TP + FP)

召回率:从整个数据集中,成功检索出多少真正相关的内容。

Recall = TP / (TP + FN)

查询 1:auto garbage collection

相关项:Java, Python, JavaScript, Golang

Ranktext-embedding-3-smalltext-embedding-3-large
1❎ Rust❎ Rust
2❎ C/C++❎ C/C++
3✅ Golang✅ Java
4✅ Java✅ Golang
Precision0.500.50
Recall0.500.50

查询 2:suite for web backend server development

相关项:Java, JavaScript, PHP, Python(此处存在一定主观判断)

Ranktext-embedding-3-smalltext-embedding-3-large
1✅ PHP✅ JavaScript
2✅ Java✅ Java
3✅ JavaScript✅ PHP
4❎ C#✅Python
Precision0.751.0
Recall0.751.0

通过这两个查询的对比,结果已能看出一定差异。当然,这仅仅是一个起点。要使评估结果具有说服力,还需要扩大数据量,增加查询数量。数据集越大、测试样例越多,评估结论才越可靠。

04. 总结

在 RAG 应用中,选择正确的 Embedding 模型是决定检索质量的关键环节。正确的路径是:从业务需求出发,在 MTEB 等排行榜上筛选出通用候选模型,然后利用自己的数据集进行真实评估,重点关注准确率和召回率。只有这样挑选出来的 Embedding 模型,才能真正提升 RAG 应用的召回准确率。

来源:https://www.53ai.com/news/RAG/2024120459480.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。