中文分词的基本原理及实现
-
- [1. 什么是词](#1. 什么是词)
- [2. 基本原理](#2. 基本原理)
- [3. 发展趋势:多数场景无需显式分词](#3. 发展趋势:多数场景无需显式分词)
信息处理的目标是使用计算机能够理解和产生自然语言。而自然语言理解和产生的前提是对语言能够做出全面的解析。
汉语词汇是语言中能够独立运用的最小的语言单位,是语言中的原子结构。由于中文缺乏类似英文的空格分隔,分词的准确性直接影响后续任务(如机器翻译、情感分析)的效果。因此,对中文进行分词就显得至关重要。
中文分词(Chinese Word Segmentation)是自然语言处理的基础任务,旨在将连续的中文字符序列切分成具有独立语义的词语。
以下从基本原理、主流方法、实现工具及挑战展开介绍。
1. 什么是词
古往今来,汉字虽然有5万多个,但常用的汉字大约仅有6000个。即便如此,其中很多汉字在日常生活中较少用到。然而,这些有限的汉字足以维持词汇的长期更新,因为扩大中文词汇的方法是通过构造汉字的复合新词,而不是创造新的字符来完成的。这就造成了汉语中所谓的词和短语之间没有明确的界限。
这可能也就是中国的一些语法学家认为,中文没有词语而只有汉字的原因,并创造了一个术语--"字短语"来代替传统的词汇。董振东就认为:"'词或字符'的争论源于他们都急于给中国语言一个硬规范的共同基础。遗憾的是,中文不是那么明确的或硬的,它是软的。我们必须认识到其'柔软度'"。
除构词法的原因之外,人们还因为自身的方言、受教育程度、亚文化等差异因素,对词汇的认识也不同。这些事实都成为制定统一的汉语分词标准的障碍。但是对于计算机系统而言,同一种语言应使用统一的规范来划分词汇,否则,很难想象在多重标准下的词汇系统能够计算出相同的语义结果。
随着 NLP的大规模应用,计算语言学界逐渐统一了汉语词汇的标准。
《信息处理用现代汉语分词规范》关于汉语词的定义给出了如下说明:汉语信息处理使用的、具有确定的语义或语法功能的基本单位。
2. 基本原理
中文分词的实现依赖于三大类方法:
(1)基于规则(词典)的分词方法
- 核心思想:通过预定义的词典匹配文本中的词条,优先匹配最长词。
- 典型算法 :
- 正向最大匹配(FMM):从左到右逐字扫描,优先匹配最长词(如"北京大学"优先于"北京")。
- 逆向最大匹配(BMM):从右到左扫描,适用于处理后缀歧义(如"为人民办公益"可能误分为"为人/民办/公益")。
- 双向最大匹配:结合FMM和BMM,若结果一致则采纳,否则按最小词数或上下文调整。
- 特点:速度快、实现简单,但依赖词典质量,无法处理未登录词和新词。
(2)基于统计的分词方法
- 核心思想:利用大规模语料训练语言模型,通过概率选择最优分词路径。
- 典型模型 :
- N-gram语言模型:计算词序列联合概率,例如"南京市长江大桥"的切分路径通过Bigram或Trigram概率比较。
- 隐马尔可夫模型(HMM):将分词转化为序列标注问题(BEMS:词首/中/尾/单字),如"北京/大学"标注为"B-E B-E"。
- 条件随机场(CRF):相比HMM,考虑全局特征,标注更精准。
- 特点:能处理未登录词和歧义,但需大量标注数据。
(3)基于深度学习的分词方法
- 核心思想:通过神经网络自动学习上下文特征,端到端输出分词结果。
- 典型模型 :
- BiLSTM-CRF:双向LSTM捕捉上下文,CRF优化标签序列。
- Transformer:自注意力机制处理长距离依赖,如《Multi-Criteria Chinese Word Segmentation with Transformer》。
- 预训练模型(如BERT):直接以字符为单位建模,无需显式分词(如"陈敬雷分布式机器学习实战"整体处理)。
- 特点:准确率高,但依赖算力和数据量,模型复杂度高。
实现工具与案例
-
主流工具
- jieba :基于HMM和前缀词典,支持精确模式、全模式和搜索引擎模式。
- 原理:构建前缀词典生成DAG(有向无环图),动态规划选择最大概率路径。
- 示例:"研究生物"可能切分为"研究生/物"(HMM纠正为"研究/生物")。
- HanLP:集成词典与统计模型,支持多任务(如词性标注、NER)。
- THULAC:清华大学开源工具,结合CRF和深度学习。
- jieba :基于HMM和前缀词典,支持精确模式、全模式和搜索引擎模式。
-
代码实现(以jieba为例)
pythonimport jieba # 精确模式 seg_list = jieba.cut("南京市长江大桥", cut_all=False) print("/".join(seg_list)) # 南京/市/长江大桥 # 搜索引擎模式 seg_search = jieba.cut_for_search("陈敬雷分布式机器学习实战") print("/".join(seg_search)) # 陈敬雷/分布式/机器/学习/实战/分布式机器学习/机器学习
3. 发展趋势:多数场景无需显式分词
- 预训练模型的突破 :
BERT、GPT等模型直接以字符或子词(如WordPiece)为输入,通过上下文隐式学习词边界和语义组合。例如"机器学习"无需提前切分,模型能自动关联"机"与"器"、"学"与"习"形成整体语义。 - 实验证据 :
ACL 2019论文在语言模型、机器翻译等任务中验证,字符级模型效果优于词级模型 。原因包括:- 数据稀疏性:词级模型面临低频词和OOV问题(如CTB数据集中约40%的词出现≤4次)。
- 噪声传递:分词工具误差(如"南京市长江大桥"误切为"南京/市长/江大桥")会损害模型性能。
无需分词的典型场景
场景 | 原因 |
---|---|
预训练语言模型 | 直接处理字符或子词,通过自注意力机制学习长距离依赖和词组合规律。 |
文本分类/情感分析 | 字符级CNN或Transformer能捕捉局部语义,如"好评"和"差评"无需依赖词边界。 |
机器翻译 | 字符级输入减少OOV问题,如"Transformer"作为未登录词可通过子词拆分处理。 |
仍需分词的特定场景
场景 | 原因 |
---|---|
依赖词结构的任务 | 如词性标注、句法分析,传统方法需显式分词定义词单位(但部分预训练模型已内化此类能力)。 |
信息检索(IR) | 若查询与文档使用相同分词规则,可提升召回率(如"机器学习"切分为"机器/学习"匹配更多结果)。 |
小数据场景 | 数据量不足时,分词可提供词级特征辅助模型(如"苹果公司"作为整体提升实体识别准确率)。 |
深度学习模型并非完全不需要分词 ,但显式分词的场景已大幅减少。
未来随着模型对细粒度语义的理解加深,分词的"中间层"角色将进一步弱化,但作为医疗、法律等专业领域知识载体仍具实用价值。