六、OpenAI之嵌入式(Embedding)


嵌入模式

学习怎么将文本转换成数字,解锁搜索等案例。

新的嵌入模型
text-embedding-3-small 和 text-embedding-3-large,是目前最新的并且性能最好的嵌入模型,成本低,支持多语言,拥有控制所有大小的新参数

1. 什么是嵌入?

OpenAI的文本嵌入衡量文本字符串的相关性。嵌入通常用于:

  • 搜索(通过一个查询字符串的相关性将结果排序)
  • 聚类(通过相似性将文本字符串进行分组)
  • 推荐(推荐与文本字符串相关的条目)
  • 异常检测(相关性不大的异常值被识别出来)
  • 多样性衡量(分析相似度分布)
  • 分类(通过最相似的标签分类文本字符串)

嵌入是一个浮点型的向量。用距离衡量两个向量的相关性。小的距离暗示高相关性,大的距离暗示低相关性。

2. 怎样获得嵌入?

要获得嵌入模式,将文本字符串与嵌入模型ID一起发送到嵌入API端点(例如:text-embedding-3-small)。响应会包含一个嵌入模式(浮点型列表),能被提取保存到一个向量数据库,能被许多的应用案例所使用。

curl https://api.openai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "input": "Your text string goes here",
    "model": "text-embedding-3-small"
  }'

响应将包含嵌入向量以及一些额外的元数据

{
   
   
  "object": "list",
  "data": [
    {
   
   
      "object": "embedding",
      "index": 0,
      "embedding": [
        -0.006929283495992422,
        -0.005336422007530928,
        ... (omitted for spacing)
        -4.547132266452536e-05,
        -0.024047505110502243
      ],
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
   
   
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

默认,text-embedding-3-small嵌入向量的长度是1536,text-embedding-3-large嵌入向量的长度是3072。您可以通过传入dimensions参数来降低嵌入的维度,而不会使嵌入模式失去其表示概念的属性。

3. 嵌入模型

OpenAI提供两个功能强大第三代嵌入模型(使用模型ID -3表示)。

模型版本 分词器 最大输入tokens
V3 cl100k_base 8191
V2 cl100k_base 8191

4. 使用案例

亚马逊美食评论数据集 提取码: a5uh 案例开发如下:

4.1 获得嵌入

数据集总计包含568,454条食品评论。只使用1000条数据子集。评论内容使用英文,其中有正面和负面的。评论字段:ProductId,UserId,Score,Summary,Text,例如:

ProductId UserId Score Summary Text
B001E4KFG0 A3SGXH7AUHU8GW 5 Good Quality Dog Food I have bought several of the Vitality canned…
B001E4KFG0 A1D87F6ZCVE5NK 1 Not as Advertised Product arrived labeled as Jumbo Salted Peanut…

我们将把评论摘要和评论文本合并为一个综合文本。该模型将对该组合文本进行编码,并输出单个向量嵌入

from openai import OpenAI
client = OpenAI()

def get_embedding(text, model="text-embedding-3-small"):
   text = text.replace("\n", " ")
   return client.embeddings.create(input = [text], model=model).data[0].embedding

df['ada_embedding'] = df.combined.apply(lambda x: get_embedding(x, model='text-embedding-3-small'))
df.to_csv('output/embedded_1k_reviews.csv', index=False)

从保存的文件加载数据:

import pandas as pd

df = pd.read_csv('output/embedded_1k_reviews.csv')
df['ada_embedding'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值