嵌入(Embeddings,特征向量)是人工智能表示任何类型数据的原生方式,因此非常适合与各种人工智能工具和算法配合使用。它们可以表示文本、图像以及音频和视频。生成特征向量数据有很多选择,可以使用开源的文本嵌入模型,也可以调用一些云服务的API。
Chroma 为流行的嵌入模型提供了轻量级封装,让您可以轻松地在应用程序中使用它们。您可以在创建 Chroma 集合时设置一个嵌入函数,他将在保存和更新文本数据的时候自动计算文本向量。
提示:你也可以选择不使用Chroma封装的嵌入函数计算向量,自己选择任意嵌入模型提前计算好文本向量数据即可。
要获取 Chroma 的嵌入函数,请导入 chromadb.utils.embedding_functions 模块。
from chromadb.utils import embedding_functions
默认模型: all-MiniLM-L6-v2
默认情况下,Chroma 使用 Sentence Transformers的 all-MiniLM-L6-v2 模型计算向量。该嵌入模型可以创建句子和文档向量。该嵌入模型功能在本地计算机上运行,需要下载模型文件(这是自动完成的)。
default_ef = embedding_functions.DefaultEmbeddingFunction()
Transformers模型
Chroma 还可以使用任意 Sentence Transformers 模型来计算向量。
sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")
你可以传入一个可选的 model_name 参数,让你选择要使用的 Sentence Transformers 模型。默认情况下,Chroma 使用 all-MiniLM-L6-v2。你可以到huggingface去搜索模型的名字。
OpenAI模型
Chroma 为 OpenAI 的嵌入模型(embedding) API 提供了方便的封装。这里需要调用 OpenAI 的接口,需要一个 API 密钥。你可以通过注册 OpenAI 账户获得 API 密钥。
该嵌入功能依赖于 openai python 软件包,您可以使用 pip install openai
安装该软件包。
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key="YOUR_API_KEY",
model_name="text-embedding-ada-002"
)
要在 Azure 等其他平台上使用 OpenAI 嵌入模型,可以使用 api_base 和 api_type 参数:
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key="YOUR_API_KEY",
api_base="YOUR_API_BASE_PATH",
api_type="azure",
model_name="text-embedding-ada-002"
)
自定义Embedding 函数
您可以创建自己的嵌入函数与 Chroma 配合使用,只需实现 EmbeddingFunction 基类的方法即可。
from chromadb.api.types import Documents, EmbeddingFunction, Embeddings
class MyEmbeddingFunction(EmbeddingFunction):
def __call__(self, texts: Documents) -> Embeddings:
# 调用自己的文本嵌入模型计算文本向量
return embeddings