嵌入模型是基于 Transformer 的神经网络,可将文档数据块(即文本段落)转换为数值表示或矢量。含义或语义相近的内容会在隐空间中被映射为相近的表示形式,如下图所示。
语言的矢量化让“与文档对话”、语义搜索等 AI 驱动型应用成为可能,区别于传统的关键词(词法)搜索。
您选择的嵌入模型会显著影响 RAG 系统的检索准确率、延迟与计算成本。嵌入模型的选型很大程度上受模型规模影响,而模型规模取决于两个特征:嵌入维度与模型参数数量。
规模更大的嵌入模型通常能提升检索性能,但会增加延迟、存储与计算(财务)成本。反之,规模较小的嵌入模型检索性能相对较弱,但占用内存更少、计算资源需求更低,且运行速度更快。请选择能平衡性能需求与可用资源的嵌入模型。
部分嵌入模型为特定语言设计(如为西班牙语客户打造的西班牙语嵌入模型),或为特定领域定制(如基于肿瘤学术语训练、用于医疗文件 RAG 的模型)。
建议您使用部署在 watsonx 中的嵌入模型:IBM 研发的 Slate 模型,或下列第三方模型。请查阅本文档,了解各模型的详细信息。有关计费类别的更多信息,请参考 watsonx 计费方案。
IBM Slate 模型
| 模型名称 | API model_id | 计费类别 | 最大输入词元数量 | 维度数量 | 了解更多信息 |
|---|---|---|---|---|---|
| slate-125m-english-rtrvr | ibm/slate-125m-english-rtrvr | C1 类 | 512 | 768 | 模型卡片 |
| slate-30m-english-rtrvr | ibm/slate-30m-english-rtrvr | C1 类 | 512 | 384 | 模型卡片 |
slate-125m-english-rtrvr 基础模型由 IBM 提供。slate-125m-english-rtrvr 基础模型可为查询、段落、文档等各类输入生成矢量嵌入。该模型的训练目标是最大化查询与段落之间的余弦相似度。该过程会生成两个句子嵌入,分别代表问题与段落,可通过余弦相似度完成二者比对。
使用方式:运行速度比 slate-30m-english-rtrvr 模型慢 2 至 3 倍,但性能略优。支持语言:英语
slate-30m-english-rtrvr 基础模型是 slate-125m-english-rtrvr 的蒸馏版本,二者均由 IBM 提供。slate-30m-english-rtrvr 嵌入模型经训练,可最大化两个文本输入间的余弦相似度,便于后续基于相似度评估嵌入结果。
使用方式:运行速度比 slate-125m-english-rtrvr 模型快 2 至 3 倍,但性能评分略低。支持语言:英语
all-minilm-l12-v2 嵌入模型由开源自然语言处理 (NLP) 与计算机视觉 (CV) 社区构建,由 HuggingFace 提供。
支持语言:英语
使用场景:适用于需要为非英语文本生成文本嵌入的用例。
支持自然语言:多达 100 种。详情请参考模型卡片。
有关支持的嵌入模型的更多信息,请查阅 watsonx 文档。
安装 ibm-watsonx-ai Python 库
pip install -U ibm-watsonx-ai
使用 watsonx 嵌入 API 与可用嵌入模型生成文本嵌入。
from ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames as EmbedParams
from ibm_watsonx_ai.foundation_models.utils.enums import EmbeddingTypes
from ibm_watsonx_ai.foundation_models import Embeddings
# 将 truncate_input_tokens 设置为小于或等于您所用嵌入模型的最大允许词元数的值。若未指定该值,且输入词元数超出模型处理范围,将生成报错。
embed_params = {
EmbedParams.TRUNCATE_INPUT_TOKENS: 128,
EmbedParams.RETURN_OPTIONS: {
'input_text': True
}
}
embedding = Embeddings(
model_id=EmbeddingTypes.IBM_SLATE_30M_ENG,
credentials=credentials,
params=embed_params,
project_id=project_id,
space_id=None,
verify=False
)
q = [
"基础模型是大规模生成式 AI 模型,可适配各类下游任务。",
生成式 AI 是一类 AI 算法,它们可生成各种类型的内容,包括文本、图像、音频和合成数据。]
embedding_vectors = embedding.embed_documents(texts=q)
print(embedding_vectors)
使用 watsonx Granite 模型系列、嵌入矢量、Chroma 与 LangChain 实现问答 (RAG) 与 LangChain
更新日期:2024 年 11 月 15 日