美文网首页
中文分析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:基于语言模型的无监督分词

    一、语言模型 1、什么是语言模型 语言模型就是计算条件概率的模型。 其中w1,w2,…,wn−1是句子中的前n−1...

  • mmseg4j中文分词包学习报告

    目录 1.认识中文分词包2.分词方法与效果分析3.分词包背后的分词算法学习4.分词结果提交5.基于分词结果的词云分...

  • <<数学之美>> part1

    摘要 : [自然语言处理] [基于规则] [基于统计] [统计语言模型] [马尔科夫] [分词] 自然语言处理--...

  • Python自然语言处理资料库(长期更新,欢迎补充)

    中文分词工具API LTP- 语言技术平台(LTP) 提供包括中文分词、词性标注、命名实体识别、依存句法分析、语义...

  • 2018-05-27

    现有的分词工具总结 IKAnalyzer IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词...

  • 中文分词方法

    中文分词是中文自然语言处理的基础,现代语言分析处理算法基本是以词为单位进行计算的。 1、词典匹配 词典匹配是分词最...

  • python 结巴分词学习

    结巴分词(自然语言处理之中文分词器) jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可...

  • 中文分词工具及中文语料资源

    关键词: 中文分词;分词;自然语言处理;中文语料 最近要做中文自然语言处理相关任务,牵涉到使用中文分词工具和相关算...

  • Elasticsearch分词插件——IK Analysis

    IK分词插件 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。IK Analys...

  • NLP系列-中文分词(基于统计)

    上文已经介绍了基于词典的中文分词,现在让我们来看一下基于统计的中文分词。 统计分词: 统计分词的主要思想是把每个词...

网友评论

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

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