中文分词基础

(一)中文分词基础

背 景

• 一段文字不仅仅在于字面上是什么,还在于怎么切分和理解。
• 例如:
      – 阿三炒饭店:
      – 阿三 / 炒饭 / 店 阿三 / 炒 / 饭店
• 和英文不同,中文词之间没有空格,所以实现中文搜索引擎,比英文多了一项分词的任务。
• 如果没有中文分词会出现:
     – 搜索“达内”,会出现“齐达内”相关的信息
• 要解决中文分词准确度的问题,是否可以提供一个免费版本的通用分词程序?
    – 像分词这种自然语言处理领域的问题,很难彻底完全解决

    – 每个行业或业务侧重不同,分词工具设计策略也是不一样的,比如搜索场景和推荐场景,搜索场景的分词粒度为细粒度(目的是为了召回率,尽可能找到更多之后过滤),推荐场景适合粗粒度(目的是为了背后语义更加可以理解,如果是细粒度,可能导致隐含语义丢失)

    -分词工具严重依赖于语料库:公司分了很多垂类,不同行业的语料库不同,比如金融、医疗、旅游

切分方案


• 切开的开始位置对应位是1,否则对应位是0,来表示“有/意见/分歧”的bit内容是:11010

• 还可以用一个分词节点序列来表示切分方案,例如“有/意见/分歧”的分词节点序列是{0,1,3,5}

最常见方法

• 最常见的分词方法是基于词典匹配
    – 最大长度查找(前向查找,后向查找)
• 数据结构
    – 为了提高查找效率,不要逐个匹配词典中的词
    – 查找词典所占的时间可能占总的分词时间的1/3左右,为了保证切分速度,需要选择一个好的查找词典方法
    – Trie树常用于加速分词查找词典问题 时间复杂度与树的深度有关,与广度无关

Trie树

• 例如:大学生活动中心 (反向:从后往前找,“心”找到“中”,如果能组成词语则划分)

中文分词基础_第1张图片

• 例如:北京大学生活动中心(正向反向谁好谁坏不一定)

中文分词基础_第2张图片

切分词图(用abtest来检验分词效果)

中文分词基础_第3张图片

0:有[0,1,3]3种切分方法,1:只有[1]一种切分方法

概率语言模型---得到一个切分方案

• 假设需要分出来的词在语料库和词表中都存在,最简单的方法是按词计算概率,而不是按字算概率。
• 从统计思想的角度来看,分词问题的输入是一个字串C=c1,c2……cn ,输出是一个词串S=w1,w2……wm ,其中m<=n。对于一个特定的字符串C,会有多个切分方案S对应,分词的任务就是在这些S中找出一个切分方案S,使得P(S|C)的值最大。

• P(S|C)就是由字符串C产生切分S的概率,也就是对输入字符串切分出最有可能的词序列。

中文分词基础_第4张图片

例 子
• 例如:对于输入字符串C“南京市长江大桥”,有下面两种切分可能:
    – S1: 南京市 / 长江 / 大桥
    – S2:南京 / 市长 / 江大桥
• 这两种切分方法分别叫做S1和S2,选择max{P(S1|C),P(S2|C)}。
• P(C)是字串在语料库中出现的概率,是一个固定值。比如说语料库中有1万个句子,其中有一句是 “南京市长江大桥”那么P(C)=P(“南京市长江大桥”)=万分之一。
• 因为P(C∩S) = P(S|C)*P(C) = P(C|S)*P(S),所以

 贝叶斯公式
• P(C)只是一个用来归一化的固定值,所以可以省略,不会影响大小的比较(两个数除以同一个数大小关系不变)
• 另外:从词串恢复到汉字串的概率只有唯一的一种方式,所以P(C|S)=1。

• 所以:比较P(S1|C)和P(S2|C)的大小变成比较P(S1)和P(S2) 的大小

中文分词基础_第5张图片

• 因为P(S1)=P(南京市,长江,大桥)=P(南京市)*P(长江)*P(大桥) > P(S2)=P(南京,市长,江大桥)(语料库中可能就没出现过“江大桥”),所以选择切分方案S1。

“江大桥”是否为新兴的网络词?通过“交叉熵”来新词发现,并且语料库得实时更新来接纳新词汇。

• 为了容易实现,假设每个词之间的概率是上下文无关的,则:


• 其中,P(w) 就是这个词出现在语料库中的概率。因为函数y=log(x),当x增大,y也会增大,所以是单调递增函数。∝是正比符号。因为词的概率小于1,所以取log后是负数。
• 最后算 logP(w)。取log是为了防止向下溢出,如果一个数太小,例如0.000000000000000000000000000001 可能会向下溢出。

• 如果这些对数值事前已经算出来了,则结果直接用加法就可以得到,而加法比乘法速度更快。

中文分词基础_第6张图片

