ES 筆記二十二:多語言及中文分詞與檢索

CrazyZard發表於2019-11-17
  • 當處理人類自然語言時,有些情況,儘管搜尋和原文不完全匹配,但是希望搜到一些內容
    • Quick brown fox 和 fast brown fox / Jumping fox 和 Jumped foxes
  • 一些可採取的優化
    • 歸一化詞元:清除變音符號,如 role 的的時候 也會匹配role
    • 抽取詞根:清除單複數和時態的差異
    • 包含同義詞
    • 拼寫錯誤:拼寫錯誤,或者同音異形詞
  • 一些具體的多語言場景
    • 不同的索引使用不同的語言 / 同一索引中,不同的欄位使用不同的語言 / 一個文件的一個欄位內混合不同的語言
  • 混合語言存在的一些挑戰
    • 次幹提取:以色列文件,包含了希伯來語,阿拉伯語,俄語和英文
    • 不爭取的文件頻率 - 英文為主的文章中,德文算分高(稀有)
    • 需要判斷使用者搜尋時使用的語言,語言識別(Compact Language Detecor)
      • 例如,根據語言查詢不同的索引
  • 英文分詞:You're 分成一個還是多個?Half -baked
  • 中文分詞
    • 分詞的標椎:哈工大標椎中,姓和名分開。HanLP是在一起的。具體情況需制定不同的標椎
    • 歧義(組合型歧義,交際型歧義,真歧義)
      • 中華人民共和國 / 美國會通過對臺收武器法案/ 上海仁和服裝廠
  • 查字典 - 最容易想到的分詞方法(北京航空大學的樑南元教授提出)
    • 一個句子從左到到右掃描一遍。遇到有點詞就標識出來。找到複合詞,就找最長的
    • 不認識的字串就分割成單字詞
  • 最小詞數的分詞理論- 哈工大王曉龍博士吧查字典的方法理論化
    • 一句話應該分詞數量最少的詞串
    • 遇到二義性的分割,無能為力(例如:“發展中國家”/“上海大學城書店”)
    • 用各種文化規則來解決二義性,都並不成功
  • 統計語言模型 - 1990年前後 ,清華大學電子工程系郭進博士
    • 解決了二義性問題,將中文分詞的錯誤率降低了一個資料級。概率問題,動態規劃+利用維特比演算法快速找到最佳分詞
  • 基於統計的機器學習演算法
    • 這類目前常用的演算法是 HMM、CRF、SVM、深度學習演算法等演算法。比如 Hanlp分詞工具是基於CRF演算法為例,基本思路是對漢字進行標註訓練,不僅考慮了詞語出現的頻率,還考慮上下文,具有較好的學習能力,因此其對歧義詞和未登入詞的識別都具有良好的下效果
    • 隨著深度學習的興起,也出現了基於神經網路的分詞器,有人嘗試使用雙向LSTM + CRF實現分詞器,其本質上是序列標註,據報導其分詞器字元準確率可高達97.5%
  • 中文分詞器以統計語言模型為基礎,經過幾十年的發展,今天基本已經可以看做是一個已經解決的問題
  • 不同分詞器的好壞,主要的差別在於資料的使用和工程使用的精度
  • 常見的分詞器都是使用機器學期演算法和詞典相結合,一方面能夠提高分詞準確率,另一方面能夠改善領域適應性
  • HanLP - 面向生產環境的自然語言處理包
  • IK 分詞器

./elasticsearch-plugin install https://github.com/KennFalcon/elasticsearc...

/elasticsearch-plugin install https://github.com/medcl/elasticsearch-ana...

./elasticsearch-plugin install https://github.com/medcl/elasticsearch-ana...

  • 使用不同分詞器測試效果
  • 索引時,儘量切分的短,查詢的時候,儘量用長的詞
  • 拼音分詞器
#安裝外掛
./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"
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

快樂就是解決一個又一個的問題!

相關文章