网络图中的节点推荐方法和服务器以及存储介质与流程

文档序号:18545229发布日期:2019-08-27 21:35阅读:214来源:国知局
网络图中的节点推荐方法和服务器以及存储介质与流程
本发明涉及计算机
技术领域
,尤其涉及一种网络图中的节点推荐方法和服务器以及存储介质。
背景技术
:在大规模社交网络上,每个用户可以用一个节点来表示,计算个性化网页排名(personalizedpagerank,ppr),通过ppr可以表示用户之间的关联性。例如,可以确定出社交网络中人与人之间的关系链。现有技术提供一种分布式图处理框架,例如sparkgraphx是其中一种处理框架,它是基于spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求。spark的graphx有一个ppr的算法包,graphx里的ppr采用了幂迭代(poweriteration)的计算方法,具体来说,根据以下的公式做多次迭代计算:π←α·π+(1-α)·π·d-1·a,其中,π是ppr矩阵,d是图的拉普拉斯矩阵,a是图的邻接矩阵,α是停止概率。在中等规模的spark集群上,这个算法包不能处理有超过100万条边的社交网络,其中,中等规模指的是具有30个执行器(executor),每个executor有4个核(core)和20吉字节(gigabyte,gb)内存。现有技术提供的graphx的ppr算法中,需要多个大小是n的平方次的矩阵,其中n是图的节点数量,然而社交网络的节点数量通常是千万级别以上,使得存储空间消耗极大。并且由于需要多次迭代计算,因此具有较高的计算复杂度,降低了推荐效率。技术实现要素:本发明实施例提供了一种网络图中的节点推荐方法和服务器以及存储介质,用于减少对存储空间的占用,简化ppr的计算复杂度,提高了推荐效率。本发明实施例提供以下技术方案:一方面,本发明实施例提供一种网络图中的节点推荐方法,包括:从推荐服务器中预先存储的网络图中获取到第一节点,所述网络图中包括有n个节点,所述n个节点中存在通过边连接的相邻节点,所述n的取值为正整数,所述第一节点属于所述n个节点;从所述第一节点开始,以预设的停止概率在所述网络图中进行ω条的随机游走,所述ω的取值为正整数;当所述ω条的随机游走停止在m个节点上时,则根据所述ω和所述m个节点分别对应的随机游走停止条数分别确定所述m个节点分别对应的个性化网页排名ppr,所述m个节点属于所述n个节点,所述m的取值为正整数,且所述m小于或等于所述ω;根据所述m个节点分别对应的ppr从所述m个节点中确定出第二节点,并向所述第一节点推荐所述第二节点。另一方面,本发明实施例还提供一种推荐服务器,包括:节点确定模块,用于从推荐服务器中预先存储的网络图中获取到第一节点,所述网络图中包括有n个节点,所述n个节点中存在通过边连接的相邻节点,所述n的取值为正整数,所述第一节点属于所述n个节点;随机游走模块,用于从所述第一节点开始,以预设的停止概率在所述网络图中进行ω条的随机游走,所述ω的取值为正整数;排名获取模块,用于当所述ω条的随机游走停止在m个节点上时,则根据所述ω和所述m个节点分别对应的随机游走停止条数分别确定所述m个节点分别对应的个性化网页排名ppr,所述m个节点属于所述n个节点,所述m的取值为正整数,且所述m小于或等于所述ω;推荐模块,用于根据所述m个节点分别对应的ppr从所述m个节点中确定出第二节点,并向所述第一节点推荐所述第二节点。在前述方面中,推荐服务器的组成模块还可以执行前述一方面以及各种可能的实现方式中所描述的步骤,详见前述对前述一方面以及各种可能的实现方式中的说明。另一方面,本发明实施例提供一种推荐服务器,该推荐服务器包括:处理器、存储器;存储器用于存储指令;处理器用于执行存储器中的指令,使得推荐服务器执行如前述一方面中任一项的方法。另一方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。在本发明实施例中,首先从推荐服务器中预先存储的网络图中获取到第一节点,网络图中包括有n个节点,n个节点中存在通过边连接的相邻节点,第一节点属于n个节点,然后从第一节点开始,以预设的停止概率在网络图中进行ω条的随机游走,当ω条的随机游走停止在m个节点上时,则根据ω和m个节点分别对应的随机游走停止条数分别确定m个节点分别对应的个性化网页排名ppr,m个节点属于n个节点,m的取值为正整数,且m小于或等于ω,最后根据m个节点分别对应的ppr从m个节点中确定出第二节点,并向第一节点推荐第二节点。本发明实施例中随机游走的每一步采用预设的停止概率来完成,在网络图的每个节点上做多次随机游走,在ω个随机游走停止时估计网络图中第一节点分别与m个节点之间的ppr,并根据m个节点分别对应的ppr确定出第二节点,并向第一节点推荐第二节点。本发明实施例不再采用幂迭代的方法,因此可以减少对存储空间的占用,由于本申请实施例中采用以预设的停止概率在所述网络图中进行ω条的随机游走,因此可以更快速的实现随机游走的停止,在随机游走停止就可以计算出m个节点分别对应的ppr,因此简化ppr的计算复杂度,提高ppr的运行效率,提高了推荐效率。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的网络图中的节点推荐方法的流程方框示意图;图2为本发明实施例提供的monte-carlo方法求ppr的计算流程示意图;图3为本发明实施例提供的网络图中相邻节点通过边连接的示意图;图4为本发明实施例提供的基于邻接表进行随机游走的实现示意图;图5为本发明实施例中增加吞吐量的示意图;图6为本发明实施例提供的ppr计算方法与现有技术中graphx计算ppr的运行时间对比示意图;图7为本发明实施例提供的ppr计算方法对于排序质量指标和精确度指标在不同的公开数据集上的示意图;图8-a为本发明实施例提供的一种推荐服务器的组成结构示意图;图8-b为本发明实施例提供的一种随机游走模块的组成结构示意图;图8-c为本发明实施例提供的一种邻居节点集合确定单元的组成结构示意图;图8-d为本发明实施例提供的另一种随机游走模块的组成结构示意图;图8-e为本发明实施例提供的一种目标节点确定单元的组成结构示意图;图8-f为本发明实施例提供的另一种随机游走模块的组成结构示意图;图9为本发明实施例提供的网络图中的节点推荐方法应用于服务器的组成结构示意图。具体实施方式本发明实施例提供了一种网络图中的节点推荐方法和服务器以及存储介质,用于减少对存储空间的占用,简化ppr的计算复杂度,提高了推荐效率。为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。以下分别进行详细说明。本发明网络图中的节点推荐方法的一个实施例,具体可以应用于网络图中向一个节点推荐另一个节点的场景中,例如社交场景中的好友推荐,游戏场景中的师徒推荐等,本发明实施例中的网络图可以预先存储在推荐服务器中。请参阅图1所示,本发明一个实施例提供的网络图中的节点推荐方法,可以包括如下步骤:101、从推荐服务器中预先存储的网络图中获取到第一节点,网络图中包括有n个节点,n个节点中存在通过边连接的相邻节点,n的取值为正整数,第一节点属于n个节点。在本发明实施例中,推荐服务器中预先存储网络图,该网络图包括有n个节点,n个节点中存在通过边连接的相邻节点,即在网络图中有的相邻节点之间通过边连接起来,有的相邻节点之前没有边连接。本发明实施例中的网络图可以是有向网络图,或者无向网络图。以有向网络图为例,举例说明如下,在游戏社交网络中,玩家s给玩家t赠送游戏金币,玩家s和玩家t之间具有赠送游戏金币的关系,因此两个玩家分别对应的节点之间通过边连接起来。在本发明的一些实施例中,在有向网络图中的边还可以具有权重。例如,a(s,t)可计算为玩家s给玩家t送了a(s,t)个游戏金币,a(s,t)可以表示相邻节点之间的边的权重。以无向网络图为例,每个用户用于无向网络图中的一个节点来表示,两个用户之间存在社交关系时,这两个节点之间可以建立有边,该边不具有方向性。在本发明实施例中,第一节点属于网络图中的某一个节点,该第一节点可以作为随机游走的起点。102、从第一节点开始,以预设的停止概率在网络图中进行ω条的随机游走,ω的取值为正整数。在本发明实施例中通过蒙特卡罗的方法(monte-carlomethod)进行随机游走,蒙特卡罗的方法也称统计模拟方法,被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法,蒙特卡罗的方法使用随机数(或伪随机数)来解决确定性算法,随机数是实现蒙特卡罗模拟的基本工具,因此首先需要确定一个停止概率。在本发明实施例中,随机游走(randomwalk)也称随机漫步,随机游走是指基于过去的表现,无法预测将来的发展步骤和方向。核心概念是指任何无规则行走者所带的守恒量都各自对应着一个扩散运输定律,接近于布朗运动,是布朗运动理想的数学状态,本发明实施例中通过随机游走来计算两个节点之间的个性化网页排名(personalizedpagerank,ppr)。在本发明实施例中,从第一节点开始以预设的停止概率在网络图中进行多条的随机游走,随机游走的条数用ω表示。在本发明的一些实施例中,步骤102从第一节点开始,以预设的停止概率在网络图中进行ω条的随机游走,包括:a1、根据第一节点在网络图中的位置确定出第一节点对应的邻居节点集合。其中,在网络图中的第一节点的周围且与第一节点通过边连接的节点构成第一节点对应的邻居节点集合。a2、从第一节点开始进行第i条的随机游走,按照相邻节点之间的边的权重确定随机游走到第一节点对应的邻居节点集合中的第三节点,第三节点属于n个节点,i为大于0且小于等于ω的正整数。其中,步骤a2中以ω条的随机游走中的某一条随机游走的过程为例,例如以第i条的随机游走为例,在本发明的一些实施例中,在网络图中的边还可以具有权重,因此可以按照相邻节点之间的边的权重确定第一节点进行随机游走后,可以走到第一节点对应的邻居节点集合中的第三节点。a3、根据第三节点在网络图中的位置确定出第三节点对应的邻居节点集合。其中,在网络图中的第三节点的周围且与第三节点通过边连接的节点构成第三节点对应的邻居节点集合。进一步的,在本发明的一些实施例中,步骤a3根据第三节点在网络图中的位置确定出第三节点对应的邻居节点集合,包括:a31、使用第一节点对第一二元组集合进行哈希分割,得到邻居表二元组集合,第一二元组集合包括:第一节点和第一节点对应的邻居节点集合;a32、使用第三节点对第二二元组集合进行哈希分割,得到第三二元组集合,第二二元组集合包括:第三节点和第一节点;a33、根据第三二元组集合和邻居表二元组集合进行聚合或者消息传递,得到第三节点对应的邻居节点集合。其中,当从网络图上第一节点开始做随机游走的时候,首先从第一节点对应的邻居节点集合中按权重分布选取一个邻居节点a。以预设的停止概率来决定是否要继续从邻居节点a做随机游走,直到这个随机游走停止。如果第一节点对应的邻居节点集合是空集,让随机游走从头开始做。如果网络图是弱连通或者连通的并且ω足够大的时候,则网络图上的每一个节点必定出现在至少一条随机游走中。在本发明的一些实施例中,网络图以邻接表的方式存储,具体来说,首先,对每个节点s,计算s的邻居集合nbr(s)。然后,对每个二元组<s,nbr(s)>,用节点s来做哈希分割哈希分割(hashpartitioning)。在计算ppr时,当从s开始做随机游走,首先获取s的邻居集合nbr(s)。然后,从nbr(s)选择一个节点u,于是构成一个新的二元组<u,s>。对这个二元组<u,s>,也一样用u做哈希分割。接着,将新的二元组集合与邻居表二元组集合做聚合,因此获取到u的邻居集合nbr(u)。从nbr(u)选取下一个节点,直到这个随机游走停止。进一步的,在本发明的一些实施例中,步骤102从第一节点开始,以预设的停止概率在网络图中进行ω条的随机游走,除了执行前述步骤a1至步骤a3之外,还可以包括如下步骤:当第i条的随机游走结束时,使用检查点的方式将第i条的随机游走产生的随机游走结果存储到分布式文件系统hdfs中;当ω条的随机游走全部结束时,将ω条的随机游走产生的随机游走结果聚合起来,得到ω条的随机游走对应的最终结果数据。其中,当随机游走停止时,使用检查点的方式(checkpoint),将第i条的随机游走产生的随机游走结果存入分布式文件系统(hadoopdistributedfilesystem,hdfs),其中,检查点是一个内部事件,这个事件激活以后会触发数据库写进程将数据缓冲中的随机游走结果写出到数据文件中。最后将所有停止的随机游走聚合起来,便得到最终结果。进一步的,在本发明的一些实施例中,步骤a2从第一节点开始进行第i条的随机游走,按照相邻节点之间的边的权重确定随机游走到第一节点对应的邻居节点集合中的第三节点,具体可以采用别名抽样算法来确定出随机游走到的第三节点,具体的,可以包括:a21、对第一节点对应的邻居节点集合中所有相邻节点之间的边的原权重值进行取值重新分配,得到第一节点对应的邻居节点集合中所有相邻节点之间的边的新权重值;a22、获取第一节点对应的邻居节点集合中所有相邻节点之间的任意一条边的新权重值和任意一条边对应的别名,任意一条边对应的别名为第一节点对应的邻居节点集合中相邻节点之间的一条边;a23、获取从第一节点对应的邻居节点集合中所有相邻节点之间的边中随机选择的一条边;a24、根据抽样出的随机数与随机选择的一条边的新权重值之间的数值关系,确定随机选择的一条边或者随机选择的一条边对应的别名为抽样选中的边;a25、根据抽样选中的边对应的权重从第一节点对应的邻居节点集合中确定出第三节点。其中,在上述步骤a21中首先对第一节点对应的邻居节点集合中所有相邻节点之间的边的原权重值进行取值重新分配,例如计算别名和新权重时,先将原来权重归一化,计算时再将原来的权重放大k倍,然后从值大于1的边分配一些值到小于1的边中,直到没有大于1的样本为止,最后得到第一节点对应的邻居节点集合中所有相邻节点之间的边的新权重值。在步骤a22中,为第一节点对应的邻居节点集合中所有相邻节点之间的任意一条边确定新权重值和任意一条边对应的别名,最终可以得到第一节点对应的邻居节点集合中所有相邻节点之间的所有边对应的新权重值和别名,其中每个边对应的别名为第一节点对应的邻居节点集合中相邻节点之间的一条边。在步骤a23中,从第一节点对应的邻居节点集合中所有相邻节点之间的边中随机选择出一条边,例如抽样时,先根据边的下标随机选择一条边。然后再产生一个随机数。在步骤a24中,根据抽样出的随机数与随机选择的一条边的新权重值之间的数值关系,确定随机选择的一条边或者随机选择的一条边对应的别名为抽样选中的边,即可以确定出抽样选中的边是本条边还是本条边对应的别名,抽样出的随机数与随机选择的一条边的新权重值之间的数值关系具体可以是:该随机数小于新权重值时选择本条边为抽样选中的边,否则选择本条边对应的别名作为抽样选中的边。在步骤a25中,在获取到抽样选中的边之后,根据抽样选中的边对应的权重从第一节点对应的邻居节点集合中确定出第三节点。本发明实施例中可以采用上述的别名抽样算法来确定随机游走所到达的目标节点,简化了ppr的计算过程,提高ppr的运行效率,提高了推荐效率。进一步的,在本发明的一些实施例中,步骤a21对第一节点对应的邻居节点集合中所有相邻节点之间的边的原权重值进行取值重新分配,包括:确定第一节点的邻居节点个数超过预设的个数阈值,个数阈值由网络图中的相邻节点个数的最大值确定;将第一节点对应的邻居节点集合拆分为多个邻居节点子集合;针对每个邻居节点子集合中所有相邻节点之间的边的原权重值进行取值重新分配。其中,在网络图中经常出现具有很多邻居的节点,例如在社交网络中,经常会出现有些好友数量特别多的节点。这些大节点的存在,通常会造成数据倾斜问题。为了解决这个问题,本发明实施例中还可以执行多层次的别名抽样算法,首先将大节点进行随机拆分,形成多个邻居节点子集合,针对每个邻居节点子集合中所有相邻节点之间的边的原权重值进行取值重新分配。需要说明的是,针对每个邻居节点子集合,也可以执行步骤a22至步骤a25,从而可以有效的避免数据倾斜问题。a4、按照从第一节点随机游走到第三节点的方式,从第三节点继续进行第i条的随机游走,直至第i条的随机游走结束。在上述的步骤a2中描述了从第一节点进行第i条的随机游走后走到了第三节点,在本步骤a4中仍以第三节点作为起始点,再次进行第i条的随机游走,循环执行步骤a3至步骤a4,直至当前的第i条的随机游走结束,在第i条的随机游走的执行过程中记录每步随机游走产生的随机游走结果。a5、按照第i条的随机游走的方式进行其余的ω-1条的随机游走,直至ω条的随机游走全部结束。在上述的步骤a1至步骤a4中描述了从第一节点进行第i条的随机游走直至第i条的随机游走结束的全过程,接下来在本步骤a5中以前述第i条的随机游走的方式执行其余的ω-1条的随机游走,直至ω条的随机游走全部结束。循环执行步骤a1至步骤a4,直至ω条的随机游走全部结束,在ω条的随机游走过程中记录每步随机游走产生的随机游走结果。在本发明的一些实施例中,上述步骤102从第一节点开始,以预设的停止概率在网络图中进行ω条的随机游走,包括:从第一节点开始,同时进行c个随机游走,其中,c满足如下条件:1≤c≤ω;在进行c个随机游走时,对于c个随机游走中的每一条随机游走,如果在当前步里以预设的停止概率没有停止,则继续进行下一步的随机游走;在c个随机游走完成当前步之后,从第一节点开始又启动新的c个随机游走,直到第一节点启动了ω个随机游走。在现有技术中,如果每个节点同时走一个随机游走,当所有游走停止了,才启动每个节点走下一个随机游走,就会造成如下问题:随机游走的长度不一样,可能会造成计算资源浪费;另外,随机游走数量ω可能会比较大,导致计算时间非常长。另一方面,如果每个点同时走ω个随机游走,会导致计算集群资源负载过重,比如增加磁盘的读写代价,反而会造成更长的计算时间。为了解决这些问题,本发明实施例采用了增加吞吐量的流水线处理方式。具体来说,一开始每个节点同时走c个随机游走的第一步,其中1≤c≤ω。第一步之后,有些随机游走会以α的停止概率停止。在没有停止的随机游走继续走第二步的时候,每个节点又启动新的c个随机游走的第一步。依此类推,直到每个点都启动了ω个随机游走。假设10个节点里先走3个节点,其中,3个节点里有两个节点不符合要求即停止,然后会从剩下的7个节点里再找3个节点出来做随机游走,接下来从剩余的4个节点中再找3个节点出来做随机游走,最后对剩余的1个节点做随机游走。103、当ω条的随机游走停止在m个节点上时,则根据ω和m个节点分别对应的随机游走停止条数分别确定m个节点分别对应的个性化网页排名ppr,m个节点属于n个节点,m的取值为正整数,且m小于或等于ω。在本发明实施例中,以预设的停止概率在网络图中进行ω条的随机游走,这些ω条的随机游走会停止在网络图中的m个节点上,这针对m个节点中的每个节点都对应有一个随机游走停止条数。当ω条的随机游走停止在m个节点上时,则根据ω和m个节点分别对应的随机游走停止条数分别确定m个节点分别对应的ppr。例如这m个节点分别为:节点1、节点2、…、节点m,若有h1条随机游走停止在节点1上,则可以根据ω和h1获取节点1的ppr值,若有h2条随机游走停止在节点2上,则可以根据ω和h2获取节点2的ppr值,同样的有hm条随机游走停止在节点m上,则可以根据ω和h1获取节点m的ppr值。因此,对于m个节点中的任意一个节点x,若有h条随机游走停止在节点x上,则根据ω和h获取节点x的ppr。ppr可以是指网络图上两个节点s和t之间的ppr值π(s,t),例如π(s,t)定义为从节点s开始做随机游走(randomwalk)停止在t的概率。举例说明如下,采用monte-carlo方法来估计节点之间的ppr值,就是在社交网络的每个节点上做多次随机游走,其中随机游走的每一步的停止概率为α,从而估算出每个节点停止在其他节点的概率。例如,从节点s开始做ω条随机游走,其中有h条停止在节点t上,则π(s,t)可以估算为π′(s,t)=h/ω。通常,ω越大,π′(s,t)就越接近π(s,t)。104、根据m个节点分别对应的ppr从m个节点中确定出第二节点,并向第一节点推荐第二节点。在本发明实施例中,计算出网络图中第一节点和m个节点分别对应的ppr的取值之后,可以根据m个节点中每个节点的ppr的取值从该m个节点中筛选出一个第二节点,该第二节点是本申请实施例中向第一节点推荐的网络图中的节点。其中,本申请实施例中采用的推荐算法可以对m个节点分别对应的ppr的取值按照从大到小进行排序,取最大ppr值对应的节点为第二节点。举例说明如下,ppr在游戏中的应用场景如下,将ppr应用于多个游戏的师徒推荐、好友召回等社交应用场景中。在这些应用场景中,可以使用ppr给每个玩家制作个性化的推荐列表,举例说明如下,以游戏场景下的师徒推荐推荐为例,游戏场景中的每个游戏角色对应于网络图中的一个节点。例如,游戏角色a对应于网络图中的第一节点,从该第一节点进行以预设的停止概率在网络图中进行ω条的随机游走,当ω条的随机游走停止在m个节点上时,则根据ω和m个节点分别对应的随机游走停止条数分别确定m个节点分别对应的ppr,例如这m个节点分别为:节点1、节点2、…、节点m,这m个节点可以对应于游戏场景中的m个游戏角色,例如游戏角色1、游戏角色2、…、游戏角色m。若有h1条随机游走停止在节点1上,则可以根据ω和h1获取节点1的ppr值,若有h2条随机游走停止在节点2上,则可以根据ω和h2获取节点2的ppr值,同样的有hm条随机游走停止在节点m上,则可以根据ω和h1获取节点m的ppr值。对m个节点的ppr值进行topk排序,若第二节点对应的ppr值为m个节点的ppr值中的最大值,则该第二节点作为推荐节点,例如第二节点对应于m个游戏角色中的游戏角色x,则该游戏角色x就是向游戏角色a进行推荐的游戏角色。通过以上实施例对本发明实施例的描述可知,首先从推荐服务器中预先存储的网络图中获取到第一节点,网络图中包括有n个节点,n个节点中存在通过边连接的相邻节点,第一节点属于n个节点,然后从第一节点开始,以预设的停止概率在网络图中进行ω条的随机游走,当ω条的随机游走停止在m个节点上时,则根据ω和m个节点分别对应的随机游走停止条数分别确定m个节点分别对应的个性化网页排名ppr,m个节点属于n个节点,m的取值为正整数,且m小于或等于ω,最后根据m个节点分别对应的ppr从m个节点中确定出第二节点,并向第一节点推荐第二节点。本发明实施例中随机游走的每一步采用预设的停止概率来完成,在网络图的每个节点上做多次随机游走,在ω个随机游走停止时估计网络图中第一节点分别与m个节点之间的ppr,并根据m个节点分别对应的ppr确定出第二节点,并向第一节点推荐第二节点。本发明实施例不再采用幂迭代的方法,因此可以减少对存储空间的占用,由于本申请实施例中采用以预设的停止概率在所述网络图中进行ω条的随机游走,因此可以更快速的实现随机游走的停止,在随机游走停止就可以计算出m个节点分别对应的ppr。本申请实施例中通过采用蒙特卡罗(monte-carlo)方法来估计网络图中节点之间的ppr值,本发明实施例不再采用幂迭代的方法,因此可以减少对存储空间的占用,简化ppr的计算复杂度,提高ppr的运行效率,提高了推荐效率。为便于更好的理解和实施本发明实施例的上述方案,下面举例相应的应用场景来进行具体说明。本发明实施例采用了基于蒙特卡罗的方法,通过随机游走估计节点之间的ppr值,极大地降低了存储空间和计算的复杂度,进一步的采用了多层次的别名采样和增加吞吐量的方法,极大地提升了运行效率。如图2所示,为本发明实施例提供的monte-carlo方法求ppr的计算流程示意图。如图3所示,为本发明实施例提供的网络图中相邻节点通过边连接的示意图。本发明实施例中采用monte-carlo方法来估计节点之间的ppr值,就是在社交网络的每个节点上做多次随机游走,其中随机游走的每一步的停止概率为α,从而估算出每个节点停止在其他节点的概率。例如,从节点s开始做ω条随机游走,其中有h条停止在节点t上,则π(s,t)可以估算为π′(s,t)=h/ω。通常,ω越大,π′(s,t)就越接近π(s,t),但也增加了计算量,接下来说明确定合理的ω的方式。当每个节点上的随机游走数量是时,对于任意两个节点s和t,让通过monte-carlo方法计算得到的近似值表示为π′(s,t)。如果准确值π′(s,t)>δ,则有至少1-pf的概率会满足|π(s,t)-π′(s,t)|≤ε×π(s,t)。其中,δ表示误差值,ε表示误差值。接下来对随机游走的过程进行说明。在一个图上,对于节点s到节点t的边e(s,t),把这条边上的权重表示为a(s,t)。比如,在游戏社交网络中,a(s,t)可计算为玩家s给玩家t送了a(s,t)个游戏金币。为了表述方便,假设a(s,t)>0,并且用nbr(s)表示s在图上的邻居集合。当从图上一个节点s开始做随机游走的时候,首先从nbr(s)中按权重分布选取一个节点u。因此,选择u的概率是a(s,u)/∑v∈nbr(s)a(s,v)。然后,以α的概率来决定是否要继续从u做随机游走,直到这个随机游走停止。值得注意的是,如果nbr(s)是空集,让随机游走从头开始做。如果有向图是弱连通的并且ω足够大的时候,则图上的每一个点必定出现在至少一条随机游走中。以邻接表的形式存储图数据。具体来说,首先对每个节点s,计算s的邻居集合nbr(s)。然后,对每个二元组<s,nbr(s)>,用节点s来做哈希分割。如图4所示,为本发明实施例提供的基于邻接表进行随机游走的实现示意图,在计算ppr时,当从s开始做随机游走,首先获取s的邻居集合nbr(s)。然后,从nbr(s)选择一个节点u,于是构成一个新的二元组<u,s>。对这个二元组<u,s>,也一样用u做哈希分割。接着将新的二元组集合与邻居表二元组集合做聚合(join),因此获取到u的邻居集合nbr(u)。从nbr(u)选取下一个节点,直到这个随机游走停止。当随机游走停止时,使用检查点的方式(checkpoint),将随机游走结果存入分布式文件系统。最后将所有停止的随机游走结果聚合起来,便得到最终结果。需要说明的是,上述算法除了可以实现在spark上,还可以用在其他并行计算平台上。随机游走除了使用join的方式,也可以使用消息传递的方式。接下来对本发明实施例采用的多层次的别名抽样算法进行说明。s的邻居集合nbr(s)={<u1,a(s,u1)>,<u2,a(s,u2)>,......,<uk,a(s,uk)>},从nbr(s)选取一个节点需要采用按权重抽样的算法,其中采用了别名抽样算法。别名算法重新整理所有边的权重值,为每条边e(s,u)生成一个新的权重a′(s,u)和一个别名alias(s,u),其中alias(s,u)是nbr(s)中的一条边。抽样时,先根据下标随机选择一条边;然后再产生一个随机数r,如果r小于a′(s,u),选择当前这条边,否则选择别名alias(s,u)。计算别名和新权重时,先将原来权重归一化,也就是0<a(s,v)<1且∑v∈nbr(s)a(s,v)=1。计算时是先将权重a(s,u)放大k倍,然后从值大于1的边分配一些值到小于1的边中,直到没有大于1的样本。最后的权重表示为a′(s,u),得到来自u分配的边(s,v),将别名设置为alias(s,v)=u。抽样是先从[1,k]中选取一个数x,对应的边表示为u,再以a′(s,u)的概率选择u,否则选择alias(s,u)。因此,选取u的概率为:在社交网络中,经常会出现有些好友数量特别多的节点。这些大节点的存在,通常会造成数据倾斜问题。为了解决这个问题,设计了一个多层次的别名抽样算法。首先,将大节点进行随机拆分,形成多个小节点。考虑节点s,我们将nbr(s)拆分成d个小节点,nbr1(s),nbr2(s),...,nbrd(s),使得并且u1≤i≤dnbri(s)=nbr(s)。用pi表示nbri(s)。让pi的权重为nbri(s)所有边的权重之和,表示为a(s,pi)=∑v∈nbri(s)a(s,v)。因此,用nbr′(s)={<p1,a(s,p1)>,<p2,a(s,p2)>,...,<pd,a(s,pd)>}代替nbr(s)。通常上,大节点的好友数d可以定义为图上最多邻居数的平方根,也就是说其中umax是具有最多邻居的节点。于是,在大节点s上的一步随机游走需要做两个操作:(1)先从nbr′(s)中按权重选取一个pi,(2)然后从nbri(s)中按权重选取一个节点u。可以证明,选取一个节点u的概率依然不变:接下来对本发明实施例增加吞吐量的方法进行举例说明。在spark的计算中只有当一个阶段(stage)完成了,才能启动下一个阶段。其中,可以认为随机游走中走一步是一个阶段。为解决现有技术中计算集群资源负载过重的问题,如图5所示,为本发明实施例中增加吞吐量的示意图,采用了增加吞吐量的流水线处理方式。具体来说,一开始每个节点同时走c个随机游走的第一步,其中1≤c≤ω。第一步之后,有些随机游走会以α的概率停止。在没有停止的随机游走继续走第二步的时候,每个节点又启动新的c个随机游走的第一步。依此类推,直到每个点都启动了ω个随机游走。当执行到第k个任务时,需要处理的随机游走总数是:如果知道集群的配置(executor数量和内存大小),便可以计算得到可以使用的总内存为m。因此,让qnc/α≤m,便得到c的最大值为αm/nq,其中q是维护一条随机游走的空间代价。另外,随机游走的长度越长,则其存活的机率越小。因此,这些长路径的随机游走数量就比较少,那么这些数据对最后的结果贡献不大。当一条随机游走的“存活”机率小于γ时,便将其停止。令α1=γ,于是得到1=logγ/logα。也就是说,当每个点都启动了ω个随机游走之后,再继续做1步就可以停止所有随机游走。如下表1所示,为目前公开的数据集的示意表:数据集点数边数ca-grqc524228980ca-condmat23133186936email-enron36692367662com-dblp1891141049866webstanford2817312312497webgoogle7394545105039as-skitter96672311095298com-orkut2723360117185083soc-livejournal1430845268993773soc-pokec143269330622564如图6所示,为本发明实施例提供的ppr计算方法与现有技术中graphx计算ppr的运行时间对比示意图。如图7所示,为本发明实施例提供的ppr计算方法对于排序质量指标和精确度指标在不同的公开数据集上的示意图。首先展示在公开数据集上的结果,并且与graphx的ppr算法进行对比。在这一组实验中,使用30个executors,每个executor有4个cores和20gb内存。graphx的ppr不能处理边数超过100万的图,但是本发明实施例提供的ppr计算方法不仅能在所有数据集上快速跑完,而且最高可以提高20多倍的速度。在两个方法都可以跑出来的图上,用graphx的ppr的结果当作ground-truth,在机器学习中,ground-truth指的是训练集对监督学习技术的分类的准确性。发现本发明实施例提供的ppr计算方法计算得到的ppr结果在排序质量指标(normalizeddiscountedcumulativegain,ndcg)和精确度(precision)上至少80%以上,甚至有的超过90%,证明近似的ppr结果还是比较理想的。另外,本发明实施例还在三个游戏社交网络运行了本发明实施例提供的ppr算法,如下表2所示,其中使用了200个executors,每个executor有4个cores和20gb内存。最大的社交网络有92亿条边,一共运行了6个小时多。因此,本发明实施例提供的ppr算法可以比较好地支持日常更新任务。表2社交网络边数点数运行时间(分钟)游戏社交网络x9.2十亿0.32十亿395.10游戏社交网络y2.8十亿0.20十亿213.25游戏社交网络z1.8十亿0.08十亿87.16最后,在产品的应用场景中,本发明实施例把ppr的效果与pagerank、按好友数量排序、业务规则、随机排序方法进行对比。在游戏x的师徒推荐上,ppr算法的点击率比其他最好的算法提升了9.4%,通过率提升了4.5%。在游戏y的好友召回业务中,相对于其他最好的算法,ppr在点击率上提升了24.4%。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。为便于更好的实施本发明实施例的上述方案,下面还提供用于实施上述方案的相关装置。请参阅图8-a所示,本发明实施例提供的一种推荐服务器800,可以包括:节点确定模块801、随机游走模块802、排名获取模块803、推荐模块804,其中,节点确定模块801,用于从推荐服务器中预先存储的网络图中获取到第一节点,所述网络图中包括有n个节点,所述n个节点中存在通过边连接的相邻节点,所述n的取值为正整数,所述第一节点属于所述n个节点;随机游走模块802,用于从所述第一节点开始,以预设的停止概率在所述网络图中进行ω条的随机游走,所述ω的取值为正整数;排名获取模块803,用于当所述ω条的随机游走停止在m个节点上时,则根据所述ω和所述m个节点分别对应的随机游走停止条数分别确定所述m个节点分别对应的个性化网页排名ppr,所述m个节点属于所述n个节点,所述m的取值为正整数,且所述m小于或等于所述ω;推荐模块804,用于根据所述m个节点分别对应的ppr从所述m个节点中确定出第二节点,并向所述第一节点推荐所述第二节点。在本发明的一些实施例中,请参阅图8-b所示,所述随机游走模块802,包括:邻居节点集合确定单元8021,用于根据所述第一节点在所述网络图中的位置确定出所述第一节点对应的邻居节点集合;目标节点确定单元8022,用于从所述第一节点开始进行第i条的随机游走,按照相邻节点之间的边的权重确定随机游走到所述第一节点对应的邻居节点集合中的第三节点,所述第三节点属于所述n个节点,所述i为大于0且小于等于所述ω的正整数;所述邻居节点集合确定单元8021,还用于根据所述第三节点在所述网络图中的位置确定出所述第三节点对应的邻居节点集合;所述目标节点确定单元8022,还用于按照从所述第一节点随机游走到所述第三节点的方式,从所述第三节点继续进行所述第i条的随机游走,直至所述第i条的随机游走结束;按照所述第i条的随机游走的方式进行其余的ω-1条的随机游走,直至所述ω条的随机游走全部结束。在本发明的一些实施例中,请参阅图8-c所示,所述邻居节点集合确定单元8021,包括:哈希分割子单元80211,用于使用所述第一节点对第一二元组集合进行哈希分割,得到邻居表二元组集合,所述第一二元组集合包括:所述第一节点和所述第一节点对应的邻居节点集合;所述哈希分割子单元80211,还用于使用所述第三节点对第二二元组集合进行哈希分割,得到第三二元组集合,所述第二二元组集合包括:所述第三节点和所述第一节点;邻居节点集合得到子单元80212,用于根据所述第三二元组集合和所述邻居表二元组集合进行聚合或者消息传递,得到所述第三节点对应的邻居节点集合。在本发明的一些实施例中,请参阅图8-d所示,相对于图8-b所示,所述随机游走模块802,还包括:存储单元8023,用于当所述第i条的随机游走结束时,使用检查点的方式将所述第i条的随机游走产生的随机游走结果存储到分布式文件系统hdfs中;结果聚合单元8024,用于当所述ω条的随机游走全部结束时,将所述ω条的随机游走产生的随机游走结果聚合起来,得到所述ω条的随机游走对应的最终结果数据。在本发明的一些实施例中,请参阅图8-e所示,所述目标节点确定单元8022,包括:权重值重分配子单元80221,用于对所述第一节点对应的邻居节点集合中所有相邻节点之间的边的原权重值进行取值重新分配,得到所述第一节点对应的邻居节点集合中所有相邻节点之间的边的新权重值;别名确定子单元80222,用于获取所述第一节点对应的邻居节点集合中所有相邻节点之间的任意一条边的新权重值和所述任意一条边对应的别名,所述任意一条边对应的别名为所述第一节点对应的邻居节点集合中相邻节点之间的一条边;随机选择子单元80223,用于获取从所述第一节点对应的邻居节点集合中所有相邻节点之间的边中随机选择的一条边;抽样子单元80224,用于根据抽样出的随机数与所述随机选择的一条边的新权重值之间的数值关系,确定所述随机选择的一条边或者所述随机选择的一条边对应的别名为抽样选中的边;第三节点确定子单元80225,用于根据所述抽样选中的边对应的权重从所述第一节点对应的邻居节点集合中确定出所述第三节点。在本发明的一些实施例中,所述权重值重分配子单元80221,用于确定所述第一节点的邻居节点个数超过预设的个数阈值,所述个数阈值由所述网络图中的相邻节点个数的最大值确定;将所述第一节点对应的邻居节点集合拆分为多个邻居节点子集合;针对每个邻居节点子集合中所有相邻节点之间的边的原权重值进行取值重新分配。在本发明的一些实施例中,请参阅图8-f所示,所述随机游走模块802,包括:随机游走单元8025,用于从所述第一节点开始,同时进行c个随机游走,其中,所述c满足如下条件:1≤c≤ω;在进行c个随机游走时,对于所述c个随机游走中的每一条随机游走,如果在当前步里以预设的停止概率没有停止,则继续进行下一步的随机游走;吞吐量增加单元8026,用于在所述c个随机游走完成当前步之后,从所述第一节点开始又启动新的c个随机游走,直到所述第一节点启动了ω个随机游走。通过以上对本发明实施例的描述可知,首先从推荐服务器中预先存储的网络图中获取到第一节点,网络图中包括有n个节点,n个节点中存在通过边连接的相邻节点,第一节点属于n个节点,然后从第一节点开始,以预设的停止概率在网络图中进行ω条的随机游走,当ω条的随机游走停止在m个节点上时,则根据ω和m个节点分别对应的随机游走停止条数分别确定m个节点分别对应的个性化网页排名ppr,m个节点属于n个节点,m的取值为正整数,且m小于或等于ω,最后根据m个节点分别对应的ppr从m个节点中确定出第二节点,并向第一节点推荐第二节点。本发明实施例中随机游走的每一步采用预设的停止概率来完成,在网络图的每个节点上做多次随机游走,在ω个随机游走停止时估计网络图中第一节点分别与m个节点之间的ppr,并根据m个节点分别对应的ppr确定出第二节点,并向第一节点推荐第二节点。本发明实施例不再采用幂迭代的方法,因此可以减少对存储空间的占用,由于本申请实施例中采用以预设的停止概率在所述网络图中进行ω条的随机游走,因此可以更快速的实现随机游走的停止,在随机游走停止就可以计算出m个节点分别对应的ppr,因此简化ppr的计算复杂度,提高ppr的运行效率,提高了推荐效率。图9是本发明实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessingunits,cpu)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。服务器1100还可以包括一个或一个以上电源1126,一个或一个以上有线或无线网络接口1150,一个或一个以上输入输出接口1158,和/或,一个或一个以上操作系统1141,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。上述实施例中由服务器所执行的网络图中的节点推荐方法步骤可以基于该图9所示的服务器结构。另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1