具体实施方式
本发明的基本构思在于:对现有技术中关于计算链接相似度的假设和理论基础将予以保留,这保证了本发明所得到结果的合理性;同时通过对给定节点对附近的节点不断扩展而构成子图,并利用这个子图来快速近似计算节点对的相似度,这种近似方法在精度损失较小的情况下使性能大幅的提升。
本发明是鉴于上述技术问题而产生的。本发明的一个目的是提出一种基于子图来快速近似计算全图中特定点对间链接相似度的方法和系统。
为了更全面地理解本发明及其优点,下面结合附图及具体实施实例对本发明做进一步详细地说明。
如图1所示的根据本发明的一个实施例的基于子图的全图特定点对间链接相似度的快速近似计算方法包括:
A、输入一个图结构和待计算相似度的节点对(步骤101)。该图结构可以用邻接表形式表示,比如一个10000个节点的图,与这个图对应的邻接表包括10000行,每一行包含若干个节点,这些节点分别于此节点直接相连。这个邻接表可以存放在文件中,也可以直接置于内存中。
B、对待计算相似度的节点对的节点进行反复扩展,从而由所述待计算相似度的节点和扩展的节点构成子图(步骤102)。首先将给定的目标节点对的两个节点加入种子节点集中,然后使所述目标节点对的所述两节点各自向自己的邻居随机游走一步,如果它们可以在某些邻居节点碰面,则将这些节点加入到种子节点集中,种子节点集构造完毕,否则继续随机游走直到它们在某些点碰面。接下来基于随机游走对种子节点集进行扩展,每次扩展后向子图加入与这些节点的直接相连的邻居节点,直到子图扩展到适当的规模则结束此过程。
C、迭代计算子图中节点对的相似度(步骤103)。每进行一次迭代,就会对该图中的任意两个节点之间的相似度进行更新,这个过程是循环的,第K次循环的结果将作为第K+1次循环的输入。对该步骤的详细说明在下文参考图2给出。
在计算过程中使用经典的基于链接信息的相似度计算算法SimRank,SimRank算法基于“如果两个对象指向了相似的对象,那么这两个对象很可能相似”的递归定义,在SimRank中,节点对的相似程度映射到区间[0,1],0表示节点对中的两个节点无任何关系,1表示节点对中的两个节点的相似程度最大。在子图和全图计算节点对的相似度时均使用SimRank算法。
D、当相邻两次迭代计算的结果满足收敛条件或其接近程度已经满足用户的要求时,终止迭代过程(步骤104)。
接下来,参考图2,对给定节点对附近的节点不断扩展构成子图过程(步骤102)更详细地说明。图2给出了根据本发明的扩展节点对附近节点构成子图的流程图。
如图2所示,扩展节点对附近节点构成子图的步骤进一步包括:
C1、找出子图扩展的种子节点集(步骤201)。首先将两个目标节点加入到种子节点集中,然后基于随机游走理论,让这两个节点各自随机游走一步,如果它们可以在直接相连的邻居节点碰面,则将这些碰面节点加入到种子节点集中,并结束此过程。否则继续重复上述步骤,直到两目标节点碰面。具体细节将结合图3中的例子详细说明。
C2、根据随机游走理论对种子节点集进行扩展(步骤202)。在上述步骤(步骤201)中已经得到了子图扩展的种子节点集,接下来对这些种子节点进行扩展,第一步扩展到与这些种子节点直接相连的邻居节点,将这些邻居节点加入到子图中。第二步再对刚加入到子图中的节点进行扩展,再将与这些节点直接相连的邻居节点加入到子图中。以此类推,对上述这些节点扩展若干步后构成一个规模适当的子图。该子图将用于下一步快速计算给定节点对的相似度值。
C3、通过设置节点度的阈值来控制子图扩展速度(步骤203)。在子图的扩展过程中会存在这样一个问题——子图的扩展速度过快。如果子图在基于随机游走理论扩展几步后的规模与全图的规模相差不多时,利用子图来近似计算便失去了意义。这样我们要考虑如何控制子图的扩展速度。根据幂率分布只有少数节点的度(节点的度即通过该节点出边和入边的数量之和)比较大,当扩展到这些节点时,下一步会将它的所有邻居节点加入子图,这是导致子图扩展速度过快的主要原因。这样我们通过控制节点的度,当节点的度超出某规定阈值时,锁定此节点以避免下一次对它进行扩展。
C4、得到合适的子图(步骤204)。到目前为止,我们已获得针对该特定点对的规模适当的子图,此子图将作为下一步迭代计算点对相似度的输入。
现在,参考图3,对上述步骤C1进行更细致的说明。图3给出了找出给定节点对首次碰面时的所有相遇节点的示例。
如图3所示,假设给定节点对A和B,要找出一个合理的子图扩展的种子节点集。首先将节点A和B加入到种子节点集中。基于随机游走理论,首先节点A和B各自向自己的直接邻居随机游走一步,从图中我们可以得知,节点A可以到达它的直接邻居(节点C,D,E等),但A和B不会在某点相遇。在这种情况下,节点A和B在它们刚才到达的直接邻居处再各自随机游走一步,它们会在三点相遇(X,Y,Z)。此时它们已经各走两步,即路径长度为2。它们再各自随机游走一步便会在U和V两点碰面,但此时的路径长度为3,大于首次碰面的最短路径2。故在该图中种子节点集为{A,B,X,Y,Z},即首次碰面路径共包含这五个节点。
接下来,参考图4,对根据本发明的基于子图来快速近似计算特定点对链接相似度的系统进行详细地描述。
如图4所示,根据本发明的基于子图来快速近似计算全图中特定点对链接相似度的系统包括:输入单元401、子图扩展单元402、迭代计算单元403、以及收敛判断单元404。
输入单元401用于输入一个图结构和待计算相似度的节点对。该图结构可以是以例如邻接表形式给出,比如一个10000个节点的图,与这个图对应的邻接表包括10000行,每一行包含若干个节点,这些节点分别于此节点直接相连。这个邻接表可以存放在文件中,也可以直接置于内存中。
子图扩展单元402,用于对该节点对附近的节点不断扩展,最后构成规模适当的子图。首先将目标节点对加入到种子节点集中,然后使两目标节点各自向自己的邻居随机游走一步,如果它们可以在某些邻居节点碰面,则将这些节点加入到种子节点集中,种子节点集构造完毕,否则继续随机游走直到它们在某些点碰面。接下来基于随机游走对种子节点集进行扩展,每次扩展后向子图加入与这些节点直接相连的邻居节点,重复此过程直至得到一个规模适当的子图。下文中将参考图5对该子图扩展单元402进行进一步说明。
迭代计算单元403,用于通过迭代计算子图中各个节点对的相似度,从而得到特定节点对的相似度值。每进行一次迭代,就会对该图中的任意两个节点之间的相似度进行更新,这个过程是循环的,第K次循环的结果将作为第K+1次循环的输入。
收敛判断单元404,用于判断相邻两次迭代计算的结果是否满足收敛条件或其接近程度是否已满足用户要求,若满足则终止迭代过程,否则继续迭代。
接下来,参考图5,对子图扩展单元402进行进一步说明。图5给出了根据本发明的一个实施例的子图扩展单元402的结构框图。
如图5所示,根据本发明的一个实施例的子图扩展单元402进一步包括节点对计算种子节点集模块501、种子节点集扩展模块502、阈值控制模块503、以及子图获取模块504。
计算种子节点集模块501用于获得子图扩展的基本种子节点集。首先将给定的两目标节点加入到种子节点集中。接着使两目标节点分别向其邻居节点随机游走一步,若它们可在某些节点相遇,将这些节点加入到种子节点集中,结束此过程。否则继续随机游走,直到在某些点碰面为止。
节点集扩展模块502用于将种子节点集扩展为规模适当的子图。基于随机游走理论,首先对种子节点集中的节点进行一步扩展,到达它们的直接邻居节点,将这些新扩展到达的邻居节点加入到子图中,然后再对这些新扩展到的邻居节点进行扩展,直到子图达到适当的规模。然后将全图中的对应的链接关系添加到子图中。
阈值控制模块503用于通过分析节点的度来决定是否对该节点进行扩展,用于控制子图扩展的速度。根据幂率分布:少数节点的度会比较大。并且其它节点很容易扩展到这些度大的节点,因为扩展到某节点的概率与这个节点的度成正比。当扩展到这些度大的节点,下一次将会把该节点的直接邻居全部加入到子图中,这是导致子图扩展速度过快的主要原因。这样我们通过控制节点的度,当节点的度超出某规定阈值时,锁定此节点(锁定节点即在在下一次迭代时此节点不再向外扩展)避免下一次对它进行扩展即可有效地控制子图的扩展速度。
子图获取模块504用于得到相应的子图。在计算过程中使用经典的基于链接信息的相似度计算算法SimRank,SimRank算法基于“如果两个对象指向了相似的对象,那么这两个对象很可能相似”的递归定义,在SimRank中,节点对的相似程度映射到区间[0,1],0表示节点对中的两个节点无任何关系,1表示节点对中的两个节点的相似程度最大。在子图和全图计算节点对的相似度时均使用SimRank算法。对于特定的节点对,在子图上计算和在全图上计算时分别有不同的得分,但两者差别不明显,此时我们用特定节点对在子图上的得分来近似全图上的得分。到目前为止,已获得针对该特定点对的规模适当的子图,此子图将作为下一步迭代计算点对相似度的输入。
现在参考图6对本发明的基于子图的全图中特定点对链接相似度快速近似计算系统的硬件结构示例进行说明。如图6所示,根据本发明的一个实施例的基于子图的全图中特定点对链接相似度快速近似计算系统包括CPU 601、ROM 603、RAM 604以及输入/输出控制器605,并且这些部件是由主机控制器602而互连的。该实施例的基于子图的全图中特定点对链接相似度快速近似计算系统还可进一步包括存储设备608、通信接口609、光驱610、键盘611、显示器606以及图形控制器607。
CPU 601依照存储在BIOS、ROM以及RAM中的程序来操作,并且由此控制系统的各个部分。图结构数据可通过多种方式输入设备输入,如存储设备(硬盘,闪存)608,光驱610,键盘输入或通过网络传输。在逻辑结构上,这种图结构数据有多种表现形式,最常见的是邻接表或邻接矩阵表示方法。图结构随后会被读入存储设备608。存储设备608还存储供计算机使用的本发明的程序、应用、操作系统等等的代码和数据。此后,所读取的程序和数据将被加载到RAM 604中以供CPU 601使用。
从上述结构实例中可以看出,任何具有通用计算机功能的硬件都可以用作本发明需要的硬件。应该指出的是,图6仅示出了根据本发明的一个实施例的硬件结构。相应地,对其他各种实施例来说,只要对其可以应用本发明实施例,那么这些结构都是可行的。此外,本发明还可以使用硬件、软件、或者软硬件组合来实现。
至此,已对本发明进行了描述。与同类方法横向比较,本发明提出的方法能够通过子图快速近似计算特定节点对的相似度值,这是本发明的一个突出的优点。其次,本发明建立在合理的理论模型上,以折中的方法用较小的精度损失获得大幅的性能提升。
对于本领域的普通技术人员来说可显而易见的得出其他优点和修改。因此,具有更广方面的本发明并不局限于这里所示出的并且所描述的具体说明及示例性实施例。因此,在不脱离由随后权利要求及其等价体所定义的一般发明构思的精神和范围的情况下,可对其做出各种修改。