信息检索及信息过滤方法概述

本文概述了信息检索的主要技术,包括全文扫描、倒排文件、签名文件和聚类方法,以及引入语义信息的新方法,如自然语言处理、隐性语义标引和神经网络。全文扫描涉及KMP、Boyer-Moore算法等,签名文件通过Hash函数和重叠编码减少搜索时间,倒排文件是最常用的IR方法,而聚类用于加速搜索。新方法尝试将NLP与IR结合,如隐性语义标引和神经网络,以提高检索效率和语义相关性。
摘要由CSDN通过智能技术生成
(转)信息检索及信息过滤方法概述
A Survey of Information Retrieval and Filtering Methods
1995年
Christos Faloutsos and Douglas Oard
University of Maryland
College Park, MD 20742
{christos, oard}@eng.umd.edu
中科院计算所软件室 王 斌 译
(2002 年 1 月 25 日重新修改 )
wangbin@ict.ac.cn
 
摘要
本文总结了信息检索 (IR) 的主要技术,主要内容分成两部分:第一部分,对传统 IR 方法 ( 全文本扫描 (full text scanning) 、倒排文件 (inversion) 、签名文件 (signature file) 及聚类 (clustering)) 的回顾;第二部分,介绍一些试图引入语义信息的新的 IR 方法 ( 如自然语言处理 (NLP) 、隐性语义标引 (latent semantic indexing, LSI) 、神经网络 (neural network) 等等 )
1 引言
本文分成两部分。第一部分回顾了传统文本检索的方法。总结传统方法出于两个目的:一,传统方法对了解新进展提供了丰富的背景知识;二,对这些传统方法进行变形或者扩展构成新方法的中心内容。具体来说,本文考察了 (1) 全文扫描方法及其在近似搜索 (approximate searching) 方面的进展; (2) 可能在任何 IR 系统中都使用的快速倒排文件方法; (3) 签名文件方法; (4) 情报学中传统使用的聚类方法。
总结上述背景知识后,本文第二部分中介绍了近年来一些将 NLP 技术和 IR 方法进行结合的尝试,如隐性语义标引、神经网络等等。
文章最后是结论部分,作者给出了每种方法的要点及相关建议。
2 传统文本检索
2.1 全文扫描(Full Text Scanning)
确定某个字符串在哪些文档中出现,最直接的方法就是在所有的文档中查找该字符串 ( 称为子串测试, substring test) 。“字符串”是一系列字符组成的序列 ( 不包含通配字符, Don’t Care Characters 。比如我们常用 * 或者 ? 来表示通配字符,译者注 ) 。如果一个查询是由多个待查字符串组成的复杂布尔表达式,那么就需要额外的步骤来判断通过子串测试找到的匹配是否满足该布尔表达式 ( 查询求解, query resolution) 。
本文不打算深入考查有关一般正则表达式的搜索方法,该主题可以参照 Hopcroft 及 Ullman 于 1979 年撰写的《自动机理论》 [31,pp.29-35] 。给定一个正则表达式,可以构造一个有限状态自动机,该自动机可以检测该正则表达式在文档中的出现。自动机的搜索时间与文档大小成线性关系,但是自动机的状态个数可能与正则表达式的大小成指数关系。
然而,如果搜索模式仅限于字符串,那么就可以应用比有限状态自动机更高效的方法。下面我们就讨论这些方法。
(1)       最显而易见的子串测试方法是:将搜索字符串与文档相应字符串进行比较,如果不匹配,则将文档指针右移一个字符位置后 ( 也可以说将搜索字符串右移一个位置 ) 重新将搜索字符串与文档当前的字符串比较,直至找到该字符串或碰到文件结束为止。该方法虽然简单易行,但算法实现时速度很慢。假设搜索的字符串长度为 m ,文档的长度为 n ,则最坏情况下需要 O( m* n) 次比较。
(2)       Knuth 、 Morris 及 Pratt [37] 提出一种只需要 O( m+ n) 次比较的算法 (KMP) 。 KMP 的主要思路就是,不论何时,只要能够预测到字符串的不匹配,则可能将搜索字符串右移不止一个位置。该方法需要对搜索字符串做一些预处理工作来检测递归的字母序列。预处理的时间为 O( m) 。 ( 该方法设计精巧,是数据结构课程中的典型内容,译者注 )
(3)       当前所知道的最快的子串测试方法由 Boyer 与 Moore 提出 [5] 。他们提出对字符串进行从右到左的比较;如果不匹配,搜索字符串可最多右移 m 个位置再进行匹配。最坏情况下,该方法需要 n + m 次比较,但通常情况下,比较的次数远小于这个数目。例如,对于一个随机的长度为 5 的搜索串 ( m=5) ,该算法的典型实现需要考查文档的 i/4 个字符 (i 为开始匹配的字符在文档中的位置 ) 。同样,该方法需要 O( m) 的预处理时间。
(4)       近来对基本算法的变形可以参见 Sunday 文 [71]
(5)       子串测试的另一种方法基于自动机理论。 Aho 及 Corasick [1] 于 1975 年提出一种基于有限状态自动机的方法,该方法允许同时并行搜索多个字符串。搜索的时间为 O( n) ,建立自动机的时间与待搜索字符串的长度成线性关系。
(6)       Wu 和 Manber [78] 提出了一种能够容忍键入错误的搜索方法。该方法以每次一个字符的方式扫描数据库,并通过一种灵巧的位编码来记住当前已经匹配的字符串。该方法速度很快 ( 在 Sun 级别的工作站上几秒钟就可以查询数兆文本 ) ,也很灵活。其源码可从 Arizona-Tucson 大学匿名下载。
总之,每种全文扫描方法的优点都在于不需要空间消耗 ( 无索引 ) ,极小的插入和更新的费用 ( 不需要更新索引 ) ;缺点在于反应时间太长,该缺点在面对大数据量时表现得尤为突出。所以,全文扫描方法常常用专用硬件实现 (Hollaar , 1983) [30] ,或者将该方法同能够限制搜索范围的其他访问方法 ( 如倒排文件 ) 相结合使用。
2.2 签名文件(Signature File)
签名文件方法当前引起了广泛的关注。在本方法中,每个文档都通过 Hash 函数及重叠编码 (superimposed coding) 产生一个称为签名 (signature) 的位串。文档的签名结果顺序存入一个单独的文件 ( 签名文件 ) 中,签名文件比原文件小得多,因此可以提供更快速的搜索。 Files 和 Huskey[ 26] 将该方法用于一书目数据库。他们使用一停用词表来忽略普通的词,对非普通词则使用一个自动过程将它们还原成词干。同时,他们使用一个数值函数而非对照表 (look-up table) 作为 Hash 函数,。 Harrison [28] 使用签名文件方法以加快子串测试速度。他提出使用相邻的连续字母 (n-gram) 作为 Hash 函数的输入。 Barton 等人 [3] 于 1974 年提出使用等频率文本片段 (equi-frequent text segment) 代替 n-gram 。因此,签名中“ 1 ”的服从均匀 (uniform) 分布。 Tsichritzia 和 Christodoulakis [73] 试图使用无重叠编码的签名文件。他们的方法通过将文档中每个词的签名串联起来就得到该文档的签名。这样的话,就必须保留位置信息。 Rabitti 和 Zizka [48] 声称该方法预期将比重叠编码更加重 CPU 的负担。
其他一些学者采用了类似的方法用于格式化的记录。一些文章中提出了对文本检索有潜在利用价值的想法。
Roberts [52] 1979 年在一个电话目录的应用中使用了一级签名文件。他讨论了许多有趣的应用细节,其中的两个细节可以用于文本检索:
-             签名文件采用一种位片 (bit-slice) 的方式存储。即所有签名的头一位连续存放,次一位再连续存放, … 。尽管该结构使得更新很困难,但它能够减少检索的 I/O 费用。
-             他建议在构造签名时,查询中经常出现的标引项必须特殊对待。
然而, Roberts 并没有提供这个方面的任何数学分析,而文档 [23] 中则对这一点进行了尝试。文章表明,如果词的访问模式和出现频率事先已知,并且分布足够偏斜的话 ( 八二开 ) ,那么与同样大小的普通签名文件相比,该方法设计出的签名文件,可以避免约 50% 的误选 (false drop) 。
此外,人们还提出了具有更高搜索速度的二级签名文件 [55][54] ;签名树 [ 14] 以及基于签名的分割 [39] 也被提出,但是没有应用于真实数据库的时间结果的报道。
重叠编码方法的设计和研究由来已久。首先将重叠编码用于文本检索的人是 C. N. Mooers [46] 。他发明了一种很精巧的基于边缘凹口卡片和探针的机械设备。该设备可以快速处理对书目的联合查询。关键词抽取由人工实现,而 Hash 函数则使用对照表实现。
这种采用边缘凹口卡片的方法引起了广泛的兴趣。 Stiassny [68] 使用字母对来产生每个词的签名。他还证明:对于一个给定的签名长度,当文档的签名中“ 1 ”的数目等于“ 0 ”的数目时,误选概率达到最小。 Orosz 和 Tachacs [47] 使用乔丹定律 (Jordan’s theorem) ,给出了文档签名中“ 1 ”的概率分布的一个封闭形公式。 Kautz 和 Singleton [35] 讨论了设计一个没有误选的签名系统的问题,他们从编码和信息理论的角度对该问题进行了研究。尽管他们的方法在理论上很有意义,但在实现时有很多缺点:需要对照表;不易处理日益增长的词汇表;签名集合的设计需要巨大的开销。
在对签名文件方法的讨论即将结束之际,需要指出的是,该方法的主要缺点就是当文件很大时反应时间较长。优点在于实现简单,对插入的处理效率高,能够处理词的部分查询,能够支持不断增长的文件以及对键入和拼写错误的容错性。另外,该方法易于并行化 ( 见文 [67] 中在 Connection Machine 上的一个实现 ) 。
2.3 倒排文件(Inverted File)
每个文档都可以用一系列关键词来表示,从检索目的来说,这些关键词描述了文档的内容。只要找到文档,便可以找到文档中的关键词。反过来,如果按关键词建立到文档的索引,便可以根据关键词快速地检索到相关文档。具体地,关键词被存储在索引文件 (index file) 中 ( 比如,按字母顺序存储 ) ,对于每个关键词,都有一个指针链表,该表中的每个指针指向与该关键词相关的某个文档,所有指针链表构成置入文件 (posting file) 。这种倒排文件的方法几乎被当前所有的商用 IR 系统所采用 [61]
组织索引文件可以采用更复杂的方法,如: B 树, TRIE 树, Hash 表或者这些方法的变形或混合 ( 见 [36] 第 471-542 页 ) 。 STAIRS [32] 使用了二级索引文件。以相同字母对开始的词在二级索引中放在一起,一级索引中包含指向二级索引的指针,每个指针指向每个字母对。 Lesk [40] 使用一张负荷过度、链分开的 Hash 表 (over-loaded hash table with separate chaining) 来获得对一书目数据库的快速检索。
倒排文件方法的缺点有:存储开销大 ( 倒排文件的大小可能会达到原文件大小的 300% [29]) ;动态环境下索引文件更新和重新组织的开销大;如果表太大太多,则将它们合并的开销巨大。
该方法的优点有:实现相对简单,查询速度快,很容易支持同义词查询 ( 例如,同义词可以在词典中组织成穿插表 (threaded list)) 。由于上述原因,倒排文件的方法在当前绝大部分的商用系统中被采用 (DIALOG , BRS , MEDLARS , ORBIT , STAIRS ,见 [61] 第二章 ) 。
近年来倒排文件方面方面的进展和挑战包括:
-           置入表分布不均匀 ( 满足 Zipf’s Law [1] [82]) 。这意味着小部分词出现频率高,而大部分词只出现一次或两次。这样的话,有些置入表很长,而大部分置入表的长度为 1 或 2 。为了解决问题,人们提出了混合方法策略 [24] 以及使置入表可调增长的算法 [25]
-           在 现实中,索引文件通常很大,可能有数兆甚至上 G 。而不管索引文件的大小如何,都要求必须能够快速地处理插入。快速增量式插入的技术可以参见 Tomasic 等人 [72] 、 Cutting 和 Pedersen [12] 、 Brown 等人 [6] 的工作。他们的做法基本上都是基于置入表分布的不均,对于较长和较短的置入表,分别采取不同的处理办法。为了解决倒排索引存储开销太大的问题,人们提出了一些压缩方法: Zobel 等人 [83] 将 Elias 的压缩体制 [22] 用于置入表。最后要提到的是,“ glimpse ”软件包 [44] 中使用一个很粗的索引加上“ agrep ”包 [78] 来实现近似搜索。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值