深入理解LLM的Token机制:从基本单位到生成文本的奥秘

云的事情不好说 2024-08-23 19:38:53

Token 是 LLM 理解的文本基本单位。虽然将 Token 看作单词很方便,但对 LLM 来说,目标是尽可能高效地编码文本,所以在许多情况下,Token 代表的字符序列比整个单词短或长。标点符号和空格也作为 Token 表示,可能是单独或与其他字符组合。

LLM 使用的所有 Token 统称为其“词汇”,因为它可以用来表示任何可能的文本。字节对编码(BPE)算法通常用于 LLM 生成 Token 词汇。比如,GPT-2语言模型是开源的,其词汇量为 50,257 个 Token。

LLM 词汇中的每个 Token 都有一个唯一的标识符,通常是一个数字。LLM 使用“分词器”在常规文本字符串和等效的 Token 数列表之间进行转换。

如果熟悉 Python 并想尝试 Token,可以从 OpenAI 安装tiktoken包:

$ pip install tiktoken

然后在 Python 提示符中尝试以下代码:

>>> import tiktoken>>> encoding = tiktoken.encoding_for_model("gpt-2")>>> encoding.encode("The quick brown fox jumps over the lazy dog.")[464, 2068, 7586, 21831, 18045, 625, 262, 16931, 3290, 13]>>> encoding.decode([464, 2068, 7586, 21831, 18045, 625, 262, 16931, 3290, 13])'The quick brown fox jumps over the lazy dog.'>>> encoding.decode([464])'The'>>> encoding.decode([2068])' quick'>>> encoding.decode([13])'.'

在这个实验中,可以看到对于 GPT-2 语言模型,Token 464 代表单词“The”,而 Token 2068 代表单词“ quick”,包括一个前导空格。该模型使用 Token 13 表示句号。

由于 Token 是通过算法确定的,我们可能会发现一些奇怪的现象,比如这三个变体的单词“the”,在 GPT-2 中都编码为不同的 Token:

BPE 算法并不总是将整个单词映射到 Token。事实上,使用频率较低的单词不能成为独立的 Token,必须使用多个 Token 进行编码。以下是一个使用两个 Token 编码的单词示例:

由于模型只能预测下一个标记 (token) 是什么,因此生成完整句子的唯一方法是多次循环运行模型。每次循环迭代都会生成一个新的标记,从返回的概率中选择该标记。然后将该标记添加到下一次循环迭代的输入中,直到生成足够的文本为止。



0 阅读:14

云的事情不好说

简介:感谢大家的关注