从BGE到 CLIP,从文本到多模态,Embedding 模型选型终极指南

通过通过将原始输入转换为固定大小的高维向量,捕捉语义信息,embedding(嵌入)模型在构建RAG、推荐系统,甚至自动驾驶的模型训练过程中都产生着至关重要的影响。

即使 OpenAI、Meta 和 Google 等科技巨头,也选择在近些年来,在 embedding 模型的研发上持续加大投入。以 OpenAI 为例,其最新的 text-embedding-3-small生成 1536 维向量,在保持高语义表达能力的同时,实现了更低的延迟和更小的模型体积,适用于对性能敏感的大规模语义检索场景。Meta 则早在 2019 年就推出了 DLRM(Deep Learning Recommendation Model),以 embedding 层为基础构建用户和物品的向量表示,用于广告点击率预测。DLRM 至今仍是支撑 Meta 推荐系统的核心组件,服务于其每天数千亿次的推荐请求。

但要如何选择 embedding 模型?本文将提供一个实用的评估框架,我们可以根据自身需求选择最合适的 embedding 模型。

img

01

明确任务和业务需求

在选择模型前,首先需要明确你的核心目标:

  • 任务类型:你要构建的是语义搜索、推荐系统、分类管道,还是其他类型的应用?不同任务对 embedding 表征信息的方式有不同要求。例如:

    • 语义搜索:需要如 Sentence-BERT 等模型,能够捕捉查询与文档之间的语义细节,使相似概念在向量空间中彼此接近。
    • 分类任务:embedding 需要反映类别结构,相同类别的输入应靠得更近,方便下游分类器区分。常用模型如 DistilBERT 和 RoBERTa。
    • 推荐系统:embedding 需反映用户-物品的关联,可采用如神经协同过滤(NCF)等基于隐反馈训练的模型。
  • ROI 评估:根据业务上下文权衡性能与成本。对于如医疗诊断等关键任务,提升准确率可能事关生死,可接受使用更昂贵但更精准的模型。而高并发的成本敏感应用则要精打细算,判断性能提升是否值回成本。

  • 其他限制条件

    • 多语言支持:通用模型往往对非英文内容表现不佳,可能需要多语言专用模型。
    • 专业领域支持:通用模型无法理解特定术语,比如医疗中的 “stat” 或法律中的 “consideration”。需考虑 BioBERT、LegalBERT 等专业模型。
    • 硬件/延迟要求:模型体积和推理速度直接影响部署的可行性。

02

评估数据特性

你的数据特性将直接影响模型选择。需考虑以下几点:

  • 数据模态:文本、图像、音频还是多模态?选用匹配的数据类型模型:

    • 文本:BERT、Sentence-BERT;
    • 图像:CNN 或 Vision Transformer;
    • 多模态:CLIP、MagicLens;
    • 音频:CLAP、PNN 等。
  • 领域特定性:是否需要专用模型?OpenAI 等通用模型对大众话题表现良好,但在医疗、法律等专业场景下可能抓不到细微差别,需考虑 BioBERT 等行业专用模型。

  • Embedding 类型选择

    • 稀疏 embedding(如 BM25)擅长关键词匹配;
    • 稠密 embedding(如 BERT)擅长语义理解;
    • 实践中常用混合方案:用稀疏 embedding 做精准匹配,稠密 embedding 做语义召回。

03

调研可用模型

了解任务与数据后,开始调研候选模型:

  • 受欢迎程度:选择社区活跃、使用广泛的模型更有保障,易于排障、更新快、文档丰富。

    • 文本:OpenAI embeddings、Sentence-BERT、E5/BGE;
    • 图像:ViT、ResNet,文本图像对齐可用 CLIP、SigLIP;
    • 音频:PNN、CLAP 等。
  • 版权与许可

    • 开源模型(MIT、Apache 2.0)适合自建部署,灵活性高但需运维能力;
    • 第三方 API 模型部署简单但费用持续、存在数据隐私和合规性顾虑;
    • 特别是金融、医疗等行业,自托管部署可能是唯一选择。

04

评估候选模型

初步筛选后,需在真实数据上测试模型质量:

  • 质量评估

    • 对于语义检索、RAG 应用,重点关注:结果的真实性(faithfulness)相关性(relevance)上下文精度召回率
    • 可借助工具如 Ragas、DeepEval、Phoenix、TruLens-Eval,统一评估流程。
    • 数据集选择也很重要,可基于真实案例、用 LLM 合成、或使用工具(如 Ragas、FiddleCube)构造。
  • 基准测试

    • 可参考公开 benchmark,如 MTEB(用于语义检索)。
    • 注意不同场景排名差异大,通用 benchmark 表现佳不代表真实环境中也优。
    • 应用自己的样本测试,防止模型对 benchmark 过拟合、在实际数据上反而不如人意。
  • 负载测试

    • 自部署模型时,需模拟真实并发请求,测试 GPU 利用率、内存占用、吞吐和延迟。
    • 有些模型单机测试效果不错,但在高负载下资源消耗过大,影响上线。

