大白话讲清楚GPT嵌入(Embedding)的基本原理
大白话讲清楚GPT嵌入(Embedding)的基本原理
嵌入(Embedding)是机器学习中的一个基本概念,尤其是在自然语言处理 (NLP) 领域,但它们也广泛应用于其他领域。通常,嵌入是一种将离散的分类数据转换为连续向量的方法,通常在高维空间中,将复杂、难以处理的项目(如单词、图像或用户 ID)转换为机器学习模型可以理解和更有效地处理的形式。
什么是向量
在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指,代表向量的方向。线段长度,代表向量的大小。与向量对应的量叫做数量(物理学中称标量),数量(或标量)只有大小,没有方向。
通常我们在坐标系中用一个有长度、带箭头的线段表示一个向量。一般来讲,在笛卡尔坐标(平面坐标系)中我们喜欢将向量的起点放在原点,终点就是坐标系中的某个点,然后我们从原点往那个点画一根带有箭头的线段。
既然是两段从坐标原点出发的有长度、带箭头的线段,那么我们就可以计算两个向量的夹角。当然通常的计算机中的向量是多维的,比如OpenAI Embeddings就是1536维,但是逻辑是一致的。
向量夹角跟嵌入和搜索有什么关系?下面借用吴军老师在数学通识的讲解,通俗易懂。非常佩服吴军老师,即使我作为当年数学专业科班出身,听他的课还是收获满满,换个角度理解,可以让学识更丰满更立体。
算出两个向量的夹角有什么用?它其实有很多的应用,比如可以对文本进行自动分类。这两件事情看似不相干,怎么会联系到一起呢?下面我们就大致介绍一下计算机进行文本自动分类的原理。
我们知道一篇文章的主题和内容,其实是由它所使用的文字决定的,不同的文章使用的文字不同,但是主题相似的文章使用的文字有很大的相似性。比如讲金融的文章里面可能会经常出现“金融”、“股票”、“交易”、“经济”等词,讲计算机的则会经常出现“软件”、“互联网”、“半导体”等词。假如这两部分关键词没有重复,那么我们很容易把这两类文本分开。假如它们有重复怎么办?那么我们就要看这两类文章中,各个词的频率了。根据我们的经验,即使在金融类的文章中混有一些计算机类的词,那么它们的词频不会太高,反之亦然。
为方便说明如何区分这两类文章,我们就假设汉语中只有“金融”、“股票”、“交易”、“经济”、“计算机”、“软件”、“互联网”和“半导体”这八个词。假设有一篇经济学的文章,这八个词出现的次数分别是(23,32,14,10,1,0,3,2),另一篇是计算机的文章,这八个词出现的次数是(3,2,4,0,41,30,31,12),这样它们就各自形成一个八维的向量,我们称之为V1和V2。如果我们能够在八维空间中将它们画出来,你就会发现它们之间的夹角非常大。我算了一下,大概是82度,近乎垂直,或者说正交。由于这些向量每一个维度都是正数,因此它们最大的夹角就是90度,不会更大了。这说明两类不同文章所对应的向量之间的夹角应该很大。
如果我们再假设另有一篇文章,八个词的词频是V3=(1,3,0,2,25,23,14,10),那么它和上述第二篇文章对应的向量的夹角只有7.5度。我用二维的坐标将这三个向量的关系大致示意如下。
从图中可以看出第一个和第二个向量的角度很大,而第二个、第三个的夹角很小。由此,我们大致可以判定第三篇文章应该和第二篇主题相近,也属于计算机类的。接下来我们需要思考一个问题:如何计算两个向量之间的夹角?