布爾檢索
信息檢索概述
信息檢索:是從大規模非結構化數據(通常是文本)的集合(通常保存在計算機上)中找出滿足用戶信息需求的資料(通常是文檔)的過程。
Information Retrieval (IR) is finding material (usually documents) of an unstructured nature (usually text) that satisfies an information need from within large collections (usually stored on computers).
倒排索引
順序掃描:這種線性掃描就是一種最簡單的計算機文檔檢索方式。這個過程通常稱為 grepping,它來自於Unix下的一個文本掃描命令grep。
順序掃描的不足:
- 速度超慢(特別是大型文檔集)
- 有時我們需要更靈活的匹配方式。比如,在 grep 命令下不能支持諸如 Romans NEAR countrymen之類的查詢,這里的 NEAR操作符的定義可能為“5個詞之內” 或者“同一句子中”。
- 不支持檢索結果的排序(即只返回較好的結果)
詞項-文檔(term-doc)的關聯矩陣(數學建模)
詞項—文檔關聯矩陣,其中每行表示一個詞,每列表示一個劇本。當詞t在劇本d中存在時,矩陣元素(t,d)的值為 1,否則為 0
為響應查詢 Brutus AND Caesar AND NOT Calpurnia,我們分別取出 Brutus、Caesar 及Calpumia對應的行向量,並對 Calpumia 對應的向量求反,然后進行基於位的與操作,得到: 110100 AND 110111 AND 101111 = 100100
詞項-文檔(term-doc)的關聯矩陣高度稀疏,僅僅保存非零的位置明顯更好
倒排索引的構建
- 對每個詞項t, 記錄所有包含t的文檔,建立詞條序列<詞條,docID>二元組
- 對詞項、文檔排序。按詞項排序,然后每個詞項按docID排序
- 合並詞項,並常記錄文檔頻率df(對每個詞項t, 記錄所有包含t的文檔數目)
布爾查詢處理
and查詢的處理
比如說,我們要尋找既包含字符串“lucene”又包含字符串“solr”的文檔,我們只需要以下幾步:
1. 取出包含字符串“lucene”的倒排記錄表。
2. 取出包含字符串“solr”的倒排記錄表。
3. 通過合並兩個倒排記錄表,找出既包含“lucene”又包含“solr”的文檔。
O(N)時間復雜度簡單合並實現(關鍵原因: 倒排記錄表按照docID排序)
通用的查詢優化策略 (詞典中保存文檔頻率df的一個充分理由)
(madding OR crowd) AND (ignoble OR strife) AND (killed OR slain)
- 每個布爾表達式都能轉換成上述形式(合取范式)
- 獲得每個詞項的df
- (保守)通過將詞項的df相加,估計每個OR表達式對應的倒排記錄表的大小
- 按照上述估計從小到大依次處理每個OR表達式
- 反例:[1,2,3,4] and [1,2,3,4] and [5,6,7,8,9] 4+4>4
布爾邏輯的轉換(數學知識)
(范式存在定理)任一命題公式都存在着與之等值的析取范式和合取范式
即任何布爾查詢邏輯表達式都能轉換為合取范式
這種變換基於了關於邏輯等價的規則:
- 雙重否定律
- 德·摩根定律:非(P 且 Q)=(非 P)或(非 Q) 非(P 或 Q)=(非 P)且(非 Q)
- 分配律
轉換例子:
NOT (B OR C) = (NOT B) AND (NOT C)
(A AND B) OR C = (A OR C) AND (B OR C)
布爾檢索的優缺點
優點:構建簡單、常用
缺點:
1.布爾查詢構建復雜,不適合普通用戶。構建不當,檢索結果過多或者過少
2.沒有充分利用詞項在文檔中的詞項頻率(term frequency, tf)信息
3.不能對檢索結果進行排序