当前位置: 首页 > news >正文

Viterbi 算法直接用在中文分词上

我们把 Viterbi 算法直接用在中文分词上,用你熟悉的“字”和“词”来解释,保证比天气例子更贴近你的直觉。

🧩 中文分词的核心问题

中文没有空格,比如:

“我爱北京天安门”

人类知道这是:

“我 / 爱 / 北京 / 天安门”

但计算机看到的是一串字:

[我, 爱, 北, 京, 天, 安, 门]

怎么切?

🔑 关键思想:把分词变成“给每个字打标签”

我们用 4 种标签(状态) 表示每个字在词中的位置:

标签 含义 例子

B Begin(词的开头) “北” in “北京” → B

M Middle(词的中间) “安” in “天安门” → M

E End(词的结尾) “京” in “北京” → E

S Single(单字成词) “我”、“爱” → S

所以,“我爱北京天安门”的正确标签序列是:

我 爱 北 京 天 安 门

S S B E B M E

✅ 一旦有了这个标签序列,分词就很简单:

- 遇到 S → 单独一个字;

- 遇到 B...E → 从 B 到 E 是一个词。

🤖 那么问题转化为:

给定一串字(观测序列),

找出最可能的标签序列(隐藏状态序列)。

这正是 HMM + Viterbi 要解决的问题!

📚 HMM 的三个参数(从语料库学来的)

1. 初始概率 π:句子第一个字是 B/M/E/S 的概率

- 实际中:第一个字不可能是 M 或 E(因为词还没开始!)

所以:P(S) ≈ 0.7, P(B) ≈ 0.3, P(M)=P(E)=0

2. 转移概率 A:标签之间怎么跳?

比如:

- B 后面只能接 M 或 E(不能接 B 或 S)→ P(M|B)=0.6, P(E|B)=0.4

- M 后面只能接 M 或 E → P(M|M)=0.5, P(E|M)=0.5

- S 后面可以接 B 或 S → P(B|S)=0.8, P(S|S)=0.2

- E 后面可以接 B 或 S

3. 发射概率 B:某个标签下出现某个字的概率

比如:

- 字“北”在 B 状态的概率很高(因为常出现在词首);

- 字“京”在 E 状态的概率很高;

- 字“我”在 S 状态的概率极高。

这些概率都是通过大量标注好的语料(如人民日报语料库)统计出来的。

🧪 举个真实分词例子

句子:“研究生命”

可能的切分有歧义:

- “研究 / 生命” → 正确

- “研 / 究生 / 命” → 错误但可能(如果模型没见过“研究”)

我们用 Viterbi 来选!

第一步:列出所有字(观测)

[研, 究, 生, 命]

第二步:Viterbi 动态规划(简化版)

我们不列全部计算,只看关键逻辑:

- “研” 很少单独成词 → 不太可能是 S

- “究” 几乎不会在词首 → 不太可能是 B

- 但“研究”是一个高频词 → 所以“研=B, 究=E” 的组合概率很高

- “生命”也是高频词 → “生=B, 命=E”

而“研究生”虽然存在,但在这个上下文中,“研究/生命”整体路径概率更高。

Viterbi 会计算所有合法标签序列(如 B E B E, S B M E, B M E S 等),

但只保留每一步概率最大的路径,最后选出:

研 究 生 命

B E B E

→ 切分为:“研究 / 生命”

⚠️ 注意:Viterbi 只能选“模型认为概率最大”的路径

如果训练语料里“研究生”出现太多,“研究”太少,

它可能会错切成:“研 / 究生 / 命”(即 S B E S)。

这就是为什么:

- 语料质量很重要;

- 纯 HMM 分词效果有限(所以 jieba 等工具先用词典,HMM 只处理未登录词)。

✅ 总结:Viterbi 在分词中的角色

步骤 说明

输入 一串汉字(如“北京大学”)

隐藏状态 每个字的标签(B/M/E/S)

Viterbi 干什么 在所有合法标签序列中,找出联合概率最大的那一条

输出 标签序列 → 转为分词结果

💡 它就像一个“最合理的故事生成器”:

“哪个切分方式最符合我们从语料中学到的语言习惯?”

🛠️ 补充:实际工程中怎么做?

像 jieba 分词 的流程是:

1. 先用词典 + DAG + 动态规划切分已知词;

2. 对词典里没有的部分(如“大玩学城”),才用 HMM + Viterbi 来猜;

3. 这样既快又准。

http://www.jsqmd.com/news/800015/

相关文章:

  • 别再乱调了!大漠模块SetKeypadDelay/SetMouseDelay参数详解与实战避坑(易语言)
  • 第二章-05-目录切换相关命令(cd/pwd)-课后练习
  • Gemini辅助写周报/月报:从零散记录到结构化汇报的提效方法.
  • 3大维度重构游戏体验:DOL汉化美化整合包全指南
  • 2026 Git 高频面试攻坚:从底层原理到企业级救火(进阶实战版)
  • 嵌入式软件架构一:一个能让人放心接手的嵌入式项目,骨架长什么样
  • MinerU 实战训练营:RAG 数据预处理的最后一块拼图
  • 阿里:时序课程解决多轮蒸馏不稳定
  • 手把手调SVPWM:如何根据你的直流母线电压Udc设置正确的调制比不炸管?
  • 从关中到汉中:用Python+DEM数据,分析古代行军路线的地理可行性
  • Awesome List自动化生成:从手工整理到工业化生产的效率革命
  • 健身直播必备:手表心率如何实时显示在手机拍摄画面上?
  • YOLO26引入Dual-ViT自注意力:局部与全局两条主线的完美交汇
  • 基于Agent-Next框架的Polymarket预测市场模拟交易系统构建指南
  • 告别重复劳动:手把手教你用SAP LSMW为MM模块创建第一个数据导入程序
  • 四轴飞行器入门:BNO055与JY901传感器模块选型及实测对比
  • 2026年4月国内知名的数字化服务平台源头厂家推荐,KYN28-12铠装移开式金属封闭开关柜,数字化服务平台公司哪家好 - 品牌推荐师
  • TinyML实战:tiny-ai-client在MCU上的轻量级AI推理部署指南
  • 效率翻倍!依据2026白皮书,这样部署OpenClaw最快(移动云电脑版)
  • 别再死记硬背了!用Python+NumPy图解NCHW与NHWC,彻底搞懂数据排布
  • C++ 入门核心语法|从 Hello World 到基础特性一次性吃透
  • HIOKI-3272 日置 3272 电源 用于3273-50 3274 3275 3276探头
  • LocalChat:零门槛本地部署开源大语言模型,实现隐私安全的离线AI对话
  • 别再花钱买Token了!手把手教你免费申请Wechaty Token,15天体验版保姆级教程
  • 从Excel舍入到IEEE754:你的财务计算和游戏物理引擎可能都错了
  • 电力管供应商/热浸塑电力管厂家哪家靠谱?2026年热浸塑钢管厂家推荐:福派安领衔,口碑好的热浸塑电缆保护管厂家优质盘点 - 栗子测评
  • 收藏!小白程序员必看:LLM推理延迟的“快慢”真相与优化秘籍
  • 2026年4月做得好的网架直销厂家口碑推荐,国内网架口碑推荐,结构稳固,网架承载能力超强大 - 品牌推荐师
  • 2025届必备的五大AI学术工具解析与推荐
  • 为什么你的Perplexity Science搜索总错过最新预印本?——基于arXiv/medRxiv/SSRN实时源的3层校验机制(含Python自动化脚本)