笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP
3. 二元语法与中文分词
上一章中我们实现了块儿不准的词典分词,词典分词无法消歧。给定两种分词结果“商品 和服 务”以及“商品 和 服务”,词典分词不知道哪种更加合理。
我们人类确知道第二种更加合理,只因为我们从小到大接触的都是第二种分词,出现的次数多,所以我们判定第二种是正确地选择。这就是利用了统计自然语言处理。统计自然语言处理的核心话题之一,就是如何利用统计手法对语言建模,这一章讲的就是二元语法的统计语言模型。
3.1 语言模型
-
什么是语言模型
模型指的是对事物的数学抽象,那么语言模型指的就是对语言现象的数学抽象。准确的讲,给定一个句子 w,语言模型就是计算句子的出现概率 p(w) 的模型,而统计的对象就是人工标注而成的语料库。
假设构建如下的小型语料库:
商品 和 服务 商品 和服 物美价廉 服务 和 货币
每个句子出现的概率都是 1/3,这就是语言模型。然而 p(w) 的计算非常难:句子数量无穷无尽,无法枚举。即便是大型语料库,也只能“枚举”有限的数百万个句子。实际遇到的句子大部分都在语料库之外,意味着它们的概率都被当作0,这种现象被称为数据稀疏。
句子几乎不重复,单词却一直在重复使用,于是我们把句子表示为单词列表 w = w 1 w 2 . . . w k w=w_1w_2...w_k w=w1w2...wk ,每个 w t , t ∈ [ 1 , k ] w_t,t\in[1,k] wt,t∈[1,k] 都是一个单词,然后定义语言模型:
p ( w ) = p ( w 1 w 2 ⋯ w k ) = p ( w 1 ∣ w 0 ) × p ( w 2 ∣ w 0 w 1 ) × ⋯ × p ( w k + 1 ∣ w 0 w 1 w 2 … w k ) = ∏ t = 1 k + 1 p ( w t ∣ w 0 w 1 ⋯ w t − 1 ) \begin{aligned} p(\boldsymbol{w}) &=p\left(w_{1} w_{2} \cdots w_{k}\right) \\ &=p\left(w_{1} | w_{0}\right) \times p\left(w_{2} | w_{0} w_{1}\right) \times \cdots \times p\left(w_{k+1} | w_{0} w_{1} w_{2} \dots w_{k}\right) \\ &=\prod_{t=1}^{k+1} p\left(w_{t} | w_{0} w_{1} \cdots w_{t-1}\right) \end{aligned} p(w)=p(w1w2⋯wk)=p(w1∣w0)×p(w2∣w0w