在数字化的浪潮中,人工智能大模型正像超级英雄一样,悄悄地改变着我们的世界。它们不仅在语言翻译、内容创作等领域大放异彩,更是在数据分析、个性化推荐等方面展现出了惊人的能力。但这些AI大模型是如何工作的呢?让我们一起揭开它们神秘的面纱,特别是探索一下“token”这个神奇的概念。
想象一下,如果你的电脑能够像人类一样理解和创造语言,那会是一种怎样奇妙的体验?AI大模型如何就拥有了类人智慧,它们能够阅读、写作,能与你进行深入的对话,甚至在刚刚发布的CHat GPT-4o中还能识别人的情绪。在这背后,我们就得理解一个最基本的关键元素——“token”。
在自然语言处理(NLP)的世界里,“token”是最基本的单位。就像拼图游戏中的每块拼图,每个单词都是一个token。比如,“I love you”这句话,就可以被拆分成“I”、“love”和“you”这三个token。
Token不仅仅是文本的组成部分,它们是AI大模型理解和生成语言的基石。通过将文本分解成token,AI可以像玩拼图一样,轻松地处理和分析语言数据。
GPT系列是一系列基于Transformer的生成式预训练模型,它们可以用来生成各种类型的文本。目前,已经有了GPT-2、GPT-3和GPT-4等不同版本的模型,它们的区别主要在于模型的大小、训练数据的规模和质量、以及生成能力的强度。
GPT系列的模型都是基于子词(subword)来进行tokenization的。子词是指比单词更小的语言单位,它们可以根据语料库中的词频和共现频率来自动划分。
比如,一个单词“transformer”可以被划分成两个子词“trans”和“former”,或者三个子词“t”,“rans”和“former”,或者四个子词“t”,“r”,“ans”和“former”,等等。
不同的划分方法会产生不同数量和长度的子词。一般来说,子词越多越短,就越能覆盖更多的语言现象,但也会增加模型的计算复杂度;子词越少越长,就越能减少模型的计算复杂度,但也会损失一些语言信息。
GPT系列采用了一种叫做Byte Pair Encoding(BPE)的子词划分方法。BPE是一种基于数据压缩原理的算法,它可以根据语料库中出现频率最高的字节对(byte pair)来合并字节,从而生成新的字节。
比如,如果语料库中出现频率最高的字节对是“ns”,那么BPE就会把所有的“ns”替换成一个新的字节“Z”,从而减少字节总数。这个过程可以重复进行,直到达到预设的字节总数或者没有更多的字节对可以合并为止。这样,BPE就可以把原始的字节序列转换成一个由新字节组成的子词序列。
例如,“obsessiveness”这个单词可以被BPE转换成以下子词序列:
原始字节序列:obsessiveness
第一次合并:obseZiveneZ(假设Z代表ss)
第二次合并:obsEivenE(假设E代表e Z)
最终子词序列:obsEivenE(如果没达到预设的字节要求,可合并只出现一次的子词)
当然,这只是一个简单的例子,实际上BPE会根据大规模的语料库来生成更多更复杂的子词。GPT系列使用了不同大小的BPE词典来存储所有可能出现的子词。比如,GPT-3使用了50,257个子词。
GPT系列采用了基于BPE算法的子词作为token类型,主要目的是以无损的方式压缩文本的内容,从而以保证语言覆盖度和计算效率之间达到一个平衡。
我们已经知道了GPT系列使用了子词作为token类型,并且如何将文本内容转换为由子词组合而成的序列,也就是术语中分词过程。
有了子词序列之后,我们就可以用子词来表示和生成文本了吗?答案是否定的。因为语言模型是基于神经网络的,而神经网络只能处理数值数据,而不能处理文本数据。因此,我们还需要做第二件事情:将子词序列转换为数值向量。
这里,我们需要介绍两个重要的概念:编码(encoding)和解码(decoding)——
将子词序列转换为数值向量的过程叫做编码(Encoding),它是语言模型的第二步。编码的目的是将一个个离散且无序的token映射到一个个连续且有序的向量空间中,从而方便语言模型进行计算和学习。
编码(Encoding)
编码是将子词序列转换为数值向量的过程。这是语言模型的第二步,目的是将离散且无序的token映射到连续且有序的向量空间中,以便于神经网络进行计算和学习。
解码(Decoding)
解码是编码的逆过程,即将数值向量转换回子词序列,从而得到原始的文本。
以hello这个词为例——
在AI的BPE词典中,hello可以被分解为he, ll, 和 o这三个子词token。每个子词token都有对应的数字密码。假设在我们的魔法书中,he对应数字1,ll对应数字2,而o对应数字3。那么,hello这个咒语的数字密码就是[1, 2, 3]。
现在,让我们进行一次反向旅程,将数字密码重新变回文本。假设我们有一个数字序列[1, 2, 3],我们的任务是将它解码回原始的文本。
根据我们的BPE词典,数字1对应he,数字2对应ll,数字3对应o。但是,我们不能简单地将它们连在一起变成he23o,这样就没有魔法效果了。我们需要做的是,根据BPE的规则,将这些数字重新组合成有意义的子词和单词。
在这个例子中,我们首先找到数字1对应的he,然后是数字2,根据BPE的规则,我们知道ll是由两个l组成的,所以我们将he和ll合并,得到hello。最后,我们加上数字3对应的o,但在这里,o是独立的,不需要与其他子词合并。因此,我们得到了原始的文本hello。
通过编码和解码,我们就可以实现文本和子词序列向量之间的互相转换。但是,这还不够。我们还需要让GPT系列能够理解和生成这些子词序列。为了做到这一点,我们还需要进行另外两个步骤:嵌入(embedding)和预测(prediction)——
嵌入(Embedding)
嵌入就像是给每个子词赋予了魔法属性,每个子词用一个特征向量来表示,这个特征向量可以反映出子词的含义、用法、情感等信息,使得AI能够理解子词之间的关系。
预测(Prediction)
预测就像是占卜师预测未来一样,根据给定的文本,计算出下一个子词出现的概率。这是AI大模型生成文本的关键步骤。
通过嵌入,我们就可以把每个子词看作是高维空间中的一个点,而这些点之间的距离和方向,就可以表示出子词之间的相似度和差异度。比如,“猫”和“狗”的点因为同为宠物,可能会比较接近,相对“狗”而言,“猫”和“牛”的点可能会比较远离。
在完成嵌入后,我们就可以进行预测(prediction)。预测就是根据给定的文本,计算出下一个子词出现的概率。比如,如果给定的文本是“我家有一只”,那么下一个子词可能是“猫”或者“狗”,而不太可能是“桌子”或者“电视”。这个概率的计算,就是基于特征向量表进行的。
通过嵌入和预测,我们就可以实现从数字到文本,或者从文本到数字的转换。但是,这还不够。我们还需要让GPT系列能够根据给定的文本来生成新的文本。为了做到这一点,我们还需要进行最后一个步骤:生成(generation)——
生成(Generation)就像是根据给定的文本来编织新的故事。GPT系列主要采用了自回归模式,就像是编织一张网,每个节点的输出都依赖于前一个节点的信息。
生成可以分为两种模式——
自回归(autoregressive)和自编码(autoencoding),GPT系列主要采用了自回归模式。
那么什么是自回归?简单理解就是想象这么一副画面——
一个人在拍连环画,每一页连环画都是前一张连环画的延续。也就是说,人需要看前一张画乃至前多张画才能知道该画什么内容。
与此相似,自回归模型中的每个时间点都需要前一个时间点的信息才能计算出当前时间点的输出值。就像拍连环画一样,自回归模型中各个时间点之间存在着紧密的联系和依赖关系,这种联系在预测时间序列数据时非常有用。
例如,“I love you”这个句子可以被GPT系列生成为以下的文本:
I love you more than anything in the world.
I love you and I miss you so much.
I love you, but I can't be with you.
因此,GPT系列使用了子词、数值向量、实数向量和Transformer模型来表示和生成文本。通过编码、解码、嵌入、预测和生成等步骤,它可以实现从文本到文本的转换。
今天,我们了解了AI大模型是如何通过token来表示和生成文本的。从token的概念到GPT系列的工作原理,再到编码、解码、嵌入、预测和生成的过程,我们可以看到AI大模型的复杂性和强大能力。
随着技术的不断进步,AI大模型将在更多领域发挥重要作用。它们不仅能够提高工作效率,还能帮助我们更好地理解和处理语言数据。然而,随着这些模型变得越来越强大,我们也必须关注它们可能带来的伦理和社会问题,确保技术的发展能够造福人类。