统计语言模型、HMM与中文分词

本文介绍了中文分词的基础,包括基于词典的匹配方法和统计模型。深入探讨了统计语言模型的概念,利用概率估计句子合理性,并提及了HMM在分词中的应用。最后,文章提到了深度学习中的Bi-LSTM + CRF模型在分词任务上的进步。

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

序言

  • 深感自然语言处理领域知识之广博,而自己才疏学浅,深感任重而道远。深夜写篇博文,以便温故而知新。
  • 中文分词是中文自然语言处理的一个基础工作,它的好坏直接决定后续结果的好坏,目前分词算法已经比较成熟,市面上也有很多好用的分词工具可以直接使用,比如大家熟悉的结巴分词(jieba)。但它并不是完美的,同时分词的内部原理你知道吗?

中文分词的起步阶段-- 基于词典的匹配

  • 首先你要有一个中文词典,世面上有很多开源的可以下载,你也可以自己爬取整理。
  • 基本算法包括 前向最大匹配、后向最大匹配、双向最大匹配。就是在句子上滑动,去词典里匹配看是否能匹配到。里面还有很多细节,实现起来很简单,就不细说了。
  • 还有一个常用的算法是对句子做全分隔,然后构建有向无环图的做法,得到最佳的分词结果。
  • 这种分词方法,能够解决80%左右的问题,但它显然不是完美的,对于词的歧义性、分词颗粒度大小等问题无法解决。

发展阶段 – 基于统计模型

  • 首先介绍下统计语言模型,- 我们知道,自然语言是一种上下文相关的信息表达方式。想让计算机处理自然语言,一个基本问题就是为自然语言这种上下文相关的特性建立数学模型。这个数学模型就是统计语言模型。从工程的角度来解释,你首先要有一个尽可能大的语料库,然后统计每个词的频率(近似等于概率),以及任意一组词的频率。这样做的目的是,可以就可以估计出任意一个句子出现的概率。
    如果让机器去判断一个文字序列是否能构成一个人类能理解的句子,怎么去做。如果按照人类的思想,可能会判断这个文字序列是否合乎文法,含义是否正确。以前人们也确实这样做的,但几十年的时间证明,这条路走不通。但一个简单的统计模型搞定了它。可以这么思考,一个句子是否合理,就看看它的可能性大小如何,
    如果 S 表示一连串特定顺序排列的词 w 1 w_1 w1 w 2 w_2 w2,…, w n w_n wn
    目前,机器对语言的识别从某种角度来说,就是想知道S在文本中出现的可能性,也就是数学上所说的S 的概率用 P(S) 来表示。用公式展开如下:
    P(S)= p( w 1 w_1 w1 w 2 w_2 w2,…, w n w_n wn) = P( w 1 w_1 w1).P( w 2 w_2 w2| w 1 w_1 w1).P( w 3 w_3 w3| w 1 , w 2 w_1,w_2 w1,w2). …P( w n ∣ w 1 , . . . , w n − 1 w_n|w_1,...,w_{n-1} wnw1,...,wn1)
    其中 P ( w 1 w_1 w1) 表示第一个词w1 出现的概率;P (w2|w1) 是在已知第一个词的前提下,第二个词出现的概率;以次类推。不难看出,到了词wn,它的出现概率取决于它前面所有词。从计算上来看,各种可能性太多,无法实现。因此我们假定任意一个词wi的出现概率只同它前面的词 wi-1 有关(即齐次马尔可夫假设),于是问题就变得很简单了。现在,S 出现的概率就变为:

  • P ( S ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 ) … P ( w i ∣ w i − 1 ) … P(S) = P(w_1)P(w_2|w_1)P(w_3|w_2)…P(w_i|w_{i-1})… P(S)=P(w1)P(w2w1)P(w3w2)P(wiwi1)
    接下来的问题就是如何估计 P ( w i ∣ w i − 1 ) P(w_i|w_{i-1}) P(wiwi1))。现在有了大量机读文本后,这个问题变得很简单,只要数一数这对词(wi-1,wi) 在统计的文本中出现了多少次,以及 wi-1 本身在同样的文本中前后相邻出现了多少次,然后用两个数一除就可以了, P ( w i ∣ w i − 1 ) = P ( w i − 1 , w i ) / P ( w i − 1 ) P(w_i|w_{i-1}) = P(w_{i-1},w_i)/ P (w_{i-1}) P(wiwi1)=P(wi1,wi)/P(wi1)。这就是通过统计大量中文句子语料库,结合贝叶斯公式得出 P ( w i ∣ w i − 1 ) P(w_i|w_{i-1}) P(wiwi1)
    事实证明,统计语言模型比任何已知的借助某种规则的解决方法都有效。

  • 知道了什么是语言模型,那怎么借助它来分词呢?比如一个句子,可以有以下三种分法:A1,A2,,,An / B1,B2,,,,Bk / C1,C2,,,Cm 那么哪种分法好呢,有了上面的知识,我们可以把三种分词序列输入到语言模型,概率最高的显然是最好的分词方法。

  • HMM也就是隐马尔可夫模型,做中文分词达到了很好的效果。那么什么是马尔科夫模型呢?

深度学习阶段 – 基于 Bi-LSTM + CRF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值