【elasticsearch】17、多语言及中文分词与检索

自然语言与查询recall

  • 当处理人类自然语言时,有些情况,尽管搜索和原文不完全匹配,但是希望搜到一些内容
    • quick brown fox 和 fast brown fox / jumping fox 和 jumped foxes
  • 一些可采取的优化
    • 归一化词源:清除变音符号,如rōle的时候会匹配role
    • 抽取词根:清除单复数和时态的差异
    • 包含同义词
    • 拼写错误:拼写错误或者同音异形词

混合多语言的挑战

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

分词的挑战

  • 英文分词:you're 分成一个还是多个?half-baked
  • 中文分词
    • 分词标准:哈工大标准中,星河明分开,HanLP是在一起的,具体情况需定时不同的标准
    • 歧义(组合型歧义,交集型歧义,真歧义)
      • 中华人民共和国/美国会通过对台售武法案/上海仁和服装厂

中文分词方法的演变 - 字典法

  • 查字典 - 最容易想到的分词方法
    • 一个句子从左到右扫描一遍,遇到有的词就标示出来,找到复合词,就找最长的
    • 不认识的字符串就分隔成成成单字词
  • 最小词数的分词理论
    • 一句话应付分成数量最少的词串
    • 遇到二义性的分割,无能为力(发展中国家/上海大学城书店)
    • 用各种文化规则来解决二义性,都并不成功

基于统计法的机器学习算法

image.png

中文分词器

  • HanLP 面向生产环境的自然语言处理工具包
    • www.hanlp.com
    • www.github.com/KennFalcon/elasticsearch-analysis-hanlp
  • 可以进行远程词典配置


    image.png
  • ik分词器

    • www.github.com/medcl/elasticsearch-analysis-ik
  • 支持字典热更新


    image.png
  • 拼音分词器


    image.png

回顾

  • 多语言搜索的挑战
    • 分词/语言检测/相关性算分
  • elasticsearch中国,多语言搜索所使用的一些几千
    • 归一化词源/单词词根抽取/同义词/拼写错误
  • 中文分词的严谨以及一些es中文分词器&拼音分词器介绍
#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"
}

你可能感兴趣的:(【elasticsearch】17、多语言及中文分词与检索)