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

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

作者: 京漂的小程序媛儿 | 来源:发表于2020-06-11 12:44 被阅读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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/smavtktx.html