zoukankan      html  css  js  c++  java
  • 信息检索导论学习笔记 -- 第二章:词项词典及倒排记录表

    2.1.1 文档分析及编码转换:

         文档处理第一步,是将文件或web服务器上的一系列二进制字节序列转换为字符序列。

         在实际中,首先要判断出文档的编码方式(机器学习分类、启发式等方法),确定文档的类型(word?zip?)然后将字节序列转换成字符序列。

    2.1.2 文档单位(document unit)的选择:

         常见的,将某个目录下的每个文件都看成一个文档。

         但有些情况并非如此,比如我们可能希望将邮件、附件(附件中的文件)分开。

         对于一个长文档而言,更一般的说法是,此时存在一个“索引粒度(indexing granularity)". 比如把一本书,作为索引单位,可能就太长了。 那么可以选择一章节或者一篇文章作为索引粒度。 索引粒度太大,准确率太低; 索引粒度太小,准确率高,召回率低。

    2.2 词项集合的确定

    2.2.1 词条化(token):

    举例:

    Image(6)

    有时,我们需要对词条、词条类(type)进行区分:

    • 词条:文档中出现的字符序列的一个实例
    • 词条类:相同词条构成的集合
    • 词项:信息检索系统词典中包含的某个可能经过归一化处理的词条类。
    • 词项集合和词条可以完全不同,比如,采用某一个分类体系的类别标签作为词项。
    • to sleep perchance to dream, 5个词条,4个词条类(to归为一类),3个词项(去掉停用次to)

    无论是布尔查询还是自由文本查询,人们总是希望对文档和查询进行同样的词条化处理,确保文本与查询中的同一字符串序列的处理结果相同。

    词条化处理往往与预言本身有关。

    对一些特定领域的预言,往往有一些特定的词条被识别成词项。如C++,C#,B-52,fly100. 一种做法是不对包括货币量、数字、url等在内的词条进行索引,因为如果对这些词条进行索引会显著扩大索引词汇量。

    2.2.2 去除停用词(stop word):

            一个常用的生成停用词表的方法就是将词项按照文档集频率(collection frequency)从高到低排列,然后手工选择。 去除停用词表可以大大减少系统所需要存储的倒排记录表数目。

    2.2.3 词项归一化(term Normalization)

    在很多情况下,即使词条之间并不完全一致,但实际上人们希望它们之间能够进行匹配。比如查询 USA 时我们希望能够返回包含 U.S.A.的文档。

    词条归一化(token normalization) 就是将看起来不完全一直的多个词条归纳成以恶搞等价类,以便在他们之间进行匹配的过程。

    最常规的做法就是隐式的建立等价类。 anti-discriminatory,antidiscriminatory映射成antidiscriminatory,这样对两个词中的任意一个进行搜索,都会返回包含其中任一词的文档。

    另外一个中,建立等价类的方法,位置多个非归一化词条之间的关联关系。

    。常用的方式是采用非归一化的词条进行索引,并为某个查询词项维护一张由多个词组成的查询扩展词表。当输入一个查询词项时,则

    根据扩展词表进行扩展并将扩展后得到的多个词所对应的倒排记录表合在一块。另一种方式是

    在索引构建时就对词进行扩展。比如,对于包含automobile的文档,我们同时也用car来索引(同

    样,包含car的文档也用automobile来索引)①。上述两种方式相对于隐式建立等价类的方法来说

    效率较低,这是因为它们需要存储和合并更多的倒排记录。第一种方式增加了一部查询扩展词

    典,因此在查询处理时需要更多的时间。第二种方式需要更多的存储空间来存储倒排记录

    另一方面,由于两个关联词的扩展词表之间可以存在交集但不必完全相同,所以上述两种

    方式相对于隐式建立等价类的方法来说更具灵活性。这也意味着从不同关联词出发可以进行

    对称的扩展。图2-6 给出了一个例子。该例子中,如果用户输入windows,那么我们希望返回

    包含Windows 操作系统的文档。但是如果用户输入 window,虽然此时可以和小写的windows

    相匹配,但是不太可能会和Windows 操作系统中的Windows 相匹配。

    Image(7)

    2.2.4 词干还原和词形归并(Stemming and lemmatization)

    Image(8)

    2.3 基于跳表的倒排记录表快速合并算法

    一种实现的方法是采用跳表(skip list),在构建索引的同时在倒排记录表上建立跳表

    Image(9)

    Image(10)

    2.4 含位置信息的倒排记录表及短语查询

    2.4.1 二元词索引

    Image(11)

    在所有可能的查询中,用名词和名词短语来表述用户所查询的概念具有相当特殊的地位

    Image(12)

    ,存储更长的短语很可能会大大增加词汇表的大小。穷尽所有长度超过 2

    的短语并维护其索引绝对是一件令人生畏的事情,即使只穷尽所有的二元词也会大大增加词汇表

    的大小

    2.4.2 位置信息索引

    实际中更常用的一种方式是采用所谓的位置信息索引(positional index,简称位置索引)

    文档:(位置1,位置2...)

    Image(13)

    例:

    Image(14)

    位置索引可以进行,k词近邻搜索,但也提供了倒排记录表合并(与)的操作的渐进复杂性。

    Image(15)

    2.4.3 混合索引机制

    二元词索引和位置索引这两种策略可以进行有效的合并。假如用户通常只查询特定的短语,

    如Michael Jackson,那么基于位置索引的倒排记录表合并方式效率很低。一个混合策略是:对

    某些查询使用短语索引或只使用二元词索引,而对其他短语查询则采用位置索引。短语索引所

    收录的那些较好的查询可以根据用户最近的访问行为日志统计得到,也就是说,它们往往是那

    些高频常见的查询

    位置索引,处理开销最大的短语查询往往是这样一些短语,它们中的每个词都非常常见,但是组合起来却相对很少见,将查询 Britney Spears 加入短

    语索引可能仅仅对该查询提供一个大概 3 倍的加速效果,这是因为很多提到其中一个单词的文档都是相关文档。而如果将 The Who加入短语索引那么会对这个查询有 1 000 的加速效果。因此,实现中更期望将后者加入到短语索引中,尽管相对前者,其出现的频率较低

  • 相关阅读:
    【BZOJ2844】albus就是要第一个出场 高斯消元求线性基
    Python入门之面向对象module,library,package之间区别
    Python入门之字典的操作详解
    Python Web学习笔记之TCP/IP协议原理与介绍
    Python Web笔记之高性能网络编程
    Python Web学习笔记之面试TCP的15个问题
    Python Web学习笔记之TCP/IP、Http、Socket的区别
    Python Web学习笔记之TCP、UDP、ICMP、IGMP的解释和区别
    Python Web学习笔记之IGMP和ICMP的差别
    Python设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/Dzhouqi/p/3973530.html
Copyright © 2011-2022 走看看