HMM、Viterbi与中文分词

本文介绍了HMM(隐马尔可夫模型)和Viterbi算法在中文分词中的应用。通过理解马尔可夫过程和DTMC,深入探讨了HMM的初始状态计算、状态转移概率矩阵以及发射概率矩阵。同时,文章讨论了Viterbi算法如何优化HMM,以解决计算复杂度问题。最后,提到了结巴分词的实现,包括其利用HMM和Viterbi算法处理未登录词的方式,以及在垂直领域进行优化的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于实际工作经验和网络、书籍资料查询,记录的学习笔记。主要关于中文分词中HMM(隐马尔可夫模型)、Viterbi算法及其在中文分词中的应用。

前言

        在处理题库去重采用了关键词提取+simhash的办法。而提取关键词之前,需要先进行中文分词。一种基本方法是基于词库进行分词,但显然词库是不可能齐全的,这时,为了确认对于未被记入词库的词(未登录词)如别被处理,就需要有一定了解,才能准确应对意外的分词情况。本文为作者在进行题库去重过程中,对中文分词的学习经验总结,在此积累,以期未后来者参考学习、彼此交流。

​        本篇介绍HMM(隐马尔可夫模型)和Viterbi(维特必)算法,主要面向对概率论不熟悉而希望对中文分词工具有更进一步了解的同学,期待忘为读者深入了解其他相关算法提供学习方式思路。同时,也期待专业人士能提供更进一步的意见或建议。

​        同时,希望数学不好的同学对此也不必有恐惧心理。因为作者也不是对此特别熟悉,会结合个人的学习过程和实例,尽可能简单的介绍HMM、Viterbi,以及它们与中文分词三者之间的关系。

正文

在正式介绍HMM之前,我们有必要先了解马尔可夫过程和马尔可夫链。

Markov process(马尔可夫过程)

一个性质: 当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质

一个定义: 满足马尔可夫性质的过程称为马尔可夫过程

DTMC(离散马尔可夫链)

一个定义: 时间和状态都是离散的马尔可夫过程。

一个重要特性: 已知系统当前状态,则未来的演变不依赖于过去的演变。

一个泛化描述: 假设,当前时间是T,则T+1等于某个值的概率,仅与T相关,而与[0, T-1]中的所有值都无关(一阶马尔可夫链)。
P { X n + 1 = i n + 1   ∣   X 0 , X 1 , . . . , X n = i n } = P { X n + 1   ∣   X n = i n } P\{X_{n+1}=i_{n+1}\ |\ X_0,X_1,...,X_n=i_n\} = P\{X_{n+1}\ |\ X_n = i_n\} P{ Xn+1=in+1  X0,X1,...,Xn=in}=P{ Xn+1  Xn=in}
一个矩阵: 这个是其实是n步转移概率矩阵,详细讲解较为复杂,可以自行百度,不影响后文理解。
P   =   [ P 11 P 12 … P 1 n … P 21 P 22 … P 2 n … P 31 P 32 … P 3 n … ] P\ =\ \left[ \begin{array}{ccc} P_{11} & P_{12} & … & P_{1n} & … \\ P_{21} & P_{22} & … & P_{2n} & … \\ P_{31} & P_{32} & … & P_{3n} & … \end{array} \right ] P = P11P21P31P12P22P32P1nP2nP3n
        如此,先记住什么是马尔可夫过程和DTMC,后续再了解什么是HMM(隐马尔可夫模型)就容易了。

HMM(隐马尔可夫模型)

        在正式介绍之前,我们先由一个句子作为实例。我们直接给定一个文本,按HMM给这个文本分词。

"我爱梅沙"

接下来我们按照HMM的过程进行分析。

  1. 对于句子中的字,我们定义起包含四种状态(隐含状态空间S):

    • B——begin。表示该字为词的起始字
    • M——middle。表示该字为词的中间字
    • E——end。表示词语中的结束字
    • S——single。表示单字成词
  2. 我们定义句子中,所有的字共同组成了一个观测值集合(观察状态),即:O = { 我, 爱, 梅, 沙 }​。

  3. 当我们看到一个字(观察状态)时,它是BMES中某一个的概率,组成一个初始的概率矩阵(矩阵值已经基于海量文本统计求得)。对于任何字,转移到BMES中的概率都是一致的,因此该矩阵是1x4的概率矩阵(π向量/初始概率矩阵),在这里,矩阵如下:

    {
         
         
      "B":
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值