在我尝试嵌入一个字符串之前,我如何知道它有多少个标记?

原创 admin  2023-04-14 21:05  阅读 5 次

在我尝试嵌入一个字符串之前,我如何知道它有多少个标记?

对 V2 嵌入模型,截至 2022 年 12 月,还没有办法将字符串拆分为标记。获得令牌总数的唯一方法是提交 API 要求。

  • 如果要求成功,您可以从响应中提取令牌数:`response[“usage”][“total_tokens”]`

  • 如果要求因令牌太多而失败,您可以从毛病消息中提取令牌数:`此模型的最大上下文长度为 8191 个令牌,但是您要求了 10000 个令牌(提示中为 10000;完成时为 0)。请减少您的提示;或完成长度。`

对基于 GPT⑵/GPT⑶ 标记化的 V1 嵌入模型,您可以通过以下几种方式计算标记:

  • 对一次性检查,OpenAI 分词器页面很方便

  • 在 Python 中,transformers.GPT2TokenizerFast(GPT⑵ 分词器与 GPT⑶ 相同)

  • 在 JavaScript 中,gpt⑶-encoder

怎样快速检索 K 个最近的嵌入向量?

为了快速搜索多个矢量,我们建议使用矢量数据库。

矢量数据库选项包括:

  • Pinecone,一个完全托管的矢量数据库

  • Weaviate,一个开源矢量搜索引擎

  • Faiss , Facebook 的矢量搜索算法

我应当使用哪一个距离函数?

我们推荐余弦类似度。距离函数的选择通常无关紧要。

OpenAI 嵌入被归一化为长度 1,这意味着:

  • 仅使用点积可以略微更快地计算余弦类似度

  • 余弦类似度和欧几里德距离将致使相同的排名

ChatGPT中国体验版https://go.guigege.cn

来源:https://www.huanp.com/idc/140698.html
声明:欢迎分享本文,转载请保留出处!

发表评论


表情