实施嵌入向量之前
在选择嵌入向量提供商时,您可以根据需求和偏好考虑以下几个因素:- 数据集大小和领域特异性:模型训练数据集的大小及其与您要嵌入的领域的相关性。更大或更具领域特异性的数据通常会产生更好的领域内嵌入向量
- 推理性能:嵌入查找速度和端到端延迟。这对于大规模生产部署来说是一个特别重要的考虑因素
- 定制化:在私有数据上继续训练的选项,或针对非常特定领域的模型专业化。这可以提高在独特词汇表上的性能
如何通过 Anthropic 获取嵌入向量
Anthropic 不提供自己的嵌入模型。一个拥有广泛选择和能力的嵌入向量提供商,涵盖了上述所有考虑因素的是 Voyage AI。 Voyage AI 制作最先进的嵌入模型,并为特定行业领域(如金融和医疗保健)提供定制模型,或为个别客户提供定制微调模型。 本指南的其余部分针对 Voyage AI,但我们鼓励您评估各种嵌入向量供应商,以找到最适合您特定用例的选择。可用模型
Voyage 推荐使用以下文本嵌入模型:| 模型 | 上下文长度 | 嵌入维度 | 描述 |
|---|---|---|---|
voyage-3-large | 32,000 | 1024(默认)、256、512、2048 | 最佳通用和多语言检索质量。详情请参见博客文章。 |
voyage-3.5 | 32,000 | 1024(默认)、256、512、2048 | 针对通用和多语言检索质量进行优化。详情请参见博客文章。 |
voyage-3.5-lite | 32,000 | 1024(默认)、256、512、2048 | 针对延迟和成本进行优化。详情请参见博客文章。 |
voyage-code-3 | 32,000 | 1024(默认)、256、512、2048 | 针对代码检索进行优化。详情请参见博客文章。 |
voyage-finance-2 | 32,000 | 1024 | 针对金融检索和 RAG 进行优化。详情请参见博客文章。 |
voyage-law-2 | 16,000 | 1024 | 针对法律和长上下文检索和 RAG 进行优化。同时在所有领域都有改进的性能。详情请参见博客文章。 |
| 模型 | 上下文长度 | 嵌入维度 | 描述 |
|---|---|---|---|
voyage-multimodal-3 | 32000 | 1024 | 丰富的多模态嵌入模型,可以向量化交错的文本和内容丰富的图像,如 PDF、幻灯片、表格、图形等的截图。详情请参见博客文章。 |
Voyage AI 入门
要访问 Voyage 嵌入向量:- 在 Voyage AI 网站上注册
- 获取 API 密钥
- 为方便起见,将 API 密钥设置为环境变量:
voyageai Python 包或 HTTP 请求来获取嵌入向量,如下所述。
Voyage Python 库
可以使用以下命令安装voyageai 包:
result.embeddings 将是一个包含两个嵌入向量的列表,每个向量包含 1024 个浮点数。运行上述代码后,两个嵌入向量将在屏幕上打印出来:
embed() 函数指定一些其他参数。
有关 Voyage python 包的更多信息,请参见Voyage 文档。
Voyage HTTP API
您也可以通过请求 Voyage HTTP API 来获取嵌入向量。例如,您可以在终端中通过curl 命令发送 HTTP 请求:
AWS Marketplace
Voyage 嵌入向量在AWS Marketplace上可用。在 AWS 上访问 Voyage 的说明可在此处找到。快速入门示例
现在我们知道如何获取嵌入向量,让我们看一个简短的示例。 假设我们有一个包含六个文档的小语料库要检索input_type="document" 和 input_type="query" 来嵌入文档和查询。更多规范可以在这里找到。
输出将是第 5 个文档,这确实是与查询最相关的:
常见问题解答
为什么 Voyage 嵌入向量具有卓越的质量?
为什么 Voyage 嵌入向量具有卓越的质量?
嵌入模型依赖强大的神经网络来捕获和压缩语义上下文,类似于生成模型。Voyage 的经验丰富的 AI 研究团队优化嵌入过程的每个组件,包括:
- 模型架构
- 数据收集
- 损失函数
- 优化器选择
有哪些嵌入模型可用,我应该使用哪个?
有哪些嵌入模型可用,我应该使用哪个?
对于通用嵌入,我们推荐:
voyage-3-large:最佳质量voyage-3.5-lite:最低延迟和成本voyage-3.5:在具有竞争力的价格点上具有卓越检索质量的平衡性能
input_type 参数来指定文本是查询还是文档类型。领域特定模型:- 法律任务:
voyage-law-2 - 代码和编程文档:
voyage-code-3 - 金融相关任务:
voyage-finance-2
我应该使用哪个相似性函数?
我应该使用哪个相似性函数?
您可以将 Voyage 嵌入向量与点积相似性、余弦相似性或欧几里得距离一起使用。关于嵌入相似性的解释可以在这里找到。Voyage AI 嵌入向量被归一化为长度 1,这意味着:
- 余弦相似性等同于点积相似性,而后者可以更快地计算。
- 余弦相似性和欧几里得距离将产生相同的排名。
字符、单词和令牌之间的关系是什么?
字符、单词和令牌之间的关系是什么?
请参见此页面。
何时以及如何使用 input_type 参数?
何时以及如何使用 input_type 参数?
对于所有检索任务和用例(例如 RAG),我们建议使用
input_type 参数来指定输入文本是查询还是文档。不要省略 input_type 或设置 input_type=None。指定输入文本是查询还是文档可以为检索创建更好的密集向量表示,这可以导致更好的检索质量。使用 input_type 参数时,特殊提示会在嵌入之前添加到输入文本前面。具体来说:📘 与input_type相关的提示
- 对于查询,提示是”Represent the query for retrieving supporting documents: ”。
- 对于文档,提示是”Represent the document for retrieval: ”。
- 示例
- 当
input_type="query"时,像”When is Apple’s conference call scheduled?”这样的查询将变成”Represent the query for retrieving supporting documents: When is Apple’s conference call scheduled?”- 当
input_type="document"时,像”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.”这样的查询将变成”Represent the document for retrieval: 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-large-2-instruct,顾名思义,被训练为对添加到输入文本前面的附加指令做出响应。对于分类、聚类或其他MTEB子任务,请使用这里的指令。有哪些量化选项可用?
有哪些量化选项可用?
嵌入中的量化将高精度值(如 32 位单精度浮点数)转换为较低精度格式(如 8 位整数或 1 位二进制值),分别将存储、内存和成本减少 4 倍和 32 倍。支持的 Voyage 模型通过使用
output_dtype 参数指定输出数据类型来启用量化:float:每个返回的嵌入向量是 32 位(4 字节)单精度浮点数的列表。这是默认值,提供最高精度/检索准确性。int8和uint8:每个返回的嵌入向量是 8 位(1 字节)整数的列表,分别范围从 -128 到 127 和 0 到 255。binary和ubinary:每个返回的嵌入向量是 8 位整数的列表,表示位打包的量化单位嵌入值:binary使用int8,ubinary使用uint8。返回的整数列表的长度是嵌入实际维度的 1/8。二进制类型使用偏移二进制方法,您可以在下面的常见问题解答中了解更多信息。
二进制量化示例 考虑以下八个嵌入值:-0.03955078、0.006214142、-0.07446289、-0.039001465、0.0046463013、0.00030612946、-0.08496094 和 0.03994751。通过二进制量化,小于或等于零的值将被量化为二进制零,正值被量化为二进制一,产生以下二进制序列:0、1、0、0、1、1、0、1。然后将这八位打包成一个 8 位整数,01001101(最左边的位作为最高有效位)。
ubinary:二进制序列直接转换并表示为无符号整数(uint8)77。binary:二进制序列表示为有符号整数(int8)-51,使用偏移二进制方法计算(77 - 128 = -51)。
如何截断 Matryoshka 嵌入向量?
如何截断 Matryoshka 嵌入向量?
Matryoshka 学习在单个向量内创建具有从粗到细表示的嵌入向量。支持多个输出维度的 Voyage 模型(如
voyage-code-3)生成这样的 Matryoshka 嵌入向量。您可以通过保留维度的前导子集来截断这些向量。例如,以下 Python 代码演示了如何将 1024 维向量截断为 256 维: