Claude嵌入指南

文本嵌入是文本字符串的数值表示,表示为浮点数向量。你可以使用两个嵌入文本片段(无论是单词、短语还是句子)之间的距离来衡量这些文本片段之间的相关性。距离越小,预测文本之间在语义或句法关系上的相关性越高。

通过比较字符串的相似度,或通过字符串之间的距离对其进行聚类,可以实现广泛的应用,包括搜索、推荐和异常检测。

如何通过 Anthropic 获得嵌入

在选择嵌入提供商时,可考虑以下几个因素:

  • 数据集大小和领域特异性:模型训练数据集的大小及其与你要嵌入的领域的相关性。
  • 模型架构:模型设计和复杂性。更现代的技术和架构(如 Transformer)往往能产生更高质量的嵌入。
  • 推理性能:嵌入查找速度和端到端延迟。
  • 定制化:在私有数据上继续训练或针对特定领域专门化模型的选项。

Anthropic 不提供自己的嵌入模型,但推荐使用 Voyage AI 提供的嵌入模型。

Voyage AI 入门

查看我们的嵌入 notebook,了解 Voyage AI 实现示例。

注册和获取 API 密钥

在 Voyage AI 网站上注册并获取 API 密钥。然后将 API 密钥设置为环境变量:

    
python
export VOYAGE_API_KEY="<your secret key>"

安装 Voyage AI 包

    
python
pip install -U voyageai

嵌入示例代码

    
python
import voyageai

vo = voyageai.Client()
# 这将自动使用环境变量 VOYAGE_API_KEY
# 或者,你可以使用 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")

result.embeddings将是两个嵌入向量的列表,每个向量包含1024个浮点数。

运行上述代码后,两个嵌入将打印在屏幕上:

    
python
[0.02012746, 0.01957859, ...]  # "Sample text 1"的嵌入
[0.01429677, 0.03077182, ...]  # "Sample text 2"的嵌入

Voyage HTTP API

你也可以通过 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"
  }'

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-2voyage-large-2voyage-code-2

  • input_type (str, 可选,默认为None) - 输入文本的类型。默认为None。其他选项:querydocument

  • truncation

    (bool, 可选,默认为None) - 是否截断输入文本以适应上下文长度

    • 如果为True,超长的输入文本将在被嵌入模型向量化之前被截断以适应上下文长度
    • 如果为False,如果任何给定的文本超过上下文长度,将引发错误
    • 如果未指定(默认为None),如果输入文本略微超过上下文窗口长度,Voyage将在将其发送到嵌入模型之前截断输入文本。如果它显著超过上下文窗口长度,将引发错误
  • encoding_format

    (str, 可选,默认为None) - 嵌入的编码格式。Voyage目前支持两个选项:

    • 如果未指定(默认为None):嵌入表示为浮点数列表
    • "base64":嵌入被压缩为Base64编码

嵌入示例

假设我们有一个由六个文档组成的小语料库,用于检索:

    
python
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."
]

vo = voyageai.Client()
doc_embds = vo.embed(documents, model="voyage-2", input_type="document").embeddings

然后,我们可以将一个示例查询转换为嵌入,并进行最近邻搜索:

    
Python
query = "When is Apple's conference call scheduled?"
query_embd = vo.embed([query], model="voyage-2", input_type="query").embeddings[0]

import numpy as np

similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])

可用的 Voyage 模型

| 模型 | 上下文长度 | 嵌入维度 | 描述 |
| ----------------------- | ---------- | -------- | ------------------------------------------------ |
| voyage-large-2 | 16000 | 1536 | 最强大的通用嵌入模型 |
| voyage-code-2 | 16000 | 1536 | 针对代码检索进行了优化 |
| voyage-2 | 4000 | 1024 | 基础通用嵌入模型 |
| voyage-lite-02-instruct | 4000 | 1024 | 针对分类、聚类和句子文本相似度任务进行了指令调优 |

voyage-2voyage-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 的说明:

  1. 订阅模型包:导航到模型包列表页面并选择要部署的模型。
  2. 部署模型包:在 Sagemaker Studio 中创建一个 JupyterLab 空间,上传 Voyage 的 notebook,并按照其中的说明进行操作。

常见问题

如何计算两个嵌入向量之间的距离?

余弦相似度是一个流行的选择。Voyage 嵌入被归一化为长度 1,因此余弦相似度与点积相同。

    
Python
import numpy as np

similarity = np.dot(embd1, embd2)

我可以在嵌入字符串之前计算其中的令牌数吗?

    
Python
import voyageai

vo = voyageai.Client()
total_tokens = vo.count_tokens(["Sample text"])

通过这些指南和示例,您可以轻松开始使用嵌入技术实现文本相似度和语义分析,从而增强您的应用程序功能。

阅读全文
AI工具教程
免费领取AI学习资料 进AI副业交流群
礼物
AI工具教程
免费领取AI学习资料 进AI副业交流群