中文文本在书写时词与词之间没有空格,要让计算机理解一句话的含义,第一步就是把它切成一个个有意义的词语,这个过程就叫分词。它是中文信息处理的入口环节,分词质量直接影响搜索、翻译、客服机器人等上层应用的最终效果。
目前主流的分词方案可以归为三类路线,各自有擅长的场景和局限。
这种方法先准备一个庞大的词库,然后用扫描的方式把待处理文本和词库里的词逐一比对,常见策略包括正向最大匹配、逆向最大匹配和双向匹配。它的优点在于实现成本低、处理速度快,适合对速度要求高的实时场景。不过,如果文本里出现词典之外的新词,或者存在多种切分可能,它就容易出错。
这一类方法不依赖固定的词表,而是从大规模标注语料中学习相邻汉字共现的概率规律。隐马尔可夫模型和条件随机场是经典代表,它们会根据上下文语境来推算最可能的分词边界,对歧义词的处理能力明显强于纯词典法。
随着算力提升,基于循环神经网络或Transformer结构的分词模型逐渐成为主流。这类模型能自动捕捉文本深层的语义特征,在复杂句式、口语化表达等场景下表现更稳定,但通常需要较多训练数据和计算资源。
分词本身不是目的,它是许多高级应用的起点。在搜索引擎里,用户输入查询词后,系统要对查询和候选文档分别分词,才能建立准确的匹配关系。在舆情监控中,分词是提取公司名、人名、产品名等关键实体的前提,切分错误会直接导致预警信息失真。电商领域的评论分析也需要依靠分词结果来统计用户对某个属性的具体评价。如果分词阶段就产生偏差,后续所有步骤都会跟着跑偏。
分词面临的两大典型难题是歧义消解和未登录词识别。
歧义的典型例子如“南京市长江大桥”,既可能被切成“南京市/长江大桥”,也可能被切成“南京/市长/江大桥”,只有结合上下文才能确定正确含义。处理这类问题的常用做法是引入统计模型,让算法根据相邻词语的组合概率来选择最合理的切分点。
未登录词指那些词典里没有的新词、罕见人名或垂直领域的专业术语。应对方法包括:利用模型内部的字符级信息来猜测潜在词边界,结合词性标注和命名实体识别来辅助判断,以及建立动态更新机制,定期将业务中高频出现的新词补充进词典。
评估分词效果最常参考的是准确率、召回率和F1值三个指标。准确率看的是系统输出的词里有多少切对了,召回率看的是标准答案里的正确词有多少被找出来,F1值则是两者的综合平衡。实际操作中,还应当关注分词工具的响应速度和内存占用,尤其是在高并发服务场景下,速度过慢会拖垮整体业务。
此外,可以在公开的中文分词评测集合上对比不同工具的横向表现,也可以拿自己业务里收集的真实文本做小批量测试,这样得出的结论更贴近实际使用情况。
通用场景下分词准确率已经很高,但在专业领域文本、方言直译、网络新梗以及含反讽意味的表述中,依然会产生错误。只能说目前成熟可用,谈不上完全解决。
这取决于任务的输入形态。像BERT这类预训练模型多采用子词切分或字符输入,目的就是规避分词错误带来的连锁影响。但在文本匹配、属性抽取等任务中,把词级别特征作为补充信号,通常能带来一定收益。
jieba在Python社区使用广泛,支持精确与搜索两种模式;HanLP功能更全,附带词性标注与依存分析;百度的LAC在分词同时输出词性。选型时建议综合看开发语言的适配性、自定义词典是否方便、更新活跃度以及社区反馈。
分词是中文自然语言处理中最基础也最关键的环节之一。在项目落地时,应当先梳理自己的文本类型和性能要求:处理速度优先就选词典方案,处理复杂语境就偏向统计或深度学习模型。同时把业务相关的新词及时纳入词典维护流程。只有稳住了分词这一环,上层应用的效果才有保障。