【DL】GPT|Tokenizer|Embedding,token

一.一句人类语言,到底是怎么变成神经网络能够处理的数字的?

我喜欢学习人工智能
        ↓
    Tokenizer
        ↓
   Token IDs
        ↓
   Embedding
        ↓
    向量矩阵
        ↓
   Transformer

神经网络为什么不能直接处理文字?

因为神经网络进行计算的基础是数字和向量,而“我”“喜欢”“学习”这些文字本身不是可以直接进行矩阵运算的数值表示,必须把文字转换成数字,这就是tokenizer的工作。

什么是token

Token 是模型处理文本时使用的基本文本单位,它不一定等于一个字,也不一定等于一个单词。Token 是 Tokenizer 根据词表和切分规则产生的模型输入单位。

二.GPT —— 一个 Token 到底是怎么生成出来的?

GPT 到底是什么?

使用 Decoder-only Transformer 架构进行自回归语言建模的模型

GPT
│
├── Transformer
│
├── Decoder-only
│
└── 自回归语言模型(根据已经出现的token,一个一个预测后面的token)
输入
 ↓
预测下一个 Token
 ↓
把预测结果加入输入
 ↓
再次预测
 ↓
重复

GPT是怎么预测的?

文本
 ↓
Tokenization
 ↓
Embedding
 ↓
Position
 ↓
Transformer
 ↓
Logits
 ↓
Softmax
 ↓
概率

Tokenization:

文本
 ↓
切成 Token
 ↓
每个 Token 映射成一个 ID

举个例子吧:

假设有文本“我喜欢吃”

GPT并不是直接理解,而是把文本拆成Token,我–token1,喜欢–token2,吃–token3,

Embedding:

文本
 ↓
Tokenizer
 ↓
[101,205,308]
 ↓
Embedding
 ↓
[[0.2,...],
 [0.7,...],
 [0.1,...]]

token本身只是一个id,这些id本身没有语义,所以需要Embedding把token id转换成向量,Embedding 的作用是把离散的 Token ID 映射成连续的高维向量,使模型能够通过向量空间表示和学习 Token 的特征。它本质上是一个矩阵。

  • 把离散token转成向量
  • 让模型可以进行数学运算
  • 通过训练学习token的表示
那这些向量是谁设计出来的?

不是人工设计的,而是在模型训练过程中通过反向传播不断学习出来的,它会在训练过程中不断发生变化。

position:

例子:

我
↓
向量 + 位置1

喜欢
↓
向量 + 位置2

吃
↓
向量 + 位置3

![[Pasted image 20260830111446.png]]

transformer的输出就是Eembedding + position

transformer:

负责向量之间的关系

我 喜欢 吃

加入多个transformer block,每一层:

        Input
          ↓
  Self-Attention
          ↓
    Residual + Norm
          ↓
         FFN
          ↓
    Residual + Norm
          ↓
        Output

这里Self-Attention 会让不同 Token 之间互相交流,模型通过attention学习当前这个位置应该参考哪些上下文。

logits

transformer最后一层会得到一个向量,然后经过linear层,得到logits

softmax

将logits转换成概率,得到概率尽可能大的token,这里不一定选最大的概率,而是使用sampling从概率分布中进行采样。

“我喜欢吃”
      ↓
 Tokenization
      ↓
 Token IDs
      ↓
 Embedding
      ↓
 Position Information
      ↓
 Transformer
      ↓
 Hidden Representation
      ↓
 Linear
      ↓
 Logits
      ↓
 Softmax
      ↓
 Probability
      ↓
 Sampling / Selection
      ↓
“苹果”
“我喜欢吃苹果”
       ↓
    Tokenizer
       ↓
[101, 205, 308, 512]
       ↓
    Embedding
       ↓
四个向量
       ↓
加入位置信息
       ↓
Transformer
       ↓
预测下一个 Token

深入讲解token

1.为什么不直接一个字一个token?

因为这样会导致词表过大、序列过长,或者无法很好地处理新词和陌生词。如果一个字符一个token就会序列变得非常长,而 Transformer 的 Attention 对序列长度非常敏感,不能太长,也不能太短。

2.Subword Tokenization

把文本拆成比较有意义,同时又能复用的子词单位,在完整单词和单个字符中找到一个平衡。

3.BPE

BPE(Byte Pair Encoding)是一种通过不断合并高频符号对,逐渐建立子词词表的 Tokenization 方法,核心思想,经常出现在一起的东西,就把它们合并起来。类似于前缀和的思想

4.token数量为什么这么重要?

Tokenization 的效率会直接影响模型的上下文容量和计算成本,不同的tokenizer返回的token数量不同,tokenizer会影响同样的上下文能装多少内容。中文和英文的token数量可能不同,因为 Tokenizer 并不是简单按照“一个字/一个单词”固定切分,而是根据具体词表和编码方式进行切分。词表大小、Token 数量、文本覆盖能力之间需要一个平衡。

5.训练好的 Tokenizer 和 GPT 训练是什么关系?

Tokenizer训练
       ↓
建立词表和切分规则
       ↓
GPT训练
       ↓
使用Tokenizer把文本变成Token
       ↓
训练Transformer

训练 vs 推理

训练推理/生成
是否有真实答案
是否计算 Loss通常不需要
是否反向传播
是否更新参数
是否自回归生成不需要逐 Token 生成
是否可以高度并行受到自回归限制

整个LLM输入流程

                 人类语言
                    ↓
                Tokenizer
                    ↓
                Token IDs
                    ↓
                Embedding
                    ↓
              Position 信息
                    ↓
             Transformer
                    ↓
               Hidden State
                    ↓
                  Linear
                    ↓
                 Logits
                    ↓
                 Softmax
                    ↓
              Next Token
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值