引子:为什么分词如此重要?
想象一个孩子学习语言的过程:从牙牙学语到清晰表达,第一步总是从“字”到“词”的跨越。中文作为世界上使用人数最多的语言,其分词技术如同人工智能的“语言启蒙课”——没有精准的分词,机器便无法理解“北京”是地名还是“北+京”的组合,也无法区分“结婚”与“和尚”的边界。
今天我们来梳理一下中文分词(Chinese Word Segmentation,CWS)。
分词
简介
与大部分印欧语系的语言不同,中文在词与词之间没有任何空格之类的显示标志指示词的边界,因此,对文本以词汇粒度进行划分,中文比英文要复杂得多困难很多。
中文文本中词与词之间没有明确的分割标记,如印欧语系中词与词的空格,而是以连续字符串形式呈现。所以任何中文自然语言处理任务都必须解决中文序列切分的问题——中文分词。中文分词是通过某种方法或方法的组合,将输入的中文文本基于某种需求并按照特定的规范划分为“词”的过程
意义
引入分词的最直接原因是,能够解决字的一字多义的问题。从词出发更准确反映语义信息。
分词可以理解为一种人工特征工程,引入更高层次的特征,让模型直接从word-level学起,降低模型的学习难度。从信息论的角度看,分词有利于降低熵,由于信息量减少了,于是利于降低模型的学习成本。这给我们一个模型选择的思路,当模型不太复杂的时候,分词辅助。
问题
中文分词研究的问题包括:分词标准、切分歧义和未登录词。
中文分词首先要面对的问题是需要有清晰的分词标准,然而中文博大精深,分词标准一直以来都无法被统一。目前,只能对具体问题设定特定标准。在特定标准下,实际分词的过程中主要存在切分歧义和未登录词识别两大问题。
分词标准
中文词汇本身具有开放性、动态性,与研究问题和研究视角相关,不同人之间也存在认同差异。
切分歧义
切分歧义指在切分中文字符序列时存在歧义,有两种常见的分类。
第一种分类广泛在中文分词文献中使用。
分为交集型切分歧义(Overlapping Ambiguity Segmentation,OAS)
交集型切分歧义也被称为交叉歧义,例如:“按时下的进展,很难完成任务!”中“按时”和“时下”都可以构成词。
多义组合型切分歧义(Combination Ambiguity Segmentation,CAS)
多义组合型切分歧义也被称为覆盖歧义,例如:“李刚是很有才能的人”中“才”、“能”本身都可以单独构词,也可以合并为“才能”构词。
另一种是从歧义的真伪角度分类
- 真歧义
- 伪歧义。
真歧义是中文文本本身的语法和语义都没有问题,即便人工进行切分也会产生歧义。例如“乒乓球拍卖完了”,这句话本身可以有两种不同的理解,而且都是没有问题的,即“乒乓/球拍/卖完/了”和“乒乓球/拍卖/完/了”。反之,被称为伪歧义。解决真歧义的问题非常复杂,需要依赖具体的情境及更多的上下文信息。
未登录词识别
模型训练时没有学习过或词表中没有的词。对于使用词表的分词算法,未登录词(OOV,Out-Of-Vocabulary)往往是致命的。
未登录词识别包括新涌现的通用词、专业术语和专有名词,如中国人名、外国译名、地名、机构名(泛指机关、团体和其他企事业单位)等。其中,人名、地名和机构名具有多变性,处理难度较大。
方法
机械分词
机械分词:需要先建立词典,再通过匹配的方法进行分词。
主要研究问题包括:
- 如何构建一个完备的词典
- 随着词典规模的不断增加,如何优化词典的存储,更易于查找以提升检索效率
- 匹配算法如何设计
- 匹配中出现的歧义切分如何消解
常见的算法有:
- 正向最大匹配法(forward maximum matching method,FMM)
- 逆向最大匹配法(backward maximum matching method,BMM)
- 双向最大匹配法
- 全切分法
- N-最短路径方法
这些算法本质上是查词典,为避免无效的扫描,提高分词速度,可以添加约束,如词的最大长度,遇到停用词跳出循环等等。这些方法简单、快速,并且只需要一个足够大的词典即可。
匹配算法中,存在较多切分歧义问题。切分歧义研究包括歧义发现和歧义消解,歧义消解主要采用规则和统计的方法,如基于N-gram语言模型的分词方法
由于算法简单,机械分词具有分词速度快的天然优势。然而,分词准确率与词典的好坏正相关,在未登录词较多的情况下,算法的准确率无法保证。
机器学习
1990年,Sproat等[30]首次基于统计学习方法实现中文分词。根据处理的粒度,分为基于词和基于字两类标注。在2003年、2005年和2006年三次Bakeoff中文分词测评中,基于字标注的中文分词方法有效提升了分词准确率。因此,基于字标注的中文分词方法迅速成为主流。
该方法是将中文分词转化为字序列标注的问题。汉字的边界位置标注方法包括2位标记法、4位标记等。被广泛使用的是4位标记法,B表示开始位置、M表示中间位置、E表示结束位置及S表示单字构词。机器学习算法需要人工设计特征模板,指定窗口的大小。由于算法的复杂度以及对分词结果准确度要求等原因,窗口大小一般不超过5。
常见的算法有:
- 最大熵模型(Maximum Entropy,ME)
- 隐马尔可夫模型(Hidden Markov Model,HMM)
- 最大熵马尔可夫模型(Maximum Entropy Markov Model,MEMM)
- 条件随机场(CRF)
隐马尔可夫模型存在输出独立性假设的问题,在特征选择时受到限制,故无法选择复杂特征。最大熵马尔可夫模型(Maximum Entropy Markov Model,MEMM)集成了最大熵模型和马尔可夫模型的优点,将上下文信息引入到模型中,可以选择任意特征,模型学习和识别的准确率都有所提升。但是模型对每个节点进行独立归一化,存在偏置问题。条件随机场(CRF)结合了多方面优势,对所有特征进行全局归一化,避免了偏置问题,成为传统机器学习中应用最多、最具代表性的模型算法之一。条件随机场能够获得更高的分词准确率,但模型复杂导致分词效率略低。
传统的无监督分词算法包括判别式模型和生成式模型两大类。基于判别式模型的文献主要在互信息、分支信息熵、长度增益等方法上进行改进研究。生成式模型主要基于HMM、HDP等进行改进研究。
对于机器学习算法、模型,特征选择好坏仍然是决定最后结果的关键性因素。
深度学习
2011年,Collobert等首次将深度学习算法引入自然语言任务中。该方法可以通过最终的分词标注训练集,有效学习原始特征和上下文表示。随后CNN、GRN、LSTM、BiLSTM等深度学习模型都被引入到中文分词任务中,并结合中文分词进行多种改进。相对于机器学习而言,深度学习算法无需人工进行特征选择,还可以有效地保留长距离句子信息,是对机器学习算法的有效补充。
常见的算法有:
- LSTM
- BiLSTM
- CNN
- GRN
在基础深度学习模型的基础上,有效结合预训练和后处理方式已成为深度学习的一种趋势。Ma等发现仅使用一个简单的Bi-LSTM模型,基于深度学习的预训练、Dropout及超参调优,可以将分词效果提升到领先水平。
实验结果表明,预训练对提升分词准确率有效,平均可以提升0.78%。错误分析发现2/3的错误来自未登录词。更好的预训练结果和更有效的特征表示都是深度学习分词的重要研究方向。预训练既可以根据领域需要和任务特点进行预训练,也可以直接使用现有的预训练结果进行微调。
中文分词预训练的基本单位是词(字)的语义、偏旁、拼音和输入法等。语义表示的预训练模型包括与上下文无关的静态词向量训练模型Word2Vec、Glove以及与上下文相关的动态词向量训练模型ELMo、BERT和XLNet等。Wang等在语义表示的基础上,增加了字的拼音、五笔特征,使用Bi-LSTMs-CRF模型训练,在SIGHAN2005和CTB6数据集上测试,结果表明多特征融合确实能提升分词准确率。位置信息和外部知识库也被研究人员尝试使用,基于知识库减少训练集的未登录词问题,研究者尝试将词典与深度学习相结合。
集成
在词粒度和字粒度上,集成机械分词、机器学习和深度学习算法,更好发挥不同分词算法各自的优势是多算法集成的主要探索方向。
常见的算法有:
- Bi-LSTM-CRF:实现序列化标注
- Bi-LSTM-CNN-CRF:利用CNN得到字的语义表示,再基于Bi-LSTM-CRF模型实现序列化标注。
中文分词常用的工具
- Jieba分词(Python):
- 支持FMM、RMM、BMM三种模式。
- 可加载自定义词典,动态更新词汇表。
- HanLP(Java):
- 支持多种分词模式(精确、宽松、搜索引擎)。
- 内置未登录词识别模块。
分词与词元化的区别
了解完分词之后,我在写帖子的时候,一时之间对分词和词元之间的区别想了解一下,故在此,增加了与词元的对比。
词元(Token)是将文本数据分割成更小的单位,这些单位可能是单词、字符、或者子词。词元是语言模型,如 GPT(Generative Pre-trained Transformer)等在训练和推理过程中操作的最基本单位。
分词 | 词元 | |
---|---|---|
目标 | 切分语义完整的词语 | 拆分文本为统一处理单元 |
方法 | 规则匹配、统计模型、深度学习 | 规则拆分、子词算法(如BPE) |
应用场景 | 搜索引擎、语义分析 | 大模型输入编码、机器学习特征提取 |
中文挑战 | 歧义消解、未登录词识别 | 字/子词粒度选择、模型泛化能力 |
中文分词 :以语义完整 为目标,服务于需要理解词语含义的任务(如搜索、分类),如搜索引擎的倒排索引构建(如查询“北京旅游”需切分为“北京/旅游”以匹配文档)
语义驱动,其核心目标是识别文本中的实际词语边界,服务于后续的句法分析、语义理解等任务
词元化 :以任务适配 为目标,服务于模型输入标准化(如大模型训练、特征提取),尤其在大语言模型(LLM)中,词元化直接决定模型如何编码文本(如BERT的WordPiece分词器将“北京”拆为[“北”, “京”]或[“北京”],影响向量表示)
任务驱动,其目标是为模型提供统一的输入格式
结语
随着大模型对语义的深层理解,分词或将不再是独立模块,而是融入端到端推理的自然过程——正如人类不再刻意拆解词语,而是直接“感知”语义。
分词技术的终点,或许是“无需分词”。
中文分词作为自然语言处理的基础任务,对自然语言处理有着重要意义。目前我只是从中文分词的发展历程和关键问题出发,在理论上对中文分词进行了简单介绍。中文分词里面的具体算法以及实践,接下来得分几篇文章分开去剖析里面具体的实现过程。
关于我
Resources
- https://manu44.magtech.com.cn/Jwk_infotech_wk3/CN/10.11925/infotech.2096-3467.2019.1059#19
- https://allenwind.github.io/blog/8269/
- https://lujiaying.github.io/posts/2018/01/Chinese-word-segmentation/
- https://zhuanlan.zhihu.com/p/611637656