1.1.1 TOkenier 分词技术
什么是语言模型的似然值?
什么是 OOV
✅ 一、什么是 Tokenizer 分词技术?
语言模型本身是以数字形式来处理和理解信息的。Tokenizer 的作用就是将输入的文本进行处理,把一句话切分成一个个小块(Token),然后将这些 Token 映射为数字,通常是通过词汇表或编码方式来实现。
🧠 举个例子:
原始句子:
“I love playing football.”
Tokenizer 的切法(不同方法切得不一样):
- Word-level(按词切):
["I", "love", "playing", "football"]
- Subword-level(按词的一部分切):比如
["play", "ing", "foot", "ball"]
- Character-level(按字符切):
["I", " ", "l", "o", "v", "e", " ", "p", "l", ...]
✅ 二、五种主流 Tokenizer 技术对比(重点!)
==这些都是基于 subword 进行分词 ==
1️⃣ BPE(Byte Pair Encoding)(GPT-2 和 GPT-3 系列模型主要使用)
不需要预先构建词法规则。
是一种无监督的学习方式。
原理:是一种自下而上的分词算法。它从最基本的字符集开始,通过不断合并出现频率最高的字符对,逐步形成更大的词块。
- 首先将单词拆成单个字符,来构初始词表,此时子词是字符。
- 接着找出频率最高字符对,合并成新字符加入词表,同时在语料库中替换原字符对,新字符还能参加后续合并
- 最后不断重复上述(拆分和合并,我觉得拆分是一开始就把所有的词都拆分了,不用重复)步骤,直到词表单词数达到阈值或者剩下字符对频率为 1。
👀 举例:
训练集中,“l o w”, “l o w e r”, “n e w e s t”, “w i d e s t”
→ 最常出现的是 “e s”,合成“es”
→ 然后“es t” → “est”,直到构造出常用子词
🔍 优点:
- 简单高效:算法原理相对简单,主要通过统计字符对的出现频率来进行合并操作,计算量较小,在处理大规模语料时效率较高。
(2. 通用性强:BPE 不依赖于语言特性,适用于多种语言,能够处理不同语言中的各种字符和词汇。
(- 处理罕见词(比如人名、专有名词)效果好,不容易 OOV(找不到词)。能够处理未登录词(Out-of-Vocabulary,OOV),因为它可以通过组合字符来表示新的词汇。
(- 可以根据语料的特点自适应地学习分词规则,不需要预先定义词法规则。
⚠️ 缺点:
- 依赖频率:BPE 完全基于字符对的频率进行合并,可能忽略语义信息。
(2. 可能产生不合理的切分:由于只关注局部的字符对频率,有时会产生一些不符合人类语言直觉的切分结果,例如将一个完整的词切分成多个无意义的子词。
2️⃣ WordPiece(BERT 用的)
不需要预先构建词法规则。
是一种无监督的学习方式。
WordPiece 算法可以看作是 BPE 的变种
WordPiece 与 BPE 类似,也是自下而上的分词方法。不同之处在于,WordPiece 在合并字符对时,会选择能够让语言模型似然值提升最大的字符对进行合并。
- 首先将单词拆成单个字符,来构初始词表,此时子词是字符。
- 计算每个字符对加入词表后对语言模型似然值的提升程度
- 挑选出对似然值提升最大的那一组,并将其加入词表中(通常不需要移除语料库中该字符对的原字符,保留就行)
- 重复第二步和第三步,直到词表达到指定大小
👀 举例:
原句 “unbelievable”
可能被切成 ["un", "##believ", "##able"]
其中“##”表示前面有词缀,保持语言结构的清晰。
🔍 优点:
- 考虑语言模型似然值:在选择合并的字符对时,会考虑合并后对整个语料库似然度的影响,能够选择出更符合语言模型的子词,从而提高模型的性能。
- 生成的子词更具语义合理性:相比 BPE,WordPiece 生成的子词在语义上更具合理性,更符合人类对语言的理解,有助于模型更好地捕捉文本的语义信息。
- 适用于预训练模型:WordPiece 是 BERT 等预训练模型的标准分词算法,与这些模型高度兼容 WordPiece 是 BERT 等预训练模型的标准分词算法,与这些模型高度兼容
⚠️ 缺点:
- 计算复杂度较高:计算每个字符对加入词表后对语言模型似然值的提升程度需要较大的计算量,尤其是在处理大规模语料时,计算成本较高,训练时间较长。
- 对语料库的依赖性强:其性能很大程度上依赖于语料库的质量和规模,如果语料库不具有代表性或规模较小,可能会影响子词的生成效果和模型的性能。
使用场景:
- 如果需要简单高效的分词算法,且数据规模较大,BPE 是一个不错的选择。
- 如果需要保留语义信息,或者与 BERT 等预训练模型结合使用,WordPiece 更适合。
3️⃣ SentencePiece(Google 的 T5(基于 Unigram 算法)、ALBERT 用)
像 BERT 的 WordPiece 要先进行预分词(比如英文按空格、中文按字切分),SentencePiece 可以直接对原始文本编码,更简洁也更统一。
非监督
适用于多语言环境,能够处理未登录词(OOV, Out-Of-Vocabulary)问题。
它基于字符级别的操作。它是把一个句子看作一个整体,再拆成片段,而没有保留天然的词语的概念。
还记得之前的 WordPiece 吗?WordPiece 是将 word 先切分成最小 piece,然后再合新 token。而 SentencePiece 是将 sentence 切分成最小 piece,然后再合并成 token
多种子词算法:支持 BPE 和 Unigram 算法
计算速度很快,用 Unicode 去做相关编码,直接生成词汇与 ID 映射(其实上面两个也是这么做的,只不过效率不高
不再依赖空格切词!直接把整个句子当成字符流操作(适合中文、日文)
👀 举例:
原句:我喜欢学习 NLP
SentencePiece → ["▁我", "喜", "欢", "学", "习", "N", "L", "P"]
这里的“▁”是表示词的开头,相当于“空格”的功能。
🔍 优点:
- 跨语言支持好(适合中日英混合)可以处理多种语言,具有较好的跨语言适应性。
- 更灵活,无语言依赖
- 不依赖人工切词规则(比如空格)
和 BPE 的区别:
经典 BPE:主要专注于子词切分这一单一功能。
SentencePiece 的 BPE:除了实现 BPE 算法进行子词切分之外,还集成了模型训练、编码、解码等一系列功能,形成了一个完整的工具包。用户可以方便地使用 SentencePiece 进行模型训练,并将其应用到实际的自然语言处理任务中。
⚠️ 缺点:
- token 粒度太小时会导致句子变长,影响效率
4️⃣ Unigram
它和 BPE 以及 WordPiece 从表面上看一个大的不同是,前两者都是初始化一个小词表,然后一个个增加到限定的词汇量,而 Unigram Language Model 却是先初始一个大词表,接着通过语言模型评估不断减少词表,直到限定词汇量。
在初始大词表的基础上,会计算每个词的出现对交叉熵或困惑度的贡献。如果某个词的出现使得模型的交叉熵明显增加,或者困惑度显著上升,说明这个词对于模型的预测能力帮助不大,甚至可能会降低模型的性能,那么这个词就有可能被从词表中删除。通过不断地评估和删除对模型性能贡献较小的词,逐渐减少词表的大小,直到达到限定的词汇量。
5️⃣ BBPE(DeepSeek-V3,(GPT4) )
BPE 实际上合并的是 char,但是 BBPE 合并的是 bype。BBPE 核心思想将 BPE 的从字符级别扩展到字节(Byte)级别。
优点:
- BPE 理论上会出现 OOV 问题,但是 BBPE 理论上不会
- BBPE 的好处是可以跨语言共用词表,显著压缩词表的大小。
📊 总结对比表(记住这个,面试好用)
方法 | 适合语言 | 处理方式 | 优点 | 缺点 |
---|---|---|---|---|
BPE | 英语 | 频繁字符对合并 | 快速、简单、抗 OOV | 不考虑语言结构 |
WordPiece | 英语 | 概率+频率合并 | 语义更好,适合 BERT | 慢,多语言支持差 |
SentencePiece | 多语言 | 无空格依赖,字符流处理 | 多语种支持强,自动化 | Token 多,长文本低效 |
Unigram | 多语言 | 词表剪枝+概率建模 | 灵活,语义保留更好 | 训练慢一些 |
BBPE | 英语 | BPE 改进版 | 清洗更强,工业稳定 | 本质提升不大 |
中文等无空格语言通常需要支持子词分割的分词器(如 SentencePiece)
大规模模型(如 GPT-3、PaLM)通常需要支持更大词汇表的分词器(如 BPE 或改进的 BPE)。
🧨 二、面试官可能怎么问?(押题来了)
🌟【基础类】
- 请你介绍一下 Tokenizer 是什么?为什么需要它?
- Tokenizer 和词嵌入(Embedding)有什么关系?
- 什么是 OOV(out of vocabulary)?BPE 怎么解决的?
🌟【深入类】
- 你了解 BPE、WordPiece 和 SentencePiece 的区别吗?
- 假设你要训练一个中文多语言大模型,你会选哪种分词技术?为什么?
- 如果我给你一句“iPhone15ProMax”,普通 Tokenizer 切不开,你会怎么改进?
🌟【实战类】
- 你知道 BERT 使用的是哪种分词器?(答:WordPiece)
- T5 使用了什么分词方法?(答:SentencePiece)
- HuggingFace 的 Tokenizer 类是怎么加载和使用的?(可以答:from transformers import AutoTokenizer)
什么是 Tokenizer?为什么模型需要它?
OOV 是什么?哪种 Tokenizer 能很好地处理它?
✅ 比较类:
你能对比一下 BPE 和 WordPiece 的区别吗?
SentencePiece 是怎么支持中文的?优于 BPE 吗?
Unigram 和 BPE 有什么核心不同?
✅ 实战类:
BERT 用了哪种分词器?(答:WordPiece)
T5 或 ALBERT 用了什么?(答:SentencePiece)
如果你训练一个中英混合模型,会选哪个 Tokenizer?为什么?
SentencePiece 相对于 BPE 和 WordPiece 有哪些改进之处?
如何使用 SentencePiece 进行多语言文本的分词?
如果遇到大量未登录词,你会如何调整 Tokenizer 的参数或选择合适的算法来处理?
当分词结果不符合语义时,你会采取什么方法来优化?
请分享一下你在实际项目中使用 Tokenizer 分词技术的经验,遇到了哪些问题,是如何解决的?
在项目中,你是如何评估 Tokenizer 的性能的?
🎁 面试 Tips 小总结:
面试重点要点 | 面试技巧 |
---|---|
能说出 BPE/WordPiece/SentencePiece 区别 | 必须掌握 |
能举出 BERT/T5 用的是什么 Tokenizer | 必须记住 |
能用通俗语言解释什么是“子词切分” | 加分项 |
能说出 Tokenizer 解决了什么问题 | 高分项 |
如果你觉得这些内容有帮助,我可以继续帮你整理大模型面试中的关键知识点,比如 Embedding 层、位置编码、Self-Attention、Transformer 结构等。你也可以告诉我你想报考的公司,我可以帮你更精准押题。要不要我继续整理下一类知识?
1.1.2 Embedding 技术
Embedding 模型算法,One-hot、Word2Vec FastText Glove
Embedding 层是一种常用的层,用于把稀疏的类别数据(如单词、标签等)转换为密集的连续向量表示,从而提高深度学习模型的性能。
Embedding 层的输入通常是整数,表示类别数据的索引。输出是一个固定大小的连续向量,表示每个类别的嵌入表示。
广泛应用于自然语言处理(NLP)任务,如文本分类、机器翻译、问答系统等。在这些任务中,单词或短语通常被转换为嵌入向量,以便模型可以更好地理解和处理。
1.Tokenizer 和 Embedding 的关系
✅ 一、Tokenizer 和 Embedding 的关系(简单解释)
- Tokenizer 负责将文本分割为 Token,并将这些 Token 映射为离散的整数 ID。
- Embedding 则将这些整数 ID 进一步转化为稠密的向量表示,以便模型能够进行深度学习和优化。
✅ 二、常见的 Embedding 技术讲解
🔹1. One-Hot Encoding(最基础、最简单)
🎯 对于一个给定的词汇表,每个单词都被表示为一个长度等于词汇表大小的向量,其中只有对应单词的位置为 1,其余位置都为 0。
举例:
词表:[“apple”, “banana”, “grape”]
"apple" → [1, 0, 0]
"banana" → [0, 1, 0]
"grape" → [0, 0, 1]
✅ 优点:
- 简单易懂,直观。适合入门和调试模型
- 无需训练:不需要进行复杂的训练过程,直接根据词汇表生成向量。
❌ 缺点:
- 维度灾难:当词汇表规模很大时,向量的维度会非常高,导致计算资源的浪费和稀疏向量问题。
- One - hot 向量之间是相互正交的,无法表示单词之间的语义关系。“apple” 和 “banana” 在向量空间中是完全无关的
适用场景
- 简单分类任务:当数据规模较小,且对语义关系要求不高的简单分类任务中可以使用,如文本的主题分类。
- 特征工程:作为其他特征的一部分,与其他特征一起用于模型训练。
🔹2. Word2Vec(经典代表:Google 提出)Word-To-Vector
重要假设:文本中离得越近的词语,相似度越高。
🎯 基于上下文的共现训练,把“意思相近的词”放到“向量空间的邻近位置”。
Word2Vec 是一种基于神经网络的词嵌入方法,主要有两种模型:Skip - gram 和 Continuous Bag - of - Words (CBOW)。Skip - gram 模型通过一个中心词来预测其上下文单词,而 CBOW 模型则是通过上下文单词来预测中心词。在训练过程中,模型会学习到每个单词的向量表示,使得在语义和语法上相似的单词在向量空间中距离较近。
两种模型结构:
- CBOW:是通过上下文单词来预测中心词
- Skip-Gram:一个中心词来预测其上下文单词(技高一筹,常用是这个)
举例:
“apple” 的上下文有 “fruit”, “banana”, “sweet”
训练后会得到:
"apple" → [0.12, -0.05, ..., 0.32]
"banana"→ [0.10, -0.03, ..., 0.30]
📍 这两个向量会靠得很近,表示“语义相似”。
✅ 优点:
- 向量稠密,效率高
- 能捕捉语义相似性,能够捕捉单词之间的语义关系,例如 “国王” - “男人” + “女人” = “女王”,这种向量运算可以反映出单词之间的类比关系。
❌ 缺点:
- 窗口长度有限
- 没有考虑全局的文本信息
(- 对词序不敏感:虽然可以捕捉语义信息,但在处理词序和句子结构方面能力有限。
(没有考虑同义词
(- 每个词一个向量,无法处理 OOV(新词)
(- 不能考虑“词内部结构”或“子词单位”
适用场景
语义理解任务:如语义相似度计算、文本分类、信息检索等,能够充分利用其语义表示能力。
迁移学习:在一些数据量较小的任务中,可以使用预训练的 Word2Vec 模型进行迁移学习。
🔹3. GloVe(Global Vectors for Word Representation)
🎯 用整个语料的词频共现矩阵来训练词向量,更强调“全局统计信息”。
是一种基于全局词频统计的词嵌入方法。它通过构建一个全局的词共现矩阵,统计每个单词对在语料库中共同出现的次数,然后通过最小化一个基于共现矩阵的损失函数来学习词向量。GloVe 的目标是使得词向量之间的点积能够反映单词之间的共现概率。
举例:
构造“词与词”共现频率矩阵,再用矩阵分解技术,得到每个词的向量。
✅ 优点:
- 全局信息利用:能够充分利用语料库中的全局统计信息,学习到更准确的词向量。捕捉全局语义(比如“king - man + woman ≈ queen”)
- 语义计算更稳定
❌ 缺点:
-
无法捕捉动态语义:固定的词向量无法反映词汇意义随时间或语境的变化,对于处理动态语言现象有一定局限。
-
忽视词序信息:与多数词嵌入方法一样,GloVe 无法捕捉词汇间的顺序关系和语法结构。
-
也无法处理 OOV
(- 训练速度比 Word2Vec 慢一些
使用场景
需要全局信息的任务:如文本摘要、机器翻译等,能够利用其对全局信息的捕捉能力。
聊天机器人:利用 GloVe 词向量理解用户输入,生成有意义的回复,提升聊天机器人的对话质量。
🔹4. FastText(Facebook 提出)
🎯 把词拆成“字符 n-gram”,让模型学到子词信息(对新词更友好)
是 Word2Vec 的基础上进行了扩展,唯一的差距就是 word2vec 使用的是一个单词来预测上下文,而 FastText 使用的是 word+gram(子词信息) 后的结果来进行上下文的预测
举例:
词:“apple”
会被分解成:
["<ap", "app", "ppl", "ple", "le>"]
然后每个子词有向量,组合后得到"apple"的词向量。
✅ 优点:
- 能处理 OOV!(新词也能拆成子词)
(- 多语言友好(尤其适合中文、德语等复合词多的语言)
(- 子词增强语义学习
❌ 缺点:
(- 训练和查询略慢
(- 表达能力不如深层上下文模型(如 BERT)
使用场景
处理稀有词和未登录词:在一些需要处理大量生僻词和新出现词汇的任务中,如社交媒体文本处理、专业领域文本处理等。
🔹5. ELMo
ELMo 是基于深度学习的语言模型,使用 LSTM 模型,考虑上下文信息。
基于语境的向量表示
优点:
- 解决了多义词问题。
- 能够捕捉动态语义信息,动态词向量:能够根据单词所处的上下文动态地生成词向量,更好地捕捉单词的语义变化。
缺点:
- 新的输入需要依赖之前的输出结果,所以运行速度受限。
🔹6. BERT
BERT 基于 Transformer 架构,采用了双向注意力机制来学习文本的表示。它通过在大规模无监督语料上进行预训练,学习到语言的通用模式和语义知识。BERT 的输入是一个包含多个单词的文本序列,经过多层的 Transformer 编码器后,输出每个单词的向量表示。这些向量融合了单词的上下文信息,能够很好地捕捉文本中的语义关系。
优点:
- 预训练模型效果好:在大规模语料上进行预训练后,能够学习到丰富的语言知识和语义模式,在各种 NLP 任务上都取得了显著的性能提升。
- 灵活的微调机制:可以很方便地在不同的下游任务上进行微调,只需要在预训练模型的基础上添加少量的任务特定层,就能够适应各种不同的任务需求。
缺点:
- 模型规模大,训练时间长
✅ 三、总结对比表格(记住这个秒变大佬)
技术 | 是否稠密 | 语义表达 | 是否支持 OOV | 是否考虑子词 | 优势说明 |
---|---|---|---|---|---|
One-hot | ❌ 稀疏 | ❌ 无 | ❌ 不支持 | ❌ 无 | 简单,入门教学用 |
Word2Vec | ✅ 稠密 | ✅ 有 | ❌ 不支持 | ❌ 无 | 高效捕捉语义关系 |
GloVe | ✅ 稠密 | ✅ 强 | ❌ 不支持 | ❌ 无 | 强全局语义 |
FastText | ✅ 稠密 | ✅ 较强 | ✅ 支持 | ✅ 支持 | 多语言支持,抗 OOV 强 |
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
One - hot | 简单直观,无需训练 | 维度灾难,语义缺失 | 简单分类任务,特征工程 |
Word2Vec | 向量稠密,语义表示好 | 窗口有限,没有考虑全局信息(对词序不敏感 | 语义理解任务,迁移学习 |
GloVe | 全局信息利用 | 缺乏动态信息 | 需要全局信息的任务,对训练效率有要求的场景 |
FastText | 处理未登录词,训练速度快 | 语义表示稍弱 | 处理稀有词和未登录词,快速训练 |
🔥 面试高频题目(押题清单)
✅ 基础类:
- 什么是词向量(Word Embedding)?它为什么重要?
- One-hot 和 Word2Vec 的主要区别?
- 什么是词向量稠密性?为什么要用稠密向量?
✅ 对比类:
- Word2Vec 和 GloVe 的原理有何不同?哪个效果更好?
- FastText 如何处理 OOV?和 Word2Vec 有哪些改进?
- 请对比 Word2Vec 和 FastText 的训练方式和结果表现。
✅ 应用类:
- 如果你做中文 NLP 任务,你会选择哪种 Embedding 技术?为什么?
- 你怎么看词向量和 Transformer 中的 Position Embedding 有何不同?
- 你会如何结合预训练模型和传统词向量?
🎁 总结口诀(背一下,面试能讲得流利)
“One-hot 太蠢词不连,Word2Vec 邻居语义牵;GloVe 全局统计强,FastText 分子词不怕新。”
如果你觉得这种讲解风格清晰有用,我可以接下来讲解:
- ✅ Transformer 结构(Encoder/Decoder)
- ✅ Self-Attention 注意力机制(可视化+公式)
- ✅ 位置编码 Positional Encoding
- ✅ BERT 和 GPT 的本质区别
- ✅ 大模型训练流程:预训练、微调、推理部署
你想从哪个模块继续学习准备?我可以帮你出“全流程备考计划表”,冲面试拿 offer!💪