基于Indri 的检索模型研究王莉军(渤海大学辽宁锦州121013)摘要:基于Indri 是开源的检索工具,针对以往单纯的语言模型无法支持结构化查询的目的,我们采用推理网络模型和语言模型两种模型相结合的方法,结合推理网络模型支持比较复杂的结构化查询(结构化通常指查询语言中的用来表达检索文档中词与词之间联系的operators ),和语言模型及平滑技术对推理网络中的一些节点进行有效的预估的优势使查询得到比较好的效果,提出了一套Indri 检索模型。
关键词:Indri ;检索;模型;查询中图分类号:N3文献标识码:A文章编号:1674-6236(2012)24-0005-03Indri -based retrieval modelWANG Li -jun(Bohai University ,Jinzhou 121013,China )Abstract:Based on Indri is open source search tools ,according to the previous simple language models cannot support structured query purposes ,we use the inference network model and language model two kinds of model combining method ,combined with the inference network to support more complex SQL (structured query language usually refers to the expression of words and word retrieval document links between operators ),and the language model and smoothing technology to inference network in some node evaluate advantages make the query to get better effect ,put forward a set of Indri retrieval model.Key words:Indri ;search ;model ;query收稿日期:2012-08-18稿件编号:201208081基金项目:辽宁省教育厅项目(2008005)作者简介:王莉军(1975—),女,辽宁锦州人,硕士,讲师。
研究方向:计算机教育教学。
Indri 是开源的信息检索工程Lemur 的一个子项目。
Indri是一个完整的搜索引擎,支持各种不同格式文本的索引创建,提出了优秀的文档检索模型,支持结构化查询语言,在研究和实际应用领域都有比较高的价值。
Indri 系统采用C++语言编写,提供了方便的API 供使用者调用,由于项目本身开源,对于开发者而言,也可以方便的对其进行二次开发。
1Indri 检索模型Indri 结合了推理网络模型(Inference net )和语言模型(language modeling )的优点,提出了一套检索模型,其利用推理网络模型的优势来支持比较复杂的结构化查询(结构化通常指查询语言中的用来表达检索文档中词与词之间联系的operators ),又利用语言模型及平滑技术对推理网络中的一些节点进行有效的预估,从而使查询得到比较好的效果[1]。
这之前,单纯的推理网络模型节点的预估采用的是规格化的tf.idf (这个值与词在文档中出现的频率称正比,与包含该词的文档数成反比)权重,而单纯的语言模型则无法支持结构化查询。
所以Indri 检索模型采用了两种模型相结合的方式[2]。
推理网络模型网络图如图1所示,实际上是一个贝叶斯网络(Bayesian networks )。
贝叶斯网络是一个有向,无环图。
网络中每个节点代表一个事件,有一个连续或者离散的结果集。
每个非根节点存储了一个条件概率表,这个条件概率表完全描述了与给定父节点的情况下该节点出现相关联的结果集的概率。
每个与根节点相关联的结果集被指派了一个先验概率。
这样在已知网络图,先验概率,条件概率表和节点代表的事件之后,就可以通过网络计算出检索文档中出现查询的概率,并按照这个概率值的大小进行排序输出。
主要包含有以下几类节点[3]:电子设计工程Electronic Design Engineering第20卷Vol.20第24期No.242012年12月Dec.2012图1推理网络模型网络图Fig.1Inference network network diagram《电子设计工程》2012年第24期1)文档节点D(Document Node);2)平滑参数节点alpha,beta(Smoothing parameter nodes);3)模型节点θ(Model nodes);4)特征表示节点r(Representation concept nodes);5)查询节点q(Belief nodes);6)信息需求节点I(Information need node)。
文档节点(Document Node):文档节点是文档表示的一个随机值。
Indri采用二进制特征向量集对文档进行表示,而不是一般模型中单纯的term序列,文档的特征向量表示可以挖掘出更多的文本的信息,例如短语,是否是大写字母词等。
文档中每个term的位置被一个特征向量表示,向量中的元素表示特征的有无。
如此一来可以将文档看作一个多伯努利分布(Multiple-Bernoulli distribution)的抽样。
举一个文档表示很简单的例子,假设文档是由5个词组成的,则我们用下面12个特征组成的特征序列来表示文档,如下[4],Document:A B C A B假设特征序列是[A B C AA AB AC BA BB BC CA CB CC]D={[100010000000],[010*********],[001000000100],[100010000000],{{[001000000000]}}}平滑参数节点:是为模型节点提供平滑参数。
模型节点Model nodes(M):模型节点代表所谓的特征语言模型。
在Indri框架中,它们是平滑过的多伯努利分布,该分布是对文档表示的一个建模。
网络中可能会有不止一个模型节点,与同一文档的不同表示相关联,如上图所示,模型节点包括title,body,h1等3个模型节点,分别为文档的title,body,h1部分的表示,这样就允许模型通过不同的文档表示来进行预估,合并。
这里需要计算P(M|D),P(M|D)=P(D/M)P(M)乙P(D/M)P(M)d M特征表示节点Representation concept nodes(r):特征表示节点是与上述文档表示中提到的特征向量直接相关的二进制随机值。
这里,同样的特征节点可能会在网络中出现多次,因为每个相同的特征节点可能会有一个不同的父节点。
P(r|D)=乙P(r|M)P(M|D)d M经过化简,可得到下式,tf r,D表示特征在文档中出现的次数P(r|D)=tfrzD+μP(r|C)|D|+μ查询节点Belief nodes(q):查询节点是用来合并特征节点或者其他查询节点的二进制随机值。
每个查询节点关联到不同的条件概率表,允许节点以多种不同的方式合并。
查询节点是根据Indri的结构化查询动态的添加到网络中,因此网络拓扑是随着每次查询改变的。
这使得网络很强大,根据不同的查询式,使用不同的打分方法。
信息需求节点Information need node(I):信息需求节点可以看作一个简单的查询节点,将所有的查询节点合并到一个节点,这个节点作为rank的基础[5]。
也就是说rank的依据是P(I=1|D,alpha,beta)。
例如一个查询:#weight(2.0#or(#1(north korea)iraq)1.0policy),查询的意思大概是“包含韩国或者伊朗以及policy的文档,并且包含north korea或者iraq所占的比重系数为2.0,而包含policy的比重系统为1.0”。
推理网络如图2所示。
再例如一个查询:#combine(#uw8(hurricane wind).(title)damage),这个查询的大概意思是“文档题目域中包含一个8个词的窗口,窗口中可以无序的包含hurricane和wind两个词,并且文档中包含damage这个词”。
推理网络如图3所示。
2Indri查询语言为了充分利用上面提到的检索模型,Indri提供了一套查询语言可以表达复杂的概念。
Indri查询语言是一种结构化查询语言,是由一些operation组成的,每个operation代表了推理网络中的一个查询节点(即q节点)[6]。
Operation可以分为以下几类:图3推理网络Fig.3Inference network图2推理网络Fig.2Inference network1)Basic operationIndri 查询语言的基本操作是继承Inquery 结构化查询语言的,举一些简单的例子:#uwN (t1t2…)包含N 个单词的无序窗口#odN (t1t2…)包含N 个单词的有序窗口#combine (q1q2…)合并查询q1和q2#weight (w1q1w1q2…)合并查询q1和q2并且设置了每个查询的权重#filrej (c s )当c 不满足的情况下计算表达式s #filreq (c s )当c 满足的情况下计算表达式s 2)Field operation这类操作符是为了支持结构化文档设计的。
最简单的形式,比如term.field ,意思是term 只有出现在field 时才是与查询相关的。
域可以是文档中的任何打了标签的信息。
例如可以是文档的一大段(如一个章节),一小段(如一个自然段),或者只有几个句子(如名词短语等)。
一个域也可以多次出现在文档中。
例如wash.np 就可以用来实现这样的查询,“查找出现在名词短语中的wash ”。
3)Extent retrievalIndri 也支持用域来在某一区域中打分。
例如查询#combine[field](q1,…qn ),在field 指定的区域中对(q1,…qn )进行打分和排序。
这样可以方便地支持类似段落查询或者语句查询等这样的需求。
4)Date and numeric retrievalIndri 来识别数字相关的性质,包括日期等。
为了查询数字相关的性质,Indri 提供了#less ,#greater 和#equal 等操作。