论文导读 | 滑动窗口模型下含重复边的图流上的三角形近似计数算法

北京大学 苟向阳博士

 

编者按

北京大学数据管理实验室苟向阳博士关于滑动窗口模型下的图流上三角形近似计数的论文 《Sliding Window-based Approximate Triangle Counting over Streaming Graphs with Duplicate Edges》 被 SIGMOD 2021 接收。

由于很多图模型应用场景对于动态性的天然需求,图流分析近年来得到了越来越多的关注。由于图流规模大,更新速度快的特点,对其进行精确存储和分析从时间和空间上都有巨大的代价。相比之下高效的近似查询算法是一种更好的选择。此外,由于很多应用对于时效性的需求,降低图流中旧数据项的重要性,并在适当时机删除它们往往也是必需的。这种老化机制一般被描述为滑动窗口模型。然而,在滑动窗口模型下,对含重复边的图流进行近似三角形计数依然是一个有待解决的问题。本文中,我们提出了名为SWTC (Sliding Window Triangle Counting) 的算法。该算法使用独创策略来维护一个基于滑动窗口的无偏的,限定大小的样本,从而实现对滑动窗口内三角形数目的估算。实验表明该算法相比已有工作组合而成的基准算法,具有更高的准确度。

图片

图片

 

论文地址:

https://github.com/StreamingTriangleCounting/TriangleCounting

(或点击文末“阅读原文”跳转)

 

背景介绍

 

 

 

三角形计数是图上的基本问题之一。大量的应用,如社区发现 [1],异常探测 [2] 等都是以三角形计数为基础的。大规模图数据上的精确三角形计数需要消耗大量时间,因此往往采用近似算法作为替代,相关方法在最近的十几年内已经得到了广泛的研究。然而,随着互联网的不断发展,图数据的组织形式有了新的变化。在社交网络,通信网络等应用中产生的图数据往往被组织为图流的形式,即一系列持续不断到达的边。在这条边序列中,相同的边可能出现多次,即重复边 (duplicate edge)。此外,由于图流数据会持续不断地产生,对全部的图流数据进行存储和分析是十分困难的。而且大多数应用都对数据具有时效性的要求。因此,我们在处理图流时往往采用滑动窗口 (sliding window) 模型,即只分析最近的一段时间内到达的边组成的动态图。在滑动窗口模型下对含重复边的图流数据进行近似三角形计数仍是一个有待研究的领域。我们的论文对这一问题进行了研究,提出了滑动窗口三角形近似计数算法 SWTC (sliding window triangle counting)。

 

问题定义

 

 

图流 (streaming graph):如上文所说,图流为一个持续不断到达的边组成的序列,序列的每一个元素为两个点之间的一条边。这条边可以有向也可以无向。在三角形计数问题中,三角形的定义一般是无向的,因此我们在此问题中将图流中的边也考虑为无向。每一个元素还具有一个时间戳,标识元素到达的时间。同一条边在图流中可以出现多次,即为重复边 (duplicate edge)。

 

 

图片

图 1 图流及滑动窗口示例

滑动窗口 (sliding window):假设当前时刻为 T, 则一个大小为 N 的滑动窗口即为从时刻 T-N 到时刻 T 之间到达的图流元素的集合,在集合之外的边被认为已过期,不再有效。我们在此问题中使用的上述定义为基于时间的滑动窗口,而还有一种定义为基于计数的滑动窗口,即最近到达的 N 个元素。相比之下,基于时间的滑动窗口更为常用,而且,基于计数的窗口可以简单地转化为基于时间的窗口,只需要给每一个元素赋予一个与其到达序号相同的时间戳。

图 1 展示了一个图流及滑动窗口的示例。

快照图 (snapshot graph):快照图即为当前滑动窗口内的边组成的图。这个图随着滑动窗口的变化而在不断变化中。由于图流中存在重复边,我们给快照图中的每条边标记一个频率,即为该边在滑动窗口中出现的次数。

二项计数 (binary counting) 和带权计数 (weighted counting): 在含重复边的快照图中计数三角形有两种方法。二项计数只计数互异三角形的数目。带权计数则将每一个三角形的权重标记为三条边的频率之积,并计数快照图中所有三角形的权重和。我们也可以从另一个视角看待带权计数,我们将一条边的多次出现视为多条不同的平行边,则一个权重为 w 的带权三角形也可以视为 w 个由不同的平行边三元组组成的三角形。相比之下,二项计数则过滤掉重复的平行边,在剩余的不含重的边中计数三角形。

 

 

SWTC算法

 

 

SWTC 算法为基于采样的近似计数算法,即维护一个从快照图中抽取出的小规模样本图,在此样本图中计数三角形数目,以此来估算整个快照图中的三角形数目。根据二项计数还是带权计数的选择不同,采样和估算的方法也会有所区别,我们首先以二项计数为例说明算法,之后再推广到带权计数上。在用SWTC 对三角形数目进行二项计数时,算法可以大概分为两部分,样本图的维护,以及估算滑动窗口内的互异边数目,最终我们将根据两部分的结果估算快照图中的三角形数目。下面我们对两部分分别进行介绍:

样本图的维护

我们对滑动窗口内的边进行无偏采样,采样结果组成的图即为样本图。二项计数中,此采样过程要求过滤掉滑动窗口内的重复边,且剩余的每条互异边加入样本图的概率相同。我们希望样本图具有一个明确的空间消耗上限,使得我们可以在应用中为其提前分配足够的内存。我们不能选择简单的固定概率采样方法,因为图流的流量在不断变化,滑动窗口内的边数也在不断变化,若采样概率固定,则样本大小与滑动窗口内的边数成正比,是难以估算大小的。此外,在前人工作中已经证明了若要在滑动窗口内维护一个固定大小 k的样本,至少需要 O(log⁡(n)k) 的空间,其中 n 为当前滑动窗口内的边数,如上文所说,n 是难以估计的。当我们希望空间消耗有固定的上限,即为 O(k) 时,我们只能维护一个限定大小的样本,即样本大小不超过 k, 但可能小于 k。因此,我们最终目标是设计一种与限定大小的采样方法。我们沿用了前人工作 PartitionCT [3] 的框架。PartitionCT用于含重复边图流上的二项计数,拥有固定的空间消耗。但是其没有考虑滑动窗口模型。我们在它的基础上,加入了处理滑动窗口中边过期的方法,形成了新的采样方法。

我们使用一个哈希函数将图流中的边划分为 k 个子流。我们为每一条边 e 计算一个范围在 [0,k) 的哈希值 H(e), 并将此边划分到子流 H(e) 中。在每个子流中,我们使用另一个哈希函数为每一条边计算一个范围在 [0,1) 内的优先级 G(e),然后采样其中优先级最高的边作为子流的样本,最终将k 个子流的样本边合起来作为样本图。这一框架与PartitionCT 类似࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值