- 信息检索
- 布尔检索模型
- 词项-文档关联矩阵(incidence matrix)
- 倒排索引(inverted index)
- 对基本布尔操作的扩展(beyond term search)
- 查询模型的改进方向
信息检索
定义:信息检索是从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料(通常是文档)的过程。
非结构化数据:没有清晰和明显语义结构的数据。
半结构化数据:通过显式的标记来体现语言结构的数据(如网页中的结构标签)。
推荐系统是general query search 是一种特殊的IR任务,用户没有显示的给出query
分类:
- Web搜索(web search)
大规模分布式文档的检索 - 面向企业、机构和特定领域的搜索(domain-specific search)
对公司内部文档、专利库或生物医学文献等的搜索 - 个人信息检索(personal information retrieval)
操作系统或系统应用中融合的信息检索功能
布尔检索模型
对于(1)大规模文档集(2)更灵活的匹配方式,如NEAR操作符,’5个词内‘或’同一句中‘ (3)需要对结果进行排序。这些情况下,就不能再采用线性扫描(如unix系统中grep指令)的方式。一种非线性扫描的方式是实现给文档建立索引(index)。
grep is line oriented IR is document oriented
词项-文档关联矩阵(incidence matrix)
词项(term):索引的单位,通常用词来表示
文档(document):检索系统的检索对象,可以是单独一条记录或者是一本书的各章
文档集/语料库(collection/corpus):所有文档的集合
矩阵从行看,可以得到每个词项对应的文档向量,表示词项在哪些文档出现或不出现
从列来看,可以得到每个文档对应的词项向量,表示文档中哪些词项出现或不出现。
1表示出现,0表示不出现。
词项-文档关联矩阵的布尔查询处理
对于采用AND、OR及NOT等逻辑操作符连接起来的布尔表达式查询,通过对文档向量间逻辑操作来得到查询结果。
例:为响应查询 Brutus AND Caesar AND NOT Calpurnia,我们分别取出 Brutus、Caesar 及 Calpumia 对应的行向量,并对 Calpumia 对应的向量求反,然后进行基于位的与操作,得到:
110100 AND 110111 AND 101111 = 100100
结果向量中的第 1 和第 4 个元素为 1,这表明该查询对应的剧本是 Antony and Cleopatra 和 Hamlet。
倒排索引(inverted index)
对于词项个数和文档规模很大的情况,构造出的关联矩阵是高度稀疏的。只记录原始矩阵中1的位置的表示方法比词项-文档关联矩阵更好,因此引出了倒排索引。
**索引(index)**由一部字典(dictionary)和一个全体倒排记录表(postings)组成。
建立索引的主要步骤如下:
1、收集需要建立索引的文档
2、将每篇文档转换成一个个词条(token)的列表,这个过程称为词条化(tokenization)或者切词。
3、进行语言学预处理,产生归一化的词条来作为词项(去掉复数标记等 )
4、对所有文档按照其中出现的词项来建立倒排索引
上图表现了构建倒排索引的过程。
1、给每篇文章的所有词项加上文档ID
2、按照字母顺序排序
3、将同一词项合并,并将词项与文档ID分开存储(词典存储在内存中,记录表存储在磁盘中)
注:在字典的每个词项中还可以存储其他信息,如文档频率
每个倒排记录表存储了词项出现的文档列表,还可以存储词项频率(词项在文档中出现的次数)、词项在文档中出现的位置。
基于倒排索引的布尔查询处理
例:对于Brutus AND Calpurnia这样的布尔查询,首先在字典中分别定位Brutus和Calpurnia,并返回其倒排记录表(posting lists)。对两个倒排记录表求交集(intersect),也称合并。
对于两个有序记录表的合并算法如下
查询优化
对于更加复杂的查询,可按照词项的文档频率(即倒排记录表的长度)从小到大依次处理,这使得中间结果(多个布尔操作组合起来的query,会产生中间结果)的大小都不会超过最短的倒排记录表。
布尔查询适合精确查询(法律领域等)
对基本布尔操作的扩展(beyond term search)
严格的布尔运算所得到的无序结果集合远远不能使用户满意,故可在系统中加入更多的操作:
1、邻近操作符(proximity) :用于指定查询中两个词项应该互相靠近
2、短语查询(phrase search): 可以看成特殊的邻近操作符
3、尾通配符查询
例:空格表示逻辑“ 或” 关系,&表示 AND,/s、/p 及/k 分别表示处 于同一句子、段落和 k 个词之内。双引号表示的是短语查询(phrase search,即多个词连续出现, 参见 2.4 节),感叹号(!)表示尾通配符查询(参见 3.2 节)
查询模型的改进方向
1、容忍拼写错误及查询和文档中词语表达不一致时的检索方法
2、对复合词或短语的搜索
3、通过引入词项频率(词项在文档中出现的次数)等,得到文档相关的可信度,而不是简单的词项存在与不存在。
4、对返回结果排序