LoRexxar's Blog | 信息技术分享

LoRexxar's Blog

马上订阅 LoRexxar's Blog | 信息技术分享 RSS 更新: https://lorexxar.cn/atom.xml

从0到1的ChatGPT - 进阶篇(五)- Embeddings

2023年5月25日 15:04

在前面的文章中,无论是各种prompt技巧,又或者是对话技巧,更或者是各种数据集训练,都逃不开两个致命的问题。

1、ChatGPT只能处理文字

2、无论是上下文参考,还是单条对话都有token限制

所以在ChatGPT中,很多应用方向遇到的第一个问题就是如何把问题用文字的方式描述出来,其中最典型的场景就是代码分析。

所以ChatGPT也鼓励使用Embeddings来做类似搜索、分类或者异常检测的分析,这篇文章就讲讲这个。

Embeddings

Embeddings是拓扑学中的一个概念,这个词被普遍提出来是在深度学习领域。抛开复杂的理论不谈,简单来说就是通过数学的方式把一个内容给向量化,用一些非常复杂的向量来代替内容本身。这是一种试图通过数学理论解读问题的方案。

这里我拿一个特别简单的例子来解释一下Embeddings。这里这个例子参考了一个知乎的帖子。

假设我们需要招聘一个程序员,那么我们可以把招聘需求抽象成5个维度,比如会python,写过项目,名校学历,带过团队,性格特点,在5个维度的基础上,我们可以把候选人的能力抽象为数字。

比如说[1,1,0,0,1],当然用0和1是精度比较低的,你可以用0.几来替代每个向量中对预期的符合度。在这个5维的向量标准下,我们可以把多个候选人的简历抽象为多个5维向量组,并且通过对多个5维向量组做一定的数学计算,这样就可以得出最合适的候选人。

当然,这只是一个简单的例子。在深度学习的领域,Embeddings的计算还涉及到核函数的优化过程。对于使用者来说,我们不需要刨开黑盒讨论这些。

在ChatGPT中,openai提供了官方的计算Embeddings的API,当然这是收费的。

img

通过openai的api,我们就可以把信息转化为Embeddings向量。在Openai的文档中,我们可以看到每个模型的核方案对应的要求以及价格。

img

其中 text-embedding-ada-002这个模型整体表现最好而且还便宜,更适用于Embeddings

举个栗子

这里我们还是拿上篇文章的例子来聊,拿我的博客内容来进一步处理。在上篇文章中我们准备数据集的时候就遇到了几个问题。

1、博客内容普遍超过2000token,并且更普遍的是,文章内容中有大量的代码,甚至图片内容

2、可能是由于博客内容分割严重,也可能是由于GPT3本身的学习能力有限,学习的结果很差。

这种情况下,我们就可以尝试用Embeddings把内容向量化,再做进一步的处理。

我们通过把文章本身向量化,然后再把问题向量化,在对比两部分的余弦相似度,最终返回相似度最高的文章。

当然,对比文章相似度这种信息颗粒度还是太低了,理论上来说,你可以选择把文章按照自然段划分并分别处理,当然如何关联多个自然段也是一个问题。

这里我用一个比较简单的例子,把文章按照#划分自然段,然后标上标题,并通过openai的api来计算embeddings.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22...

剩余内容已隐藏

查看完整文章以阅读更多