嵌入向量
文本嵌入是文本的数值表示,可用于衡量语义相似度。本指南介绍了嵌入向量、其应用场景,以及如何使用嵌入模型进行搜索、推荐和异常检测等任务。
在实施嵌入向量之前
在选择嵌入向量提供商时,根据您的需求和偏好可以考虑以下几个因素:
- 数据集大小和领域特异性: 模型训练数据集的大小及其与您要嵌入的领域的相关性。更大或更具领域特异性的数据通常会产生更好的领域内嵌入效果
- 推理性能: 嵌入查找速度和端到端延迟。这对于大规模生产部署来说是一个特别重要的考虑因素
- 定制化: 在私有数据上继续训练的选项,或针对特定领域的模型专门化。这可以提高在独特词汇表上的性能
如何使用 Anthropic 获取嵌入向量
Anthropic 目前不提供自己的嵌入模型。Voyage AI 是一个提供广泛选项和功能的嵌入向量提供商,涵盖了上述所有考虑因素。
Voyage AI 提供最先进的嵌入模型,并为金融和医疗保健等特定行业领域提供定制模型,或为个别客户提供定制微调模型。
本指南的其余部分是关于 Voyage AI 的,但我们建议您评估各种嵌入向量供应商,以找到最适合您特定用例的供应商。
Voyage AI 入门
要访问 Voyage 嵌入向量:
- 在 Voyage AI 的网站上注册
- 获取 API 密钥
- 为方便起见,将 API 密钥设置为环境变量:
export VOYAGE_API_KEY="<your secret key>"
您可以通过使用官方 voyageai Python 包或 HTTP 请求来运行嵌入向量,如下所述。
Voyage Python 包
可以使用以下命令安装 voyageai
包:
pip install -U voyageai
然后,您可以创建一个客户端对象并开始使用它来嵌入您的文本:
import voyageai
vo = voyageai.Client()
# This will automatically use the environment variable VOYAGE_API_KEY.
# Alternatively, you can use vo = voyageai.Client(api_key="<your secret key>")
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-2", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])
result.embeddings
将是一个包含两个嵌入向量的列表,每个向量包含 1024 个浮点数。
运行上述代码后,两个嵌入向量将显示在屏幕上:
[0.02012746, 0.01957859, ...] # embedding for "Sample text 1"
[0.01429677, 0.03077182, ...] # embedding for "Sample text 2"
在创建嵌入向量时,您可以为 embed()
函数指定其他几个参数。以下是规范:
voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)
- texts (List[str]) - 作为字符串列表的文本列表,例如
["I like cats", "I also like dogs"]
。目前,列表的最大长度为 128,列表中的总标记数对于voyage-2
最多为 320K,对于voyage-large-2
/voyage-code-2
最多为 120K。 - model (str) - 模型名称。推荐选项:
voyage-2
,voyage-large-2
,voyage-code-2
。 - input_type (str, 可选, 默认为
None
) - 输入文本的类型。默认为None
。其他选项:query
,document
- 当 input_type 设置为
None
时,输入文本将直接由 Voyage 的嵌入模型编码。或者,当输入是文档或查询时,用户可以将input_type
指定为query
或document
。在这种情况下,Voyage 将在输入文本前添加特殊提示,并将扩展的输入发送到嵌入模型 - 对于检索/搜索用例,我们建议在编码查询或文档时指定此参数以提高检索质量。使用和不使用
input_type
参数生成的嵌入向量是兼容的
- 当 input_type 设置为
- truncation (bool, 可选, 默认为
None
) - 是否截断输入文本以适应上下文长度。- 如果为
True
,超长输入文本将被截断以适应上下文长度,然后由嵌入模型向量化 - 如果为
False
,当任何给定文本超过上下文长度时将引发错误 - 如果未指定(默认为
None
),如果输入文本略微超过上下文窗口长度,Voyage 将在将其发送到嵌入模型之前截断输入文本。如果它显著超过上下文窗口长度,将引发错误
- 如果为
Voyage HTTP API
您也可以通过请求 Voyage HTTP API 获取嵌入向量。例如,您可以通过终端中的 curl
命令发送 HTTP 请求:
curl https://api.voyageai.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-2"
}'
您将获得的响应是一个包含嵌入向量和标记使用情况的 JSON 对象:
{
"object": "list",
"data": [
{
"embedding": [0.02012746, 0.01957859, ...],
"index": 0
},
{
"embedding": [0.01429677, 0.03077182, ...],
"index": 1
}
],
"model": "voyage-2",
"usage": {
"total_tokens": 10
}
}
Voyage AI 的嵌入端点是 https://api.voyageai.com/v1/embeddings
(POST)。请求头必须包含 API 密钥。请求体是一个包含以下参数的 JSON 对象:
- input (str, List[str]) - 单个文本字符串,或作为字符串列表的文本列表。目前,列表的最大长度为 128,列表中的总标记数对于
voyage-2
最多为 320K,对于voyage-large-2
/voyage-code-2
最多为 120K。 - model (str) - 模型名称。推荐选项:
voyage-2
,voyage-large-2
,voyage-code-2
。 - input_type (str, 可选, 默认为
None
) - 输入文本的类型。默认为None
。其他选项:query
,document
- truncation (bool, 可选, 默认为
None
) - 是否截断输入文本以适应上下文长度- 如果为
True
,超长输入文本将在被嵌入模型向量化之前截断以适应上下文长度 - 如果为
False
,当任何给定文本超过上下文长度时将引发错误 - 如果未指定(默认为
None
),如果输入文本略微超过上下文窗口长度,Voyage 将在将其发送到嵌入模型之前截断输入文本。如果它显著超过上下文窗口长度,将引发错误
- 如果为
- encoding_format (str, 可选, 默认为
None
) - 嵌入向量的编码格式。Voyage 目前支持两个选项:- 如果未指定(默认为
None
): 嵌入向量表示为浮点数列表 "base64"
: 嵌入向量被压缩为 Base64 编码
- 如果未指定(默认为
Voyage 嵌入向量示例
现在我们知道了如何使用 Voyage 获取嵌入向量,让我们通过一个简短的示例来看看它的实际应用。
假设我们有一个包含六个文档的小型语料库用于检索
documents = [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
"20th-century innovations, from radios to smartphones, centered on electronic advancements.",
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature."
]
我们首先使用 Voyage 将每个文档转换为嵌入向量
import voyageai
vo = voyageai.Client()
# Embed the documents
doc_embds = vo.embed(
documents, model="voyage-2", input_type="document"
).embeddings
嵌入向量将允许我们在向量空间中进行语义搜索/检索。然后我们可以将一个示例查询,
query = "When is Apple's conference call scheduled?"
转换为嵌入向量,然后进行最近邻搜索,根据嵌入空间中的距离找到最相关的文档。
import numpy as np
# Embed the query
query_embd = vo.embed(
[query], model="voyage-2", input_type="query"
).embeddings[0]
# Compute the similarity
# Voyage embeddings are normalized to length 1, therefore dot-product
# and cosine similarity are the same.
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])
请注意,我们分别使用 input_type="document"
和 input_type="query"
来嵌入文档和查询。更多规范可以在这里找到。
输出将是第 5 个文档,这确实是与查询最相关的:
Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.
可用的 Voyage 模型
Voyage 推荐使用以下嵌入模型:
模型 | 上下文长度 | 嵌入维度 | 描述 |
---|---|---|---|
voyage-large-2 | 16000 | 1536 | Voyage AI 最强大的通用嵌入模型。 |
voyage-code-2 | 16000 | 1536 | 针对代码检索进行了优化(比替代方案好 17%),在通用语料库上也达到了最先进水平。详情请参见这篇 Voyage 博客文章。 |
voyage-2 | 4000 | 1024 | 基础通用嵌入模型,针对延迟和质量进行了优化。 |
voyage-lite-02-instruct | 4000 | 1024 | 指令微调用于分类、聚类和句子文本相似度任务,这些是该模型唯一推荐的用例。 |
voyage-2
和 voyage-large-2
是通用嵌入模型,在各个领域都能达到最先进的性能,并保持高效率。voyage-code-2
针对代码领域进行了优化,提供了 4 倍的上下文长度以实现更灵活的使用,尽管延迟相对较高。
Voyage 正在积极开发更先进和专业化的模型,并提供微调服务以为个别客户定制专属模型。有关专属模型的更多信息,请发送电子邮件给您的 Anthropic 客户经理或联系 Anthropic 支持。
voyage-finance-2
: 即将推出voyage-law-2
: 即将推出voyage-multilingual-2
: 即将推出voyage-healthcare-2
: 即将推出
AWS Marketplace 上的 Voyage
Voyage 嵌入向量也可在 AWS Marketplace 上获得。以下是在 AWS 上访问 Voyage 的说明:
- 订阅模型包
- 导航到模型包列表页面并选择要部署的模型
- 点击
Continue to subscribe
按钮 - 仔细查看
Subscribe to this software
页面上的详细信息。如果您同意标准最终用户许可协议(EULA)、定价和支持条款,请点击”Accept Offer” - 选择
Continue to configuration
并选择区域后,您将看到一个 Product Arn。这是使用 Boto3 创建可部署模型所需的模型包 ARN- 复制与您选择的区域相对应的 ARN,并在后续单元格中使用它
- 部署模型包
从这里开始,在 Sagemaker Studio 中创建一个 JupyterLab 空间,上传 Voyage 的笔记本,并按照其中的说明进行操作。
常见问题
定价
访问 Voyage 的定价页面以获取最新的定价详情。