一、⾃然语言与查询 Recall
当处理⼈类⾃然语⾔时,有些情况,尽管搜索和原⽂不完全匹配,但是希望搜到⼀些内容
Quick brown fox 和 fast brown fox / Jumping fox 和 Jumped foxes
⼀些可采取的优化
- 归一化词元:清除变⾳符号,如 rôle 的时候也会匹配 role
- 抽取词根:清除单复数和时态的差异
- 包含同义词
- 拼写错误:拼写错误,或者同音异形词
二、混合多语言的挑战
一些具体的多语言场景
不同的索引使用不同的语言 / 同一个索引中,不同的字段使用不同的语言 / 一个文档的一个字段内混合不同的语言
混合语言存在的一些挑战
- 词干提取:以色列文档,包含希伯来语,阿拉伯语,俄语,英语
- 不正确的文档频率, 英文为主的文章中,德文算分高(稀有)
- 需要判断用户搜索时使用的语言,语言识别 (Compact Language Detector)
例如,根据浏览器属性,判断语言,查询不同的索引
三、分词的挑战
英文分词: You‘ re 分成一个还是多个? Half-baked
中文分词
- 分词标准:哈⼯大标准中,姓和名分开。 HanLP 是在一起的。具体情况需制定不不
同的标准 - 歧义 (组合型歧义,交集型歧义,真歧义)
中华人⺠共和国 / 美国会通过对台售武法案 / 上海海仁和服装⼚
四、中文分词器现状
中⽂分词器以统计语言模型为基础,经过几⼗年的发展,今天基本已经可以看作是一个
已经解决的问题
不同分词器的好坏,主要的差异在于数据的使用和工程使用的精度
常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性
五、一些中文分词器
HanLP 面向生产环境的自然语言处理工具包
http://hanlp.com
https://github.com/KennFalcon/elasticsearch-analysis-hanlp
./elasticsearch-plugin install https://github.com/KennFalcon/elasticsearch-analysishanlp/releases/download/v7.1.0/elasticsearch-analysis-hanlp-7.1.0.zip
image.png
IK 分词器
https://github.com/medcl/elasticsearch-analysis-ik
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysisik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
支持字典热更新
image.png
PinYin Analysis
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysispinyin/releases/download/v7.1.0/elasticsearch-analysis-pinyin-7.1.0.zip
image.png
测试demo
来到杨过曾经生活过的地方,小龙女动情地说:“我也想过过过儿过过的生活。”
你也想犯范范玮琪犯过的错吗
校长说衣服上除了校徽别别别的
这几天天天天气不好
我背有点驼,麻麻说“你的背得背背背背佳
#stop word
DELETE my_index
PUT /my_index/_doc/1
{ "title": "I'm happy for this fox" }
PUT /my_index/_doc/2
{ "title": "I'm not happy about my fox problem" }
POST my_index/_search
{
"query": {
"match": {
"title": "not happy fox"
}
}
}
#虽然通过使用 english (英语)分析器,使得匹配规则更加宽松,我们也因此提高了召回率,但却降低了精准匹配文档的能力。为了获得两方面的优势,我们可以使用multifields(多字段)对 title 字段建立两次索引: 一次使用 `english`(英语)分析器,另一次使用 `standard`(标准)分析器:
DELETE my_index
PUT /my_index
{
"mappings": {
"blog": {
"properties": {
"title": {
"type": "string",
"analyzer": "english"
}
}
}
}
}
PUT /my_index
{
"mappings": {
"blog": {
"properties": {
"title": {
"type": "string",
"fields": {
"english": {
"type": "string",
"analyzer": "english"
}
}
}
}
}
}
}
PUT /my_index/blog/1
{ "title": "I'm happy for this fox" }
PUT /my_index/blog/2
{ "title": "I'm not happy about my fox problem" }
GET /_search
{
"query": {
"multi_match": {
"type": "most_fields",
"query": "not happy foxes",
"fields": [ "title", "title.english" ]
}
}
}
#安装插件
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
#安装插件
bin/elasticsearch install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.1.0/elasticsearch-analysis-hanlp-7.1.0.zip
#ik_max_word
#ik_smart
#hanlp: hanlp默认分词
#hanlp_standard: 标准分词
#hanlp_index: 索引分词
#hanlp_nlp: NLP分词
#hanlp_n_short: N-最短路分词
#hanlp_dijkstra: 最短路分词
#hanlp_crf: CRF分词(在hanlp 1.6.6已开始废弃)
#hanlp_speed: 极速词典分词
POST _analyze
{
"analyzer": "hanlp_standard",
"text": ["剑桥分析公司多位高管对卧底记者说,他们确保了唐纳德·特朗普在总统大选中获胜"]
}
#Pinyin
PUT /artists/
{
"settings" : {
"analysis" : {
"analyzer" : {
"user_name_analyzer" : {
"tokenizer" : "whitespace",
"filter" : "pinyin_first_letter_and_full_pinyin_filter"
}
},
"filter" : {
"pinyin_first_letter_and_full_pinyin_filter" : {
"type" : "pinyin",
"keep_first_letter" : true,
"keep_full_pinyin" : false,
"keep_none_chinese" : true,
"keep_original" : false,
"limit_first_letter_length" : 16,
"lowercase" : true,
"trim_whitespace" : true,
"keep_none_chinese_in_first_letter" : true
}
}
}
}
}
GET /artists/_analyze
{
"text": ["刘德华 张学友 郭富城 黎明 四大天王"],
"analyzer": "user_name_analyzer"
}
相关资源
分词算法综述 https://zhuanlan.zhihu.com/p/50444885
一些分词工具,供参考:
- 中科院计算所NLPIR http://ictclas.nlpir.org/nlpir/
- ansj分词器 https://github.com/NLPchina/ansj_seg
- 哈工大的LTP https://github.com/HIT-SCIR/ltp
- 清华大学THULAC https://github.com/thunlp/THULAC
- 斯坦福分词器 https://nlp.stanford.edu/software/segmenter.shtml
- Hanlp分词器 https://github.com/hankcs/HanLP
- 结巴分词 https://github.com/yanyiwu/cppjieba
- KCWS分词器(字嵌入+Bi-LSTM+CRF) https://github.com/koth/kcws
- ZPar https://github.com/frcchang/zpar/releases
- IKAnalyzer https://github.com/wks/ik-analyzer
网友评论