ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SentencePiece 分词算法深度指南:BPE 与 Unigram 原理、子词正则化与 NBest 采样实践(AI-Research-SKILLs)

SentencePiece 分词算法深度指南:BPE 与 Unigram 原理、子词正则化与 NBest 采样实践(AI-Research-SKILLs) AI 技能人工智能大模型深度学习【免费下载链接】AI-Research-SKILLsComprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex/gemini agent will be an AI research agent with full horsepower. Maintained by Orchestra Research.项目地址https://gitcode.com/gh_mirrors/ai/AI-Research-SKILLs点击查看免费下载本篇技术指南以 AI-Research-SKILLs 仓库中 SentencePiece 算法参考文档 为主体系统讲解 SentencePiece 内置的 BPEByte-Pair Encoding与 Unigram 两种无监督分词算法的完整原理、逐步推演示例、Python 实现方式与适用场景并深入剖析子词正则化Subword Regularization与 NBest 编码两种高级采样能力。读完本文你将掌握两种算法的取舍依据、alpha 采样参数的含义与取值策略以及如何在多语言模型、CJK 文本与数据增强场景中正确选用 SentencePiece 的分词策略。SentencePiece 与分词算法在仓库中的定位在 AI-Research-SKILLs 的 02-tokenization 分类下SentencePiece 是与 HuggingFace Tokenizers 并列的两大分词技能之一。与后者不同SentencePiece 是**语言无关language-independent**的无监督分词器它把文本当作原始 Unicode 字节流处理无需任何语言特定的预分词规则如空格切分、标点处理因此特别适合多语言模型与 CJK中文、日文、韩文等无天然词边界的语言。其设计要点如下出自 SKILL.md空白作为元符号空格被映射为▁U2581元符号参与训练分词结果可无损还原原始文本无需预分词可直接在原始文本上训练训练管线内置句子切分确定性词汇表同一语料、同一配置下训练结果可复现轻量部署模型加载后内存占用约 6MB处理速度约 5 万句/秒知名使用者T5、ALBERT、XLNetUnigrammBARTBPE以及 mT5、XLM-RoBERTa子词正则化。SentencePiece 支持四种模型类型model_typeunigram默认、bpe、char、word。其中 BPE 与 Unigram 是本文的核心主题二者代表了自底向上合并与自顶向下剪枝两种截然不同的子词学习哲学。BPEByte-Pair Encoding算法BPE 最初是数据压缩领域的算法1994 年由 Philip Gage 提出被 Sennrich 等人引入神经机器翻译后成为 GPT、RoBERTa、mBART 等模型的标准分词方案。其核心思想是从字符集出发反复合并语料中出现频率最高的相邻 token 对直到词汇表达到目标大小。算法步骤用语料中出现的所有字符初始化词汇表统计所有相邻 token 对的共现频率合并频率最高的一对形成新 token 并加入词汇表用新 token 更新语料表示重复步骤 2-4直到词汇表大小达到设定值vocab_size。逐步推演示例沿用 algorithms.md 中的示例语料括号内为该词在语料中的出现次数low: 5 lower: 2 newest: 6 widest: 3第 1 次迭代统计相邻对频率e s出现 9 次newest 贡献 6 次、widest 贡献 3 次为最高频组合合并e s→es词汇表变为[chars] [es]。第 2 次迭代统计相邻对频率es t出现 9 次为最高频组合合并es t→est词汇表变为[chars] [es, est]。最终分词结果newest→new|estwidest→wid|est。可以看到BPE 的合并完全由原始共现频率驱动哪个组合在语料中出现得最多就优先被合并最终把高频词缀如est固化成语料中的稳定子词单元。实现方式使用 SentencePiece Python API 训练 BPE 模型只需一个函数调用import sentencepiece as spm spm.SentencePieceTrainer.train( inputcorpus.txt, model_typebpe, vocab_size16000 )对应的命令行形式为spm_train --inputcorpus.txt --model_prefixm --vocab_size16000 --model_typebpe。训练完成后会生成m.model二进制模型与m.vocab文本词汇表两个文件详见 training.md。优点与缺点维度评价优点算法简单、训练速度快、压缩比好以较少 token 覆盖文本缺点分词结果是确定性的无法采样可能对常见词产生意外的切分从实现层面看BPE 的快来自其贪心合并策略每一轮只需统计相邻对频率计算开销低其确定性则意味着同一段文本永远得到同一种切分无法像 Unigram 那样通过采样生成多样化分词。Unigram 算法Unigram 语言模型分词法由 Kudo2018提出是 SentencePiece 的默认算法也是 T5、ALBERT、XLNet 的选择。它与 BPE 方向相反从一个覆盖所有子串的超大种子词汇表出发通过期望最大化EM估计每个 token 的概率然后迭代删除对整体似然损失影响最小的 token直到词汇表收缩到目标大小。算法步骤用一个足够大的种子词汇表初始化包含所有可能的子串基于频率估计每个 token 的出现概率逐一评估删除每个 token 会带来的损失增量删除损失影响最小的 10%-20% 的 token重新估计概率重复步骤 3-5直到词汇表达到目标大小。这一先超集、后剪枝的路径使 Unigram 的词汇表天然保留了语言学上更有区分度的子词如词缀、词干并携带每个 token 的概率信息这是它支持采样与子词正则化的根本原因。概率化分词选择似然最大的切分Unigram 的核心假设是每个 token 独立出现因此一段文本的整体概率 各 token 概率的乘积。给定如下词汇表概率分布节选P(low) 0.02 P(est) 0.03 P(l) 0.01 P(o) 0.015 ...对lowest进行分词时存在多种候选切分方案 1: [low, est] P 0.02 × 0.03 0.0006 ← 概率最高 方案 2: [l, o, w, est] P 0.01 × 0.015 × 0.01 × 0.03 0.000000045最终选择整体概率最高的方案 1。需要指出的是朴素枚举所有切分方式的复杂度是 O(2ⁿ)指数级SentencePiece 实际使用Viterbi 动态规划在 O(n² × vocab_size) 内高效求解最优路径——这一细节可对照 HuggingFace Tokenizers 的 Unigram 文档 中给出的 Viterbi 伪代码加深理解。实现方式spm.SentencePieceTrainer.train( inputcorpus.txt, model_typeunigram, vocab_size8000 )优点与缺点维度评价优点概率化模型可采样对形态丰富的语言含黏着语、屈折语效果更好原生支持子词正则化缺点训练更慢EM 迭代、算法更复杂Unigram 的慢是相对 BPE 而言的EM 估计与多轮剪枝都需要多次扫描语料。作为参考仓库 SKILL.md 给出的经验训练耗时为 100MB 语料下 BPE 约 1-2 分钟、Unigram 约 3-4 分钟1GB 语料下 BPE 约 10-15 分钟、Unigram 约 30-40 分钟。BPE 与 Unigram 对比原文档给出的对比表是算法选型的核心依据完整继承如下特征BPEUnigram训练速度快慢分词方式确定性概率化采样不支持支持典型词表大小16k-32k8k-32k代表使用者mBARTT5、ALBERT、XLNet结合两种算法的机制可以进一步解读这张表确定性 vs 概率化BPE 的合并序列一旦学成即固定分词结果唯一Unigram 基于概率分布天然存在多个合法切分可通过采样获取多样性词表大小的灵活性Unigram 在更小词表8k下仍能保持良好覆盖——HuggingFace 侧的对比测试显示 Unigram8k 词表在英文上的 unknown rate 可低至 0.3%优于同场景下的 BPE 与 WordPiece选型直觉追求训练速度、单语/英文场景选 BPE多语言、CJK、需要数据增强选 Unigram。若将视野扩展到仓库 02-tokenization 目录下的另一技能WordPieceBERT 系采用score freq(pair) / (freq(first) × freq(second))的互信息式评分与 BPE 的纯频率合并形成对比三者共同构成了主流子词分词算法谱系详见 HuggingFace Tokenizers 算法文档。子词正则化Subword Regularization子词正则化是 Unigram 概率模型带来的独特能力训练模型时不再固定使用最优切分而是按概率分布采样多种合法分词结果让模型学会在不同切分下保持语义鲁棒。开启采样sp spm.SentencePieceProcessor(model_filem.model) # 采样不同的分词结果 for _ in range(5): pieces sp.encode(tokenization, out_typestr, enable_samplingTrue, alpha0.1) print(pieces) # 输出每次运行结果不同 # [▁token, ization] # [▁tok, en, ization] # [▁token, iz, ation] # [▁to, ken, ization] # [▁token, ization]可见同一文本在采样模式下会得到▁token|ization、▁tok|en|ization、▁token|iz|ation等不同切分其中▁表示空格元符号。注意采样通常要求模型为 Unigram 类型——BPE 的确定性合并序列本身不携带可采样的概率分布。alpha 参数详解alpha是控制正则化强度的核心参数原文档给出如下取值指导alpha效果0.0完全确定性不采样等同最优分词0.1轻微变化默认推荐值0.5高度变化1.0最大变化接近均匀随机采样alpha可理解为对 token 概率分布的平滑温度alpha 越大低概率切分被采到的机会越大分词多样性越高alpha0 时退化为确定性最优分词。实操中建议训练阶段使用 alpha0.1 左右引入轻度噪声推理阶段设为 0确定性模式保证结果一致。收益鲁棒性模型在训练中见到多种合法切分推理时对任意单一切分的依赖降低数据增强同一句文本每轮训练可产生不同 token 序列等效扩充训练数据多样性更好的泛化降低模型对特定分词模式的过拟合对形态丰富语言尤其有效。训练循环中的应用# 带正则化的训练循环 for batch in dataloader: # 每轮采样不同的分词结果 tokens sp.encode(batch[text], enable_samplingTrue, alpha0.1) # 训练模型...这一模式正是 mT5、XLM-RoBERTa 等大规模多语言预训练模型的标准做法通过子词正则化提升跨语言与低资源语言的鲁棒性。NBest 编码获取带分数的多候选切分除随机采样外Unigram 还提供nbest_encode接口一次性返回 Top-N 个候选分词及其对数概率分数用于需要显式评估多种切分的场景sp spm.SentencePieceProcessor(model_filem.model) # 获取 top-5 分词候选 nbest sp.nbest_encode(tokenization, nbest_size5, out_typestr) for pieces, score in nbest: print(f{pieces} (log prob: {score:.4f})) # 输出 # [▁token, ization] (log prob: -2.34) # [▁tok, en, ization] (log prob: -2.41) # [▁token, iz, ation] (log prob: -2.57)分数为对数概率负值越大越优与子词正则化的采样机制共享同一套概率模型。典型应用场景集成分词Ensemble tokenization对多个候选分词的表示取平均提升下游模型稳定性不确定性估计观察候选分数方差衡量分词层面的不确定性调试分析直观了解分词器对某词的行为偏好辅助诊断分词质量问题。与训练配置协同的最佳实践原文档的 Best Practices 可与 training.md 中的训练参数相互印证形成一套完整的工程选型清单多语言选 Unigram——对多种语言与无词边界语言CJK更友好追求速度选 BPE——训练与推理都更快适合英文单语模型开启子词正则化——训练时enable_samplingTrue提升模型鲁棒性alpha0.1 作为轻度变化默认值——多样性/稳定性平衡点推理用确定性模式——enable_samplingFalse或 alpha0保证结果可复现。此外训练阶段还需配套设置以下关键参数详见 training.mdcharacter_coverage 字符覆盖率英文等语言用 0.9995CJK 需设为 1.0 以确保覆盖全部汉字vocab_size 词表大小英文单语 16k-32k多语言 32k-250kCJK 32k-100kuser_defined_symbols / control_symbols为特殊 token如[SEP]、[MASK]、extra_id_N预留永不拆分的位置byte_fallback开启后未知字符回退到字节级表示增强对 emoji、罕见字符的鲁棒性normalization_rule_name默认nmt_nfkcNFKC 规范化 空白处理代码等大小写敏感任务可用identity保留原始输入。小结SentencePiece 的 BPE 与 Unigram 代表了子词分词的两种经典范式BPE 以频率驱动的贪心合并换取速度与简洁Unigram 以概率模型换取采样能力与多语言鲁棒性。二者加上子词正则化与 NBest 编码构成了从确定性最优分词到多样性采样增强的完整工具箱。工程选型时可遵循多语言/鲁棒性优先用 Unigram 子词正则化速度/单语优先用 BPE的原则并结合字符覆盖率、词表大小等训练参数协同调优。本文所依托的完整参考材料位于仓库 02-tokenization/sentencepiece 目录其中 SKILL.md 提供技能总览training.md 提供全量训练参数说明algorithms.md 即本文的主体来源如需横向对比 WordPiece 等第三类算法可参阅 HuggingFace Tokenizers 算法文档。赞分享AI 技能人工智能大模型深度学习【免费下载链接】AI-Research-SKILLsComprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex/gemini agent will be an AI research agent with full horsepower. Maintained by Orchestra Research.项目地址https://gitcode.com/gh_mirrors/ai/AI-Research-SKILLs点击查看免费下载相关推荐Transformers 分词算法深入解析BPE、WordPiece、Unigram 与 SentencePiece 原理与实战Transformers 分词算法深入解析BPE、WordPiece、Unigram 与 SentencePiece 原理与实战 本文依据仓库中的 分词器概述人工智能深度学习机器学习预训练微调NLP计算机视觉语音多模态Transformers 分词算法详解BPE、WordPiece、Unigram 与 SentencePiece 的原理与源码实现Transformers 分词算法详解BPE、WordPiece、Unigram 与 SentencePiece 的原理与源码实现 本文以 HuggingFa人工智能深度学习机器学习预训练微调NLP计算机视觉语音多模态SentencePiece 子词分词完全指南语言无关的 BPE / Unigram 分词器实战SentencePiece 子词分词完全指南语言无关的 BPE / Unigram 分词器实战 SentencePiece 是 Google 开源的 语言无关AI 技能人工智能大模型深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表