1、评分公式
coord(q,d):
一个评分因子,基于有多少个查询terms 在特定的文档中被找到。通常一篇包含了越多的查询terms 的文档将比另一篇包含更少查询terms 的文档获得更高的分数。这是一个搜索时的因子是在搜索的时候起作用,它在Similarity 对象的coord(q,d)函数中计算。
queryNorm(q):
一个修正因子,用来使不同查询间的分数更可比较。这个因子不影响文档的排名(因为搜索排好序的文档会增加相同的因数),更确切地说只是为了尝试使得不同查询条件之间更可比较性。这因子是在搜索的时候起作用,由Similarity 对象计算。
缺省idff(t in d)算法实现在DefaultSimilarity 类中,公式如下:
tf(t in d):
与term 的出现次数有关系,定义为term t 在当前算分的文档d中出现的次数。对一个给定的term,那些出现此term 的次数越多的文档将获得越高的分数。
缺省的tf(t in d)算法实现在DefaultSimilarity 类中,公式如下:
idf(t):
代表反转文档频率。这个分数与反转的docFreq(出现过term t 的文档数目)有关系。这个分数的意义是越不常出现的term 将为最后的总分贡献更多的分数。
缺省idff(t in d)算法实现在DefaultSimilarity 类中,公式:
t.getBoost() :
一个搜索时的代表查询q中的term t 的boost 数值,具体指定在查询的文本中,或者由应用程序调用setBoost()来指定。需要注意的是实际上没有一个直接的API 来访问一个多个term 的查询中的一个term 的boost 值,更确切地说,多个terms在一个查询里的表示形式是多个TermQuery 对象,所以查询里的一个term 的boost 值的访问是通过调用子查询的getBoost()方法实现的。
norm(t,d):
取得一小部分boost 值和长度因子:
document boost:在添加文档到索引之前通过调用doc.setBoost()来设置。
Field boost:在添加Field 到文档之前通过调用field.setBoost()来设置。
lengthNorm(field):在文档添加到索引的时候,根据文档中该field 的tokens数目计算得出,所以更短的field 会贡献更多的分数。lengthNorm 是在索引的时候起作用,由Similarity 类计算得出。
当一篇文档被添加到索引的时候,所有上面计算出的因子将相乘起来(multiplied)。如果文档拥有多个相同名字的fields(multiple fields with same name),所有这些fields 的boost 值也会被一起相乘起来(multiplied together):
然而norm 数值的结果在被存储(stored)之前被编码成(encoded as)一个单独的字节。在检索的时候,这个norm 字节值从索引目录中读取出来,并解码回一个norm 浮点数值。这个编/解码行为,会缩减索引的大小,这得自于精度损耗的代价。
2、TF-IDF算法
是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
2.1、TF(Term Frequency)
是指某一个给定的词语在该文件中出现的次数。在一份给定的文件里,词频(TF)指的是某一个给定的词语在该文件中出现的频率。这个数字通常会被归一化(分子一般小于分母 区别于IDF),以防止它偏向长的文件(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。
TF计算公式:
词频(TF) = 词t在文章d中出现的次数;
标准化公式:
词频(TF) = 词t在文章d中出现的次数 / 文章d的总词数;
或:
词频(TF) = 词t在文章d中出现的次数 / 文章d中出现次数最多的词的出现次数;
2.2、IDF(Inverse Document Frequency)
是一个词语普遍重要性的度量。如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
IDF计算公式: 逆文档频率(IDF)= log(语料库的文档总数 / (包含该词的文档数+1))
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。
IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。)但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档,这就是IDF的不足之处。
2.3、TF-IDF
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF计算公式: TF-IDF = 词频(TF)X 逆文档频率(IDF)
TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。
3、向量空间模型(vector space model)
向量空间模型把用户的查询要求和数据库文档信息表示成由检索项构成的向量空间中的点,通过计算向量之间的距离来判定文档和查询之间的相似程度。然后,根据相似程度排列查询结果。向量空间模型的关键在于特征向量的选取和特征向量的权值计算两个部分。
3.1、基本原理
对于任一文档
,我们可以把它表示为如下t维向量的形式:
其中,向量分量wtj代表第i个标引词ki在文档dj中所具有的[权重],t为[系统]中标引词的总数。在[布尔模型]中,wtj的取值范围是{0,1};在向量空间模型中,由于采用“部分匹配”策略,wtj的取值范围是一个连续的实数区间[0,1]。
在检索的前处理中,一篇文档中会标引出多个不同的标引词,而这些标引词对表达该篇文档主题的[能力]往往是不同的。也就是说,每个标引词[应该]具有不同的权值。如何计算文档向量中每个标引词的权值,不仅关系到文档向量的形成,也关系到后续的检索匹配结果。
标引词权重的大小主要依赖其在不同环境中的出现频率统计信息,相应的权重就分成局部权重和全局权重。
局部权重(Local Weight)ltj是按第i个标引词在第j篇文档中的出现频率计算的权重。它以提高查全率为目的,对在文档中频繁出现的标引项给予较大的权重。
全局权重(Global Weight)gt则是按第i个标引词在整个系统文档集合中的分布确定的权重。它以提高查准率为目的,对在许多文档中都出现的标引项给予较低的权重,而对仅在特定文档中出现频次较高的标引项给予较大的权重。计算全局权重的典型方法就是逆文档频率IDF(Inverse Document Frequency)加权法。
gi = log(N / ni)
其中,N为系统文档总数,ni为系统中含有标引词ki的文档数。
3.2、向量空间模型的分析
向量空间模型最早起源于文本信息检索实践,对揭示信息检索的基本原理做出过重要贡献。在VSM中,研究人员成功地将非结构化的文本信息表示成向量形式,为随后的各种文本信息处理操作奠定了数学计算的基础。向量空间模型在检索处理中所具有的先进技术特征主要表现在以下几个方面。
(1)对标引词的权重进行了改进,其权重的计算可以通过对标引项出现频率的统计方法自动完成,使问题的复杂性大为降低,从而改善了检索效果。
(2)将文档和查询简化为标引词及其权重集合的向量表示,把对文档内容和查询要求的处理简化为向量空间中向量的运算。
(3)采用部分匹配策略,使得在算法层面上基于多值相关性的判断处理得以实现。
(4)根据文档和查询之间的相似度对检索结果进行排序,使对检索结果数量的控制与调整具有相当的弹性与自由度,有效地提高了检索效率。
当然,向量空间模型理论也存在着明显的缺陷,具体包括以下几个方面。
(1)从文档中抽取出的各标引词之间的关系做了相互独立的基本假定,这会失掉大量的文本结构信息,如文档句子中词序的信息,因此降低了语义的准确性。
(2)相似度的计算鼍较大,当有新文档加入时,必须重新计算标引词的权重。
(3)在标引项权重的计算中,对不同语言单位构成的项都只考虑其统计信息,而仅以该信息来反映标引项的重要性,显然缺乏全面性。