82 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
3.2 中文分词
对于机器翻译系统而言,输入的是已经切分好的单词序列,而不是原始的字符
串(图3.3)。比如,对于一个中文句子,单词之间是没有间隔的,因此需要把一个个
的单词切分出来,这样机器翻译系统可以区分不同的翻译单元。甚至,可以对语言
学上的单词进行进一步切分,得到词片段序列(比如:中国人 → 中国/人)。广义上,
可以把上述过程看作是一种分词过程,即:将一个输入的自然语言字符串切割成单
元序列,每个单元(Token)都对应可以处理的最小单位。
猫喜欢吃鱼
分词系统
猫/喜欢/吃/鱼 机器翻译系统
...
图 3.3 一个简单的预处理流程
分词得到的单元序列既可以是语言学上的词序列,也可以是根据其他方式定义
的基本处理单元。在本章中,把分词得到的一个个单元称为单词或词,尽管这些单
元可以不是语言学上的完整单词,而这个过程也被称作词法分析(Lexical Analysis)。
除了汉语,词法分析在日语、泰语等单词之间无明确分割符的语言中有着广泛的应
用,芬兰语、维吾尔语等一些形态十分丰富的语言也需要使用词法分析来解决复杂
的词尾、词缀变化等形态变化。
在机器翻译中,分词系统的好坏往往会决定译文的质量。分词的目的是定义系
统处理的基本单元,那么什么叫做“词”呢?关于词的定义有很多,比如:
定义 3.2.1 词
语言里最小的可以独立运用的单位。
——《新华字典》
[90]
单词,含有语义内容或语用内容,且能被单独念出来的的最小单位。
——维基百科
语句中具有完整概念,能独立自由运用的基本单位。
——《国语辞典》
[91]
从语言学的角度来看,人们普遍认为词是可以单独运用的、包含意义的基本单
位。这样可以使用有限的词组合出无限的句子,这也正体现出自然语言的奇妙之处。
不过,机器翻译并不仅仅局限于语言学定义的单词。比如,神经机器翻译中广泛使
用的 BPE 子词切分方法,可以被理解为将词的一部分切分出来,将得到的词片段送
给机器翻译系统使用。比如,对如下英语字符串,可以得到切分结果:
3.2 中文分词 83
Interesting → Interest/ing selection → se/lect/ion procession → pro/cess/ion
Interested → Interest/ed selecting → se/lect/ing processing → pro/cess/ing
Interests → Interest/s selected → se/lect/ed processed → pro/cess/ed
词法分析的重要性在自然语言处理领域已经有共识。如果切分的颗粒度很大,获
得单词的歧义通常比较小,比如“中华人民共和国”整体作为一个单词不存在歧义,
而如果单独的一个单词“国”,可能会代表“中国”、“美国”等不同的国家,存在歧
义。但是随着切分颗粒度的增大,特定单词出现的频次也随之降低,低频词容易和
噪音混淆,系统很难对其进行学习。因此,处理这些问题并开发适合翻译任务的分
词系统是机器翻译的第一步。
3.2.1 基于词典的分词方法
计算机并不能像人类一样在概念上理解“词”,因此需要使用其他方式让计算机
“学会”如何分词。一个最简单的方法就是给定一个词典,在这个词典中出现的汉字
组合就是所定义的“词”。也就是说,可以通过一个词典定义一个标准,符合这个标
准定义的字符串都是合法的“词”。
在使用基于词典的分词方法时,只需预先加载词典到计算机中,扫描输入句子,
查询其中的每个词串是否出现在词典中。如图3.4所示,有一个包含六个词的词典,给
定输入句子“确实现在物价很高”后,分词系统自左至右遍历输入句子的每个字,发
现词串“确实”在词典中出现,说明“确实”是一个“词”。之后,重复这个过程。
1: 很
2: 高
3: 现在
4: 物价
5: 确实
6: 实现
分词词典
确
实
现
在
物
价
很
高
确
实
现
在
物
价
很
高
起始
起始
起始
起始
起始
命中:第 2 号单词
图 3.4 基于词典进行分词的实例
但是,基于词典的分词方法很“硬”。这是因为自然语言非常灵活,经常出现歧
义。图3.5就给出了上面例子中的交叉型歧义,从词典中查看,“实现”和“现在”都
是合法的单词,但是在句子中二者有重叠,因此词典无法告诉系统哪个结果是正确
的。
类似的例子在生活中也很常见。再比如“答辩结束的和尚未答辩的同学都请留在
教室”一句中,正常的分词结果是“答辩/结束/的/和/尚未/答辩/的/同学/都/请/留在/教
室”,但是由于“尚未”、“和尚”都是常见词汇,使用基于词典的分词方法在这时很
84 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
1: 很
2: 高
3: 现在
4: 物价
5: 确实
6: 实现
分词词典
确
实
现
在
物
价
很
高
命中
命中
图 3.5 交叉型分词歧义
容易出现切分错误。
基于词典的分词方法是典型的基于规则的方法,完全依赖于人工给定的词典。在
遇到歧义时,需要人工定义消除歧义的规则,比如,可以自左向右扫描每次匹配最
长的单词,这是一种简单的启发式消歧策略。图3.4中的例子实际上就是使用这种策
略得到的分词结果。但是,启发式的消岐方法仍然需要人工设计启发式规则,而且
启发式规则也不能处理所有的情况。所以说简单的基于词典的方法还不能很好的解
决分词问题。
3.2.2 基于统计的分词方法
既然基于词典的方法有很多问题,那么就需要一种更为有效的方法。在上文中
提到,想要搭建一个分词系统,需要让计算机知道什么是“词”,那么可不可以给出
已经切分好的分词数据,让计算机在这些数据中学习到规律呢?答案是肯定的,利
用“数据”来让计算机明白“词”的定义,让计算机直接在数据中学到知识,这就是
一个典型的基于统计建模的学习过程。
1. 统计模型的学习与推断
统计分词也是一种典型的数据驱动方法。这种方法将已经经过分词的数据“喂”
给系统,这个数据也被称作标注数据(Annotated Data)。在获得标注数据后,系统自
动学习一个统计模型来描述分词的过程,而这个模型会把分词的“知识”作为参数
保存在模型中。当送入一个新的需要分词的句子时,可以利用学习到的模型对可能
的分词结果进行概率化的描述,最终选择概率最大的结果作为输出。这个方法就是
基于统计的分词方法,其与第二章介绍的统计语言建模方法本质上是一样的。具体
来说,可以分为两个步骤:
• 训练。利用标注数据,对统计模型的参数进行学习。
• 预测。利用学习到的模型和参数,对新的句子进行切分。这个过程也可以被看
作是利用学习到的模型在新的数据上进行推断。
图3.6给出了一个基于统计建模的汉语分词实例。左侧是标注数据,其中每个句
3.2 中文分词 85
子是已经经过人工标注的分词结果(单词用斜杠分开)。之后,建立一个统计模型,
记为 P (·)。模型通过在标注数据上的学习来对问题进行描述,即学习 P (·)。最后,对
于新的未分词的句子,使用模型 P (·) 对每个可能的切分方式进行概率估计,之后选
择概率最高的切分结果输出。
1: 这 / 是 / 数据
2: 现在 / 已经 / 实现
3: 确实 / 有 / 很 / 多
...
学习用数据
P (·)
统计模型
统计学习
推断
新的句子
确实现在数据很多
确/实现/在/数/据很/多
确实/现在/数据/很/多
确实/现在/数/据/很/多
...
P (
)=0.1
P (
)=0.6
P (
)=0.2
输出概率最大的结果
图 3.6 基于统计的自动分词流程
2. 全概率分词方法
上述过程的核心在于从标注数据中学习一种对分词现象的统计描述,即句子的
分词结果概率 P (·)。如何让计算机利用分好词的数据学习到分词知识呢?本书的第
二章曾介绍如何对单词概率进行统计建模,而对分词现象的统计描述就是在单词概
率的基础上,基于独立性假设获取的
1
。虽然独立性假设并不能完美描述分词过程中
单词之间的关系,但是它大大化简了分词问题的复杂度。
如图3.7所示,可以利用大量人工标注好的分词数据,通过统计学习方法获得一
个统计模型 P (·),给定任意分词结果 W = w
1
w
2
...w
m
,都能通过 P (W ) = P (w
1
) ·
P (w
2
) ·. .. ·P (w
m
) 计算这种切分的概率值。
1: 这 / 是 / 数据
2: 现在 / 已经 / 实现
3: 确实 / 有 / 很 / 多
...
学习用数据
P (·)
统计模型
统计学习
预测
自动分词系统
对任意句子进行分词
自动分词系统:对任意的数据句子 S,找到最佳的分词结果 W
∗
输出
假设输入 S=“确实现在数据很多”
枚举所有可能的切分
计算每种切分的概率
选择最佳结果
确/实现/在/数/据很/多 P (确) ·P (实现) ·P (在) ·P (数)·
P (据很) ·P (多) = 2 .13 ×10
−45
确实/现在/数据/很/多
P (确实) ·P (现在) ·P (数据)·
输出
...
P (很) ·P (多) = 1 .54 ×10
−25
图 3.7 基于 1-gram 语言模型的中文分词实例
以“确实现在数据很多”这个实例来说,如果把这句话按照“确实/现在/数据/很/多”
这样的方式进行切分,这个句子切分的概率 P (确实/现在/数据/很/多) 可以通过每个
1
即假定所有词的出现都是相互独立的。
86 Chapter 3. 词法分析和语法分析基础 肖桐 朱靖波
词出现概率相乘的方式进行计算。
P (确实/现在/数据/很/多)
= P (确实) ·P (现在) ·P (数据) ·P (很) ·P (多) (3.1)
经过充分训练的统计模型 P (·) 就是我们所说的分词模型。对于输入的新句子 S,
通过这个模型找到最佳的分词结果输出。假设输入句子 S 是“确实现在数据很多”,
可以通过列举获得不同切分方式的概率,其中概率最高的切分方式,就是系统的目
标输出。
这种分词方法也被称作基于 1-gram 语言模型的分词,或全概率分词
[92, 93]
。全概
率分词最大的优点在于方法简单、效率高,因此被广泛应用在工业界系统里。它本质
上就是一个 1-gram 语言模型,因此可以直接复用 n-gram 语言模型的训练方法和未登
录词处理方法。与传统 n-gram 语言模型稍有不同的是,分词的预测过程需要找到一
个在给定字符串所有可能切分中 1-gram 语言模型得分最高的切分。因此,可以使用
第二章中所描述的搜索算法实现这个预测过程,也可以使用动态规划方法
[94]
快速找
到最优切分结果。由于本节的重点是介绍中文分词的基础方法和统计建模思想,因
此不会对相关搜索算法进行进一步介绍,有兴趣的读者可以参考第二章和本章3.5节
的相关文献做进一步深入研究。