中文句子里的字是连成一串的,词与词之间没有空格,所以分词就成了文本分析绕不开的第一步。搜索、聊天机器人、舆情监控这些场景,如果词没切准,后面的关键词提取、意图判断都会跟着出错。市面上的分词工具很多,但背后思路大致分为三类,了解它们的差异才能选得准。
规则分词是把句子按一定方向切分出候选片段,然后去和已有的词表比对,能对上的就当作一个词。这种办法实现起来不复杂,运行速度也快,而且不需要准备海量标注数据,对轻量级项目很友好。最大的问题在于对词库的依赖太强:遇到新造的词、网络用语或者冷门的专业名词,如果词表里没有,就很容易切错。词库的规模和更新频率,直接卡住了这个方法的准确率上限。
大家常遇到的扫描模式主要有这几种,各有各的脾气:
如果做的是垂直行业,像法律文书或医疗报告,拿通用词库直接跑效果通常不太行。比较靠谱的做法是维护一份领域词表,把品牌名、型号、行业黑话定期加进去。别小看这一步,不持续更新的话,分词效果会随着新词出现越变越差。
容易踩的坑:觉得通用词库能解决一切问题。现实中效果稳定的规则分词,背后都有一份长期维护的词表在撑着。
统计分词不再死磕词表,而是换了个脑回路:每个字按它身边的上下文来判断自己在词里的位置,比如词开头、词中间还是单独成词。这样就能从语料里自动学到字和字之间的组合规律,哪怕是没进过词典的新词,只要训练数据里有相似的搭配,也有机会切对。
这类方法里有两个算法值得重点认识:
用统计模型要留个心眼:训练用的语料如果标注本身有错、标准不统一,学出来的边界就不会正。另外语料风格必须贴合实战场景,拿新闻语料训出来的模型去切社交平台的口语短句,效果通常肉眼可见地变差。
深度学习把分词也当成序列标注来做,只是不再手动设计特征,模型会直接从原始文本里提炼信息。早期的词向量(比如 Word2Vec)把每个字转成稠密向量,但对一字多义基本没辙。后来出现的上下文表示模型,比如 BiLSTM 搭配 CRF 解码,或者基于 Transformer 自注意力机制的预训练语言模型,能结合整句话来理解每个字在当下的意思,像“苹果”是水果还是科技公司,这种歧义也能根据语境切对。
这类方案的性能和训练数据量直接挂钩,数据越足、算力越强,效果天花板越高。像 BERT、ERNIE 这类预训练模型,可以通过微调适配分词任务,在通用语料上表现亮眼。但代价是推理速度慢、显存占用高。实际落地时,可以考虑用轻量化模型做蒸馏,或者给 GPU 推理做批处理优化,否则在实时性要求高的线上服务里会力不从心。
深度学习方法对数据质量同样挑剔。如果数据标注噪声大,模型学到的规律就会带偏。运行环境比较受限时,建议先用规则或统计方案顶住,等资源和场景成熟了再切换深度学习方案。
选择分词方案,本质上是在速度、效果、维护成本三者之间找平衡,可以先按这几个维度对照一下:
多数线上实时接口,用双向最大匹配加领域词库就能满足基本需求;要处理大规模文本挖掘,统计模型在准确率和成本之间更均衡;只有对准确率有极高要求且算力充分时,才值得上深度学习方案。一个可行的组合是:规则做兜底候选,统计或深度模型做最终决策,同时配合热更新词表来兼顾准确率和灵活性。
会的。搜索的召回和排序都在分词之后进行,词没切准,关键词就匹配不上,用户搜不到内容,下拉联想也会跟着错。索引建立之前做好分词质检,能大幅减少后续的返工。
通用场景可以直接用,效果在同类型工具里也算稳定。但要想用在自己领域,强烈建议先在你的真实语料上跑一批样例看看错误类型,再针对性补充词典或做二次训练,直接裸跑容易在专业词汇上翻车。
可以先从规则分词跑一遍,把结果人工修正后当作弱标注数据,再用来训统计模型,这样能省下大量从头标注的时间。对拿不准的样本,再安排人工复核,逐步提高标注质量,兼顾成本和效果。
规则分词适合快速上线和轻量场景,统计分词是性价比不错的选择,深度学习则在效果上更有冲劲,但代价是资源和时间投入都更大。动手之前,建议先拿自己的真实文本来回测三类方案,记录准确率、速度和维护成本,再做决定。如果还在起步阶段,用双向最大匹配加持续补充领域词库是最稳妥的起步动作,等需求明确了再考虑向更重的方法迁移。