文章目录
一、simrank算法
simrank的主要工作是查询图上的一对结点的相似性。主要有两种理解方式
1.1、按照定义理解
直接按照上式就是v1和v2的相似度的(递归)定义,它是由彼此的父节点定义的。因为衰减因子c,他们总比彼此的父节点的相似度更低。
1.1.1算法
a的所有父节点和b的所有父节点一一作相似性比较后取平均。不过即使a和b有着完全相同的父节点,因为衰减因子的缘故它们的相似性也不会=1.
1.1.2 剪枝
只考虑一定范围距离内的节点,如果节点之间非常遥远则直接认为节点的相关度为0.
1.2 按照随机游走解释
d(a,b):从a节点随机游走到b节点所需的步数的期望。
m(a,b):从a节点、b节点同时出发,随机游走,相遇所需步数的期望。
下图为在积方图上的m(a,b),它的含义是a和b同时走到x节点,而只需要考虑所有的x节点就可以。
相似性的定义非常类似,只是用一个函数把l(t)映射到0-1区间上,使得相似性也可以在0-1区间上。
它的直观含义是:如果两个随机游走的点能尽快相遇,则说明这两个点有很强的相关性。
可以证明,这种定义和simrank传统的相似性的定义是等价的。
上图也等价于下式:
所以问题就在于,如何求出两个点之间的相遇时间?
offline阶段:对每个点走N次l步的随机游走并储存路径
online阶段:可以在之前储存的这些路径中找到很多u和v相遇的样本,代入f函数求相似度后取均值。
1.2.1 fingerprint trees算法
一种压缩offline储存路径,并方便online阶段查询的方法。
所有节点的一次采样,按照某种构建策略,共同构成一棵树,一共N棵树。
上图是五节点随机游走的一个逆序图。两个节点相遇后就融合成一个节点。
上图可以压缩成下图。边的标签为两个节点第一次相遇的步数。
同时对于每个u我们还储存了“哪些树是包含u的”。
1.2.2 index-based算法
这个算法进行了两方面的优化,一是过滤,而是索引。
1.2.2.1 过滤
下式可以在迅速估计h的基础上估计出v1,v2的上界,因为h是一个估计(下界),所以下式比上式更快但更松弛。如果上界未达到阈值则可以不计算这两个节点的相关性。
1.2.2.2 索引
在这个算法中,我们希望计算积方图上每个节点的标签。已知的是部分标签,我们可以通过方程组来解得想要的标签。
方程组的个数就是灰色截断后剩余树的深度。问题可以转换为:找到一组点,拿掉这一组点后,整个图上都不会有超过h的路径。这样剩余树的深度也不会超过h。——这个问题也称为h-go cover问题。
二、SEMsim——simrank应用于语义查询
例如,下图中Bo和John,他们与Aditi的相似度,如果按照simrank算法应该是相同的。但是SEMsim还考虑了另一个因素:概念的普遍性,以边的粗细表示。
新的算法如下。
1.归一化的Nuv改变了。
2.相关度整体乘了sem(u,v)用以表示这标签的语义相似性
3.给边赋予了权重。两个父节点之间的相关性对目标节点相关性的影响与两条父-子连边的权重有关。但并没有讲明这种权重是如何赋予的
关于标签语义相似性,它完全是人为定义的,只需要遵循下面三点
例如:描述共性的信息量/描述本身的信息量,信息量与使用的频繁程度成反比。因为,如果某个词频繁使用例如thing,说明它很宽泛,信息量不大。希望语义相似度高,则是希望信息量的重合更大。
SEMsim和simrank的区别就在于前者考虑了节点标签语义相似性,并且引入了边的权重。
三、Boosting SimRank with Semantics
作者:Tova Milo, Amit Somech and Brit Youngmann
目标:在保留simrank的声明性定义和有效计算的基础上将simrank拓展到语义领域。
贡献:
1.提出了semsim
2. 对应于simrank的随机游走模型,semsim也有一套对应的Semantic-Aware Random Walk (SARW),可证明与元原定义等价。在这个模型中,如果我们设定一个阈值,使得“只有在这个阈值以上的相似度才被考虑”,我们就可以简化积方图,但计算得到同样的结果。这样我们可以把时间复杂度大大降低,有些实验上甚至高达三个量级。
3. simrank中,过大的G方图引发了一些基于MC的优化。simrank的MC基本框架,会在O(每个节点的采样次数×长度边界)时间内返回一个估计的simrank分数。我们开发了一个类似的MC框架,从而可以直接应用已有的simrank的优化。
将simrank的随机游走模型改进成Semantic-Aware Random Walk (SARW),即考虑语义这件事会导致样本量的二次增加。为了克服,采用重要抽样,并且设计了一个无偏估计器,最后把时间控制在O(nw · t · d2),d是平均入度。进一步地,设计了剪枝,虽然最坏情况不变,但是在实验中速度已经和simrank相当。
3.1 相关工作
- simrank++ :考虑边全职;忽略语义,没有解决可伸缩性问题。
- Meta path-based top-k similarity search in heterogeneous information
networks:考虑元路径 - An information-theoretic definition of similarity.;Using information content to evaluate semantic similarity in a taxonomy基于本体信息和信息内容来度量相似性
- 过大的G方图引发了一些基于MC的优化[15, 34, 39].
四、An Information-Theoretic Definition of Similarity
Dekang Lin,1998
特点:适用于不同领域:只要有一个概率模型就适用。
前人工作的问题: 对数据的格式有很高的要求
本工作的优点:
- 普遍性。基于信息理论定义相似性,只要有概率模型就可以
- 基于假设而不是定义
4.1 对相似性的直观理解
- 共性越多就越相似
- 差异越大,相似性越小
- 完全相同时,不论共性如何,它们的相似性达到最大。
共性
下式表示A和B两个概念的共性,指的是陈述A和B之间共性的命题包含的信息量
在信息学中信息量是用负对数衡量的:
差异
还需要衡量两个物体之间的差异:
相似度
相似度是共性和差异的函数。因而也是共性和“描述所需信息量”的函数
4.2 假设
4.2.1 为什么说相似度应该介于0-1之间
0:应该有一个下界,例如真皮沙发和深度优先搜索,利率和矩形;他们之间的相似度谁也不比谁低。
1:由于直觉三,得到如果两个物体相同,则应该相似度为一个恒定常数。这个常数人为指定为1。显然,两个概念相同时description和common也相同,套用上面的公式得到:
4.2.2 相似性是不同角度描述的相似性的加权求和
假设共性是x1+x2,总共需要描述的信息量是y1+y2,加号左右代表两个角度。加权值是每个角度的信息量占比。
4.3 公式
基于上述假设可以得到以下公式:
五、考虑边的标签的情况
问题设定
5.1 Motivation
Lin基于一些对于“语义相关性”的直觉做出了一些假设,又用这些假设推导出了语义相关性的计算公式。semsim直接把它作为一种独立于网络结构的先验知识而应用于公式中。
类似地,我们也可以定义边的相关性的计算公式。但是边的相关性在应用起来却不那么直观:如果想利用节点的相关性而使用先验的节点的相关性,直接乘进去就好了;但是先验的边的相关性的作用是“改变父节点对子节点的影响”。
所以,我们不应该直接把边的相关性乘在原来的公式前边,应该放在求和号里边。原来semsim就是把父节点的相关性加权求和了,现在我们用边的相关性去修改这个权重。
所以我们做的事情是
- 定义边的相关性
- 利用边的相关性修改父节点权重
5.2 边的相关性
5.2.1 基本定义
假设语料库中所有的词为(x1,x2,…xn),它们出现的频率为(p1,…,pn),则∑pi=1
以xi为父节点,以a为边,可以得到一系列子节点,显然这些子节点在总样本集(x1,x2,…xn)中。进而我们可以得到:
把上述Pa(i,j)记作用边a的转移函数,它把一对概念映射到一个概率值上。利用这个转移函数,我们可以得到边a的转移矩阵。
一个直观的想法是,如果两条边的含义相似,那么在给定相同的起点的情况下,他们也会指向类似的终点。比如对于“上海”这个词语而言,“是家乡”和“是居住地”这两组关系指向的人物重合率很高,而“是家乡”和“最想去旅游的城市”这两组关系指向的人物重合率大概很低。而事实上“是家乡”和“是居住地”的语义也会比“是家乡”和“最想去旅游的城市”更接近。
两个转移矩阵之间的距离应与两条边指向的对象的重合率成负相关,所以我们可以用转移矩阵的距离来定义边的相似性:
距离可以是各种意义上的,比如差的二范数。
5.2.2 缩小时间&空间复杂度
边如此之多,如果每条边都用整个语料库建立一个n×n庞大的转移矩阵,时间空间复杂度极高。幸运的是,如果进行比较的边的语法信息比较类似,那么它们的起点和终点也会有偏好。例如“是家乡”“是居住地”这种关系,它们的起点总是一个地名,而终点往往是人名,而其他词汇在这两个关系的矩阵中对应的频数都接近0——可见转移矩阵是很稀疏的。
所以在具体构建转移矩阵的时候,不一定要统计语料库中所有的词汇,对于某一组边可以针对性地摈弃那些几乎不会出现的词语。转移矩阵并不一定要是n×n的。
更直接的办法是,直接指定转移矩阵的大小k和最大试验次数lmax。想要构造a边的转移矩阵时,就在原图上有放回地不停采样,每一次观察图上的一条a边:
这段代码返回一个字典,键是(起点,终点)二元数组,值是它的出现频次。一般来说其中涉及的点正好是k个,可以根据这个字典构建对应的转移矩阵。当然也有一种可能是已经到达了最大试验次数而没有采集到k个点,那说明这张图本身就极为稀疏,就只能随机取点补足到k个了。
5.3 语义相关性函数
5.3.1 semsim中使用的语义相关性函数
语义相关性函数指的是《不考虑结构信息,仅仅使用词汇本身去判断的语义相关性》,它作为一种外援或者说是先验知识而存在,记作sem(A,B)。
semsim中的sem(A,B)照搬了Lin的An Information-Theoretic Definition of Similarity中给出的节点的语义相关性函数:
或者也可以等价地写成:
在semsim公式中这个外援直接被作为因子,乘在原来的simrank公式前边:
5.3.2 利用边的相关性修改父节点权重
构建一个影响函数,将节点的相似性与边的相似性融合在一起:
其实最简单的影响函数就是f(s1,s2)=s1×s2,这不仅保留了0-1区间的值域,而且也符合直觉:只有父节点相似、且父节点到子节点的关系也相似的情况下,我们才倾向于判断子节点相似。
直接相乘的情况下,有时候理解上会有一些问题,比如起点是“图数据管理与挖掘”,两条边分别是喜欢和讨厌,终点指向两个不同的人。照理说这样的信息应该使两个人的相似性变低,但因为值域是0-1区间,它仍然使相似性增加了,至少比一对毫无联系的父节点要更有利于相关度的增加。这看起来是一个问题,但是换个角度讲,“喜欢”和“讨厌”虽然是反义词,却未必就是不利于相似性的。这要看我们对相似的理解是“相似”还是“相关”。某种程度上,如果两个人一个喜欢这门课,另一个不喜欢这门课,这当然比不上“都喜欢”这样强的联系,但至少说明他们都与这门课发生了联系——他们都是复旦大学的学生,都选了这门课,并且对着门课有自己的思考。
六、补充:异质图
信息网络的定义与常见的图不同,节点和边都有“类”的概念,分别称作对象类型和关系类型。如果类不止一个则为异质网络,否则称为同质网络。
在异质网络中,两个对象可以由不同的路径相连,不同的路径表达的语义是不同的。例如
APVC(“Author-Paper-Venue-Conference”)路径下的相关性强调作者参与的会议,而APSPVC(““Author-Paper-Subject-Paper-Venue-Conference””)路径下的相关性强调与作者论文主题相同的会议。
正是这些路径决定了对象之间的相关性关系。