探究Lucene计算权重的过程

探究Lucene计算权重的过程

我们知道,影响一个词在一篇文档中的重要性主要有两个因素:

1 term frequency (tf):该词在当前文档出现了多少次,tf越大,说明越重要。

2 document frequency (df):有多少文档包含该term,该词越大说明太普通了,越不重要。

比如solr一词在文档中出现次数很多,说明这篇这篇文档主要是跟solr有关的;那比如the this it which 诸如此类的词,也很多,但重要吗,很明显不重要,为什么?因为每一篇文档可能都有很多这样的词,所以这时候就是由df来决定了。

计算权重的公式如下:

Wt,d = tft,d * log(n / dft)

Wt,d:词在文档中的权重

tft,d:词在该文档中出现的频率次数

n: 文档总数

dft:包含这个词的文档的数量

当然,不同的系统可能有自己不同的实现。

 

 

 

VSM: 向量空间模型算法

1 我们把文档看做一系列的词

2 每一个词在文档中都有自己的权重

3 不同的词根据自己在文档中的权重来影响文档打分

4 我们把文档中词的权重看做一个向量:

Document Vector = {weight1, weight2, …… ,weight N}

5 我们把Query也用向量表示

Query Vector = {weight1, weight2, …… , weight N}

6 我们把搜索出来的文档向量和query向量放在一个N维空间,每一个term是一个维度。

7 我们认为两个向量之间的夹角越小,相关性越大。所以我们计算夹角的余弦值作为相关性的打分,夹角越小,余弦值越大,打分高,相关性越大

查询语句一般是很短的,包含的词(Term)是很少的,因而查询向量的维数很小,而文档很长,包含词(Term)很多,文档向量维数很大。你的图中两者维数怎么都是N呢?在这里,既然要放到相同的向量空间,自然维数是相同的,不同时,取二者的并集,如果不含某个词(Term)时,则权重(Term Weight)0

 

举例子:

查询语句共有3个term, 文档共有5个term

 

Term1

Term2

Term3

Term4

Term5

Document1

0

0.179

0

0.66

0.345

Document2

0

0.245

0.123

0.66

0.8

Query

0.154

0

0

0.66

0.5

 

计算2篇文档跟查询语句的相关性打分分别为:

得到的结果第二个比第一个大,所以返回的结果第二个排在第一个前面

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值