向量空间模型

向量空间模型(Vector Space Model)是一个常用的相似度计算模型,lucene排序模型中使用了向量空间模型,下面结合搜索引擎排序过程中query和文档相关性计算来说明向量空间模型。

搜索引擎可以为搜索请求的query返回一大堆相关的文档(通常是关键字匹配了的文档),但是需要对这些文档按与query的相关性进行排序。对于文档d,和query q,我们需要把它们表示成方便后续计算的一个向量,我们以搜索引擎索引词典为基准,将词典中所有的词作为一个标准向量T=(t1,t2,...,tN),我们把文档d表示成d=(m1,m2,...,mN),query q表示成向量q=(n1,n2,...,nN),mi和ni分别表示d和q中ti出现的频率。有很多种方法计算d和q的相关性,包括:


其中计算内积(dot)的方法直接利用频率来计算,没有进行规范化,计算的相关性值范围很广,其他几个进行了规范化,结果值在0-1之间。向量空间模型采用Cosine的计算方法。但是还有一个问题,如果我们直接拿向量d和q来计算它们的cosine值,由于d和q都使用的是频率。这样,如果d是一篇长文档,里面几乎包含了q中所有的关键字,而且频率比较高,这样d和q的相似度就比较高了;相反,如果d是一篇短文档,与q中关键字重叠的频率比较低,那样q和d的相关性就不高了。实际上,这是不合理的,例如文档I中含有10000个词,而词a出现了10次;文档II中含有100个词,而a出现了5次。这样在相似度计算时,文档I中a对最后结果的影响比文档II中的a要大。这显然是不合理的,因为a只点文档I的0.1%而却占文档II的5%。为了解决这类问题,我们引入词频(TF)和反词频(IDF)两个概念,给文档和query中词加权重。

tf-idf是基于这样的一个基本思路的:如果词t在文档中出现的次数比较高,并且文档库中包含词t的文档数比较少,这样词t的权重就比较大。

文档d的权重向量表示成,其中


并且

  • \mathrm{tf}_{t,d}  是t在文档d中出现的词频(局部变量)
  • \log{\frac{|D|}{|\{d' \in D \, | \, t \in d'\}|}} 反转文档词频(Inverse  document frequency) (全局变量). |D| 是文档库中文档总数; |\{d' \in D \, | \, t \in d'\}| 是包含词t的文档数.

使用consine 计算文档dj 和query q的相似度:

\mathrm{sim}(d_j,q) = \frac{\mathbf{d_j} \cdot \mathbf{q}}{\left\| \mathbf{d_j} \right\| \left \| \mathbf{q} \right\|} = \frac{\sum _{i=1}^N w_{i,j}w_{i,q}}{\sqrt{\sum _{i=1}^N w_{i,j}^2}\sqrt{\sum _{i=1}^N w_{i,q}^2}}


需要讨论的问题——向量维度为什么要以语料库中的所有词为基准,这样维度势必很高,计算复杂度不就非常高吗?

这样维度确实很高,但是我们反过来想一下,如果不以语料库中的所有词为基准,有三种标准:以query中的词为基准、以文档d中的词为基准和以query和文档词的并集为基准。前两种情况很明显是不合理的,因为q中词d中不一定有,反之,d中的词q中不一定有,这样单方面考虑维度是不合理的。第三种方法看似合理,但是实际操作起来很不合理,因为每次query请求都要计算每篇文档d和query的并集,显然不切实际。因此需要以语料库中的所有词为基准,如前面看到的,可以事先计算好idf。

并且我们可以按照如下方法来降维:

去停用词

英文单词转词根形式

只选取名词

选择次数较多的词作为term


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值