一、搜索引擎与分词概述

1.1 搜索引擎工作原理

搜索引擎这东西,说白了就是帮你在海量信息里快速找到想要的内容。我刚开始接触搜索引擎时,觉得它像个黑盒子——你输入关键词,它啪地给你一堆结果。后来自己动手写过一个小型搜索引擎,才明白背后的逻辑其实很清晰。

搜索引擎的核心流程,我习惯把它拆成三个阶段:

  1. 爬取——蜘蛛程序满互联网跑,把网页抓回来
  2. 索引——把抓到的内容整理成倒排索引,方便快速查找
  3. 检索与排序——用户输入查询,系统从索引里匹配,再按相关性排序

你想想看,如果索引阶段不做分词,用户搜「清华大学」时,系统只能匹配到完整的「清华大学」这个词。但用户可能想搜的是「清华」或者「大学」相关的信息,这就尴尬了。

核心观点:分词是搜索引擎从「字符串匹配」走向「语义理解」的第一步。没有分词,搜索引擎就是个高级的Ctrl+F。

1.2 分词的定义与重要性

分词,就是把连续的文本切分成有意义的词语序列。比如「我爱北京天安门」→「我 / 爱 / 北京 / 天安门」。

为什么分词这么重要?我在项目中遇到过这样一个坑:用户搜「南京市长江大桥」,如果分词器切成了「南京 / 市长 / 江大桥」,那搜索结果就全跑偏了。嗯,这种歧义问题在中文里特别常见。

分词对搜索引擎的影响,我总结成三点:

影响维度 说明 实际案例
召回率 能否找到更多相关结果 搜「电脑」能否召回「计算机」相关页面
准确率 结果是否精准匹配用户意图 搜「苹果」是水果还是手机品牌
查询效率 索引大小和检索速度 粗粒度分词索引小,但可能漏掉细粒度匹配

我的经验:实际项目中,我一般会同时保留粗粒度和细粒度两套分词结果。粗粒度用于精确匹配,细粒度用于扩展召回。这样既能保证准确率,又不牺牲召回率。

1.3 中文分词的挑战

中文分词比英文难得多。英文单词天然用空格隔开,中文呢?字与字之间没有分隔符。我曾经跟团队新人开玩笑说:「中文分词就是让计算机学会猜词。」

具体挑战有哪些?我列几个典型的:

  • 歧义切分——「乒乓球拍卖完了」到底是「乒乓球 / 拍卖 / 完了」还是「乒乓球拍 / 卖完了」?
  • 未登录词——新出现的词、人名、地名、专业术语,词典里没有。比如「李佳琦」这种网红名字,早期分词器根本认不出来。
  • 粒度选择——「北京大学」是作为一个整体,还是拆成「北京」和「大学」?这取决于应用场景。
  • 领域适应——通用分词器在医疗、法律等专业领域表现很差。我做过一个医疗搜索项目,「阿莫西林胶囊」被切成了「阿莫 / 西林 / 胶囊」,这显然不对。

避坑指南:我曾经在一个电商搜索项目里,直接用通用分词器处理商品标题。结果「iPhone14ProMax」被切得乱七八糟,用户搜「14Pro」根本匹配不到。后来我专门给商品标题定制了分词规则,才解决问题。

为什么会这样?说白了,中文分词的本质是一个「序列标注」问题。每个字都有它在这个词里的位置——词首、词中、词尾、单字成词。模型要学的是这个标注规律。

我记得2018年做的一个项目,用BiLSTM+CRF做分词,效果比传统词典方法好了不少。但训练数据需要人工标注,成本很高。嗯,这里要注意:标注数据的质量直接决定模型的上限。

最后说一句:中文分词没有银弹。不同场景需要不同的策略。搜索引擎里,我建议采用「最大匹配+统计模型」的混合方案,既能保证速度,又能处理未登录词。具体怎么实现,后面的章节会详细讲。