ElasticSearch | 多语言 | 中文分词器 | 检索

自然语言 & 查询 Recall

  • 当处理人类自然语言时,有些情况下,尽管搜索和原文不完全匹配,但是希望搜到一些内容;
一些可采取的优化
  • 归一化词元:清除变音符号;
  • 抽取词根:清除单复数和时态的差异;
  • 包含同义词;
  • 拼写错误或同音异形词;

多语言混合的挑战

一些具体的多语言场景
  • 不同的索引使用不同的语言;
  • 同一个索引中,不同的字段使用不同的语言;
  • 一个文档的一个字段内混合不同的语言;
混合语言存在的一些挑战
  • 词干提取:以色列文档,包含了希伯来语,阿拉伯语,俄语和英文;
  • 不正确的文档频率:英文为主的文章中,德文算分高(稀有);
  • 需要判断用户搜索时使用的语言,语言识别(Compact Language Detector),例如:根据语言,查询不同的索引;

分词的挑战

英文分词
  • You're 分成一个还是多个?
  • Half-baked 中间的 - 切开吗?
中文分词标准
  • 哈工大标准中,姓和名分开;
  • HanLP 是在一起的;

具体情况需定制不同的标准。

歧义
  • 组合型歧义
  • 交集型歧义
  • 真歧义

中文分词方法的演进

词典法
  • 一个句子从左到右扫一遍,遇到词典中有的词就标识出来,找到复合词就找最长的;
  • 不认识的字串就分割成单字词;
  • 词典法 | 理论化 | 最小次数的分词理论
    • 一句话应该分成数量最少的词串;
    • 遇到二义性的分割,无能为力,例如:发展中国家;
    • 用各种文化规则来解决二义性都不成功;
统计语言模型
  • 解决了二义性,将中文分词的错误率降低了一个数量级;
基于统计法的机器学习算法
  • 常用的算法是 HMM,CRF,SVM,深度学习等算法;
  • 基于双向 LSTM + CRF 实现的分词器,其准确率可达 97.5%;

中文分词器现状

  • 中文分词器以统计语言为基础,经过几十年的发展,今天基本已经可以看作是一个已经解决的问题;
  • 不同分词器的好坏,主要的差别在于数据的使用和工程使用的精度;
  • 常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性;

ElasticSearch 中通过插件可安装的分词器

新疆上不了 Github,能上的时候,通过把插件的 URL 加到插件安装命令后就行了;

  • HanLP - 支持远程词典配置:
  • IK - 支持词典热更新;
  • Pinyin - 不需要打汉字,首字母输进去就可以搜索到了;

IK 分词器最佳实践

  • 索引进 ElasticSearch 的时候用 ik_max_word;
  • 搜索的时候用 ik_smart;

你可能感兴趣的:(ElasticSearch | 多语言 | 中文分词器 | 检索)