信息检索模型与评估

信息检索的前提是对信息内容的索引提取,所谓的索引就是指用于标识信息内容的项。建立信息的索引的方法,通常可分为两类:一种是手动定义索引,一种是自动获取索引。而我们所要面临的数据源,既可能是模块化或结构化的语言,譬如HTML语言,又可能是非结构化的语言,譬如自然语言;既可能是与上下文相关的词汇,又可能是与上下文无关的词汇;既可能是一个简单的单词又可能是一个词组(这里的数据源前提假设为英文,对于中文的信息检索,由于已经存在成型的信息检索模型,如果要套用在中文信息检索中,需要进行中文分词)
索引建立的关键问题是:我们通过什么样的方式来确定哪些单词是可以用作索引的?我们可以选择什么样的方法来标记出这些单词?
对于信息检索的效果,我们可以通过两个参数来进行量化参考:
召回率 与查询项目相关的信息的数量的估值
精确率 与查询项目相关的信息的精确程度的估值
当然,我们希望这两个值越高越好,因此每个文档中的索引与对应的召回率和精确率的估值是我们所要关心的重点。
但是我们需要额外注意一下我们应该选取何种词性的词语选择成为索引。 很显然,譬如连词、介词等等这样词性的词汇就应该尽量避免使用,而含有语义性的词语则适合充当索引。
以下是集中建立信息检索模型的方法。

一种基于频率的检索建立模型 : TF-IDF

基于该模型建立的检索索引,首先应避免考虑功能词。即功能词将不包含在计算的词汇之中。
计算每个在文档D[i]中的出现单词T[j]的单词频度(我在作业中使用的是频率,屏蔽了单词个数分布不均的情况,但可能会造成误差。)tf[i,j]。即tf[i,j]的值为词汇j在文档i中出现的次数(或频率)
选择一个阈值频度(频率),用于筛选出文档的高频单词。
这一步的工作主要是可以筛选出可以很好标识文档的索引项集合,通过筛选出的索引项,我们能够从众多文档中区分出我们所要找到的文档,可以保证检索的召回率。当一个词汇的频率在其他的文档中不高时,可以保证检索的精确率。
但是我们通过频度来进行衡量的话,会出现一个问题,即单词个数的分布不均,这样会影响检索结果的准确性。因此解决这个的办法通常有两个:一个是规范化标准化(即可计算频率),或者是添加另一个参数,如反向文档频率
对于词汇j, 计算其反向文档频率的公式如下:

\[idf_j = log\frac{N}{df_j} \]

此处定义df[j]为文档出现词汇j的频度。于是我们可以发现,当词汇j仅仅存在于一个文档中时,idf[j]的值最大,为log(N);当词汇j存在于每一个文档中时,idf[j] = 0。
换言之,idf值越高,其精确度也就越高。
于是我们可以计算词汇j在文档i中的权值

\[w_{ij} = tf_{ij} \times idf_j \]

我们可以通过词汇的权值来辨别出文档是否与之相关。而建立索引其中一个关键的目的是在于能够将文档区分开来。所以我们可以通过词汇的权值来建立起文档的索引。
我们进一步总结和抽象,可以将一个文档被描述为一个存在于高维空间中的点。从这样一个观点看过去,当在空间中两个点非常相近,就说明这两篇文档非常相似。如果一个高频索引词汇没有很好的在文档之间区分开,则会增长文档空间的空间密度。我们的目的是为了更好的将两两文档区分清楚,以增加检索的精确度,因此我们所需解决的是如何区分好文档索引词汇,使得文档空间密度不至于特别高。

词汇区分度评估方法

我们定义词汇区分度值为dv[j] = Q - Q[j] 用于标记词汇j的区分度值。这里的Q是平均距离,Q[j]是参考标记词汇j之后的平均距离

\[Q = \frac{\sum^N_{i=1}\sum^N_{k=1, i \neq k}sim(D_i)sim(D_k)}{N(N-1)} \]

区分该词汇是否是一个好的索引主要通过dv[j]的大小来确定。如果dv[j]>0就表明词汇j是一个好的标识,如果dv[j]<0就表明词汇j是一个不好的标识。
另一种词汇权值标记方法,定义文档i中的词汇j的权值为w[i,j] = tf[i,j] * dv[j]

posted @ 2017-03-17 15:30  Ant°  阅读(386)  评论(0编辑  收藏  举报