搜索系统 基础教程

搜索 query 分析

搜索系统 索引教程

搜索系统 高级教程

搜索系统 排序层

搜索系统 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/search-analyzer.html

搜索系统 中文分词技术详解


搜索中的分词器是 query 分析理解中必不可少的基本工具,市面上又非常多的开源分词工具。分词算法从最简单的最大正向、最大反向分词算法,到复杂的隐马尔科夫、CRF 模型等机器学习训练出来的模型。

中文分词器

下面整理了相关的中文分词器,从开源项目到收费项目,从单一分词工具到包含词性标注、NER(命名实体识别)、文本分类等集合工具。

最全的中文分词组件整理
分词组件/服务 开源/商业 支持语言 分词 词性标注 命名实体识别 费用 说明
IKAnalyzer 开源 Java 支持      
结巴分词 开源 Java、Python、C++、GO、R 支持 支持    
THULAC 开源 Java、Python、C++ 支持 支持   清华大学开源项目
PKUSeg 开源 Python 支持 支持 支持 北京大学开源项目
HanLP 开源 Java、Python、C++ 支持 支持 支持  
Stanford CoreNLP 开源 Java、Python 支持 支持 支持 斯坦福大学开源项目
SnowNLP 开源 Python 支持 支持    
FoolNLTK 开源 Java、Python 支持 支持 支持  
LTP 开源 Java、Python、C++ 支持 支持 支持 哈工大开源项目
FastNLP/FudanNLP 开源 Python 支持 支持 支持 复旦大学开源项目
NLPIR 开源 Java、Python 支持 支持 支持 张化平博士开源项目
BosonNLP 商业 REST 支持 支持 支持 免费  
百度 NLP 商业 REST 支持 支持 支持 隶属于百度 AI 开放平台
阿里云 NLP 商业 REST 支持 支持 支持 按次数 阿里云 NLP 开放平台
腾讯文智 商业 REST 支持 支持 支持 按次数/按月 腾讯的 NLP 开放平台

IKAnalyzer

IKAnalyzer 一个最常用的中文分词器,它是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始,最初,它是以开源项目 Luence 为应用主体的,结合词典分词文法分析算法的中文分词组件。从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化。

IK 提供两种分词模式,智能模式细粒度模式(智能:对应 es 的 IK 插件的 ik_smart,细粒度:对应 es 的 IK 插件的 ik_max_word)。

jieba(结巴)

结巴分词是国内程序员最初用 python 语言开发的中文分词模块,后续推出了 java、C++、Rust、Node.js、Erlang、R、iOS、PHP、.NET(C#)、GO、Android 等版本。

git 开源地址:https://github.com/fxsjy/jieba

jieba 主要支持 4 种分词模式:

  1. 精确模式:试图将句子最精确地切开,适合文本分析;
  2. 全切模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  3. 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词;
  4. paddle 模式:利用 PaddlePaddle 深度学习框架,训练序列标注(双向 GRU)网络模型实现分词,同时支持词性标注。

jieba 还支持繁体分词、自定义词典。

HanLP

HanLP 最初是一个上海外国大学日语专业的何晗同学在大二时候开发的中文分词器,用自研的基于双数组字典树的 AC 自动机,这大大提升了 HanLP 的运行速度。第一版本的 HanLP 功能比较简单,后续经过几年的迭代,其功能越来越完善,性能更高效。HanLP 能提供词法分析、句法分析、文本分类、情感分析等功能。此外,HanLP 还具有精度高、速度快、内存省的特点。从 v1.3 版本起,HanLP 由大快搜索主导开发,并完全开源(git 地址:https://github.com/hankcs/HanLP)。

HanLP 提供下列功能
任务 算法 原理 特点
分词 最短路径分词 HMM-Bigram 速度与精度最佳平衡;一百兆内存
N-最短路径分词
感知机分词 字构词 侧重精度,全世界最大语料库,可识别新词;适合 NLP 任务
CRF 分词
极速词典分词 词典分词 侧重速度,每秒数千万字符;省内存
词性标注 HMM 词性标注 HMM 速度快
感知机词性标注 感知机 精度高
CRF 词性标注 CRF
命名实体识别 中国人名识别 HMM-Viterbi 角色标注 速度快
音译人名识别 层叠隐马
日本人名识别
地名识别 HMM-Viterbi 角色标注
实体机构名识别 层叠隐马
感知机命名实体识别 感知机 精度高
CRF 命名实体识别 CRF

关于 HanLP 更多的详解,参见分词器 HanLP 最全详解

Elasticsearch(ES)是一款流行的开源搜索引擎和分布式文档存储系统,支持多种中文分词器来处理中文文本的分词需求。SmartCNA ...
本章列出了搜索系统开发中常涉及的内容及常见问题的解决方案。 ...
搜索系统的排序层又称为精排层,主要是基于离线训练好的模型,结合模型所用的特征给每个 item 进行打分,然后根据分数进行降序排序。搜索排序模 ...
在搜索系统的排序层的最后一环往往是业务干预逻辑,主要是根据业务需求针对排序结果进行人工调整,其中主要分为提权类、降权类、固定类以及其他。 ...