[IR] Inverted Index & Boolean retrieval

教材:《信息檢索導論》算法

 

倒排索引

How to build Inverted Index?ui

  1. Token sequence.spa

  2. Sort by terms..net

  3. Dictionary & Postings3d

 

 

 

查詢同時包含兩單詞的文檔

【Qword1 and Qword2】

等高線式前進。orm

O(x+y)blog

 

【Qword1 and not Qword2】

O(m*log2n) = m箇中的any one都要查看n箇中是否也有(二分查找)。索引

 

【Qword1 or not Qword2】

O(m+n)ip

 

【Qword1 and Qword2 and Qword3 and ...】

藉助 min-heap, 找 list 的時間。ci

Update min-heap: O(log2k), k = number of lists.

O(Total_Length * log2k)

 

 

Galloping Search

跳錶:【Qword1 and Qword2】

- 源於skip pointers, but how to placing skip?

- L1/2

Normally, len(a) < len(b)

O( 2a*log2(b/a) )  [ better than O(a*log2b) 二分查找 ]

Stage1: Σi = 1log2(ni) = log2Πi=1(ni) <= log2(Σ(ni)/a)(柯西不等式) = log2(b/a)a = a*log2(b/a)

Stage2: 二分查找的cost與Stage1相近(由於都是2的指數級增加)

 

 

Pharse Queries

Biword Indexes

Ref: 《信息檢索導論》第二章總結

排列組合。但總有些組合是沒用的,致使False Positive增長。

因此要Filter out.

將兩個詞當作一個item,即在dictionary中都是兩個詞爲一組。

好比invert and revert,則會變成invert and和and revert;可是這種作法使得倒排記錄表迅速變大。

這種方法的缺點不少:

(1)不適用於單詞查詢。

(2)倒排記錄表太大。

(3)查詢有時還不正確。須要進行後過濾(即在查詢詞組中過濾一遍)

 

折中策略

(1)對於單個單詞出現次數很是多,而組成一個詞組後出現次數大大減小的詞組,用biword index;

(2)對於那些常常被用戶查詢的詞組,使用biword index;

(3)其他使用positional index【接下來的內容】

 

 

Positional Index --> Proximity Queries

支持位置信息查詢

 

k詞鄰近搜索

對兩個單詞的位置有要求,好比兩個單詞必須「相距五個單詞之內」。

Figure, 鄰近搜索中兩個倒排記錄表 p1 和 p2 的合併算法,算法尋找兩個詞項在 k 個詞以內出現的情形,

返回一個三元組<文檔 ID,詞項在 p1中的位置,詞項在 p2中的位置>的列表。

 

Step:

步驟(3)表示,再搜索M上的後面的詞的話,這一段就不須要再看了,也就是N鏈實際上是須要被遍歷一遍。

 

 End.

相關文章
相關標籤/搜索