現代信息檢索筆記(二)——布爾檢索

目錄

信息檢索概述

IR vs數據庫: 結構化vs 非結構化數據

結構化數據

非結構化數據

半結構化數據

傳統信息檢索VS現代信息檢索

布爾檢索

倒排索引

一個例子

建立詞項(可以是字、詞、短語、一句話)-文檔的關聯矩陣。

關聯向量

檢索效果的評價

建立倒排索引表

索引構建過程:

布爾查詢的處理

查詢優化


信息檢索概述

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—文檔集、語料庫

IR vs數據庫: 結構化vs 非結構化數據

結構化數據

通常指表格中的數據。

數據庫常常支持范圍或者精確匹配查詢。

非結構化數據

通常指自由文本

允許

  1. 關鍵詞加上操作符號的查詢
  2. 更復雜的概念性查詢,

找出所有的有關藥物濫用(drug abuse)的網頁

經典的檢索模型一般都針對自由文本進行處理

考慮文本之間的相似性 搜兵乓球,出現劉國梁

半結構化數據

沒有數據是沒有結構的。

不同位置的關鍵詞權重是不一樣的,如標題比正文權重更高。

傳統信息檢索VS現代信息檢索

傳統信息檢索主要關注非結構化、半結構化數據

現代信息檢索中也處理結構化數據

第一個檢索只能使用結構化數據,而結構化數據僅占全部數據的20%,日志文件+機器數據又占非結構化數據的90%。如何利用日志文件等非結構化數據是現在信息檢索發展的關鍵。

布爾檢索

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

布爾模型是最簡單的模型 第一個模型 但在現在最先進的模型中依然使用

輸入信息,被切割為關鍵詞

人工and 檢索and not 教材

百度的高級檢索中有。

1\And 2\or not 3排序

倒排索引

一個例子

莎士比亞的哪部劇本包含Brutus及Caesar但是不包含 Calpurnia? 布爾表達式為Brutus AND Caesar AND NOT Calpurnia。

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

笨方法為什么不好?

?§ 速度超慢(特別是大型文檔集) § 處理NOT Calpurnia 并不容易(一旦包含即可停止判斷) § 不太容易支持其他操作(e.g., find the word Romans near countrymen) § 不支持檢索結果的排序(即只返回較好的結果)

因為現在語料庫太長,從頭到尾不現實。

建立詞項(可以是字、詞、短語、一句話)-文檔的關聯矩陣。

關聯向量

關聯矩陣的每一列都是0/1向量,每個0/1都對應 一個詞項

給定查詢Brutus AND Caesar AND NOT Calpurnia

取出三個行向量,并對Calpurnia 的行向量求補, 最后按位進行與操作

110100 AND 110111 AND 101111 = 100100.

檢索效果的評價

正確率(Precision) : 返回結果文檔中正確的比例。 如返回80篇文檔,其中20篇相關,正確率1/4

召回率(Recall) : 全部相關文檔中被返回的比例, 如返回80篇文檔,其中20篇相關,但是總的應該 相關的文檔是100篇,召回率1/5

正確率和召回率反映檢索效果的兩個方面,缺一 不可。

全部返回,正確率低,召回率100%

只返回一個非常可靠的結果,正確率100%

召回率低F是P R的調和平均

詞項-文檔的關聯矩陣應該是高度稀疏的矩陣(就是1的占比很少)

為了降低占用空間,我們只把1的位置保留下來。

建立倒排索引表

把1保留下來,把0去掉。從稀疏矩陣到存儲docID的向量。

對每個詞項t, 記錄所有包含t的文檔列表.

每篇文檔用一個唯一的docID來表示,通常是正整數, 如1,2,3…

通常采用變長表方式

磁盤上,順序存儲方式較好,便于快速讀取

內存中,采用鏈表或者可變長數組方式

索引構建過程:

詞條序列、排序、詞典&倒排記錄表

布爾查詢的處理

And查詢的處理 合并(Merge)兩個倒排記錄表,即求交集

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

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

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

查詢優化

合并索引表!實現and操作。

一、先最短的兩個合并,DF小的先合并。//保留DF的原因之一

二、或者將布爾表達式轉化為合取范式,

獲得每個詞項的df,(保守)估算每個子合取范式的df,最后將子合取范式的df從小到大排序。

布爾檢索可以限定很多條件。

布爾檢索構造復雜,對用戶極其不友好。

布爾檢索沒有排序。

沒有利用詞頻信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37514.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37514.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37514.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在Sklearn Pipeline中運行CatBoost

介紹 CatBoost的一大特點是可以很好的處理類別特征(Categorical Features)。當我們將其結合到Sklearn的Pipeline中時,會發生如下報錯: _catboost.CatBoostError: data is numpy array of floating point numerical type, it mea…

python-期末代碼復習

import numpy as np import pandas as pd import matplotlib.pyplot as plt import warningswarnings.filterwarnings(actionignore) plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False你提供的這兩行代碼是Python編程語言中用于設置matplotlib庫…

大淘客api實現多多進寶的商品查詢PHP版

大家好,我是網創有方,今天教大家如何使用大淘客的api實現拼多多商品詳情信息查詢。這里用到的多多進寶,如果沒有多多進寶的,先去多多進寶注冊個賬號吧! 第一步:進入大淘客官方創建應用,并且下載…

【PyQt5】一文向您詳細介紹 QLineEdit() 的作用

【PyQt5】一文向您詳細介紹 QLineEdit() 的作用 下滑即可查看博客內容 🌈 歡迎蒞臨我的個人主頁 👈這里是我靜心耕耘深度學習領域、真誠分享知識與智慧的小天地!🎇 🎓 博主簡介:985高校的普通本碩&…

2239. 找到最接近 0 的數字

