[信息檢索] 第一講 布爾檢索Boolean Retrieval


第一講 布爾檢索Boolean Retrieval

主要內容:

  1. 信息檢索概述
  2. 倒排記錄表
  3. 布爾查詢處理

 

一、信息檢索概述

什么是信息檢索?

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).

信息檢索是從大規模非結構化數據(通常是文本)的集合(通常保存在計算機上)中找出滿足用戶信息需求的資料(通常是文檔)的過程。

Document –文檔

Unstructured – 非結構化

Information need –信息需求

Collection—文檔集、語料庫

 

二、倒排記錄表

1、什么是布爾查詢?

布爾查詢是指利用 AND, OR 或者 NOT操作符將詞項 連接起來的查詢

如:信息 AND 檢索

2、一個信息檢索的例子(莎士比亞全集)

不到100萬單詞,假設每個英文單詞平均長度為8字節,則整個全集不到10MB

查詢需求:

莎士比亞的哪部劇本包含Brutus及Caesar但是不包含Calpurnia?

查詢的布爾表示:

Brutus AND Caesar AND NOT Calpurnia

解決方案:

方法一:暴力方法

從頭到尾掃描所有劇本,對每部劇本判斷它是否包含Brutus AND Caesar ,同時又不包含Calpurnia

不足之處:

  • 速度超慢 (特別是大型文檔集)
  • 處理NOT Calpurnia 並不容易(不到末尾不能停止判斷)
  • 不太容易支持其他操作 (e.g., 尋找靠近countrymen的單詞Romans)
  • 不支持檢索結果的(靈活)排序 (排序時只返回較好的結果)

    優點:

  • 實現簡單
  • 很容易支持文檔動態變化

     

方法二:倒排記錄表

詞項-文檔(term-doc)關聯矩陣

若某劇本包含某單詞,則該位置為1,否則為0.

  • 關聯矩陣的每一列(對應一篇文檔)都是 0/1向量,每個0/1都對應一個詞項
  • 關聯矩陣的每一行(對應一個詞項)也可以看成一個0/1向量,每個0/1代表該詞項在相應文檔中的出現與否
  • 給定查詢Brutus AND Caesar AND NOT Calpurnia

    取出三個詞項對應的行向量 ,並對Calpurnia 的行向量求反,最后按位進行與操作

                   110100 AND 110111 AND 101111 = 100100.

問題:當出現更大的文檔集???

  • 假定N = 1 百萬篇文檔(1M), 每篇有1000個詞(1K)
  • 假定每個詞平均有6個字節(包括空格和標點符號),那么所有文檔將約占6GB 空間.
  • 假定詞匯表的大小(即詞項個數) M = 500K

此時,詞項-文檔矩陣將非常大!!!

  • 矩陣大小為 500K x 1M=500G
  • 但是該矩陣中最多有10億(1G)個1:詞項-文檔矩陣高度稀疏(sparse)

更好的辦法:僅僅記錄1的位置,即倒排索引

  • 對每個詞項t, 記錄所有包含t的文檔列表.
  • 每篇文檔用一個唯一的 docID來表示,通常是正整數,如1,2,3…
  • 磁盤上,順序存儲方式比較好,便於快速讀取
  • 內存中,采用鏈表或者可變長數組方式
  • 倒排記錄表按docID排序

索引構建過程:

1、詞條序列:<詞條,docID>二元組

2、排序

按詞項排序,然后每個詞項按docID排序

  1. 詞典&倒排記錄表
  • 某個詞項在單篇文檔中的多次出現會被合並
  • 拆分成詞典和倒排記錄表兩部分
  • 每個詞項出現的文檔數目(doc frequency, DF)會被加入

                                          

3、布爾查詢的處理

假定索引已經構建好了,如何利用索引來處理查詢?

AND查詢的處理:

考慮如下查詢(從簡單的布爾表達式入手):

Brutus AND Caesar

  • 在詞典中定位 Brutus
  • 返回對應倒排記錄表(對應的docID)
  • 在詞典中定位Caesar
  • 再返回對應倒排記錄表
  • 合並(Merge)兩個倒排記錄表,即求交集

合並過程:

每個倒排記錄表都有一個定位指針,兩個指針同時從前往后掃描, 每次比較當前指針對應倒排記錄,然后移動某個或兩個指針。合並時間為兩個表長之和的線性時間

  • 假定表長分別為x 和y, 那么上述合並算法的復雜度為 O(x+y)
  • 關鍵原因: 倒排記錄表按照docID排序
  • 上述合並算法的偽代碼:

其它布爾查詢的處理

  • OR表達式:Brutus OR Caesar
  • 兩個倒排記錄表的並集

 

  • NOT表達式: Brutus AND NOT Caesar
  • 兩個倒排記錄表的減

     

一般的布爾表達式

(Brutus OR Caesar) AND NOT (Antony OR Cleopatra)

 

查詢處理的效率問題

  • 查詢處理中是否存在處理的順序問題?
  • 考慮n 個詞項的 AND
  • 對每個詞項,取出其倒排記錄表,然后兩兩合並

 

  • 按照表從小到大(即df從小到大)的順序進行處理: 每次從最小的開始合並

 

 

 

 

布爾檢索的優點:

構建簡單,或許是構建IR系統的一種最簡單方式

布爾檢索的缺點:

  • 布爾查詢構建復雜,不適合普通用戶。構建不當,檢索結果過多或者過少
  • 沒有充分利用詞項的頻率信息
  • 不能對檢索結果進行排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM