Embedding到底干了啥?

179 阅读5分钟

开发RAG系统,我遇到的第一个比较抽象的概念就是Embedding。 网上查一查无非就是把文本数字化、用向量表示文字等等高深的描述。这些表述没错,文本Embedding是将文本数据转换为机器可以理解的数字化表达形式,用向量来承载 简单来说,它把文本表示成高维空间(可以用三维想象)中的点,通过这种方式,文本之间的关系(如相似度)可以很好地反映在这些点的在空间中的绝对位置上。

但是了解了之后依然很抽象,到底embed了啥?有啥用? 一个词和一句话都是如何Embedding的?

下面从概念、作用、原理三个方面说一下我的理解,然后再看看实际的例子。这样应该可以明白怎么来的和怎么没的(有啥用)。

困扰我的概念

在了解Embedding的时候会遇到两个常见的概念词向量(Word Vector)和词嵌入(Word Embedding)。《GPT图解》书中提到过,这两个概念词汇通常可以互换使用,另外也查看了一些资料,这些都说明两个概念基本上是一致的。但是其实从字面意思能看得出词向量是嵌入的结果,词嵌入是说嵌入的方法和过程。那说说我的理解。([[张量、向量、矩阵有什么关联和差别?]])

词向量(Word Vector)

词向量本质是个向量,是词语在空间中的表示。也就是用一个定长的向量捕捉了词语和其他词语之间的语义关系。这个词向量可能是由各种嵌入方式生成的,比如Word2Vector、BERT等。比如用某种嵌入的方法就会得到“猫”这个词的300维的词向量。

词嵌入(Word Embedding)

词嵌入本质是在说嵌入的过程和结果。所以Word2Vector、BERT、GloVe等都是词嵌入的实现过程。所以常常会看见“使用BERT来做词嵌入,生成猫这个词的300维向量”

综合两个概念再来看Emebdding过程,可以看出Embedding是一个更广的概念,是一个将多种格式的信息统一化的过程。做Embedding是为了让计算机先把人类能获取到的信息(文字、图片、视频、音频等)“读”到计算机中,再将词语、词语之间的关系传递到“大脑”(比如LLM)中进行学习或者计算反馈。

能干什么?

这个问题其实很多文章都说的比较到位,无论是在W2V处理文字还是CNN卷积图像的时候,其实都是在提取特征、捕捉含义的同时降低维度。

  1. 表示文本特征:文本原本是由字符组成的,直接使用这种形式进行计算会非常复杂且效率低下。通过Embedding技术,可以将文本转换为固定长度的向量,简化计算。
  2. 捕捉语义信息:Embedding不仅可以表示词语本身,还能捕捉到词语之间的语义关系,比如“国王-男性+女性=女王”。这种语义上的计算在原始文本中是无法直接实现的。
  3. 降维处理:原始文本可能非常高维(如每个词一个独热向量),Embedding可以将其降维到一个相对低维的空间,减少计算量。

Embedding的大概过程:

这点上我并没找到OpenAI的ADA和Text-Embedding-3是如何训练的,但是无论是BERT还是W2V,其实Embedding产生的词向量其实只是“副产物”。 这些模型本质上词概率模型,预测下一个词。而Embedding的向量其实包含在训练完的模型上最后输出的隐藏层的全中矩阵中。在状态矩阵中会为每个Token生成一个固定维度的表示。

  1. 训练模型:常见的训练Embedding的方法包括Word2Vec、GloVe和BERT等。这些模型通过大规模的文本数据进行训练,学习词语在不同上下文中的出现频率和相对位置,从而获得每个词语的向量表示。
  2. 向量化:通过训练好的模型,根据训练结果的权限矩阵,将输入文本的每个词或整个句子转换为向量。例如,"猫"可能被表示为一个300维的向量。

举两个例子:

假设有两句话:“我喜欢看电影”和“我爱看电影”, Token化之后其实变成了形似 ["我","喜欢", "看", "电影" ], ["我","喜欢", "爱", "电影" ]的两个数组。 通过Embedding模型,按照Token数组从隐藏层的全中数组中提取出向量进行组合计算,Embedding它们会被转换成两个非常接近的句子向量。 因为“喜欢”和“爱”在语义上是相似的词语,Embedding也捕捉到了这种关系。

总体来说,文本Embedding是自然语言处理中的一种基础技术,它将复杂的文本数据转换为机器易于处理的向量形式,同时保留了文本中的语义信息。

之后会整理更多学习、工作中遇到的问题和思考,欢迎大家关注Global AI Pro