要让LLMs(Large Language Models,大型语言模型)生成文字,首先得让它们“懂”单词。
什么样算懂单词?可以续写单词就是:
视频:单词续写演示
视频,续写:这是它如何***? 有多种选择可供续写的单词,应该用哪个呢?
单词首先会被拆分为 Tokens(一种能够被编码的基础单元)。在不同的语言模型和分词系统中,Token的定义和分割方法可能会有所不同。
绝大多数情况下,一个单词对应一个Token,
上图是GPT-3.5和GPT-4的token,每种颜色对应一个token。来自 https://platform.openai.com/tokenizer
但是也有很多情况单词和Token不能一一对应。
一、单词跟Token无法一一对应的场景
以下是几种常见的不能一一对应的情况:
子词分词(Subword Tokenization):
在一些语言模型中,例如BERT和GPT系列模型,采用了子词分词策略,如WordPiece、SentencePiece或Byte Pair Encoding (BPE)等。在这些分词方法中,一个单词可能会被分割成几个子词tokens。
例如,单词 "unhappiness" 可能会被分割成三个tokens:“un”、“happiness”和"##ness"。
这种方式可以让机器学习到词根、前缀和后缀等词汇结构,从而更好地理解单词的语义和结构。
字符级分词(Character-level Tokenization):
在字符级分词中,每个字符都被视为一个单独的token。例如,单词 "hello" 会被分割成五个tokens:“h”、“e”、“l”、“l”和“o”。
这种分词方法适用的场景如下:
1、语言模型的基础训练:
在一些基础的语言模型训练任务中,字符级分词可以帮助模型从基础开始学习语言的结构和规律。通过这种方法,模型可以从字符的组合中学习到单词和短语的构成规则。
图:机器和人都在做最简单的单词和短语构成的学习。
2、处理未知或稀有单词:
字符级分词可以帮助模型更好地处理未见过或稀有的单词。
通过学习字符间的关系和组合规律,模型可以在面对未知单词时做出更好的预测。
3、处理拼写错误:
当文本中存在拼写错误时,字符级分词可以帮助模型识别和纠正这些错误。
图:机器人在被老师做拼写错误校正
因为模型可以看到单词的每个字符,所以它可以识别出可能的拼写错误并提出修正建议。
小节
字符级分词通常会产生更小的词汇表,这可以减小模型的大小和提高计算效率。
然而,这也可能会导致模型需要处理更长的序列,因此在实际应用中,需要根据具体的任务需求和条件来选择最适合的分词策略。
多字词分词(Multi-word Tokenization):
在某些情况下,一些语言模型可能会将多个单词或短语视为一个单独的token。
例如,"New York" 可能会被视为一个单独的token,而不是两个单独的tokens。
特殊字符和标点符号:
标点符号和特殊字符通常会被视为独立的tokens。
例如,句子 "I love AI." 会被分成四个tokens:“I”、“love”、“AI”和“.”
来自https://platform.openai.com/tokenizer的token拆分。
非拉丁语系的语言:
对于非拉丁语系的语言,如中文、日文和韩文等,token和单词之间的对应关系可能会更加复杂。
如上图,部分中文字符被拆解成多个token,不多大多仍然是一对一。
特殊的分词标记:
在处理文本时,某些特殊的分词标记(例如,[CLS]、[SEP]等)也会被插入到token序列中,但这些标记并不对应任何实际的单词。
图出处:https://www.neclab.eu/blog/attending-to-future-tokens-for-bidirectional-sequence-generation
[CLS](Classification)标记:
[CLS] 是 Classification 的缩写,通常用于序列分类任务。
- 在模型的输入序列的开始位置插入 [CLS] 标记。
- 在训练和应用模型时,[CLS] 标记的输出向量通常被用作整个序列的聚合表示,用于分类任务。
- 例如,在情感分析任务中,[CLS] 标记的输出向量可能会被用来预测文本的情感(如正面或负面)。
[SEP](Separator)标记:
[SEP] 是 Separator 的缩写,用于分隔模型输入中的不同部分。
- 在处理两个或多个独立序列时(例如,在问答或自然语言推理任务中),[SEP] 标记用于分隔这些序列。
- 通过插入 [SEP] 标记,模型可以更好地理解输入序列中各部分之间的关系和界限。
小节
不同需求场景下,我们选择了不同的分词策略,继而出现了不同的Token跟单词的关系。
正确的分词策略对于提高模型效能至关重要,它构成了连接人类语言与计算机理解的桥梁,为自然语言处理技术奠定了基础。
二、Token如何表示单词的多种含义?
Token在大型语言模型中是通过多维向量来表示的。这些向量可以捕捉单词的多种含义和上下文信息。
例如,单词"bank"可以指河岸也可以指金融机构。在不同的上下文中,"bank"的向量表示会有所不同,从而能够区分它的不同含义。
图:bank单词的多个含义:河岸、银行、等等。
一个单词的多维向量是通过神经网络模型的训练过程得到的。
视频:LLM需要在大量的训练数据中观察该单词是如何被使用的
视频:work这个词在不同场景,含义不同,大语言模型通过大量的训练数据来观察它是如何被使用的。
每个维度的值不是直接为特定的语义或句法特性分配的,而是在模型训练的过程中学习到的。并存储到该词向量中。
虽然这些向量能够捕捉单词的语义和上下文信息,但每个维度的具体语义往往是不透明的。
也就是说,我们很难直接解释某个维度的值代表了什么具体的语义或句法特性。
让我们用一个比喻来解释这个问题:
想象你有一个神秘的魔法盒子,这个盒子可以制作美味的蛋糕。你投入各种原料,比如面粉、糖、鸡蛋等,然后盒子就会自动混合、烘烤,最后输出一个蛋糕。
现在,盒子里有很多小旋钮,每个旋钮都可以调整制作蛋糕的某个环节。一开始,你并不知道每个旋钮的具体功能。但经过多次试验,你发现调整某个旋钮会使蛋糕更松软,调整另一个旋钮会使蛋糕更甜。
图:有很多控制按钮的制作蛋糕的魔法盒子
这些旋钮就像词向量中的每个维度。我们不一定知道每个旋钮(维度)具体控制什么,但我们知道调整它们会影响最终的结果(单词的语义表示)。
通过训练,模型就像是在不断地尝试和调整,找到最佳的旋钮组合,使得蛋糕(单词的表示)达到最佳的味道(语义)。
所以,尽管我们很难直接解释每个维度的具体意义,但我们知道整体的向量能够很好地表示单词的语义,并在实际任务中表现出色。
意思相近的词,Token的向量也相近
有意思的是,我们发现那些意思相近的单词,它们的Token的向量往往很像。
图:几组很相似的词向量,用颜色表示每个向量的值。
语义接近的两个词汇在向量空间中的位置也比较接近。
如果用“巴黎”做取词嵌入,减去嵌入的“法国”,再添加嵌入“英格兰”,所产生的“嵌入”将接近嵌入“伦敦”,即:
巴黎 - 法国 + 英格兰 = 伦敦
这里的向量(巴黎 - 法国)似乎代表了“首都” 的概念
如上图所示:
queen(皇后)= king(国王)- man(男人)+ woman(女人)
即:“皇后啊,就是女性的国王呗!”
“walked,就是walking的过去式啦!”
这样是为啥GPT翻译会很容易,因为不同语言的哪些词的相似度高,是它天生具备的能力。
总结
为了让大型语言模型如GPT系列能够理解并生成文字,我们必须首先解决其如何“懂”单词的问题。这就涉及到一个核心概念:Token。Token是文本被编码成可供计算机处理的基础单元。
在不同的模型和系统中,单词如何被拆分成Token是有差异的。不同的分词策略适应不同的场景需求,但它们的共同目的是为了更好地连接人类的语言和计算机的理解,为自然语言处理技术打下坚实的基础。
Token在模型中是通过多维向量来表示的,这些向量能够捕捉单词的语义、上下文,甚至是多重含义。并且,语义相近的单词在向量空间中往往也是接近的。
这些技术的背后,为我们提供了一个强大而高效的方式来让机器“懂”单词,从而更好地理解和生成自然语言。
参考:
- 宝玉翻译的,生动的介绍Transformer的原理 https://baoyu.io/pages/ft/generative-ai