jieba词性标注

这里首先了解下词性标注:
中文的词性标注一般存在很多不固定性,比如同音同形的词在不同的场景下,其表示的语法属性截然不用,这就为词性标注带来了很大的困难。但是从另外一个方面看,整体上来说大多数的词语,尤其是实词,一般只有一个到两个词性,而其中一个词性相对于另一个是高频的,这时如果默认将高频词性作为词性选择进行标注,也能有很高的准确率。这时对于大部分的场景来说,还是能满足基本的准确度要求的。

最简单的方法是:统计语料库中的每个词对应的词性,然后将每个词的高频词性作为该词的词性。也就是说输入语料必须是已经标注好词性的语料库。

与此同时,还可以有所提升,目前较多的做法是将词性标注的问题转化为用分词的方法,也即是将句子的词性标注作为一个序列标注问题来解决。这样的话,分词中的方法,如HMM、CRF等都可以用在词性标注上。

词性标注规范:
目前有北大的词性标注集和宾州词性标注集,这里采用的是北大的词性标注集。

这里说下jieba的词性标注:
jieba词性标注有点类似于其分词流程,也是基于规则和统计的方法,也就是在词性标注的过程中,词典匹配和HMM共同作用。

  • 首先基于正则表达式判断是否是汉字
  • 若不是汉字,将继续通过正则表达式进行类型判断。
  • 若是汉字,则基于前缀词典构建有向无环图,再基于有向无环图计算最大概率路径,同时在前缀词典中找出它所分出的词性,若未找到,则赋予“x”,代表未知。如有未登录词,则会通过HMM进行词性标注。

那么HMM是怎样应用于词性标注的呢?
这里简单说下,就是在分词任务中,我们用’B’、’M’、’S’、’E’四中标签,与句子中的每个字符一一对应,而在词性标注中jieba采用了联合模型的方式,即将基于字标注的方法和词性标注结合起来,使用复合标注集。比如:‘人民’,分词为‘BE’,而词性为‘n’,这时‘人’的标注就是‘B_n’,而‘民’的标注就是‘E_n’,剩下的就和HMM分词过程一致了,但这里要更换适合的训练语料库。

import jieba.posseg as psg

sent='中文分词是文本处理不可或缺的一步!'
seg_list=psg.cut(sent)
print(''.join(['{0}/{1}'.format(w,t) for w,t in seg_list]))

运行结果:

中文/nz分词/n是/v文本处理/n不可或缺/l的/uj一步/m!/x

这里只是对jieba词性标注做了一个简单介绍,以后再深入讨论。

参考:《pytho自然语言处理实战 核心技术与算法》

你可能感兴趣的:(NLP)