一般来说,比较常见的基准测试榜单有以下几种:

(1)文本数据:MTEB 排行榜

HuggingFace 的 MTEB leaderboard 是一个一站式的文本 Embedding 模型榜,我们可以了解每个模型的平均性能。

  • 可以将“Retrieval Average”列进行降序排序,因为这最符合向量搜索的任务。然后,寻找排名最高、占内存最小的模型。

    • Embedding 向量维度是向量的长度,即 f(x)=y 中的 y,模型将输出此结果。
    • 最大 Token 数是输入文本块的长度,即 f(x)=y 中的 x ,您可以输入到模型中。
  • 除了通过 Retrieval 任务排序外,还可以根据以下条件进行过滤:

    • 语言:支持法语、英语、中文、波兰语。(例如:task=retrieval, Language=chinese)。
    • 法律领域文本。(例如:task=retrieval,Language=law)

(2)图像数据:ResNet50

有时候我们可能想要搜索与输入图像相似的图片。比如,当我们想寻找更多苏格兰折耳猫的图片。在这种情况下,您可以上传一张苏格兰折耳猫的图片,并要求搜索引擎找到类似的图片。

ResNet50 是一种流行的 CNN 模型,最初由微软在 2015 年使用 ImageNet 数据训练。

同样,对于视频搜索,ResNet50 仍然可以将视频转换为 Embedding 向量。然后,对静态视频帧进行相似性搜索,返回给用户最相似的视频作为最匹配结果。

(3)音频数据:PANNs

类似于以图搜图,也可以基于输入的音频片段搜索相似音频。

PANNs(预训练音频神经网络)是常用的音频搜索 Embedding 模型,因为 PANNs 基于大规模音频数据集预训练,并且擅长音频分类和标记等任务。

(4)多模态图像与文本数据:SigLIP

近几年,涌现了一批针对多种非结构化数据(文本、图像、音频或视频)混合训练的 Embedding 模型。这些模型能够在同一向量空间内同时捕获多种类型的非结构化数据的语义。

多模态 Embedding 模型支持使用文本搜索图像、为图像生成文本描述或以图搜图。

OpenAI 在 2021 年推出的 CLIP 是标准的 Embedding 模型。但由于其需要用户自行进行微调,并不好用,所以到了 2024 年,谷歌推出了的 SigLIP(Sigmoidal-CLIP)。该模型在使用 zero-shot prompt时取得了不错的表现。

(5)多模态文本、音频、视频数据

多模态文本-音频 RAG 系统大多使用多模态生成型 LLM。这类应用首先将声音转换为文本,生成声音-文本对,然后将文本转换为 Embedding 向量。之后我们可以像往常一样使用 RAG 来检索文本。在最后一步,文本被映射回音频。

OpenAI 的 Whisper 可以将语音转录为文本。此外,OpenAI 的 Text-to-speech (TTS) 模型也可以将文本转换成音频。

多模态文本-视频的 RAG 系统使用类似的方法首先将视频映射到文本,转换为 Embedding 向量,搜索文本,并返回视频作为搜索结果。

OpenAI 的 Sora 可以将文本转换成视频。与 Dall-e 类似,您提供文本提示,而 LLM 生成视频。Sora 还可以通过静态图像或其他视频生成视频。

05

集成部署规划

选定模型后,考虑集成策略:

  • 权重选择:直接使用预训练权重上手快,但若需领域定制化,需投入资源微调。微调虽能提升效果,但需评估其投入产出比。

  • 部署方式选择

    • 自托管:控制力强、可降低大规模使用成本,数据私密性好,但需运维能力;
    • 云服务 API:部署快、运维省心,但存在网络延迟、成本累积问题。
  • 系统集成设计

    • 包括 API 设计、缓存策略、批处理方案;
    • 选择合适的向量数据库存储与检索 embedding,如 Milvus、Faiss 等。

06

端到端测试

在生产上线前,务必进行闭环测试:

  • 性能验证

    • 用实际业务数据验证是否符合预期;
    • 检查检索相关指标(MRR、MAP、NDCG),准确率指标(Precision、Recall、F1),以及运行效率(吞吐、P95/P99 延迟)。
  • 鲁棒性测试

    • 模拟不同输入情况,确保模型能稳定应对边缘情况与复杂数据。

如有必要,我们可以可以在自己的数据集上评估Embedding模型。以下是一个Embedding模型的流程示例:

