读第一章不要追求一遍全懂,重点是抓住“检索系统为什么需要倒排索引”这一条主线。
一、信息检索的基本问题
你先记住一句话:
信息检索就是:用户输入查询query,系统从大量文档documents中找到相关文档relevant documents。
你读的时候要分清楚这几个词:
| 概念 | 含义 |
|---|---|
| document | 被检索的文档 |
| collection/corpus | 文档集合 |
| query | 用户查询 |
| term | 查询或文档中的词项 |
| relevance | 文档和查询的相关性 |
第一章不要想的太复杂,先理解:
搜索系统的核心任务就是:从大量文档中快速找到相关文档。
二、倒排索引是第一章的核心
传统顺序扫描是:
查询一个词 → 从第 1 篇文档查到第 N 篇文档
倒排索引是:
词项 → 出现过这个词的文档列表
例如:
retrieval → doc1, doc3, doc8
model → doc2, doc3, doc7
search → doc1, doc4, doc8
如果用户查询:
retrieval AND model
系统就找:
retrieval 的文档列表 ∩ model 的文档列表
结果就是:
doc3
你要重点理解:
倒排索引把“文档找词”变成了“词找文档”,所以检索速度大幅提高。
三、布尔检索模型
第一章主要讲布尔检索,也就是:
AND
OR
NOT
重点掌握:
| 查询 | 含义 |
|---|---|
| A AND B | 同时包含 A 和 B 的文档 |
| A OR B | 包含 A 或 B 的文档 |
| A AND NOT B | 包含 A 但不包含 B 的文档 |
例如:
information AND retrieval
意思是找同时包含 information 和 retrieval 的文档。
information OR retrieval
意思是找包含 information 或 retrieval 的文档。
information AND NOT retrieval
意思是找包含 information 但不包含 retrieval 的文档。
四、重点回答5个问题
1. 什么是信息检索?
信息检索,英文是 Information Retrieval,简称 IR,是指用户输入一个查询请求后,系统从大量文档集合中查找与用户需求相关信息或文档的过程。它的核心任务不是简单地查找某个词是否出现,而是要尽可能快速、准确地找到用户真正需要的内容,并把相关性更高的结果排在前面。在信息检索中,常见的基本概念包括查询 query、文档 document、文档集合 collection 或 corpus,以及相关性 relevance。简单来说,信息检索研究的就是如何从大量信息中快速找到有用信息。
2. 什么是倒排索引?
倒排索引是一种用于快速查找文档的数据结构。普通的文档组织方式是“文档到词”,也就是一篇文档中包含哪些词;而倒排索引则反过来,采用“词到文档”的结构,即记录每个词项出现在哪些文档中。例如,词项 retrieval 可能对应 doc1、doc3、doc8,表示这些文档中都出现了 retrieval 这个词。通过这种方式,当用户查询某个词时,系统可以直接根据该词找到相关文档,而不需要逐篇文档进行查找。因此,倒排索引的本质是把“从文档中找词”转变为“通过词直接找到文档”,从而显著提高检索效率。
3. 为什么搜索系统不用顺序扫描所有文档?
搜索系统通常不用顺序扫描所有文档,是因为这种方法在大规模文档集合中效率太低。顺序扫描意味着每次用户输入查询后,系统都要从第一篇文档开始,逐篇检查是否包含查询词或是否相关。如果文档数量只有几十篇,这种方式还能接受;但真实搜索系统往往面对的是几十万、几百万甚至更多文档,逐篇扫描会造成巨大的时间成本,无法满足快速响应的需求。倒排索引可以提前建立“词项到文档列表”的映射,查询时系统只需要查找相关词项对应的文档列表,就能快速定位候选文档。因此,搜索系统使用倒排索引而不是顺序扫描,是为了提高查询效率和系统响应速度。
4. AND、OR、NOT 查询分别怎么处理?
AND、OR、NOT 是布尔检索中的三种基本逻辑操作。
AND 表示两个词项必须同时出现在文档中,因此处理时需要对两个词项的倒排列表求交集。例如,查询 information AND retrieval,系统会分别找到 information 和 retrieval 对应的文档列表,然后返回同时出现在两个列表中的文档。
OR 表示只要包含其中任意一个词项即可,因此处理时需要对两个倒排列表求并集。例如,information OR retrieval 会返回包含 information 或 retrieval 的所有文档。
NOT 表示排除包含某个词项的文档,通常和 AND 结合使用,例如 information AND NOT retrieval,表示返回包含 information 但不包含 retrieval 的文档,本质上是对两个文档列表求差集。
简单来说,AND 对应交集,OR 对应并集,NOT 对应差集。
5. postings list 是什么?
postings list 通常翻译为倒排记录表或倒排列表,是倒排索引中最核心的数据结构之一。
它指的是某个词项出现过的所有文档编号组成的列表。
例如,retrieval → doc1、doc2、doc5、doc8,其中 doc1、doc2、doc5、doc8 就是 retrieval 这个词项对应的 postings list。在更完整的检索系统中,postings list 不仅可以记录文档编号,还可以记录该词项在每篇文档中的出现次数、出现位置等信息。这些信息可以支持短语查询、位置查询、词频统计和相关性排序。因此,postings list 可以理解为倒排索引中“某个词项对应的文档清单”,是实现快速检索的重要基础。
五、课后习题
习题 1-1 画出下列文档集所对应的倒排索引
| 文档1 | new home sales top forecasts |
| 文档2 | home sales rise in july |
| 文档3 | increase in home sales in july |
| 文档4 | july new home sales rise |
习题 1-2 考虑如下几篇文档:
| 文档1 | breakthrough drug for schizophrenia |
| 文档2 | new schizophrenia drug |
| 文档3 | new approach for treatment of schizophrenia |
| 文档4 | new hopes for schizophrenia patients |
a. 画出文档集对应的词项——文档矩阵;
b. 画出该文档集的倒排索引。
习题 1-3 对于习题 1-2 中的文档集,如果给定如下查询,那么返回的结果是什么?
a. schizophrenia AND drug
文档1、文档2
b. for AND NOT (drug OR approach)
文档4