
词表扩充学习笔记一、词表基础1. 词表是什么vocab.txt 汉字 → id 的对照表行号 − 1 id如我在第 2770 行 → id 2769查不到的生僻字统一映射到[UNK]id 100不报错2. 词表不是越大越好大词表覆盖率高、序列短但 embedding 参数多151936×768 ≈ 1.17 亿 vs 21128×768 ≈ 1622 万、长尾词训练不充分词表大小 ≠ 模型效果选模型看任务实测指标二、词表与权重的绑定铁律embedding 矩阵形状 (vocab_size, hidden_size)行数必须等于 config 的 vocab_sizebin 行数 ≠ config vocab_size → size mismatch加载即崩同一字在不同模型里 id 不同 →词表和模型严格绑定不可混用三、扩充词表核心流程1. 什么时候需要扩数据统计发现业务字频繁变[UNK]如审核场景的异体字。不需要就别扩如 URL 类文本基本被 21128 覆盖2. 标准四步顺序不能反tokenizerAutoTokenizer.from_pretrained(SRC)# ① 加载自洽modelAutoModelForSequenceClassification.from_pretrained(SRC)# ① 加载自洽tokenizer.add_tokens(new_words)# ② 加词短暂不自洽model.resize_token_embeddings(len(tokenizer))# ③ 扩容恢复自洽# ④ 微调把随机新行训练出含义3. resize 内部干了三件事新建 (21295, 768) 矩阵前 21128 行原样拷贝预训练知识保留后 167 行随机初始化N(0, 0.02²) 同步更新config.vocab_size4. 不自洽窗口重要概念① 加载后 21128 21128 自洽 ✅ ② add_tokens后 21128 ≠ 21295 不自洽 ⚠️必经中间态 ③ resize后 21295 21295 恢复自洽 ✅ ④ 训练前必须关上这个窗口否则新词 id 越界 → 崩5. 追加 vs 重排✅ 末尾追加旧 id 不变旧权重全保留❌ 中间插入/删除/重排id 全错位预训练知识报废等于重训