现在大语言模型火了,像 ChatGPT 什么的,能回答问题、写文章,。但它们为啥这么聪明呢?这就和向量、Token 有关系。那怎么通过向量、Token来理解我们的问题呢。看完这篇文章就知道了
token
Token 就像是语言里的小积木,是文本中最小有意义的部分。
英文里,单词常常就是 Token,不过有时候长单词会被拆成子词,比如"unbelievable"拆成"un""believ""able"。
中文呢,因为字词没空格,得用工具分成一个个字词,像"我爱自然语言处理",可能分成"我""爱""自然语言""处理"这些 Token。
Tokenization 的方法与策略
- 基于空格的分割:这在英文里很好用,比如 "I am a student.",按空格就能分成 ["I", "am", "a", "student."] 这些 Token。但遇到像 "don't" 这样的缩写,就不太行了,而且中文没有空格,不能用这个方法。
- 规则基础的分割:按照设定好的规则来分,比如把标点去掉,数字统一处理。像 "Hello, world! 123",去掉标点就变成 ["Hello", "world", "123"]。不过这样可能会丢掉一些重要信息,比如引号里的内容,而且规则得根据具体情况调整。
- 字节对编码(BPE):它会统计文本里字节对出现的频率,把经常一起出现的字节对合并成新的子词单元。比如 "low lowing lowest",先发现 "lo" 出现多,就合并,最后可能得到 ["low", "lowing", "lowest"]。这个方法能处理没见过的词,但分出来的子词可能不太好理解,而且计算有点复杂。
- 字节级 BPE:在字节级别用 BPE 算法,对多种语言混合的文本或者特殊符号处理得很好,不过计算量更大,需要更多存储空间。
- WordPiece:和 BPE 类似,不过它在合并字节对的时候,会考虑对语言模型有没有帮助,会根据大量文本学习怎么分最好。但需要很多数据来训练,不然可能分不好。
- Unigram Language Model:从很多 Token 开始,慢慢去掉对语言模型不太重要的,留下有用的。这样能根据实际情况调整 Token 集合,但计算成本高,训练时间长。
Token 在模型中的作用与影响
在大语言模型里,文本要先变成 Token 序列,每个 Token 会被编成一个数字编号。比如有个简单的词汇表 {"I": 1, "love": 2, "natural": 3, "language": 4, "processing": 5},那么 "I love natural language processing." 就会被编成 [1, 2, 3, 4, 5]。接着这些编号会变成向量,模型就能通过向量来理解文本的意思。
模型推理生成文本时,会根据输入的 Token 序列和学过的知识,算出下一个 Token 可能是什么,比如算出 "is" 的概率是 0.1,"a" 的概率是 0.05 等等,然后选概率高的或者用其他方法确定下一个 Token,这样就能生成连贯的文本。
选择不同的 Tokenization 方法对模型性能影响很大。词汇量大,模型能表达的意思就多,但计算也更复杂,要花更多时间和空间。处理没见过的词时,如果 Tokenization 方法好,模型就能把没见过的词拆成认识的部分,从而大概理解意思。而且合理的 Tokenization 还能让输入序列变短,计算更快,比如把 "New York" 当成一个 Token 处理,就比分开处理 "New" 和 "York" 更高效。
向量
从数学来讲,向量有大小和方向。在大语言模型里,向量用来表示单词、句子甚至整篇文档。比如把每个单词变成一个固定长度的向量,语义相近的单词,它们的向量在空间里的距离就会比较近,像 "猫" 和 "狗" 的向量距离就比 "猫" 和 "苹果" 的近。
向量的维度很重要。维度高,能表示的语义信息就多,模型能力就强,像做复杂的文本分类、理解语义、生成自然的文本等都能做得更好,但计算也更难,训练时间长,还可能出现过拟合。维度低,计算简单,但可能没法很好地表示复杂的语义,在遇到有隐含意思或者有歧义的文本时,模型就容易理解错。一般大语言模型里,词向量维度从 256 维到 1024 维甚至更高都有,句子和文档向量维度会根据模型和任务再调整。
向量化的目的与优势
向量化主要是为了让计算机能处理文本这种非数字的数据。计算机处理数字快,把文本变成向量,就能利用计算机的计算能力来分析文本。比如在文本分类任务中,把文本变成向量后,计算机就能通过计算向量快速判断文本属于哪一类,而不是只简单地匹配文字。
向量化还能准确地抓住数据的特征和关系。在词向量空间里,语义相近的词向量距离近,不同的词向量距离远。比如 "国王" 和 "王后" 的向量相似度就比和 "苹果" 的高,模型就能根据这个理解它们的语义联系,在回答问题、生成文本时就能更符合逻辑。而且向量形式的数据做矩阵运算快,能利用高效的矩阵运算库,让模型训练和推理更快,能处理更多文本,满足实际应用中快速处理大量数据的需求。
向量在模型中的应用场景
在大语言模型里,词向量很基础。通过像 Word2Vec、GloVe 这些方法在大量文本上训练,词向量能抓住单词的语义信息。比如在情感分析任务中,模型可以根据词向量判断文本的情感倾向。
句子和文档也能变成向量。句子向量通常是把句子里单词的向量加权求和得到,文档向量也类似。这样得到的向量能用来计算文本相似度、做分类和聚类。比如在信息检索中,通过计算查询语句和文档向量的相似度,能快速找到相关文档;在文本聚类中,根据向量相似性把文本分类,能发现文本的潜在主题和模式。
在模型输入和输出时,向量化也很关键。输入文本要先变成向量,模型处理后输出也是向量,然后再变成文本。比如在文本生成任务中,模型输出的向量要解码成单词序列,才能生成连贯的文本;在机器翻译中,源语言文本变成向量输入,模型输出目标语言文本的向量,再解码成翻译结果。
向量在注意力机制里也很重要。注意力机制通过计算向量之间的相关性,给输入文本的不同部分分配不同权重,让模型能关注重要信息,提高性能。比如在阅读理解中,回答问题时,注意力机制能让模型聚焦在相关文本上,提取关键信息,回答更准确,避免无关信息干扰,让模型能更好地理解复杂文本,输出更有针对性的答案。
那Token 和向量怎么配合
文本被分成 Token 序列后,模型会用一种叫词嵌入的技术把 Token 变成向量。比如 Word2Vec,它通过让神经网络学习大量文本中单词的上下文信息,来调整单词对应的向量值,让语义相近的单词向量距离近。像 "苹果" 和 "香蕉" 如果经常在相似上下文中出现,它们的向量就会接近。
基于 Transformer 架构的模型(像 GPT、BERT 等),在嵌入层直接把 Token 变成向量。模型会给每个 Token 一个固定维度的向量,通过模型的参数矩阵和 Token 的编码(比如独热编码或者整数编码)相乘得到。比如模型嵌入层维度是 512,词汇表大小是 10000,那么一个 Token 的向量就是 512×10000 的参数矩阵和它的编码向量相乘得到的 512 维向量。这样就能快速把 Token 变成模型能处理的向量,而且随着模型训练,向量会不断优化,更好地表示 Token 的语义和语言特征。
向量如何表征 Token 的语义
向量在空间里的位置和数值分布能表示 Token 的语义。语义相近的 Token,向量位置近,某些维度的数值也相似。比如表示颜色的 "红色""蓝色""绿色",它们的向量在和颜色相关的维度上数值可能相似,其他维度有差异。通过计算向量的距离(像欧几里得距离、余弦距离)或者相似度(像余弦相似度),模型能判断 Token 语义的相似程度。
在模型推理和理解语言时,向量的这种语义表示能力很有用。比如在文本分类任务中,模型根据文本中 Token 的向量判断主题类别;在情感分析中,通过分析向量里的情感倾向信息确定文本的情感态度。向量之间的运算也能模拟一些语义关系,像 "国王 - 男人 + 女人 = 王后",通过向量运算能得到和 "王后" 向量相近的结果,这说明模型能理解一些语义逻辑关系,提升语言理解和处理能力,更好地应对各种复杂的语言情况和任务。
两者协同工作的机制
在大语言模型训练时,Token 和向量紧密配合。输入文本先被分成 Token 序列,然后通过词嵌入层变成向量。模型通过学习大量文本,不断调整向量的权重和参数,让向量更好地表示 Token 的语义和语言结构。比如在基于 Transformer 架构的语言模型训练中,模型通过多头注意力机制对不同位置的 Token 向量加权计算,学习 Token 之间的依赖关系和语义关联。这里 Token 的顺序和组合对模型学习语法和语义规则很重要,向量则是模型计算和推理的基础数据形式,承载 Token 的语义信息,让模型能深入理解和分析文本。
在模型推理阶段,输入文本先变成 Token 序列再变成向量输入模型。模型根据学过的知识,通过对向量的运算处理,生成输出文本的概率分布,然后选合适的 Token 输出,生成连贯文本。比如在问答系统中,模型把用户问题变成 Token 向量,在已有的知识里找相关信息,通过向量运算推理,找到答案的向量表示,再解码成 Token 序列回答用户。Token 和向量的协同工作,让模型能快速准确理解用户问题,生成合理回答,实现自然流畅的人机交互,提高模型的实用性和应用价值。