数据集准备如下:

img

接下来,我们采用pymilvus[model]对于上述数据集生成相应的向量Embedding。关于 pymilvus[model] 使用,参见https://milvus.io/blog/introducing-pymilvus-integrations-with-embedding-models.md

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 save_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)

查询

我们定义查询函数,方便对于向量Embedding进行召回。

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

评估Embedding模型性能

我们采用 OpenAI的两个 Embedding模型,text-embedding-3-smalltext-embedding-3-large,对于如下两个查询进行比较。有很多评估指标,例如准确率、召回率、MRR、MAP等。在这里,我们采用准确率和召回率。

准确率(Precision) 评估检索结果中的真正相关内容的占比,即返回的结果中有多少与搜索查询相关。

Precision = TP / (TP + FP)

其中,检索结果中与查询真正相关的内容 True Positives(TP), 而 False Positives(FP) 指的是检索结果中不相关的内容。

召回率 (Recall)评估从整个数据集中成功检索到相关内容的数量。

Recall = TP / (TP + FN)

其中,False Negatives (FN) 指的是所有未包含在最终结果集中的相关项目

对于这两个概念更详细的解释,参见 https://zilliz.com/learn/information-retrieval-metrics

查询 1auto 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

查询 2suite 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

在这两个查询中,我们通过准确率和召回率对比了两个Embedding模型 text-embedding-3-smalltext-embedding-3-large 。我们可以以此为起点,增加数据集中数据对象的数量以及查询的数量,如此才能更有效地评估Embedding模型。

总结

选型的关键是遵循以下六步:

  1. 明确业务目标与任务类型
  2. 分析数据特性与领域需求
  3. 调研现有模型与授权模式
  4. 用测试集和 benchmark 严格评估
  5. 设计部署与集成方案
  6. 进行全链路上线前测试

要记住,最合适的模型不一定是 benchmark 分最高的,而是最契合你业务实际需求与技术约束的模型

在 embedding 模型快速迭代的时代,也建议大家可以定期复盘已有选型,持续关注新的模型与技术,及时替换可能带来重大收益的解决方案。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

### BGE Embedding Model in Natural Language Processing #### Introduction to BGE Models In the field of natural language processing (NLP), text embeddings play a crucial role by converting textual information into dense vector representations that can be utilized for various downstream tasks such as classification, similarity measurement, and retrieval operations. The BGE models developed by Beijing Academy of Artificial Intelligence (BAAI) represent some of the most advanced open-source embedding solutions available today[^1]. These models are designed to provide high-quality sentence-level embeddings which capture semantic meanings effectively. #### Utilizing Hugging Face Platform with BGE Models To leverage these powerful tools within one's projects or research endeavors, integration through platforms like Hugging Face proves invaluable due to its extensive library support along with ease-of-use features tailored specifically towards deep learning applications involving NLP techniques. Below is an example demonstrating how users may employ pre-trained versions provided via this platform: ```python from transformers import AutoTokenizer, AutoModel import torch tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-base-en-v1.5") model = AutoModel.from_pretrained("BAAI/bge-base-en-v1.5") def get_embedding(text): inputs = tokenizer([text], return_tensors="pt", padding=True, truncation=True) outputs = model(**inputs) last_hidden_states = outputs.last_hidden_state.mean(dim=1).detach().numpy() return last_hidden_states.flatten() example_sentence = "The quick brown fox jumps over lazy dogs." embedding_vector = get_embedding(example_sentence) print(f"Embedding Vector Shape: {embedding_vector.shape}") ``` This code snippet initializes both tokenization parameters alongside loading necessary components from specified checkpoints before defining a function responsible for generating corresponding vectors based upon input sentences passed thereto; finally applying said functionality against sample data points illustrates practical application scenarios whereupon developers might find utility when working closely around linguistic structures encoded numerically rather than lexically alone. #### Comparison Against Other Techniques When comparing performance metrics across different methodologies including those mentioned previously under references two and three respectively – namely GPT-3 versus alternative approaches concerning task-specific outcomes during categorizations processes [^2]; also noting advancements brought forth by SimCSE framework emphasizing simplicity yet effectiveness regarding contrastive training paradigms applied directly onto sequential patterns found inside corpora samples [^3]. --related questions-- 1. What specific advantages does utilizing BGE models offer compared to traditional word-based embeddings? 2. How do BGE models perform relative to other state-of-the-art methods on benchmark datasets? 3. Can you explain more about the architecture behind BGE models and what makes them unique? 4. Are there any particular use cases where BGE outperforms alternatives significantly enough to warrant preference selection? 5. Is it possible to fine-tune BGE models further using domain-specific texts? If so, could examples illustrating procedures involved please be shared?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值