3

文本输入处理

从文字到数字:Tokenization与Embedding技术

⏱️ 90分钟📊 难度:基础🎯 模块2:核心技术

📖课程概述

大语言模型无法直接理解文字,必须先将文本转换为数字表示。本讲将深入讲解文本输入处理的两大核心技术: Tokenization(文本分词)和Embedding(向量嵌入)。你将理解如何将自然语言转换为模型可以处理的数值形式, 以及这个过程中的关键技术细节和设计权衡。

🎯学习目标

1.理解Tokenization的原理、方法与实现细节
2.掌握BPE、WordPiece等主流分词算法的优劣
3.理解Embedding的数学原理与语义表示能力
4.认识位置编码在序列建模中的关键作用

🔑核心知识点

TokenizationBPE算法Embedding位置编码

🔤 Tokenization(文本Token化)演示

💡什么是Tokenization?

Tokenization是将文本分解为更小单元(tokens)的过程。 这是大语言模型处理文本的第一步。

为什么需要?模型不能直接理解文字,需要将文字转换为数字。 Tokenization是这个转换过程的基础。

常见方法:字符级、词级、子词级(BPE、WordPiece等)。 现代LLM多使用子词级分词。

💡核心概念详解

🔤

Tokenization:文本的离散化表示

Tokenization是将连续的文本流切分为离散token序列的过程。这是LLM处理文本的第一步, 也是最基础但至关重要的一步。分词策略直接影响模型的词汇表大小、训练效率、语义理解能力。 选择合适的分词粒度是平衡效率与表达能力的关键。

三种主要分词策略:
1. 字符级(Character-level)
优点:词汇表极小(~256个),不会出现未登录词(OOV)
缺点:序列过长,难以捕捉词级语义,计算开销大
示例:"Hello" → ['H', 'e', 'l', 'l', 'o']
2. 词级(Word-level)
优点:符合语言学直觉,语义完整性好
缺点:词汇表巨大(数十万),大量低频词,OOV问题严重
示例:"unhappiness" → ['unhappiness'](可能OOV)
3. 子词级(Subword-level)⭐推荐
优点:平衡词汇表大小与语义完整性,处理未知词能力强
缺点:需要训练分词器,可能切分不符合语言学直觉
示例:"unhappiness" → ['un', 'happiness'] 或 ['un', 'happy', 'ness']
💡 为什么现代LLM都用子词分词?

子词分词通过BPE、WordPiece等算法,能够在较小的词汇表(通常5万-10万)内, 覆盖几乎所有文本。既避免了字符级的序列过长,又解决了词级的OOV问题。 更重要的是,它能捕捉形态学规律(如前缀un-、后缀-ness),提升泛化能力。

🔀

BPE算法:数据驱动的子词分词

字节对编码(Byte Pair Encoding, BPE)是目前最流行的子词分词算法,被GPT系列、BERT等主流模型采用。 它通过迭代合并最频繁出现的字符对,自动学习出最优的子词单元,完全数据驱动,无需语言学知识。

BPE算法流程:
1.
初始化:将所有词拆分为字符序列,统计频率
'low': 5次, 'lower': 2次 → l o w: 5, l o w e r: 2
2.
统计字符对:找出最频繁的相邻字符对
'lo': 7次(最多), 'ow': 7次, 'we': 2次...
3.
合并操作:将最频繁的字符对合并为新的token
l o w → lo w, l o w e r → lo w e r
4.
迭代重复:重复步骤2-3,直到达到预设词汇表大小
lo w → low, low e r → lower...
✅ BPE优势
  • • 完全数据驱动,无需语言学规则
  • • 有效处理未登录词(OOV)
  • • 词汇表大小可控(通常3万-5万)
  • • 能捕捉高频词和词根词缀
⚠️ BPE局限
  • • 可能切分不符合语义单元
  • • 对低频词切分过碎
  • • 不同语言需要不同分词器
  • • 训练需要大量文本
🔢

Embedding:将Token映射到语义空间

分词后,每个token只是一个整数ID(如"cat"→42),模型无法直接从ID中理解语义。 Embedding技术将每个token映射到一个高维连续向量(通常512-4096维), 在这个向量空间中,语义相近的词距离更近,实现了从离散符号到连续语义表示的转换。

Embedding的数学本质:
查表操作:维护一个嵌入矩阵 E ∈ ℝ^(V×d)
V = 词汇表大小(如50,000),d = 嵌入维度(如768)
映射过程:token_id → E[token_id] → 向量表示
"cat"(ID=42) → E[42] → [0.23, -0.45, 0.67, ..., 0.12]
语义性质:相似词的向量夹角小(余弦相似度高)
vec(king) - vec(man) + vec(woman) ≈ vec(queen)
为什么Embedding有效?
  • 分布式表示:每个维度捕捉语义的某个方面(如性别、时态、情感等)
  • 泛化能力:相似词共享相似表示,知识可迁移
  • 可学习性:通过反向传播,嵌入向量随任务优化
  • 降维压缩:用数百维表示数万词汇,高效利用参数
📍

位置编码:为序列注入顺序信息

Transformer架构本身是位置无关的——如果打乱输入顺序,Self-Attention的计算结果不变。 但语言是强序列依赖的("狗咬人"和"人咬狗"意义完全不同),因此必须显式地告诉模型每个token的位置。 位置编码(Positional Encoding)就是为每个位置生成独特的向量,与token embedding相加后输入模型。

两种主流位置编码方案:
1. 绝对位置编码(Absolute Positional Encoding)
正弦余弦编码(原始Transformer):
PE(pos, 2i) = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))
优点:无需训练,可外推到更长序列;缺点:固定模式,可能不够灵活
2. 相对位置编码(Relative Positional Encoding)
不编码绝对位置,而是编码token之间的相对距离(如"前2个词"、"后3个词")
优点:更符合语言学直觉,长序列泛化好;缺点:计算复杂度稍高
3. 可学习位置编码(Learned Positional Encoding)
将位置编码作为参数,随模型训练一起优化(BERT、GPT采用)
优点:灵活适应任务;缺点:需要训练,不易外推到更长序列
💡 位置编码的重要性

实验表明,去掉位置编码后,Transformer在需要理解词序的任务上性能大幅下降。 位置编码虽然只是简单的向量加法,但它是Transformer理解序列结构的关键机制。 选择合适的位置编码方案,对模型处理长文本的能力影响巨大。

🎯 核心概念总结

分词是基础

子词分词(BPE/WordPiece)平衡了效率与表达能力, 是现代LLM的标准选择

Embedding是语义

将离散token映射到连续向量空间, 让模型能够理解和泛化语义关系

位置是顺序

位置编码为Transformer注入序列顺序信息, 是理解语言结构的关键

📚学习资源

📄

课程Slides

完整的讲义PDF,包含所有图表和详细内容

本讲测评

15道题目,检验你对输入处理技术的掌握

开始测评 →