分词 / 是 / 什么 / ?
1 下定义
词是能够独立活动的最小语言单位。 在自然语言处理中,通常都是以词作为基本单位进行处理的。由于英文本身具有天生的优势,以空格划分所有词。而中文的词与词之间没有明显的分割标记,所以在做中文语言处理前的首要任务,就是把连续中文句子分割成「词序列」。这个分割的过程就叫分词 word segmentation
。分词又称中文分词 chinese word segmentation
,通常被缩写为 cws
。
举个栗子 🌰:
输入:词是能够独立活动的最小语言单位。
输出:词 / 是 / 能够 / 独立 / 活动 / 的 / 最小 / 语言 / 单位 / 。
2 难点
我们先来看看中文分词有那些难点,主要包括两个方面:「切分歧义识别」和「未登录词识别」。下面 👇 用几个具体 🌰 感受一下:
2.1 切分歧义识别
- 交集型歧义:
- 化妆 / 和服 / 装
- 化妆 / 和 / 服装
- 组合型歧义:
- 这个 / 门 / 把手 / 坏了
- 请 / 把 / 手 / 拿开
- 真歧义:
- 乒乓 / 球拍 / 卖 / 完 / 了
- 乒乓球 / 拍卖 / 完 / 了
2.2 未登录词识别
包括人名、机构名、地名、产品名、商标名、简称、省略语、新词等都是很难处理的问题。
举个 🌰:「躺枪」、「洗摸杯」等。
3 中文分词技术的分类
3.1 「基于字符匹配」 的分词方法
又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。
- 正向最大匹配法(由左到右的方向);
- 逆向最大匹配法(由右到左的方向);
- 最少切分(使每一句中切出的词数最小);
- 双向最大匹配法(进行由左到右、由右到左两次扫描)。
3.2 「基于词频统计」的分词方法
一般来看,上下文中相邻的字出现在一起的次数越多,那么它们越有可能是一个词。因此词与词的共现频率可以反映出成词的可能性。这种方法可以很好的处理「新词」。常见的方法有 n-gram、t-test、HMM 等(_这里先不做解释,后面会详细举例,挖坑_)。
3.3「基于知识理解」的分词方法
在分词的同时进行句法、语义的分析,利用句法信息和语义信息来处理歧义现象,因而具有良好的歧义切分能力,但因为要对语言自身信息进行更多的处理,因而加大了实现的难度。
4 上手试试
这里使用开源的结巴
中文分词包做演示,它支持三种分词模式:
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
使用 pip 安装模块:
1 | pip install jieba |
输入 >>
1 | # encoding=utf-8 |
输出 >>
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】: 我/ 来到/ 北京/ 清华大学
【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造