嵌入向量
文本嵌入是文本的数值表示,可用于衡量语义相似度。本指南介绍了嵌入向量、其应用场景,以及如何使用嵌入模型进行搜索、推荐和异常检测等任务。
在实施嵌入向量之前
在选择嵌入向量提供商时,根据您的需求和偏好可以考虑以下几个因素:
- 数据集大小和领域特异性: 模型训练数据集的大小及其与您要嵌入的领域的相关性。更大或更具领域特异性的数据通常会产生更好的领域内嵌入效果
- 推理性能: 嵌入查找速度和端到端延迟。这对于大规模生产部署来说是一个特别重要的考虑因素
- 定制化: 在私有数据上继续训练的选项,或针对特定领域的模型专门化。这可以提高在独特词汇表上的性能
如何使用 Anthropic 获取嵌入向量
Anthropic 目前不提供自己的嵌入模型。Voyage AI 是一个提供广泛选项和功能的嵌入向量提供商,涵盖了上述所有考虑因素。
Voyage AI 提供最先进的嵌入模型,并为金融和医疗保健等特定行业领域提供定制模型,或为个别客户提供定制微调模型。
本指南的其余部分是关于 Voyage AI 的,但我们建议您评估各种嵌入向量供应商,以找到最适合您特定用例的供应商。
Voyage AI 入门
要访问 Voyage 嵌入向量:
- 在 Voyage AI 的网站上注册
- 获取 API 密钥
- 为方便起见,将 API 密钥设置为环境变量:
您可以通过使用官方 voyageai Python 包或 HTTP 请求来运行嵌入向量,如下所述。
Voyage Python 包
可以使用以下命令安装 voyageai
包:
然后,您可以创建一个客户端对象并开始使用它来嵌入您的文本:
result.embeddings
将是一个包含两个嵌入向量的列表,每个向量包含 1024 个浮点数。
运行上述代码后,两个嵌入向量将显示在屏幕上:
在创建嵌入向量时,您可以为 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 请求:
您将获得的响应是一个包含嵌入向量和标记使用情况的 JSON 对象:
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 获取嵌入向量,让我们通过一个简短的示例来看看它的实际应用。
假设我们有一个包含六个文档的小型语料库用于检索
我们首先使用 Voyage 将每个文档转换为嵌入向量
嵌入向量将允许我们在向量空间中进行语义搜索/检索。然后我们可以将一个示例查询,
转换为嵌入向量,然后进行最近邻搜索,根据嵌入空间中的距离找到最相关的文档。
请注意,我们分别使用 input_type="document"
和 input_type="query"
来嵌入文档和查询。更多规范可以在这里找到。
输出将是第 5 个文档,这确实是与查询最相关的:
可用的 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 的定价页面以获取最新的定价详情。