赞
踩
《NPL基于词典分词(一)》中我们实现了块儿不准的词典分词,词典分词无法消歧。给定两种分词结果“商品 和服 务”以及“商品 和 服务”,词典分词不知道哪种更加合理。但生为人类的我们知道“商品 和 服务”更加合理,只因为我们从小到大接触的都是第二种分词,出现的次数多,所以我们判定第二种是正确地选择。这就是利用了统计自然语言处理。
模型指的是对事物的数学抽象,那么语言模型指的就是对语言现象的数学抽象。准确的讲,给定一个句子 w,语言模型就是计算句子的出现概率 p(w) 的模型。假设构建如下的小型语料库(也可以是人民日报或者其它上面文章):
商品 和 服务
商品 和服 物美价廉
服务 和 货币
每个句子出现的概率p(w)都是 1/3,这就是语言模型。然而 p(w) 的计算非常难:句子数量无穷无尽,无法枚举。即便是大型语料库,也只能“枚举”有限的数百万个句子。实际遇到的句子大部分都在语料库之外,意味着它们的概率都被当作0,这种现象被称为数据稀疏。
然而随着句子长度的增大,语言模型会遇到如下两个问题。
为了解决以上两个问题,需要使用马尔可夫假设来简化语言模型,给定时间线上有一串事件顺序发生,假设每个事件的发生概率只取决于前一个事件,那么这串事件构成的因果链被称作马尔可夫链。
在语言模型中,第 t 个事件指的是 Wt 作为第 t 个单词出现。也就是说,每个单词出现的概率只取决于前一个单词:
p
(
w
t
)
=
p
(
w
t
∣
w
0
w
1
.
.
.
w
t
−
1
)
=
p
(
w
t
∣
w
t
−
1
)
p(w_t) = p(w_t|w_0w_1...w_{t-1})=p(w_t|w_{t-1})
p(wt)=p(wt∣w0w1...wt−1)=p(wt∣wt−1)
基于此假设,式子一下子变短了不少,此时的语言模型称为二元语法模型:
即
p
(
商
品
和
服
务
)
=
p
(
商
品
∣
B
O
S
)
p
(
和
∣
商
品
)
p
(
服
务
∣
和
)
p
(
E
O
S
∣
服
务
)
=
2
/
3
∗
1
/
2
∗
1
/
2
∗
1
/
2
=
1
/
12
p(商品和服务) = p(商品|BOS)p(和|商品)p(服务|和)p(EOS|服务)= 2/3 * 1/2 *1/2 * 1/2 = 1/12
p(商品和服务)=p(商品∣BOS)p(和∣商品)p(服务∣和)p(EOS∣服务)=2/3∗1/2∗1/2∗1/2=1/12
即
p
(
商
品
和
货
币
)
=
p
(
商
品
∣
B
O
S
)
p
(
和
∣
商
品
)
p
(
货
币
∣
和
)
p
(
E
O
S
∣
货
币
)
=
2
/
3
∗
1
/
2
∗
1
/
2
∗
1
/
1
=
1
/
6
p(商品 和 货币) = p(商品|BOS)p(和|商品)p(货币|和)p(EOS|货币)= 2/3 * 1/2 *1/2 * 1/1 = 1/6
p(商品和货币)=p(商品∣BOS)p(和∣商品)p(货币∣和)p(EOS∣货币)=2/3∗1/2∗1/2∗1/1=1/6
不在语料库中的句子,因此也终于不是0了。
利用类似的思路,可以得到n元语法的定义:每个单词的概率仅取决于该单词之前的 n 个单词:
p
(
w
)
=
∏
t
=
1
k
+
n
−
1
p
(
w
t
∣
w
t
−
n
+
1
.
.
.
w
t
−
1
)
p(w)=\prod_{t=1}^{k+n-1}p(w_t|w_{t-n +1}...w_{t-1})
p(w)=t=1∏k+n−1p(wt∣wt−n+1...wt−1)
特别地,当 n=1 时的 n 元语法称为一元语法 ( unigram);当 n=3 时的 n 元语法称为三元语法(tigam); n≥4时数据稀疏和计算代价又变得显著起来,实际工程中几乎不使用。
对于 n 元语法模型,n 越大,数据稀疏问题越严峻。比如上述语料库中“商品 货币”的频次就为0。一个自然而然的解决方案就是利用低阶 n 元语法平滑高阶 n 元语法,所谓平滑,就是字面上的意思:使 n 元语法频次的折线平滑为曲线。最简单的一种是线性插值法:
y
−
y
0
y
1
−
y
0
=
α
=
x
−
x
0
x
1
−
x
0
{y-y_0 \above{1pt} y_1- y_0} = \alpha = {x-x_0 \above{1pt} x_1- x_0}
y1−y0y−y0=α=x1−x0x−x0
y
=
α
y
1
+
(
1
−
α
)
y
0
y=\alpha y_1 + (1-\alpha)y_0
y=αy1+(1−α)y0
定义新的二元式语法为
p
(
w
t
∣
w
t
−
1
)
=
α
P
m
l
(
w
t
∣
w
t
−
1
)
+
(
1
−
α
)
p
(
w
t
)
p(w_t|w_{t-1}) = \alpha P_{ml}(w_t|w_{t-1}) + (1-\alpha)p(w_t)
p(wt∣wt−1)=αPml(wt∣wt−1)+(1−α)p(wt)
二元式中, y0表示第一位p(w_t|BOS) = p(w_t); y1表示最后一位用Pml表示
定义新的一元式语法为
p
(
w
t
)
=
α
P
m
l
(
w
t
)
+
(
1
−
α
)
1
N
p(w_t) = \alpha P_{ml}(w_t) + (1-\alpha) \cfrac1N
p(wt)=αPml(wt)+(1−α)N1
训练指的是统计二元语法频次以及一元语法频次,有了频次,通过极大似然估计以及平滑策略,我们就可以估计任意句子的概率分布,即得到了语言模型。这里以二元语法为例:
商品 和 服务
商品 和服 物美价廉
服务 和 货币
和@服务 1
和@货币 1
和服@物美价廉 1
商品@和 1
商品@和服 1
始##始@商品 2
始##始@服务 1
服务@和 1
服务@末##末 1
物美价廉@末##末 1
货币@末##末 1
0:[ ]
1:[商品]
2:[]
3:[和,和服]
4:[服务]
5:[务]
6:[ ]
其中收尾(行0和行6)分别对应起始和末尾,对应词图
to: 1, from: 0, weight:04.60, word:始##始@商品
to: 2, from: 1, weight:00.80, word:商品@和
to: 3, from: 1, weight:00.80, word:商品@和服
to: 4, from: 2, weight:00.80, word:和@服务
to: 5, from: 3, weight:00.11, word:和服@务
to: 6, from: 4, weight:00.80, word:服务@末##末
to: 6, from: 5, weight:08.88, word:务@末##末
因为语料库的有限性,上述的词网中根本不可能出现OOV(词库以外的词),因此在处理OOV, 统计模型的消歧能力 + 用户自定义词典的方式。HanLP支持 2 档用户词典优先级:
按照NLP任务的一般流程,我们已经完成了语料标注和模型训练,现在来比较一下二元语法和词典分词的评测:
算法 | P | R | F1 | R(oov) | R(IV) |
---|---|---|---|---|---|
最长匹配 | 89.41 | 94.64 | 91.95 | 2.58 | 97.14 |
二元语法 | 92.38 | 96.70 | 94.49 | 2.58 | 99.26 |
相较于词典分词,二元语法在精确度、召回率及IV召回率上全面胜出,最终F1值提高了 2.5%,成绩的提高主要受惠于消歧能力的提高。然而 OOV 召回依然是 n 元语法模型的硬伤,我们需要更强大的统计模型。
《线性插值法》
《理解极大似然估计(MLE)》
《理解朴素贝叶斯分类的拉普拉斯平滑》
《二元语法与中文分词》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。