給你一個長度為 n 的整數數組 nums ,請你返回 nums 中最 接近 0 的數字。如果有多個答案,請你返回它們中的 最大值 。 示例 1: 輸入:nums [-4,-2,1,4,8] 輸出:1 解釋: -4 到 0 的距離為 |-4| 4 。 -2 到…

開發一個微信小程序需要用到哪些技術?

開發一個微信小程序需要用到以下幾種技術: 1. 基礎技術 HTML: 用于定義小程序的頁面結構。CSS: 用于頁面的樣式設計。JavaScript: 用于實現頁面的交互功能。 2. 微信小程序專用技術 WXML(WeiXin Markup Language): 類似于HTML&#xff0c…

計量校準溫度儀表的常見分類有哪些?

溫度儀表在計量校準中,可以說是比較常見的儀器,而溫度儀器因為用于校準的場景很多,應用的場合不同,也是有著很多不同的分類,今天就簡單為大家介紹一些溫度儀表的細分分類。 溫度儀表根據測溫的方式不同,可以…

2024華為OD機試真題- 電腦病毒感染-(C++/Python)-C卷D卷-200分

2024華為OD機試題庫-(C卷+D卷)-(JAVA、Python、C++) 題目描述 一個局域網內有很多臺電腦,分別標注為 0 ~ N-1 的數字。相連接的電腦距離不一樣,所以感染時間不一樣,感染時間用 t 表示。 其中網絡內一臺電腦被病毒感染,求其感染網絡內所有的電腦最少需要多長時間。如果…

Laravel Activity Log操作日志擴展包

Laravel Activity Log操作日志擴展包 簡介 Laravel Action Logs操作日志記錄Laravel Activity Log 很多數據管理員都想記錄他們用戶的所有活躍記錄。這個包可以很方便的記錄你的用戶何時何地的創建、更新實體的記錄。外加,現在這個包還可以記錄多個版本的實體間數…

【基礎篇】第3章 索引與文檔操作

在Elasticsearch的世界里,索引是存儲數據的地方,文檔則是索引中的基本單位,包含具體的數據信息。本章將深入探討索引和文檔操作的基礎,從創建到管理,為高效數據處理奠定基礎。 3.1 索引概念與創建 3.1.1 索引、類型與…

PyTorch之nn.Module與nn.functional用法區別

文章目錄 1. nn.Module2. nn.functional2.1 基本用法2.2 常用函數 3. nn.Module 與 nn.functional3.1 主要區別3.2 具體樣例:nn.ReLU() 與 F.relu() 參考資料 1. nn.Module 在PyTorch中,nn.Module 類扮演著核心角色,它是構建任何自定義神經網…

【Spring Boot 源碼學習】初識 ConfigurableEnvironment

《Spring Boot 源碼學習系列》 初識 ConfigurableEnvironment 一、引言二、主要內容2.1 Environment2.1.1 配置文件(profiles)2.1.2 屬性(properties) 2.2 ConfigurablePropertyResolver2.2.1 屬性類型轉換配置2.2.2 占位符配置2.…

wxss和css有什么區別?

WXSS(WeiXin Style Sheets)和CSS(Cascading Style Sheets)在功能和應用上有很多相似之處,但針對微信小程序的特殊需求,WXSS對CSS進行了一些擴展和修改。以下是WXSS和CSS之間的主要區別: 尺寸單…

Mybatis實現流程

一&#xff0c;UserDAO 接口定義 首先&#xff0c;定義 UserDAO接口&#xff0c;包含 getList()方法,定義類型為List<User>&#xff1a; package dao;import model.User; import java.util.List;public interface UserDAO {List<User> getList(); }二&#xff0c…

Python--進程基礎

創建進程 os.fork() 該方法只能在linux和mac os中使用&#xff0c;因為其主要基于系統的fork來實現。window中沒有這個方法。 通過os.fork()方法會創建一個子進程&#xff0c;子進程的程序集為該語句下方的所有語句。 import os??print("主進程的PID為:" , os.g…

Python pdfkit wkhtmltopdf html轉換pdf 黑體字體亂碼

wkhtmltopdf 黑體在html轉換pdf時&#xff0c;黑體亂碼&#xff0c;分析可能wkhtmltopdf對黑體字體不太兼容&#xff1b; 1.html內容如下 <html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> </head&…

DreamView數據流

DreamView數據流 查看DV中界面啟動dag&#xff0c;/apollo/modules/dreamview_plus/conf/hmi_modes/pnc.pb.txt可以看到點擊界面的planning按鈕&#xff0c;后臺其實啟動的是/apollo/modules/planning/planning_component/dag/planning.dag和/apollo/modules/external_command…

語音識別應用Python示例

語音識別是將語音信號轉換為文本的技術&#xff0c;是人工智能領域的重要研究方向之一。下面是一個基于Python的簡單語音識別應用的代碼示例。 首先&#xff0c;需要安裝Python的語音識別庫SpeechRecognition。可以使用以下命令進行安裝&#xff1a; pip install SpeechRecog…

版本號比較

版本號比較&#xff1a; 注意&#xff1a; 不可以直接使用字符串比較的方法進行版本號比較。例如 2.29.1 > 2.3.0 是 false 的 版本號比較可以參考以下代碼&#xff1a; function compareVersion(v1, v2) {v1 v1.split(.)v2 v2.split(.)const len Math.max(v1.length, …

Oracle連接mysql

oracle使用的11g&#xff0c;在一臺windows服務器&#xff1b;mysql使用的是5.7版本&#xff0c;在另一臺windows服務器&#xff0c;這兩個服務器之間的網絡是互通的。做BI時&#xff0c;要獲取不同數據源的數據&#xff0c;這些數據源可能是Oracle&#xff0c;也可能是sqlserv…