信息检索技术——向量空间模型
上次介绍了信息检索技术——布尔检索,布尔模型已经可以解决一个很重要的问题,就是找到和用户需求相关的文档(其中还需要很多处理,比如分词,归一化,去掉停用词等等,我们只是介绍主要的框架流程)。但是这样找到的文档会有很多,也许上千个,也许上万个,这远远不是用户所要的。用户也不会去从几万个文档中挑选自己要找的。因此我们需要对结果进行排序,把最能满足用户需求的文档放在最上面显示给用户,就像google和baidu做的一样。细心的朋友就能发现,其实信息检索是一个循序渐进的剪枝和筛选过程,最后留下的就是用户想要的。
因此,我们需要一种评分机制来进行排序,通过得分的高低排除top N的文档返回给用户。这个评分通过什么来确定呢?当然是用户查询的query和返回文档的相似度了。计算相似度有很多种方法:
方法1 Jaccard coefficient
此方法看上去很好理解,就是用query和文档共同出现的词的个数,除以一共的词数。当然也有很多问题
1 没有考虑文档中词出现的次数(没有考虑tf因素)
2 没有考虑文档的频率(没考虑idf因素)
3 没有考虑文档的长度,长文档和短文档计算相似度的差别会很大
下面我们一起看看一个非常著名的模型——空间向量模型
方法2 向量空间模型(VSM)
首先介绍2个概念,tf和idf
tf即term frequency, 表示一个term t出现在document d中的次数,这是文档中一个很重要的概念。出现次数更多意味着重要程度越高,但是需要注意的是,相关度的提高并不是和次数的提高成同比的。因此通常tf需要做如下的处理
w1= log10(tf+1)
这样做就是要弱化次数对于相关度的影响
df即document frequency,表示一个term在整个文档集中出现的频率。与tf相反,一个term的重要程度是随着它在语料库中出现的频率成反比的。比如and,or等词在几乎所有文档中都出现,那么这些词的意义就很弱,而一些专业词汇只在几篇文档中出现过,显然意义更加重要。idf就是df取倒数,这里只是为了表示方便。
同样,为了弱化频率的效果,我们也做如下处理
w2= log10(N/df) 其中N为文档总数,df是文档term在所有文档集合中出现的次数。
需要注明的是,tf和idf的计算有很多中变体,不一定要完全使用上面的公式,很多情况还要根据文档集合的大小具体分析。
有了上面的tfidf作为权重,我们可以很简单的计算所有词的权重,然后用一个N维的向量来表示一个文档,同样用N维的向量来表示query,query中如果没有对应的term,则该维权重为0。
于是,利用我们的数据知识,我们可以知道,在同样的空间中,如果两个向量的夹角越小,说明两个向量越相似,反之两个向量越无关。因此使用cosine定理,我们可以很简单地得到向量之间的相似度
空间向量模型可以说是信息检索中相当常见并且非常重要的模型之一。理解起来非常简单直观,并且效果也是不错的。希望对大家有所帮助。