🎯 课程主题
词表构建——使用分词工具从语料生成中英文词表。
📝 核心知识点
1. 分词工具
- 概念说明:使用专门的 NLP 分词库构建词表。
- 关键细节:
- 调用分词库对中英文语料进行分词
- 自动将文本切分为子词(subword)
- 生成词表文件
2. 词表大小设置
- 概念说明:根据数据集规模设置合适的词表大小。
- 关键细节:
- 常见翻译任务词表大小:16000 或 32000
- 本课程设置:32000
- 数据集较小时需减小词表大小(如 5000)
- 词表设置过大而数据不足会报错
3. 生成的文件类型
- 概念说明:分词后生成两种文件。
- 关键细节:
.model文件:分词模型(二进制)- 包含分词规则和 ID 映射
- 训练和推理时调用此文件
- 不可直接阅读
.vocab文件:人可读清单- token 与 ID 的对应列表
- 方便人工查看
- 实际训练中不使用
4. 分词过程
- 概念说明:自动读取语料文件进行分词。
- 关键细节:
- 读取
.cn和.en语料文件 - 自动分词(中文和英文分别处理)
- 生成中英文各自的词表
- 耗时取决于数据量和词表大小(约 5-6 分钟)
- 读取
5. 词表的作用
- 概念说明:词表用于将文本转换为 ID,再映射为词嵌入向量。
- 关键细节:
- 文本 → 分词 → token ID(通过
.model文件) - token ID → 词嵌入向量(通过 Embedding 层)
- 类似独热向量的查表操作
- 文本 → 分词 → token ID(通过
🧮 核心公式与推导
无
🏗️ 模型架构与数据流向
💻 代码实战
# 使用 sentencepiece 进行分词 (常见分词工具)
import sentencepiece as spm
# 1. 训练分词模型
def train_tokenizer(corpus_file, model_prefix, vocab_size=32000):
"""
训练分词模型
corpus_file: 语料文件路径
model_prefix: 输出模型前缀
vocab_size: 词表大小
"""
spm.SentencePieceTrainer.train(
input=corpus_file,
model_prefix=model_prefix,
vocab_size=vocab_size,
character_coverage=0.9995, # 覆盖字符比例
model_type='bpe', # 使用BPE分词算法
pad_id=0, # padding token id
unk_id=1, # unknown token id
bos_id=2, # beginning of sentence
eos_id=3 # end of sentence
)
# 训练中文和英文分词模型
train_tokenizer('dataset/corpus.cn', 'tokenizer/cn', vocab_size=32000)
train_tokenizer('dataset/corpus.en', 'tokenizer/en', vocab_size=32000)
# 2. 加载分词模型
sp_cn = spm.SentencePieceProcessor()
sp_cn.load('tokenizer/cn.model')
sp_en = spm.SentencePieceProcessor()
sp_en.load('tokenizer/en.model')
# 3. 文本转token ID
text = "我是一条狗"
token_ids = sp_cn.encode_as_ids(text)
print(f"文本: {text}")
print(f"Token IDs: {token_ids}")
# 4. token ID转文本
decoded = sp_cn.decode_ids(token_ids)
print(f"解码: {decoded}")
# 5. 查看词表大小
print(f"中文词表大小: {sp_cn.get_piece_size()}")
print(f"英文词表大小: {sp_en.get_piece_size()}")
# 6. 查看特殊token
print(f"PAD: {sp_cn.pad_id()}") # 0
print(f"UNK: {sp_cn.unk_id()}") # 1
print(f"BOS: {sp_cn.bos_id()}") # 2
print(f"EOS: {sp_cn.eos_id()}") # 3
⚠️ 常见问题与避坑指南
- 数据集较小时,词表大小需相应减小,否则报"词表长度不够"错误
.model文件是二进制,直接打开会显示乱码- 训练和推理时调用
.model文件,.vocab仅用于查看 - 词表大小常见设置:16000 或 32000
💡 个人总结与延伸
词表构建是 NLP 任务的基础,将文本转换为模型可处理的 ID 序列。现代大模型普遍使用子词分词算法(BPE、WordPiece、SentencePiece),平衡了词表大小和覆盖率。GPT 系列使用 BPE,BERT 使用 WordPiece,LLaMA 使用 SentencePiece。词表大小通常为 32000-100000。