句子 》句子预处理 (把太长的句子截短,在句子中添加首尾标识符)》分词 》编码(词典 vocabulary)
tokenizer.encode 参与了 step 1、2、3
transformer 参与了 step 4、5、6、7
LLM 编码的过程
LLM(大型语言模型)编码是将输入文本转换为神经网络可以处理的数字表示的过程。下面是编码过程的步骤概述:
1. Tokenization:
输入文本被分解成单个词或标记。这是使用标记器完成的,它将文本分解成子词(小单元词)或词块。例如,单词“unbreakable”可能被标记化为“un##break##able”。
2. 词汇创建:
通过从训练数据集中收集所有唯一标记来创建词汇。这个词汇用于将每个标记映射到唯一的整数索引。
3. 标记索引:
输入文本中的每个标记被替换为词汇中的对应整数索引。这创建了一个整数序列,其中每个整数代表一个标记。
4. 嵌入层:
整数序列被输入到嵌入层中,该层将每个整数转换为高维空间中的密集向量(嵌入)。这些嵌入是在训练过程中学习的,并捕捉每个标记的语义含义。
5. 位置编码:
为了保留标记的顺序,位置编码被添加到嵌入中。这涉及到将固定向量添加到每个嵌入中,其中向量是标记在序列中的位置的函数。
6. 段编码(可选):
如果输入文本由多个段(例如句子或段落)组成,段编码将被用于区分它们。这涉及到将段特定的向量添加到嵌入中。
7. 编码器输入:
最终的编码输入是一个向量序列,其中每个向量代表输入文本中的一个标记。这个序列被输入到编码器中,通常是一个基于 transformer 的架构。
下面是一个简单的示例来说明编码过程:
输入文本:“The quick brown fox jumps over the lazy dog.”
标记化:[“The”, “quick”, “brown”, “fox”, “jumps”, “over”, “the”, “lazy”, “dog”]
词汇:{“The”: 0, “quick”: 1, “brown”: 2,…, “dog”: 8}
标记索引:[0, 1, 2, 3, 4, 5, 0, 6, 8]
嵌入层:将每个整数索引转换为密集向量(例如使用 Word2Vec 或 GloVe)。
位置编码:将固定向量添加到每个嵌入中,基于其在序列中的位置。
段编码(可选):如果输入文本由多个段组成,将段特定的向量添加到每个嵌入中。
编码器输入:一个向量序列,其中每个向量代表输入文本中的一个标记。
这个编码输入然后被输入到 LLM 的编码器中,该编码器处理向量序列以生成输入文本的上下文表示。