中文分析3:基于语言模型的无监督分词

2020-06-11  本文已影响0人  京漂的小程序媛儿

一、语言模型

1、什么是语言模型

语言模型就是计算条件概率的模型。

条件概率

其中w1,w2,…,wn−1是句子中的前n−1个词(或字),wn是第n个词(或字)。

2、如何计算语言模型

即如何计算这个条件概率呢?

1、统计+平滑(工具实现:kenlm

2、最大熵语言模型

3、CRF语言模型

4、神经网络模型

神经网络模型的大概思路是:p(wn|w1,w2,…,wn−1)是关于w1,w2,…,wnw1,w2,…,wn的一个函数,但是这个函数的具体形式我不知道,所以利用神经网络去拟合它,为了更好地拟合,并且减少模型参数,还把词语“嵌入”到实数空间中(one-hot的方式参数太多又稀疏所以用嵌入式表示为短向量),用短向量来表示词语,跟语言模型一起训练。从这个角度看,词向量只是语言模型的副产品。

二、基于字的语言模型进行分词

1、分词-最优切分路径-最大路径概率

分词的过程就是寻找最优切分路径的过程,路径概率最大的切分方式就是最优分词结果。

路径概率

一个长度为l的字符串s1,s2,…,sl,一种分词结果为w1,w2,…,wm,那么这种切分方式的路径概率计算为:概率乘积p(w1)p(w2)…p(wm)。

最大路径概率对应最优切分路径,对应最优分词。

2、如何计算路径概率?

我们既然要找到路径概率最大的切分方式,那路径概率p(w1)p(w2)…p(wm)怎么算呢?

贝叶斯展开求解最优路径,转化为语言模型即条件概率。

假如字符串s1,s2,s3…,sl,

A、如果不进行切分,那么它的路径概率应该是:

p(s1)p(s2)p(s3)…p(sl)

B、如果s1,s2应该合并为一个词,那么它的路径概率是:

p(s1s2)p(s3)…p(sl)=p(s1)p(s2|s1)p(s3)…p(sl)

C、如果s2,s3应该合并为一个词,那么它的路径概率是:

p(s1)p(s2s3)…p(sl)=p(s1)p(s2)p(s3|s2)…p(sl)

D、如果s1,s2,s3应该合并为一个词,那么它的路径概率是:

p(s1s2s3)…p(sl)=p(s1)p(s2|s1)p(s3|s1s2)…p(sl)

按照经验,词的平均长度不会很大,因此,我们只需要用n-gram语言模型就够了,其中n为4时效果就挺不错了。(只需要算unigram,2-gram,3-gram和4-gram即可)。

所以路径概率就是条件概率相乘。我们只需要提前算出来所有n-gram的概率,然后再结合切分路径去计算路径概率,路径概率最大的那个就是最优切分。(这个过程我们要借助viterbi算法来做)

3、具体分词时怎么操作

将分词转化为字标注问题

如果字语言模型取到4-gram,那么它相当于做了如下的字标注:

按照经验,词的平均长度不会很大,因此,我们只需要用n-gram语言模型就够了,其中n为4时效果就挺不错了。(只需要算unigram,2-gram,3-gram和4-gram即可)。

b:单字词或者多字词的首字

c:多字词的第二字

d:多字词的第三字

e:多字词的其余部分

想一想,是不是文本中每个字都会被标注为b,c,d,e的一种呢,而且对于超过4个字的长词也可以标注,比如‘克里斯汀·迪奥’,会被标注为'bcdeeee'。

所以,对于分词问题:

第一步:计算每个字分别被标注为b,c,d,e的概率;

第二步:用viterbi算法来寻找最优标注路径。

注意不是说某个词被标注为b的概率最大就一定会被标注为b,因为对于分词的标注有它自己的标注规则,比如b后面只能跟b和c,不能跟d和e吧,c后面只能跟d和b等等。所以用viterbi算法来寻找最优标注路径。

那第一步,如何去计算每个字分别被标注为b,c,d,e的概率呢?

计算每个字的标注概率

具体怎么算:

1、训练语言模型比如用统计+平滑的方式计算语言模型,选用工具kenlm来训练。这个工具可以得到grams的联合概率,如p(a),p(b),p(c),p(ab),p(bc),p(adc)。

2、计算条件概率即语言模型。

根据贝叶斯公式,就可以算出条件概率。如p(b/a)=p(ab)/p(a)

3、条件概率即是每个字被标注为b,c,d,e的概率值。

第二步,viterbi算法计算时,需要状态转移概率,即b,c,d,e之间的转移概率。结合刚才说的一些规则,不为0的转移概率如下:

p(b|b),p(c|b),p(b|c),p(d|c),p(b|d),p(e|d),p(b|e),p(e|e)

这些转移概率的取值可以统计获得,经验设定。

已知转移概率、条件概率(对应HMM中发射概率),代入viterbi算法,就可以得到最优切分路径。

为啥说条件概率对应HMM中的发射概率呢?

因为每个字的标注概率b,c,d,e的计算公式是条件概率,而发射概率本身的意思就是在字预测为b,c,d,e的概率。所以两者是一个东西。

三、代码实现

基于语言模型的无监督分词算法实现,见WordSegWithNgram

上一篇下一篇

猜你喜欢

热点阅读