中文分词概述:从定义到实战
大家好,我是你们的老朋友。今天咱们聊聊中文分词。
说实话,做 NLP 这么多年,我见过太多新手一上来就怼模型,结果连分词这关都没过好。嗯,这其实是个大坑。今天我就把这块掰开了讲清楚。
一、中文分词的定义
中文分词,说白了就是——把连续的中文字符串,切分成有意义的词语序列。
举个例子:
输入:"我爱自然语言处理"
输出:["我", "爱", "自然语言处理"]
你看,机器不懂什么叫「自然语言处理」,它只看到一堆字。分词就是帮它划出边界。
英文天然有空格分隔,中文没有。这就是为什么分词是中文 NLP 的第一步,也是绕不开的一步。
核心定义:中文分词(Chinese Word Segmentation, CWS)是将汉字序列切分成词序列的过程。它是中文信息处理的基础任务。
二、难点与挑战
你以为分词很简单?我刚开始做项目时也这么想。结果被现实狠狠教育了一顿。
难点主要集中在这几个方面:
1. 歧义切分
同一个句子,不同切法意思完全不同。比如:
"乒乓球拍卖完了"
→ 乒乓球 / 拍卖 / 完了
→ 乒乓球拍 / 卖完了
我在项目中遇到过这种情况。用户搜索「乒乓球拍」,结果系统切成了「乒乓球」和「拍卖」,推荐了一堆拍卖信息。你说尴尬不尴尬?
2. 未登录词
词典里没有的词,比如新词、人名、地名、专业术语。你想想看,如果词典里没有「深度学习」,那「深度学习」就会被切成「深」「度」「学」「习」——这谁受得了?
3. 切分粒度
同一个词,不同场景需要不同粒度。比如:
- 粗粒度:「北京大学」作为一个词
- 细粒度:「北京」和「大学」分开
我建议根据任务需求选择粒度。做搜索推荐,粗粒度好;做语法分析,细粒度更合适。
4. 领域适应性
通用分词器在金融、医疗、法律等专业领域,表现往往很差。我曾经把一个医疗文本「心肌梗死」切成了「心肌」和「梗死」——嗯,虽然没错,但专业领域更希望保留「心肌梗死」作为一个整体。
避坑指南:我曾经在电商项目中直接用了通用分词器,结果「连衣裙」被切成「连」「衣裙」。用户搜「连衣裙」匹配不到商品,转化率直接掉了 15%。后来我专门做了电商领域词典,才把问题解决。
三、分词在 NLP 中的地位
分词到底有多重要?我直接说结论:
分词是中文 NLP 的基石。没有好的分词,后面的任务全是空中楼阁。
具体体现在:
| 下游任务 | 分词的影响 |
|---|---|
| 文本分类 | 分词错误会导致特征提取偏差,分类准确率下降 5-10% |
| 信息检索 | 切分粒度影响召回率和准确率,尤其是长尾查询 |
| 机器翻译 | 分词边界直接影响翻译单元的对齐质量 |
| 情感分析 | 否定词和情感词的切分错误会直接翻转情感极性 |
| 命名实体识别 | 分词是 NER 的前置步骤,错误会传播 |
你想想看,如果分词阶段就把「不喜欢」切成了「不」和「喜欢」,情感分析模型就会误判为正面情感。这种错误是致命的。
我的经验:在实际项目中,我建议把分词当作一个独立模块来维护。不要指望一个通用分词器解决所有问题。我习惯的做法是:通用分词 + 领域词典 + 规则后处理,三管齐下。
四、主流分词方法概览
这里简单提一下主流方法,后面章节会详细展开:
- 基于词典的方法:最大匹配法、逆向最大匹配、双向匹配。简单快速,但处理不了未登录词。
- 基于统计的方法:HMM、CRF。能处理部分歧义,但需要大量标注数据。
- 基于深度学习的方法:BiLSTM+CRF、BERT 等。效果好,但计算成本高。
- 混合方法:词典 + 统计 + 深度学习,取长补短。我个人最推荐这种方式。
我记得刚入行时,团队还在用纯词典匹配。后来慢慢过渡到 CRF,再到现在的主流预训练模型。每一步都有血泪教训,后面我会一一分享。
五、总结
中文分词,看似简单,实则暗藏玄机。它不仅是技术问题,更是工程问题。
我给大家三个建议:
- 不要迷信任何一个分词器。一定要在你的数据上做评测。
- 领域词典是必需品。花时间整理领域词表,回报率极高。
- 分词结果要可解释。出了问题,要能快速定位是哪个词切错了。
好了,这一章就到这里。下一章我会详细讲基于词典的分词方法,包括代码实现和避坑指南。咱们下期见。
公众号:蓝海资料掘金营,微信deep3321