|
引前几天有人问搜索引擎的相关度计算与信噪比问题,很早之前看过这篇文章,转贴供大家参考。 作者:卢亮
你知道google和百度两个关键词的相关度是多少么? --最后我将来回答这个问题
通常我们对于文本信息之间得相关性得计算都是采用向量的办法,我在以前的PPT里曾经提到过。然而对于文本信息更深层次的分析不能单纯从字面上分析一篇文章的关键词,更重要的是它隐含的扩展的意义。
传统的关于计算文本相关度和【网页和查询的相关性】的计算都是采用匹配的方式进行的,然而这只能是基于字面意义上的统计计算。这里介绍的做法是采用关键词相关性扩展的做法从而得到更加精确的相关度计算。
例子: 文章 A: 谈论的是大学教育,最高频的关键词是:学生[3],学习[2],大学[2] 文章 B: 谈论的是普通教育,最高频的关键词是:教育[5],教师[1],进修[1] []里是相对的权重,可以理解成 TF*IDF
根据传统的相关性计算,我们会得到如下的结果:
1. 文章A 与 文章B 不相关 2. 查询 学生,学习,大学只能返回文章A,不能返回文章B 3. 查询 教育,教师,进修只能返回文章B,不能返回文章A
分析: 这个显然是有一定的问题的,问题的出现在于我们通常将“字面”的意思做为分析的来源而且依靠和仅仅依靠这些“字面”的关键词做为文章相关性和查询相关性判断的唯一要素。
如何避免? 我在以前的文章中提到过【关键词相关度】的概念,举例说明: 当出现:{学习}这个词汇的时候,真实的表达的意义往往是这样的: {W1*学习,W2*教育,W3*教师,W4*大学。} 其中W1,W2...是学习和相关词汇的相关权重。
基于这样一个矩阵,我们就能够将一个词扩展成为一组词汇,因而也同时可以将文章所对应的向量扩展成一个更多词汇的集合。
这里的计算需要一个完整的相关度矩阵:M
M(i,j) = {关键词i,j的相关度} 而两篇文章的相关度的计算,也由简单的 R= Sigma Vi*Vi 变为 R= Sigma Vi*M(i,j)*Vj
查询关键词和文章的相关度也由简单的 R(i)=TF(i)*IDF(i) 变为 R(i)=Sigma TF(j)*IDF(j)*M(i,j)
下面碰到一个核心问题就是:关键词之间的相关度如何计算? 例如:学校和学生的相关度是多少? 计算方法: 假设一个文章集合 {C},总文章数目为N,其中含有单词A的文章总数为Na,含有单词B的文章总数是Nb,含有{A+B}的文章总数是 Nab,那么相关性这么计算
CorrAB= Nab/(Na+Nb-Nab)-(Na*Nb)/(N*N)
本计算中可能会得到负相关,如果考虑到Na,Nb都是小量,可以忽略,那么
CorrAB= Nab/(Na+Nb-Nab)
至此,要计算相关度之间的全部要素都获得了。
思考,那么到底 学校 和学生 之间的相关度是多少呢? 我们利用google来回答这个问题吧:
约有91,700,000项符合学校的查询结果 约有88,200,000项符合学生的查询结果 约有48,900,000项符合学生 学校的查询结果
Corr{学校,学生}=48,900,000/(91,700,000+88,200,000-48,900,000)=0.37
这个原理我以前应用在了计算【网页信噪比】上,和网页信噪比一起成为衡量一个网页的关键词的核心算法。 这也就是为什么6e的网页信噪比能够不依靠网页上现有的关键词而准确的判断网页的分类和相关度,是因为除了TF和IDF之外,我们能够从已有的文本集合里学到更多的“知识”。
那么百度和google的相关度应该不难计算了:
利用 google计算得到:2,950,000/(61,800,000+6,370,000-2,950,000)=0.03
利用 baidu计算得到:2,760,000/(21,700,000+12,200,000-2,760,000)=0.08
看来基本上相关度小于10%。
相关度在google的黑板报有篇文章,有兴趣的可以去看一下,帖一下google的外链:http://googlechinablog.com/2006/06/blog-post_27.html |
|