导航

Token vs 单词

Posted on 2023-10-29 12:37  蝈蝈俊  阅读(137)  评论(0编辑  收藏  举报

要让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拆分。

参看:理解Transformer中的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翻译会很容易,因为不同语言的哪些词的相似度高,是它天生具备的能力。

参考:如何理解机器学习中的嵌入 (Embedding)?

总结

为了让大型语言模型如GPT系列能够理解并生成文字,我们必须首先解决其如何“懂”单词的问题。这就涉及到一个核心概念:Token。Token是文本被编码成可供计算机处理的基础单元。

在不同的模型和系统中,单词如何被拆分成Token是有差异的。不同的分词策略适应不同的场景需求,但它们的共同目的是为了更好地连接人类的语言和计算机的理解,为自然语言处理技术打下坚实的基础。

Token在模型中是通过多维向量来表示的,这些向量能够捕捉单词的语义、上下文,甚至是多重含义。并且,语义相近的单词在向量空间中往往也是接近的。

这些技术的背后,为我们提供了一个强大而高效的方式来让机器“懂”单词,从而更好地理解和生成自然语言。

参考: