词条权值的局限。
上一篇blog以信息和概率的角度探讨了词条对于文档的权值。
见blog:http://blog.csdn.net/ice110956/article/details/17243071
在通过词条检索文档的模型中,我们假设每个文档出现的频率是近似相等的,或者与其词数成正比。其实也就是默认了其具有相同的重要性。
而在web搜索中,每个web页面的重要性是不相等的。比如wiki上关于某个信息的描述肯定比一个小学生blog更准确,即使小学生的blog中关键词出现了更多次。在比如某品牌旗舰店的信息肯定比淘宝一星卖家的信息更可信。
这就牵涉到一个关于页面重要性度量。
还有一点就是,基于词条频率的方法很容易被作弊。比如世界杯这个关键词很火,我就在自己的页面上用透明的字体隐藏一万个“世界杯”。
而且,不同于一般的文档,web页面有其特殊的结构和内容。其包含图片,文字,超链接等。而超链接对于衡量一个web页面有着很大的作用。pagerank也就是针对超链接的度量方式。
下图表现了简单的页面间的超链接关系。
基于超链接的pagerank:
如果一个web被许多其他web指向,那么他应该是一个很重要的web。而如果一个web指向了许多web,他并不一定是一个很重要的web。也就是指入链接比指出链接更有说服你。
很好地类比就是,微博上你有许多粉丝,那么你应该很有名;而如果你关注了很多了,你也许只是一个追星族。
还有,如果一群僵尸粉粉你,那么你可能是虚假广告;而如果很多名人粉你,那么你可能非常有名。也就是指入链接的重要度与其源web的重要度成正比。
综上所述,指入链接与链接重要度,是重要的度量指标。
基本模型:
下图是一个简单的指入链接和重要度模型:
一个web的重要度等于其指入链接重要度按比例相加。
如果不按比例,那么被指的节点权值肯定要大于指向他的值,这是不合理的。那么我们得到如下公式:
上式中,u代表要计算的节点,V表示所有指入他的节点,N表示指入节点分别的链接数。
如上图rank=53的节点,rank=100/2+90/3=53;
简单解法:
我们可以看出,R是递归定义的。我们要计算一个节点的值,要先知道指入他的节点的值。如果这个节点正好也指向原节点,那么源节点值也要改变。这有点像先有鸡还是先有蛋的问题。
所谓的稳定状态就是,各个页面的值满足定义的条件,不会改变,也就是我们最终想要得到的状态,如下就是一个稳定状态:
我们把问题转化为数学形式:
R表示各个页面pagerank的值向量:
A表示这样一个矩阵:
其中l(pj,pj)=1/N,其中N表示i节点的指出链接数。
那么,我们可以有如下迭代计算:
我们可以给定一个初值R0,不断迭代,直到Rn+1==Rn,或者变化很小,得到我们要的最终R。
或者,我们直接求解下式:
根据线性代数的知识,R为A关于1的特征向量。
于是我们又得到了一个非迭代解法。
概率数学模型:
Internet上的所有网页可以被抽象为一个有向图。而人们在网页间相互跳转可以抽象为一个状态到另一个状态的转换,人们在网页构成的互联网上,根据一定的概率通过超链接随机地从一个页面到另一个页面。
我们假设从一个页面到另一个页面只与当前的页面有关,也就是P(Xn|Xn-1,Xn-2,Xn-3...)=P(Xn|Xn-1)。
于是,我们可以用有向图以及马尔科夫链来抽象互联网上的超链接,也就是抽象为一个马尔科夫随机场。
(关于马尔科夫随机场以及相关知识,可见:http://blog.csdn.net/j123kaishichufa/article/category/1162092)
我们知道,马尔科夫系统有两个量:状态与转移概率矩阵,也就是我们这里的当前网页与通过某个链接转移到下一个网页的概率。当迭代到达一定次数,各个状态的概率值不再发生变化,也就是rank值不变,那么系统到达一个稳定状态,也就是平稳马尔科夫过程。
那么R表示初始概率,A表示转移矩阵,Rn为平稳马尔科夫过程的解。
于是,问题变为探讨如何求解平稳马尔科夫过程。
我们知道,在解平稳马尔科夫过程时,用到特征向量的求解方法,也就是上一部分非迭代方法。
现在我们在求解平稳马尔科夫过程的模型下,具体探讨实际计算中一些问题。
1. rank sink:
如下图,某个页面的rank到达一个圈后,由于rank没有出入,不断迭代下其中的rank值将不断增加。
下图中的D节点与上图也是相同的情况,我们把上图中三个节点抽象为一个节点就变为下图:
具体到求平稳马尔科夫的迭代过程就是,设D节点的rank(D)=1,并且转移概率D到D为1,那么下一次迭代的时候会变为
继续迭代得到:
随着迭代次数N的增加,R也会趋近于无穷大。
这里,我们考虑乘上一个阻尼系数d。得到如下公式:
在迭代计算矩阵相乘的时候能明显地说明其作用。
还是上述的问题,如果加了一个阻尼系数d,假设d=0.85,那么
继续迭代,得到
也就不会趋近于无穷大了。
也就是加入阻尼系数后,由于其小于1的性质,解决了上述问题。
2.Dead Ends
上图中的D,只有指入链接,没有指出链接。表现在矩阵上就是,转移矩阵最后一列全为0。
根据矩阵的知识,转移矩阵有特征值0,有特征向量0向量,那么R(N)最后可能会收敛到0向量。
一种解决方法是,把这种Dead end删除,迭代计算完成后再加入。
如上图,D被删除后,C变为Dead end。我们继续删除C,然后迭代计算A,B,再反向加入C,D,赋予其值。
还有一种方法,假设用户链接到这个页面后,就停滞不前了,并且选择从任意其他页面继续,也就是加上一个逃脱因子。得到公式:
逃脱因子的直观解释是,当用户点击进入D节点时,他会在这个页面中无路可去,最后不耐烦,选择关闭所有,从任意其他页面开始浏览。
那么d就是其继续浏览的概率,1-d就是其不耐烦关闭的概率。这个逃脱因子在上一部分的rank sink中也有类似的解释和作用。
假设一共有N个其他页面,于是任意跳转的概率就是(1-d)/N.
也就是,每个页面都有一个最小的rank值,(1-d)/N。这样避免了全0的列。
加入阻尼系数和逃脱因子后的解法:
公式变为:
矩阵表示变为:
具体的迭代步骤:
上述的迭代就是把公式分布求解,其中表示一个迭代的阈值。
pagerank有一个明显的缺点,他偏向于旧的页面。因为新加入的页面不可能有许多页面指向他们。
还有就是,搜索根据不同的用户,不同的搜索内容,其衡量重要性的方式也是大不相同的。pagerank很难满足所有要求。
这也是为什么pagerank需要许多其他算法辅助的原因。
推荐阅读:
http://blog.codinglabs.org/articles/intro-to-pagerank.html
http://www.cnblogs.com/fengyan/archive/2011/11/12/2246461.html