如何选择合适的 Embedding 模型

2024-08-26

By Zilliz

如何选择合适的 Embedding 模型

检索增强生成(RAG)是生成式 AI (GenAI)中的一类应用,支持使用自己的数据来增强 LLM 模型(如 ChatGPT)的知识。

RAG 通常会用到三种不同的AI模型,即 Embedding 模型、Rerankear模型以及大语言模型。本文将介绍如何根据您的数据类型以及语言或特定领域(如法律)选择合适的 Embedding 模型。

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)

值得注意的是,由于部分训练数据最近才得以公开,一些 MTEB 上的 Embedding 模型可能是看似合适但实际不合适的模型,排名虚高,实际表现可能会有所不同。因此,HuggingFace 发布了一篇博客,介绍了判断模型排名是否可信的要点。点击模型链接(称为“模型卡片”)后:

寻找解释模型如何训练和评估的博客和论文。仔细查看模型训练使用的语言、数据和任务。同时,寻找由知名公司创建的模型。例如,在 voyage-lite-02-instruct 模型卡片上,您会看到其他的 VoyageAI 模型列出,但不包括这个。这是一个提示!该模型是一 个overfitting 模型,不应使用!

在下面的截图中,我会尝试来自 Snowflake 的新模型“snowflake-arctic-embed-1”,因为它排名较高,体积小到足以在我的笔记本电脑上运行,并且模型卡片上有博客和论文的链接。

blog-826.webp blog-826.webp

使用 HuggingFace 的好处就是,在选择完 Embedding 模型后,如果您需要更换模型,只需要在代码中修改 model_name 即可!

import torch
from sentence_transformers import SentenceTransformer

# Initialize torch settings
torch.backends.cudnn.deterministic = True
DEVICE = torch.device('cuda:3' if torch.cuda.is_available() else 'cpu')

# Load the model from huggingface.
model_name = "WhereIsAI/UAE-Large-V1"  # Just change model_name to use a different model!
encoder = SentenceTransformer(model_name, device=DEVICE)

# Get the model parameters and save for later.
EMBEDDING_DIM = encoder.get_sentence_embedding_dimension()
MAX_SEQ_LENGTH_IN_TOKENS = encoder.get_max_seq_length()

# Print model parameters.print(f"model_name: {model_name}")
print(f"EMBEDDING_DIM: {EMBEDDING_DIM}")
print(f"MAX_SEQ_LENGTH: {MAX_SEQ_LENGTH_IN_TOKENS}")```

![blog-826-2.webp](https://assets.zilliz.com/cms-cn/blog_826_2_bfe1862922.webp) 

2.图像数据:ResNet50

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

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

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

3.音频数据:PANNs

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

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

4.多模态图像与文本数据:

SigLIP 或 Unum

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

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

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

小型 LLM 模型如今变得越来越流行。因为这些模型不需要大型云计算集群,可以在笔记本电脑上运行。小模型占用的内存较少,延时更低,运行速度比大型模型更快。Unum 提供了多模态小型 Embedding 模型。

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

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

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

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

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

Milvus目前已经集成了主流的Embedding模型,欢迎大家体验:https://milvus.io/docs/embeddings.md

参考

MTEB leaderboard: https://huggingface.co/spaces/mteb/leaderboard

MTEB 最佳实践:https://huggingface.co/blog/lyon-nlp-group/mteb-leaderboard-best-practices

相似图片搜索:https://milvus.io/docs/image_similarity_search.md

图片视频搜索:https://milvus.io/docs/video_similarity_search.md

相似音频搜索:https://milvus.io/docs/audio_similarity_search.md

文本图像搜索:https://milvus.io/docs/text_image_search.md

2024 SigLIP (sigmoid loss CLIP) 论文:https://arxiv.org/pdf/2401.06167v1

Unum 多模态 Embedding 模型:https://github.com/unum-cloud/uform

  • Zilliz

    Zilliz