自然语言 & 查询 Recall
- 当处理人类自然语言时,有些情况下,尽管搜索和原文不完全匹配,但是希望搜到一些内容;
一些可采取的优化
- 归一化词元:清除变音符号;
- 抽取词根:清除单复数和时态的差异;
- 包含同义词;
- 拼写错误或同音异形词;
多语言混合的挑战
一些具体的多语言场景
- 不同的索引使用不同的语言;
- 同一个索引中,不同的字段使用不同的语言;
- 一个文档的一个字段内混合不同的语言;
混合语言存在的一些挑战
- 词干提取:以色列文档,包含了希伯来语,阿拉伯语,俄语和英文;
- 不正确的文档频率:英文为主的文章中,德文算分高(稀有);
- 需要判断用户搜索时使用的语言,语言识别(Compact Language Detector),例如:根据语言,查询不同的索引;
分词的挑战
英文分词
- You're 分成一个还是多个?
- Half-baked 中间的 - 切开吗?
中文分词标准
- 哈工大标准中,姓和名分开;
- HanLP 是在一起的;
具体情况需定制不同的标准。
歧义
- 组合型歧义
- 交集型歧义
- 真歧义
中文分词方法的演进
词典法
- 一个句子从左到右扫一遍,遇到词典中有的词就标识出来,找到复合词就找最长的;
- 不认识的字串就分割成单字词;
- 词典法 | 理论化 | 最小次数的分词理论
- 一句话应该分成数量最少的词串;
- 遇到二义性的分割,无能为力,例如:发展中国家;
- 用各种文化规则来解决二义性都不成功;
统计语言模型
- 解决了二义性,将中文分词的错误率降低了一个数量级;
基于统计法的机器学习算法
- 常用的算法是 HMM,CRF,SVM,深度学习等算法;
- 基于双向 LSTM + CRF 实现的分词器,其准确率可达 97.5%;
中文分词器现状
- 中文分词器以统计语言为基础,经过几十年的发展,今天基本已经可以看作是一个已经解决的问题;
- 不同分词器的好坏,主要的差别在于数据的使用和工程使用的精度;
- 常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性;
ElasticSearch 中通过插件可安装的分词器
新疆上不了 Github,能上的时候,通过把插件的 URL 加到插件安装命令后就行了;
- HanLP - 支持远程词典配置:
- IK - 支持词典热更新;
- Pinyin - 不需要打汉字,首字母输进去就可以搜索到了;