一: 不同区域的权重计算

1.  对出现在文档的不通区域的term赋予不同的权值,例如title,author,body等,这样需要在倒排表中记录term每一次出现的位置

2. 对不同的区域赋予不通的权值,Gi, 使得 Sum(Gi) = 1

3. 对于这个Gi的值,可以通过机器学习的方法来确定:给定一个文档集合和query,以及query与文档之间的相似性,然后假定一个表达式,采用这个样本来计算各种系数

二:出现频率的权重计算

1. 在这种模型下,文档被认为是词的集合,词的出现位置和顺序都不重要,重要的是词的出现次数,同样地query也做这样的处理,因此“我比你好”和“你比我好” 是一样的

1. term在某一篇文档中的频率tf, 在一个文档集合内的频率cf,在文档集合内包含该term的文档数df

2. 如果只用tf,则语气词等的权重会最大,或者是专业文章内,例如自动化的文章中自动化会出现很多次,因此用自动化就不能区分开这些文章,因此要借助于cf或者df

3. 由于df比cf具有更好的作用来区分不同词与文档的相关性,因此采用df配合tf来决定term在文档里的权重

4. 定义idf = log(N / df), N是文档总数

5. term的权重 = tf * idf

6. 因此,定义query与文档的权重关系为:score(q,d) = for t in q :  sum += tf(t,d) * idf(t)

7. 因此,将文档表示为一个term以及term权重的向量,V = (t1, t2, ..., tn), 因此计算V1 与 V2的相似性可以如下的公式:

sim(V1, V2) = V1 * V2 / (|V1| * | V2|), 分子是向量的点乘,分母是向量长度的乘积,如果将V1, V2表示为有方向的直线,这实际是在计算这两条线夹角的cos值

8. 将query也看成是term的向量集合,query中的term权重可以简单地设定为相等

三. 对tf,df的一些变化

1. 一般不会说如果词在文档内出现20次,则记为20,因此必须采用公式来计算tf,一般是tf = 1 + log(出现次数)

2. 上面计算出来的tf会在很大的范围内,差别很大,因此需要将其范围变小,同时引入平滑因子来降低不同值之间的差距,缩小范围是因为tf需要在不同的文档间计算,否则一篇很长的文章内的词会具有很大的tf值,这样会降低其他文章的权重,会影响相关性。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tianqio/archive/2009/05/24/4212434.aspx

posted on 2010-01-07 10:54  Myhsg  阅读(317)  评论(0编辑  收藏  举报