Log图形化表示

一元模型

• 对于不同的S,m的值是不一样的,一般来说m越大,P(S)会越小。也就是说,分出的词越多,概率越小。


• 因此:
• 这个P(S)的计算公式也叫做基于一元模型的计算公式,它综合考虑了切分出的词数和词频。

N元模型

• 假设在日本,[和服]也是一个常见的词。按照一元概率分词,可能会把“产品和服务”分成[产品][和服][务]。为了切分更准确,要考虑词所处的上下文。
• 给定一个词,然后猜测下一个词是什么。当我说“NBA”这个词时,你想到下一个词是什么呢?我想大家有可能会想到“篮球”,基本上不会有人会想到“足球”吧。

• 之前为了简便,所以做了“前后两词出现概率是相互独立的”的假设在实际中是不成立的

• N元模型使用n个单词组成的序列来衡量切分方案的合理性:
• 估计单词w1后出现w2的概率。根据条件概率的定义:
• 可以得到:P(w1,w2)= P(w1)P(w2|w1)
• 同理:P(w1,w2,w3)= P(w1,w2)P(w3|w1,w2)
• 所以有:P(w1,w2,w3)= P(w1)P(w2|w1)P(w3|w1,w2)
• 更加一般的形式:
• P(S)=P(w1,w2,...,wn)= P(w1)P(w2|w1)P(w3|w1,w2)…P(wn|w1w2…wn-1)

• 这叫做概率的链规则。

• 如果简化成一个词的出现仅依赖于它前面出现的一个词,那么就称为二元模型(Bigram)
• P(S) = P(w1,w2,...,wn)= P(w1) P(w2|w1) P(w3|w1,w2)…P(wn|w1w2…wn-1)≈P(w1) P(w2|w1)P(w3|w2)…P(wn|wn-1)
• 如果简化成一个词的出现仅依赖于它前面出现的两个词,就称之为三元模型(Trigram)

• 如果一个词的出现不依赖于它前面出现的词,叫做一元模型(Unigram)

(二)Jieba分词

Jieba分词简介

• 源码下载的地址:https://github.com/fxsjy/jieba
• 支持三种分词模式
    – 精确模式:将句子最精确的分开,适合文本分析
    – 全模式:句子中所有可以成词的词语都扫描出来,速度快,不能解决歧义
    – 搜索引擎模式:在精确模式基础上,对长词再次切分,提高召回
• 支持繁体分词

• 支持自定义字典--jieba自带预料,但是程序员也可以自己维护语料库

• 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)
• 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
• 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

Jieba分词流程图

中文分词基础_第7张图片

1、对于sentence需要进行清洗,比如火星语、乱码,将其分隔开打上乱码

2、按照trie树加载语料库的数据

3、根据句子找出切分方案,得到DAG图

4、得到每一种切分方案概率最大的组合

5、针对未登录词的处理,比如广州本田雅阁汽车,语料库中只有广州、本田,那么针对语料库没有的词语雅阁汽车,用HMM做切分

6、如果遇到连续数字、连续字母,剔除出来,单独处理

7、针对模板词语比如XX年XX月XX日、XX省XX市XX县,HMM很难处理,需要特定的模板,特殊情况用其他方式处理结束后,剩下的才能用HMM模型

8、viterbi动态规划可以参考前面的LCS动态规划算法

Jieba登录词词库加载

中文分词基础_第8张图片

Jieba的DAG词图

中文分词基础_第9张图片

Jieba的Route概率 - 获得词频最大切分

中文分词基础_第10张图片

如图得到很多切分方案,每一条箭头都是概率取log得到的数据,如图比较(这里是一元模型,HMM是二元模型)

a:“广州本田”+“雅阁”+“汽车”=-17-13-8=-38;

b:“广州”+“本田+“雅阁”+“汽车”=-9-11-13-8=-41

因为a>b,所以选择切分方案a

由此jieba分词的上半部分的分析已经完成,下半部分则需要利用HMM模型来完成。

中文分词实践

1、建立如图所示的实践目录,并且下载jieba分词到本地,路径在github上找,是开源的

中文分词基础_第11张图片

2、进入下载的jieba分词(不推荐安装,直接下载下来用就行了),进入test目录,可以看到有很多示例代码文件,这里我们执行一下demo.py文件

中文分词基础_第12张图片

full mode:列出所有可能的词语,为了方便召回

default mode:常用的模式

3、关键词提取--按照关键性排序

中文分词基础_第13张图片

4、jieba分词链接webserver,为了方便实时处理网站的中文分词,并且回显到前端页面,至于连接方式,碍于篇幅这里不讲了

隐马尔可夫模型

• 观察和隐藏序列共同构成隐马尔可夫模型(HMM)
中文分词基础_第14张图片

你可能感兴趣的:(机器学习)