日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

《introduction to information retrieval》信息检索学习笔记3 词典和容错式检索

發布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《introduction to information retrieval》信息检索学习笔记3 词典和容错式检索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第3章 詞典和容錯式檢索

3.1 用于詞典的搜索結構

給定一個反向索引和一個查詢,我們的第一個任務是確定每個查詢詞是否存在于詞匯表中,如果是,則返回指向相應倒排記錄表的指針。涉及在數據結構中定位詞項。

數據結構:字典(dictionary )
兩個解決方案:哈希表和搜索樹(hashing and search trees.)

1.哈希表:在查詢時,我們分別對每個查詢詞進行哈希操作,并返回一個指向相應倒排記錄表的指針,并考慮解決哈希沖突。

√ 每個詞項(鍵)被映射到一個整數上,在一個足夠大的目標空間中,哈希結果的沖突可能性會減小;沖突可以通過輔助結構來解決,而輔助結構可以要求維護。
√ 優點:定位速度優于樹的定位速度,時間復雜度為常數
√ 缺點:
(1)不能查詢詞項的變形(比如像resume這樣的單詞的重音和無重音的版本),因為它們可以被哈希映射成不同的整數。
(2)不能尋找帶前綴的詞項。
(3)隨詞匯量不斷增長,為當前需求而設計的散列函數在幾年內可能還不夠。

2.搜索樹:與哈希不同,搜索樹要求文檔集合中使用的字符有規定的順序

(1)二叉樹(binary tree):每個內部節點都有兩個子節點。有效的搜索取決于樹是否平衡:任何節點的兩個子樹下的詞項的數量相等或是相差1。主要問題是再平衡,當從二叉搜索樹中插入或刪除詞項時,需要重新平衡,以便保持平衡屬性。為了減少再平衡,一種方法是允許內部節點下的子樹的數量在一個固定的時間間隔內變化。
(2)B樹(B-tree):B樹被看作是將二叉樹的多個層次折疊成一個,當某些字典是磁盤常駐時尤其有利。
√ 優點:支持前綴查詢
√ 缺點:搜索速度低于哈希表,平衡樹時間復雜度為O(log M),M為詞匯表大小。

解決方案(哈希表或搜索樹)的選擇需要考慮如下:
(1)可能擁有多少個詞項?
(2)詞項數目會保持不變還是改變?在變化的情況下,只插入新的詞項還是在字典中刪除一些詞項?
(3)各種詞項的相對頻率是多少?

3.2通配符查詢(Wildcard queries)

在下列任何情況下使用通配符查詢:
(1)不確定查詢詞的拼寫(e.g., Sydney vs. Sidney, which leads to the wildcard query S*dney);
(2)拼寫一個詞項的多種變形,并尋找包含任何變形的文檔(e.g., color vs. colour);
(3)用戶尋找包含有可能被阻止的詞項的變形的文檔,但不確定搜索引擎是否執行了阻止 (e.g., judicial vs. judiciary, leading to the wildcard query judicia*);
(4)用戶不確定正確的外來詞或短語的翻譯 (e.g., the query Universit* Stuttgart)。

·后通配符查詢(trailing wildcard query):mon*形式的查詢,遍歷B樹,列舉一組詞典中以mon為前綴的詞項的集合W,使用反向索引檢索包含W中任何詞項的所有文檔。
·前通配符查詢(leading wildcard queries):*mon形式的查詢,遍歷反向b樹,反向b樹的每一個根到葉的路徑對應于在字典中倒寫的一個詞項,沿著反向的b樹遍歷,然后列出詞匯表中滿足前綴的所有詞項R。
·一般通配符查詢:se*mon形式的查詢,使用常規的b-樹枚舉以se為前綴和一個非空后綴的詞項集合W,然后反向b-樹枚舉以后綴mon結束的詞項集R。把兩個集合W和R進行交集,得到以前綴se開始與以后綴mon結束的詞項集。最后使用標準的反向索引檢索包含這個交集中任何詞項的所有文檔。

1.通用通配符查詢(General wildcard queries)

