【NLP学习笔记】中文分词

分词通俗的讲就是如何将一个句子划分成词语,大多数情况下不同的划分方式会导致不同的语义。

分词方法分类

自动分词主要分为三个流派:规则分词、统计分词和混合分词(规则+统计)

1、规则分词

通过维护一个词典,在切分语句时,将语句的每个字符串与表中的词进行逐一匹配,找到则切分,否则不与切分。属于一种机械分词方法,匹配的方式又分为正向最大匹配法、逆向最大匹配法以及双向最大匹配法三种。

2、统计分词

通过建立统计语言模型,对句子进行单词划分,然后对划分结果进行概率计算,获得概率最大的分词方式,主要用到的算法:隐马尔可夫模型、条件随机场。

  • 语言模型就是用概率论中的条件概率公式表示一句话出现的概率,
    比如:我们把“我爱你中国”这句话表示成‘w1w2w3w4w5’
    那么p(w1w2w3w4w5) = p(w1)p(w2|w1)p(w3|w1w2)p(w4|w1w2w3)p(w5|w4w3w2w1)

通过统计句子在语料库中的频数,用下面的公式来计算n元条件概率,count的意思是后面这句话在语料库中出现的频数,估计n元条件概率时,会出现分子分母为零的情况,此时需要使用平滑算法进行处理。
p ( w i w i ( n 1 ) , . . . . w i 1 ) = c o u n t ( w i ( n 1 ) , . . . . w i 1 , w i ) c o u n t ( w i ( n 1 ) , . . . . w i 1 ) p(w_i|w_{i-(n-1)},....w_{i-1})=\frac{count(w_{i-(n-1)},....w_{i-1},w_{i})}{count(w_{i-(n-1)},....w_{i-1})}

混合分词

首先基于前缀词典进行分词,可以得到若干条分词结果,然后再用统计方法计算每条结果出现的概率,然后选择最大概率作为最终的分词结果。

开源分词工具 jieba

import jieba
sentence = '中文分词是文本处理不可或缺的一步'
#使用jieba.cut()和jieba.cut_for_search()进行分词,有三种模式,返回值是一个generator,可以用list()将其转换为列表。
#全模式,输出所有可能成词的词语。
res1 = jieba.cut(sentence, cut_all=True)
#精确模式,输出最精确的切分,适合做文本分析
res2 = jieba.cut(sentence, cut_all=False)
#搜索引擎模式,在精确模式的基础上,对长词再次切分,适合搜索引擎分词。
res3 = jieba.cut_for_search(sentence)
print(list(res1))
print(list(res2))
print(list(res3))

输出结果

全模式:['中文', '分词', '是', '文本', '文本处理', '本处', '处理', '不可', '不可或缺', '或缺', '的', '一步']
精确模式:['中文', '分词', '是', '文本处理', '不可或缺', '的', '一步']
搜索引擎模式:['中文', '分词', '是', '文本', '本处', '处理', '文本处理', '不可', '或缺', '不可或缺', '的', '一步']

猜你喜欢

转载自blog.csdn.net/Alexbyy/article/details/84869703