news 2026/5/1 19:53:43

四大子词分词算法详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四大子词分词算法详解

四大子词分词算法详解

1. BPE (Byte Pair Encoding)

原理

BPE是最基础的子词分词算法,通过迭代地合并最频繁出现的字符对来构建词表。

训练过程

输入语料

low: 5次 lower: 2次 newest: 6次 widest: 3次

步骤

  1. 初始化:将每个单词拆分为字符,并在末尾添加特殊符号表示词尾
l o w </w>: 5 l o w e r </w>: 2 n e w e s t </w>: 6 w i d e s t </w>: 3
  1. 统计字符对频率
  • “e” + “s”: 6+3=9次
  • “es” + “t”: 9次
  • “l” + “o”: 5+2=7次
  • “o” + “w”: 5+2=7次
  • 等等…
  1. 迭代合并

第1轮:合并最高频的"es" + “t” → “est”

l o w </w>: 5 l o w e r </w>: 2 n e w est </w>: 6 w i d est </w>: 3

第2轮:合并"est" + “” → “est”

l o w </w>: 5 l o w e r </w>: 2 n e w est</w>: 6 w i d est</w>: 3

第3轮:合并"l" + “o” → “lo”

lo w </w>: 5 lo w e r </w>: 2 n e w est</w>: 6 w i d est</w>: 3

持续迭代直到达到预设的词表大小或合并次数。

推理(分词)过程

输入"lowest"

步骤

  1. 初始化:l o w e s t </w>
  2. 应用学到的合并规则(按训练时的顺序):
    • l ololo w e s t </w>
    • e seslo w es t </w>
    • es testlo w est </w>
    • est </w>est</w>lo w est</w>

输出["lo", "w", "est</w>"]


2. BBPE (Byte-level BPE)

原理

BBPE是BPE的字节级变体,直接在字节序列上操作,而不是字符。这使得它可以处理任何Unicode字符。

训练过程

输入:中文文本"你好世界"

步骤

  1. 转换为字节
你 → [0xE4, 0xBD, 0xA0] 好 → [0xE5, 0xA5, 0xBD] 世 → [0xE4, 0xB8, 0x96] 界 → [0xE7, 0x95, 0x8C]
  1. 初始词表:256个字节值(0x00-0xFF)

  2. 统计字节对频率并合并
    假设在大规模语料中:

  • [0xE4, 0xBD] 经常一起出现 → 合并为新token 256
  • [256, 0xA0] 经常一起出现 → 合并为新token 257(代表"你")
  • 以此类推…

推理过程

输入"你好"

步骤

  1. 转字节:[0xE4, 0xBD, 0xA0, 0xE5, 0xA5, 0xBD]
  2. 应用合并规则:[257, 258](假设257=“你”,258=“好”)

输出[257, 258]

优势:可以处理任何语言,包括emoji、罕见字符,词表大小固定且可控。


3. WordPiece

原理

WordPiece与BPE类似,但合并准则不同。它选择能最大化训练数据似然的字符对进行合并。

训练过程

输入语料(带频率):

unwanted: 100次 unwan: 50次 wanted: 200次

步骤

  1. 初始化