處理一般通配符查詢的技術策略:在一個特殊構造的索引上,將給定的通配符查詢q表示為布爾查詢Q,使布爾答案是一個匹配q的詞匯詞項的超集。

·輪排索引:一種反向索引。在字符集中引入一個特殊的符號$,以標記一個詞項的結束。構建一個輪排索引,在這個索引中,每個詞項的各種旋轉(增加$)都連接到原始的詞匯表詞項。(如hello的輪排索引: hello$,ello$h,llo$he,lo$hel,o$hell)。

·輪排詞匯表(permuterm vocabulary):permuterm索引中旋轉的詞項的集合。

√ 基本思想:
(1)考慮通配符查詢m*n,關鍵是要旋轉通配符查詢,以便*符號出現在字符串的末尾。因此,旋轉通配符查詢變成了n$m*。接下來,在輪排索引中查找這個字符串,尋找n$m*(通過搜索樹)會等價于詞項man和moron的旋轉結果。因此可以用一個*符號來處理任何通配符查詢。
(2)考慮fi*mo*er查詢,首先列舉字典中的詞項,這些詞項在er$fi*的輪排索引中。并不是所有的字典詞項都有字符串mo,通過詳盡的枚舉過濾它們,檢查每個候選者是否包含mo。在這個例子中,“fishmonger”這個詞項會在過濾中留下,而filibuster不會。然后通過標準的反向索引來查找幸存的詞項,用于文檔檢索。

√ 缺點:它的字典變得非常大,包括每個詞項的所有旋轉。

√ 輪排索引使我們能夠識別與通配符查詢匹配的原始詞匯表,我們在標準的反向索引中查找這些詞項,以檢索匹配的文檔。

√ B樹和輪排索引之間密切相互作用。事實上,該結構應該被看作是一種“一棵樹”。而我們遵循傳統的詞項描述輪排索引,它與B樹不同,它允許我們用給定的前綴來選擇旋轉。

2.k-gram的通配符查詢索引( k-Gram indexes for wildcard queries)

盡管輪排索引很簡單,但它可能導致每一項的旋轉次數大幅增加,另一種技術稱為k-gram索引,用于處理通配符查詢。

·k-gram:是k個字符的序列。因此,cas、ast和stl都是在castle的3-gram。使用一個特殊字符$來表示一個詞項的開始或結束,所以為castle生成的3-gram的完整集合是:$ca,cas,ast,stl,tle,le$。

√ 在k-gram索引中,字典中包含了所有在詞匯表中出現的k-grams。每個倒排記錄表從k-gram指向包含k-gram的所有詞匯表。例如,3-gram etr:

圖3.1 一個3-gram索引的倒排記錄表的例子。匹配的詞匯表是在倒排記錄表中按字母順序排列的。

√ 基本思想:
考慮通配符查詢re*ve,尋找包含任何以re開頭以ve結尾的詞項的文檔。因此,運行布爾查詢$re AND VE$。這是在3-gram索引中查找的,并生成一個匹配的詞項列表,如relive、remove和retrieve。然后,在標準的反向索引中查找每一個匹配的詞項,以生成匹配查詢的文檔。

√ 后置濾波(postfiltering):
使用k-gram索引處理有一個問題。考慮使用3-gram索引描述的查詢red*。首先進行布爾查詢$re AND RED。這就導致了如“retired”的詞項匹配,它包含了兩個3-grams $re and red 的連接,但與原來的通配符查詢red*不匹配。
為解決這個問題,引入后置濾波,在3-gram索引上的布爾查詢所枚舉的詞項將單獨檢查原始查詢red*。這是一個簡單的字符串匹配操作,并且淘汰了與原始查詢不匹配的詞項如retired。然后在標準的反向索引中搜索上下的詞項。

√ 一個通配符查詢可以導致多個詞項被枚舉,每一個詞項都成為標準反向索引的單項查詢。允許使用布爾運算符的通配符查詢的組合,例如,re*d AND fe*ri這樣的查詢的恰當解釋是,一個析取的連接:尋找所有包含任何匹配re*d和任何匹配的fe*ri的詞項的文檔。

