1. 程式人生 > >Elasticserach實戰(1) 資訊檢索概述

Elasticserach實戰(1) 資訊檢索概述

我們常用的搜尋引擎是 We 搜尋 是資訊檢索的 個分支,學術上的資訊檢索( Information
trieva l , 簡稱 IR )的定義為 資訊檢索是從大規模非結構化資料 (通常是文字)的集合(通
常儲存在計 機上〉中找出滿足使用者資訊需求的資料(通常是文件〉 的過程。

1.資訊檢索常用術語

• 使用者需求 (User Need ,簡稱 UN)
需要獲得的資訊 嚴格地說, UN 存在於使用者的內心,但是通常用文字來描述,如找與“2014 世界盃”相關的新聞,有時也稱為主題( Topic )。
• (Query)
UN提交給檢索系統時稱為查詢( Query ),如“ iPhone7 價格”。對同 UN ,不同人不同時候可以構造出不同的 Query 上述需求也可表示成 蘋果7價格” Query 在IR系統中往往還有內部表示。
• 文件 (Document)
文件是資訊檢索的物件,文擋不僅僅可以是文字,也可以是影象、視訊、語音等多媒體文件。
• 文件集(Crops)
由若干文件構成的集合稱為文件集合,文件集有時也稱為語料庫。海量的網際網路網頁件系統中的文字檔案、大量的電子郵件,都是文件集合 具體例子。
• 文件編號(Document ID ) 
文件 ID是給文件集中的每個文件賦予的識別符號,通過文件 ID 來區分不同的文件,這樣能夠方便搜尋引擎的內部處理 縮寫為 docID。
• 詞條化( tokenization) 
詞條化是將給定的 符序列拆分成系列子序列的過程,拆分的每個子序列稱為一個詞詞條化的過程中有可能會去除標點符號等特殊字元。下面是 個詞條化的具體子。
輸入:Whatever happens tomorrow, we have had today. 
輸出:whatever |  happens | tomorrow | we | have | had | today
4 Lucene Elasticsearch :全文檢索實佔
• 詞項( Term)
詞項是經過語言學預處理之後歸一化的詞條。詞項 索引的最小單位,一般情況下可以把詞項當作詞,但詞項不一定就是詞 對於上面的句子,產生詞項如下:
whatever |  happens | tomorrow | we | have | had | today
• 詞項-文件關聯矩陣( Incidence matrix) 
詞項-文件關聯矩陣是表示詞項和文件之間所具有的一種包含關係的概念模型,表1-1展示了其含義 表中的每列代表一個文擋,每行代表一個詞項,打對勾的位置含關係。


      從縱向即文件這個維度來 看,每列代表一個文件包含的詞項資訊,比如doc1包含了term1,term4和 term5,而不包含 term2, term3, term6 。從橫向即詞項這個維度來 看,每行代表該詞項在文件中的分佈資訊,比如對於 term 1來說, doc1,doc3,doc6 中出現過 term1,而其他文件不包含 term1,矩陣中其他的行列也可作此種解讀。
• 詞項頻率( Term frequency) 
同一個單詞在某個文件中出現的頻率 比如,單“apple 某文件中出現了3次, 那麼該單詞在該文件中的詞項頻率就是3
• 文件頻率(Document equency
出現某詞項的文件的數目 比如,單詞“China ”只出現在文件集合中的文件1和文件 5,那麼該單詞的文件頻率就是2
• 倒排記錄表(Postings lists) 
倒排記錄表用於記錄出現過某個單詞的所有文件的文件列表 以及單詞在該文件中出現的位置資訊,每條記錄稱為一個倒排項 通過倒排列表即可獲知哪些文件包含哪些單詞。
• 倒排檔案( Inverted file) 
倒排記錄表在磁碟中的物理儲存檔案稱為倒排檔案。

2.分詞演算法概述

       詞是表達語義的最小單位 分詞對搜尋引擎的幫助很大,可以幫助搜尋引擎程式自動識別語句的含義,從而使搜尋結果的匹配度達到最高,因此分詞的質量也就直接影響了搜尋結果的精確度 分詞在文字索引的建立過程和使用者提交檢索過程中都存在。 利用相同的分詞器,把短語或者句子切分成相同的結果,才能保證檢索過程順利進行。中文和英文的分詞原理簡介如下:

2.1英文分詞的原理
     基本的處理流程是 輸入文字、詞彙分割、詞彙過濾(去除停留詞)、詞幹提取(形態還原)、大寫轉為小寫、結果輸出。
2.2中文分詞原理
     中文分詞比較複雜 並沒有英文分詞那麼簡單。這主要是因為中文的詞與詞之間並不像英文中那樣用空格來隔開。中文分詞主要有3種方法 基於詞典匹配的分詞方法、基於語義理解的分詞、基於詞頻統計的分詞。

2.2.1 詞典匹配分詞法
       基於字典匹配的分詞方法按照一定的匹配策略將輸入的字串與機器字典詞條進行匹配,這種方法是最簡單的也是最容易想到的分詞辦法 最早由北京航空航天大學的樑南元教授提出。查字典分詞實際上就是把一個句子從左向右掃描一遍,遇到字典中有的詞就標識出來,遇到複合詞就找到最長的詞匹配,遇到不認識的字串則切分成單個詞。按照匹配操作的掃描方向不同,字典匹配分詞方法可以分為正向匹配、逆向匹配以及結合了兩者的雙向匹配演算法;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配:按照是否與詞性標註過程相結合,又可以分為單純分詞方法和分詞與詞性標註相結合的方法。幾種常用的詞典分詞方法如下:
• 正向最大匹配(由左到右的方向)
• 逆向最大匹配(由右到左的方向)
• 最少切分(是每一句中切除的詞數最小)
       實際應用中上述各種方法經常組合使用,以達到最好的效果,從而衍生出了結合正向最大匹配方法和逆向最大匹配演算法的雙向匹配分詞法。由於中文分詞最大的問題是歧義處理,結合中文語言自身的特點,經常採用逆向匹配的切分演算法,處理的精度高於正向匹配,產生的切分歧義現象也較少。
        真正實用的分詞系統,都是把詞典分詞作為基礎手段,結合各種語言的其他特徵資訊來提高切分的效果和準確度。有的實用系統中將分詞和詞性標註結合起來,利用句法和詞法分析對分詞決策提高幫助,在詞性標註過程中法代處理 利用詞性和語法資訊對分詞結果進行檢驗、調整。
2.2.2 語義理解分詞法
      基於語義理解的分詞方法是模擬人腦對語言和句子的理解,達到識別詞彙單元的效果。基本模式是把分詞 句法、語義分析並行進行,利用句法和語義資訊來處理分詞的歧義。一般結構中通常包括分詞子系統、句法語義子系統 排程系統。在排程系統的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義資訊,模擬人腦對句子的理解過程。基於語義理解的分詞方法需要使用大量的語言知識和資訊。

2.2.3 詞頻統計分詞法
        這種做法基於人們對中文詞語的直接感覺。通常詞是穩定的字的組合,因此在中文文章的上下文中,相鄰的字搭配出現的頻率越多,就越有可能形成一個固定的詞。根據n元語法知識可以知道,字與字相鄰同時出現的頻率或概率能夠較好地反映成詞的可信度。實際的系統中,通過對精心準備的中文語料中相鄰共現的各個字的組合的頻度進行統計,計算不同字詞的共現資訊。 根據兩個字的統計資訊,計算兩個漢字的相鄰共現概率,統計出來的資訊體現了中文環境下漢字之間結合的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成一個詞。
        基於詞頻統計的分詞方法只需要對語料中的字組頻度進行統計,不需要切分詞典,因而叫作無詞典分詞法或統計分詞方法。這種方法經常抽出一些共現頻度高但並不是詞的常用字組,需要專門處理,提高精確度。實際應用的統計分詞系統都使用一個基本的常用詞詞典,把字典分詞和統計分詞結合使用。基於統計的方法能很好地解決詞典未收錄新詞的處理問題,即將中文分詞 中的串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

引自:從lucene到Elasticsearch全文檢索實戰