词表: [u, n, w, a, n, t, e, d, ##t, ##e, ##d] (##表示非词首的subword)
  1. 计算合并得分

对于候选合并"un":

得分 = log(P(un)) / (log(P(u)) + log(P(n)))

假设计算结果:

  • “un” 得分: 0.85
  • “wa” 得分: 0.72
  • “te” 得分: 0.91 ← 最高
  • “ed” 得分: 0.88
  1. 迭代合并

第1轮:选择"te"合并

词表添加: [te] unwanted → un wan te d wanted → wan te d

第2轮:选择"ed"合并

词表添加: [ed] unwanted → un wan te d wanted → wan ted

第3轮:选择"un"合并

词表添加: [un] unwanted → un wan ted unwan → un wan

推理过程

输入"unwanted"

步骤:贪心最大匹配

  1. 从左到右,尝试匹配最长的词表中的token
  2. "unwanted"→ 尝试整个词(不在)→ 尝试"unwante"(不在)→ … → 找到"un"
  3. 剩余"wanted" → 找到"wan" → 剩余"ted" → 找到"ted"

输出["un", "##wan", "##ted"]


4. Unigram Language Model

原理

Unigram采用自上而下的方法,从一个大词表开始,逐步删除对损失函数影响最小的token。

训练过程

输入语料

"hello": 10次 "world": 8次 "help": 5次

步骤

  1. 初始化大词表(包含所有可能的子串):
词表: {h:15, e:15, l:25, o:10, w:8, r:8, d:8, p:5, he:15, el:15, ll:15, lo:10, hel:15, ell:15, hello:10, help:5, wor:8,orld:8, world:8, ...}
  1. 计算每个token的概率
P(token) = count(token) / total_chars P(hello) = 10/总字符数
  1. 评估移除影响

对每个token,计算移除后的损失增加:

ΔLoss(token) = -Σ log P(语料能否用剩余词表表示)

假设计算结果:

  • 移除"hel": ΔLoss = 0.02(影响小)
  • 移除"hello": ΔLoss = 2.5(影响大)
  • 移除"p": ΔLoss = 0.8(中等)
  1. 迭代删除
    每轮删除影响最小的10-20%的token,直到达到目标词表大小。

第1轮删除:移除"hel", "ell"等低影响token

剩余词表: {h, e, l, o, w, r, d, p, he, ll, lo, hello, help, wor, world, ...}

推理过程

输入"hello"

步骤:使用Viterbi算法找最优分词

  1. 列举所有可能的分词

    • [hello]: P = P(hello) = 0.15
    • [he, llo]: P = P(he) × P(llo) = 0.08 × 0.05 = 0.004
    • [hel, lo]: P = P(hel) × P(lo) = 0.09 × 0.06 = 0.0054
    • [h, e, l, l, o]: P = 0.05^5 = 0.0000003125
  2. 选择概率最大的分词

max{0.15, 0.004, 0.0054, ...} = 0.15

输出["hello"]

复杂示例输入"helping"

可能的分词及其概率:

  • [help, ##ing]: P = 0.08 × 0.12 = 0.0096
  • [hel, ##p, ##ing]: P = 0.05 × 0.03 × 0.12 = 0.00018
  • [he, ##lp, ##ing]: P = 0.08 × 0.04 × 0.12 = 0.00384

输出["help", "##ing"](概率最高)


四种算法对比总结

算法方向合并准则优点代表模型
BPE自底向上频率最高简单高效GPT-2
BBPE自底向上频率最高(字节级)多语言友好GPT-3, LLaMA
WordPiece自底向上似然最大更优的概率模型BERT
Unigram自顶向下损失最小多种分词,可计算概率T5, XLNet

实际应用示例

输入句子"preprocessing"

  • BPE输出["pre", "process", "ing"]
  • WordPiece输出["pre", "##process", "##ing"]
  • Unigram输出["pre", "processing"]["prep", "ro", "cessing"](取决于概率)
  • BBPE输出:字节序列对应的token ID列表

希望这个详细的讲解能帮助你理解这四种分词算法!如果有任何疑问,欢迎继续提问。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 10:25:29

xhEditor粘贴微信公众号内容到cms

企业CMS系统Word内容导入功能集成方案 作为山西某IT公司的PHP工程师&#xff0c;近期我负责为企业CMS系统集成Word内容导入功能。该功能预算2万元&#xff0c;需在现有系统基础上无缝集成&#xff0c;支持多种文档格式导入和微信公众号内容粘贴。以下是技术实现方案&#xff1…

作者头像 李华
网站建设 2026/4/24 3:51:05

xhEditor复制word图片到OA平台

企业CMS系统Word内容导入功能集成方案 作为山西某IT公司的PHP工程师&#xff0c;近期我负责为企业CMS系统集成Word内容导入功能。该功能预算2万元&#xff0c;需在现有系统基础上无缝集成&#xff0c;支持多种文档格式导入和微信公众号内容粘贴。以下是技术实现方案&#xff1a…

作者头像 李华
网站建设 2026/4/27 20:29:18

AI初创公司技术选型建议:为何选择HunyuanOCR作为核心OCR引擎

AI初创公司技术选型建议&#xff1a;为何选择HunyuanOCR作为核心OCR引擎 在智能文档处理日益成为企业数字化转型关键环节的今天&#xff0c;AI初创公司正面临一个现实挑战&#xff1a;如何以有限的工程资源&#xff0c;快速构建稳定、高效、多语言支持的OCR能力&#xff1f;传统…

作者头像 李华
网站建设 2026/4/29 0:46:21

还在熬夜赶论文?9款免费AI生成器让效率飙升100%,告别拖延!

别再用“笨方法”写论文了&#xff01;这3个错误正在毁掉你的学术生涯 还在用Word手动敲论文框架&#xff0c;改一遍格式就要花3小时&#xff1f; 还在熬夜啃英文文献&#xff0c;查单词查到眼睛干涩&#xff0c;却连摘要都没读懂&#xff1f; 还在为查重率30%焦虑到失眠&…

作者头像 李华
网站建设 2026/4/28 5:54:59

永磁同步电机无位置传感器转子初始位置检测 1.高频信号注入实现PMSM转子初始位置检测

永磁同步电机无位置传感器转子初始位置检测 1.高频信号注入实现PMSM转子初始位置检测&#xff0c;包括转子初始位置初次估计和极性判断&#xff1b; 2.提供仿真模型和参考文献。无人机突然抽风似的抖了两下&#xff0c;操作台前的我盯着失控的飞控参数一脸懵。这种时候才意识到…

作者头像 李华