*即使沒有通配符查詢的布爾組合,通配符查詢的處理也可能相當昂貴,因為在特殊索引、過濾和最終標準的反向索引中增加了查找。搜索引擎可能支持這樣豐富的功能,但最常見的是,該功能隱藏在大多數用戶從未使用過的接口(比如高級查詢接口)后面。在搜索界面中公開這些功能通常會鼓勵用戶在不需要的時候調用它(比如,通過輸入查詢的前綴a*),增加搜索引擎的處理負載。

3.3拼寫校正(Spelling correction)

大多數拼寫校正算法兩個基本原則:
(1)選擇與拼寫錯誤最接近的詞項
(2)當兩個正確拼寫的查詢被綁定時,選擇一個更常見的查詢。最簡單的是考慮集合中詞項的出現次數,許多搜索引擎中(如web)更常見的是使用在其他用戶輸入的查詢中最常見的進行更正。

拼寫校正的方法:

1.詞獨立法( isolated-term ):糾正單個查詢詞。

基本思想:使用k-gram索引列舉一組可能修正的q的候選詞匯表詞項。然后計算從q到這組集合的每一項的編輯距離,從對于q小編輯距離的集合中選擇詞項。

兩種處理技術:編輯距離(edit distance )和k-gram重和度(k-gram overlap)

(1)編輯距離(Edit distance)

·編輯距離:給定二個字符串s1和s2,它們之間的編輯距離是將s1轉換為s2所需的編輯操作的最小數量。也稱為Levenshtein距離。

√ 允許的編輯操作:

  • 將一個字符插入一個字符串
  • 從一個字符串中刪除一個字符
  • 用另一個字符替換字符串的字符;

√ 動態規劃算法,偽代碼:

圖3.2 計算字符串s1和s2之間的編輯距離的動態規劃算法

√ C++代碼:


√ 給定詞項詞匯表V和查詢字符串q,尋找V中與q具有最小編輯距離的字符串,得到候選的“正確”單詞詞匯表。
(1)最明顯的方法是在選擇最小編輯距離的字符串之前,計算從q到V中的每個字符串的編輯距離。這種搜索成本非常高。
(2)最簡單的啟發式方法:將搜索限制在字典詞項中,以與查詢字符串相同的字母開頭(希望查詢的第一個字符不出現拼寫錯誤)。
(3)這種啟發式更復雜變形:使用一個版本的輪排索引,在索引中省略了單詞尾符號$。考慮查詢字符串的所有旋轉q。對于每一個旋轉r,遍歷b - tree進入輪排索引,從而檢索所有以r開頭的詞項。
(4)旋轉方案改進:
如果q是mase,考慮旋轉r =sema,將檢索詞項如sematic和semaphore等,沒有一個小的編輯距離問。不幸的是,我們會錯過更多的相關的詞項如mare和mane。
為了解決這個問題,對于每次旋轉,在執行b樹遍歷之前省略l字符的后綴。確保從字典中檢索到的集合R中的每一項都包含一個與q相同的長子串(l的值取決于q的長度,也可以將它設置為一個固定不變的常量,比如2)。

(2)K-gram重合度(k-gram overlap)

為進一步限制計算編輯距離后的詞匯詞項集大小,調用k-gram索引來協助檢索與查詢q編輯距離較低的詞項。

√ 檢索過程:本質上是單一掃描查詢字符串q中的k-grams的倒排記錄表。

Eg. 圖3.3中的2-gram索引顯示了查詢bord中三個雙字母組的倒排記錄表。假設想要檢索至少包含這些三個字母組中的兩個的詞匯表。對這些倒排記錄表進行單一掃描,可以列舉出所有詞項,如圖將列舉出aboard、boardroom和border。


圖3.3查詢bord中三個雙字母組的倒排記錄表

√ 簡單地要求從查詢q中包含一個固定數量的k-grams匹配詞匯表的缺點是像boardroom這樣的詞項被枚舉。因此需要更微妙的詞項和q之間的k-grams中的重疊測量。

