论文部分内容阅读
本文研究了Top-k文档检索问题,即对给定的文档集D={d1,d2…,dn},对D构建索引,通过相关的打分函数给每个文档进行打分,使得对任意给定的模式P,返回文档集中与该模式最相关的前k个文档。在自然语言文本中,该问题主要以倒排索引为检索模型,它将“tf-idf”做为打分函数,根据得分检索出与查询关键字最匹配的多个文档。但是,由于倒排索引要求所处理的文档具有良好的分词特性,即词与词之间具有明显的分隔符,因此对于无结构的流式文档,比如DNA序列,音乐序列等,倒排索引无法适用。将文档看做连续的符号序列,通过在符号序列上构建全文索引结构,本文实现了在任意类型文档上的Top-k检索,同时还支持任意子串的检索。本文的工作是基于已有经典的Top-k文档检索框架,实现并改进了该框架,具体如下:首先,本文提出了适用于Top-k文档检索的广义后缀树的新的构造方法。相比于已有的需要将每个文档采用不同的分隔符连接成一个字符串的构造方法,我们只用一个分隔符连接文档,就能够构建广义后缀树。这样,我们的构造方法不仅能够适用于大字符集,并且需要更少的存储空间。其次,本文提出了Top-k文档检索中新的N-strcuture初始化方法。通过自底向上地规约N-structure,避免了原框架中需要对每个文档单独构造后缀树这一步骤,降低了所需空间。最后,在文档检索阶段,本文结合了简明有序树,提高了查询效率。通过在简明有序树上的rank/select操作,我们可以在O(1)时间得到树中任意内部结点的最右孩子叶结点,从而快速得到相应的检索区间。实验结果表明,相比于经典的检索方法,我们的方法查询效率提升了2-3数量级,可以在微秒时间内完成对模式的检索。我们的工程化的代码可以在https://github.com/Hongweihuo-Lab/Top-k-document-retrieval处获取。