·Jaccard系數(Jaccard coefficient ):定義為|A ? B| /|A ? B|,我們考慮的這兩個集合是查詢q中的k-grams,以及詞匯表中的k-grams集合。

√ 基本思想:隨著掃描的進行,我們從一個詞匯表t開始,到下一個詞匯表,在q和t之間計算Jaccard系數,如果系數超過了預設的閾值,我們就把t加到輸出中;如果沒有,我們將繼續下一詞項的倒排記錄表。

*計算Jaccard系數,只需要t的長度。以圖3.3為例,考慮當倒排記錄表掃描查詢q=bord,t =boardroom。如果這些倒排記錄表存儲boardroom中bigrams的數量(即8),就有了需要的所有信息計算Jaccard系數:2/(8+3-2)(分子是從倒排記錄表數獲得的(2來自bo和rd);分母是bord和boardroom中bigrams的數量的總和。)

2.上下文敏感法(Context-sensitive):考慮上下文單詞。

詞獨立法將無法糾正如flew form Heathrow的輸入錯誤,三個查詢詞的拼寫都是正確的。當這樣的短語檢索出很少的文檔時,搜索引擎可能會提供flew from Heathrow的修正查詢。
(1)最簡單的方法是即使每個查詢詞都拼寫正確,仍枚舉三個查詢詞中的每一個的修正,然后嘗試替換短語中的每一個詞項。從flew form Heathrow的例子中可列舉了一些如fled form Heathrow 和 flew fore Heathrow的短語。對于每一個這樣的替代短語,搜索引擎運行查詢并確定匹配結果的數量。
(2)如果我們查找單個詞項的許多修正,這個枚舉成本可能很大;我們可能會遇到大量的替代方案。一些啟發式方法被用來減小解空間:只保留集合中最常見的組合或者在查詢日志中用戶以前的查詢。(使用用戶發出的查詢日志將包括帶有拼寫錯誤的查詢。)

3.4語音校正(Phonetic correction)

由于用戶輸入的查詢聽起來像目標項,所以出現了拼寫錯誤。這種算法尤其適用于對人名的搜索。
√ 主要思想:為每個詞項生成一個語音映射(phonetic hash),以便類似的詞項映射到相同的值。

·soundex算法:
(1)原始的soundex算法方案:

  • 將每一項都轉換成一個四字符(soundex指數)的簡化形式,從這些簡化的形式構建一個反向索引到原始的詞項。
  • 對查詢詞項執行相同的操作。
  • 當查詢需要一個soundex匹配時,搜索這個soundex索引。
    (2)soundex算法的變化:
    與將詞項轉換為四字符形式有關。常用的轉換結果是一個四字符的代碼,第一個字符是字母表中的字母,另外三個是0到9之間的數字。
  • 保留詞項的第一個字母。
  • 將下列字母的所有出現更改為0(零):A、E、I、O、U、H、W和Y。
  • 將字母改為數字如下:
    B,F,P,V -> 1
    C,G,J,K,Q,S,X,Z -> 2
    D,T -> 3
    L -> 4
    N -> 5
    R -> 6
  • 反復地從每一對連續相同的數字中取出一個。
  • 從產生的字符串中刪除所有的0。用后面的0填充結果字符串,并返回前四個位置,包含一個字母和三個數字。

√ 對于一個soundex映射(soundex map)的例子,赫爾曼映射(Hermann maps)到H655。給定一個查詢(比如Herman),計算它的soundex code,然后從soundex索引中檢索所有與soundex code匹配的詞匯表,然后在標準的反向索引上運行結果查詢。
√ 基于算法的一些觀察結果:
(1)在轉錄名稱時,元音被視為可互換的;
(2)發音相似的輔音(如D,T)被放入等價類,導致相關的名稱通常有相同soundex代碼。

總結

以上是生活随笔為你收集整理的《introduction to information retrieval》信息检索学习笔记3 词典和容错式检索的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。