Efficient Streaming Subgraph Isomorphism with Graph Neural Networks
vldb 2021 research track
原文:http://www.vldb.org/pvldb/vol14/p730-duong.pdf
图神经网络的有效流子图同构
Abstract
在基于图的数据管理中,检测同构子图的查询是很有重要的。当对单个或批量查询的静态设置,子图同构搜索问题得到了相当多的关注,但现有方法不能扩展到连续查询流的动态设置。在本文中,我们通过缓存和重用以前的结果来解决由子图同构查询流引起的可伸缩性挑战。首先,我们提出一种新的基于图嵌入的子图索引,作为有效的流处理的基础。它不仅实现了结果的有效缓存和重用,而且在缓存丢失的情况下提高了传统子图同构算法的速度。此外,我们提出了包含查询结果可重用性概念的缓存管理策略。使用真实数据集的实验证明了我们的方法在处理查询流的同构子图搜索时的有效性。
1.introduction
图是复杂系统中实体之间关系的自然表示,如社会网络、化合物或生物结构。因此,有效地管理图结构数据在不同地领域具有重要地意义,子图同构查询是检测更大图中的模式的重要手段。具体来说,给定一个查询图q(即模式)和一个数据图g,这样的查询返回所有的节点q到节点g的映射,这些节点保留了各自的边。回答子图同构查询是有用的,例如,分析社会网络中的传播模式或查询蛋白质网络中的蛋白质相互作用。
由于子图同构搜索问题NP-Hard,人们提出了各种加快搜索速度的启发式方法[8,18,42,45]。这些算法的共同之处在于它们都是基于节点相似度和子图相似度的度量。前者允许对数据图的节点进行结论,这些节点不能映射到查询图的节点,因此可以进行过滤。而后者则是验证数据图的子图是否与查询图同构的第一步。
在社会网络、化学或生物学等领域,子图同构查询经常出现。它们目前由许多用户和系统同时发行。例如,ChemSpider是一个搜索引擎,它有一个API,可以在一个包含7700多万个分子的数据库中回答分子结构的子图同构查询。一旦一个查询流被考虑,上述算法的子图同构搜索是不可行的。它们对基于图的实际结构的节点和子图使用相似的概念。由于各自的结构比较具有最坏情况下的运行时复杂度O(N!N2)对于大型查询图,或者O(Nk)对于具有k个节点的小查询图,传统方法不能扩展到流设置。传统方法不能扩展到流设置。
对于其它数据模型,处理连续查询流的技术通常使用缓存策略。在这些情况下,缓存时可能的,因为查询显示了很大的重叠,这允许重用以前的结果。例子包括评估网络搜索引擎中的查询和web应用程序中的应答资源请求的技术。在这两种情况下,缓存的查询结果将在回答后续查询时重用。然而,这一原则不能直接用于子图同构查询,因为经验表明,大多数现有的结构索引技术都有指数运行时。因此,索引数据图或其部分是不可行的,因为这将需要高效缓存和重用查询结果。
在本文中,我们使用嵌入作为计算子图同构查询的基础。嵌入将一个图映射到一个数据空间,使得结构相似的节点和子图彼此接近。嵌入自然支持索引。节点和子图是高维空间中的点,因此可以利用空间分区的索引,例如R-tree或kd-tree。在此基础上,有效地实现了相似度计算或最近邻搜索。
使用嵌入作为子图同构的基础进一步支持基于多样性考虑地缓存管理。多样化的混存更有效,因为流中的查询图更可能与已经缓存的查询图相似。然而,基于多样性的子图同构缓存对于传统的结构索引是不可行的,因为查询图和缓存图的结构比较会导致计算开销。然而,使用嵌入,图的比较变得快速和准确,因此我们的工作是第一个提出基于多样性的子图同构缓存管理。
为了实现上述愿景,我们定义了流子图同构问题,并提出了一个框架。然后我们实例化这个框架,做出贡献:
- 使用嵌入的图索引。在此基础上,我们提出了一个基于节点、边和子图嵌入的索引机制。我们采用了最先进的技术来学习图表示,同时通过证明嵌入过程类似于Weisfeiler- Lehman同构检验,为我们的机制提供了理论证明。
2.使用缓存查询流处理。通过索引,我们展示了如何在利用缓存结果的同时回答子图同构查询流。具体来说,在查询到达时,将识别类似的过去查询以重用其结果。在缓存丢失的情况下,利用子图嵌入来加快子图同构的传统算法(TurbolSO)。在缓存命中的情况下,我们评估当前查询与缓存查询的重叠,并在缓存结果中得出答案。
3.缓存管理。由于缓存的大小是有限的,我们需要控制缓存的允许和退出。为此,我们提出了一种最小化缓存丢失次数的策略。与传统策略(LRU或GreedyDual)相比,它不仅根据处理时间评估查询结果的效用,还包括多样性的概念。
我们使用几个真实数据集来评估我们的方法。表明我们的嵌入索引优于结构索引两个数量级。在回答子图同构查询时,我们基于缓存和重用的方法在运行时至少比目前最先进的算法(如MQO和TurbolSO)提高了100%。
2.model and approach
2.1 model
我们研究无方向标签图的子图同构搜索问题。设g=(V,E)是一个具有一组节点V和一组边E的图数据统计。它是一个标记函数,该函数捕获其节点的内在属性。。。
定义子图同构。
我们的目标是查询连续到达的场景。因此,我们将查询流定义为一个查询序列,依次到达。流中的查询可能会重叠或重复,以便以前的查询存储的结果可以重用。
查询处理会引起延迟,即查询到达和应答之间的时间。在此基础上,我们得出一下问题:
problem 1 (streaming subgraph isomorphism)
给定一个数据图,流子图同构问题是解决一个查询流的所有查询的子图同构问题,同时最小化处理延迟。
2.2 Apporach
为了解决流子图同构的问题,我们提出了一个利用缓存策略的框架。我们的想法是对查询流中的大量查询重用查询结果,从而最小化处理延迟。然而,这一想法的实验提出了几个研究问题:(Q1)如何索引节点、边和子图来高效缓存和重用查询结果?(Q2)如何回答基于缓存结果的查询?(Q3)如何管理结果缓存?这些问题相互作用如图1。下面,我们总结实例化这个框架的技术。
我们提出了一种新的图索引方法,加快了对同构子图的搜索速度。索引基于节点、边和子图的嵌入,其中相似的节点、边和子图具有相似的索引值。而子图索引使我们能够快速识别可重用的查询结果,而节点和边缘索引通过修剪搜索空间,加速了传统的子图同构算法。
我们的指标为一种新的流子图同构评价算法奠定了基础。只要有可能,它就利用缓存的结果。在缓存丢失的情况下,我们的节点和边索引加速了任何现有的用于解决子图同构问题的分支定界算法。
基于有限的缓存大小,我们进一步提出了缓存管理的策略。具体来说,我们建议每个查询只存储固定数量的结果,以实现统一检索。为了引导缓存的接纳和驱逐,我们将Landlord算法应用于子图同构查询流的设置,从而获得了较高的缓存命中率。 - Graph Indexing
本节介绍基于图嵌入的节点、边和子图的索引。为此目的,我们首先给出关于嵌入的进一步背景。然后我们介绍了节点和边缘嵌入以及子图嵌入的学习方法。基此,我们定义了各自的索引。
3.1 Background and Embeddings
嵌入是在某个数学空间中表示概念的模型。但是,这种表示必须是语义上相关的概念具有密切的表示,即它们在嵌入空间中的几何关系编码了它们的语义关系。与将每个概念视为独立的符号表征相比,嵌入能够基于概念的表征对概念之间的关系做出结论。此外,嵌入是简洁的,在一个d维嵌入空间(d称为嵌入尺寸),其中每个维度的域的尺寸为k。
在我们的设置中,结构相似的图中节点嵌入是彼此接近的向量。类似地,结构相似的子图被分配为接近向量。
3.2 Node and Edge Embeddings
在计算节点嵌入时,需要考虑两种语义信息,分配给节点的标签极其与其他节点的连接。假设语义相似的节点被分配相似的标签,各自的表示可以直接合并到节点嵌入中。然而,标签通常捕捉的是外部知识,而不是图表结构。因此,我们遵循消息传递神经网络的思想,用结构信息丰富节点嵌入。
请注意,我们使用嵌入作为索引节点、边和子图的方法。这与传统的图索引不同,传统的图索引依靠子图,如路径、三角形、团作为图比较的参考点。我们的方法避免了需要检测这些子图来构造各自的索引。
消息传递框架。在消息传递神经网络中,节点的表示是通过基于消息的交互,将其自身属性的表示与其邻居属性的表示相结合,从而创建的。从一个节点发送到它的邻居的消息是基于节点当前表示构造的。由于消息只在边连接的节点之间交换,图结构被合并。消息传递分几轮进行,每轮涉及三个步骤:
发送:节点根据消息的表示形式构造消息。
接收:一旦一个节点在一轮中从所有邻居接收到消息,它使用参数化函数对它们进行聚合。
更新:节点更新其表示,将其当前表示与聚合消息相结合。
一个MPNN可以表示为函数,其中g是一个图,I是一个标注函数。函数f表示所有轮的发送、接收和更新步骤中使用的上述函数的组合,并未图中每个节点返回一组节点嵌入。注意,在使用模型之前需要了解f的参数。
一个节点为中心的视图。一个mpnn可以从一个节点的角度来看。然后,通过计算节点u的嵌入操作,得到一颗k层树,根在u。u的嵌入基于树的第i层节点,这些节点是图中距离i以内的u的邻居。树的叶子处的信息由各个节点的标签给出,然后将其聚合到根:第i层使用参数化函数fi来聚集第i+1层的结果。
节点u及其距离k内的邻居形成一个子图,称为u的接收域。消息传递的轮数越高,接收域越大。嵌入表示其接受域的摘要,包括结构(因为消息遵循图结构传递)和节点标签(因为消息最初是由节点标签构建的)。
例2. 以节点为中心的视图如图2所示。给定左边的图,使用两层MPNN,通过聚合第一层加点C和A构造节点B的嵌入。这些嵌入物是由它们邻居的嵌入物构成。这个过程由根在B的两层树捕获。
MPNN和同构检验。在我们的设定中使用mpnn在理论上是充分根据的,因为它与WeisfeilerLehman同构检验有关。WL算法也是按轮进行,并在第k次迭代时构造节点标记。通过考虑在上一迭代中分配给节点及其邻居的标签。
例3. 在图2右侧,标签是通过模型显示的。在第一次迭代中,我们通过哈希包含节点C自身标签和其邻居标签的集合来构造节点C的标签。对节点A进行同样的操作。在第二次迭代中使用结果来推导节点B的标签。
定理1 给定有标签的图,设l(k)为使用WL算法经过k次迭代后得到的节点标签,z(k)为k层MPNN得到的嵌入。然后,通过适当的初始嵌入z(0)和MPNN的参数化函数。
上述结果直接由[31]中的定理1推导而来。结果表明,基于MPNN的公式与WL同构检验一样强,为将MPNN应用于流子图同构提供了理论基础。然而,WL算法和MPNN在表示节点标签的方式上存在差异。用WL算法得到的标签是符号表示,即不相关的符号。用MPNN获得的嵌入信息可以捕获语义关系,因此评估它们的相似度是有意义的。在图2中,我们用颜色来区分这两种表示。
参数学习。为了了解神经网络的参数,需要定义一个损失函数。如前所述,节点嵌入表示其接受域的摘要。因此,我们定义了一个损失函数,如果相似的嵌入被分配给相似的节点,即那些在图中接近的节点,就会得到奖励。
边嵌入。像往常一样,我们通过平均相邻节点的嵌入来构造边缘嵌入。我们后来证明,边嵌入比节点嵌入更有区别,因为它们能更好地修剪候选子图同构。
3.3 子图嵌入
为了使子图的嵌入有意义,相似的子图必须有紧密的嵌入,并且节点的标签必须合并。此外,在考虑流子图同构问题时,我们需要考虑被评估图的大小差异很大。对于一个小的查询图,在一个大的数据图中可能存在很多同构子图。一个嵌入必须支持与这些子图的特定位置无关的同构检验。
子图嵌入的截断消息传递。我们嵌入标记图(在我们的设置中是数据图)的子图的方法建立在函数Z = f(g, l)的基础上,该函数为g中的所有节点返回嵌入。该模型是在整个图上学习的,全面地捕捉了图的结构。因此,对于一个有标记的子图(s, l '),我们可以将模型投射到各自的节点和它们的标签上,从而产生一个嵌入的Z ’ = f(s, l ')。这种类似于投影截断消息传递,单独节点的相邻节点发送消息,也在s。注意虽然函数的参数用于发送、接收和更新来自MPNN学会嵌入单个节点。
例4。图5显示了截断的消息传递给图4节点,A-D,这是图2中的一个节点的子图。消息只在子图中交换,而不是与节点E交换,因此,根于B的操作树不包括E。
上述过程产生子图中所有节点的嵌入。由于每个嵌入都是对节点的接受域(即子图)的总结,所以它是代表整个子图的候选。在这种背景下,我们采用一种组合方法,并平均节点嵌入来表示子图。
此外,我们提出了一种从边嵌入构造子图嵌入的方法。采用边缘嵌入平均的组合方法来表示子图。这等价于节点嵌入的度加权组合。
我们后来的经验表明,边嵌入可以带来更好的子图嵌入,因为缓存管理变得更加有效。
迁移图。学习嵌入一个图的节点(以及子图)的模型,也可以转移到另一个图。在我们的上下文中,它使我们能够将为数据图g学习的模型也应用到查询图q。具体地说,我们推导出节点嵌入Zq = f (q, Lq)查询的图表,然后聚合获得一个嵌入整个查询图使用上面的过程。这样,数据图的子图嵌入和查询图的嵌入使用相同的模型。因此,与查询图同构的数据图的子图具有等价的嵌入。
例5. 图3说明了早期模型对新图的应用。该模型直观地定义了“规则”来组合不同层的嵌入。将该模型应用于同构图(见图2和图3),可以得到等价的嵌入。
3.4 索引嵌入
相似度计算。为了评估两个节点或子图的结构相似性,我们计算它们嵌入的余弦相似度。这种选择是由余弦相似度的局域性引起的:它强调节点的直接邻域,与它们在图中的全局位置无关。
高维映射进行索引。在我们的语境中,嵌入的相对相似性比绝对相似性更重要。在回答子图同构查询流时,在高维嵌入空间中寻找最近邻是非常重要的。由于我们研究的是基于嵌入的子图同构问题,我们可以依靠大量的索引工作在数字空间中进行快速最近邻搜索。具体的例子包括r -树和kd-树,它们已经被证明是有效的和可扩展的。
注意,这些索引技术可以应用于余弦相似度,通过标准化每个嵌入的长度为1。在这种情况下,余弦相似度对应于两个嵌入点积,与它们的欧氏距离负相关。此外,已经提出了几种可以处理高维嵌入的r -树和kd-树的变体。在我们的实验中,我们后来采用了kd-tree的改进版本,并观察到相对较小的嵌入尺寸就足以实现良好的性能。
4.查询流处理
本节介绍我们回答子图同构查询流的方法。我们的想法是缓存和重用过去查询的结果,以获得当前查询的完整或部分答案。为了识别合适的过去查询,我们利用上面介绍的子图索引。具体来说,对于每个回答的查询w,嵌入的zw被索引。给定一个嵌入zq的新查询q,确定过去的查询w,其中嵌入的zw和zq之间的距离小于阈值τ。根据是否至少标识了一个这样的查询w,我们将这种情况分别称为缓存丢失或缓存命中。对于这两种情况,我们将在本节的其余部分描述我们的方法。
4.1 处理缓存miss
在缓存丢失的情况下,我们求助于传统的子图同构算法。这些算法遵循回溯策略,逐步探索解决方案,放弃那些被证明无效的方案。Alg. 1说明了给定查询图q和数据图g的一般过程。在这里,一个关键步骤是筛选候选结构,以映射到查询图的那些结构(第4行)。在最坏的情况下,根据数据图的大小,筛选被调用的次数是指数级的,因为它依赖于当前的部分映射。因此,筛选步骤需要是有效的
常见的子图同构算法基于查询图和数据图的节点进行匹配。在这种情况下,第1行中的Ω包含数据图的节点,s '是根据第4行中的过滤策略匹配查询图节点s的数据图节点。根据特定的算法,过滤器利用节点的标签和程度(Ullmann算法[42])或其连接(VF2[8]和QuickSI[38])。然而,基于节点的标签或程度的简单、有效的策略往往是有限的有效性。
过滤候选子图同构的高级策略是在子图级别,而不是在节点级别。虽然它们通常是非常有选择性的,但它们也承受着很高的计算开销。例如QuickSI构造最小生成树,GADDI基于最短路径计算。这些算法需要枚举查询和数据图中的特定结构,然后用于相似度计算。这种枚举是昂贵的,因为它本质上解决了另一个图同构问题。
Embedding-based修剪。我们建议使用候选结构的嵌入来过滤它们。具体来说,使用模型f,在数据图中创建感兴趣的结构的子图嵌入(Ω在Alg. 2-line 1中)。注意,这些嵌入是离线计算的。对于查询图中标识的每个结构(Alg. 2-line 3),我们也构造一个嵌入。在此基础上,我们通过提取z的k个最近邻来识别g中s的候选结构。Alg. 2总结了这个想法。首先,离线计算g的子图嵌入(行1-行3)。然后,对于q中感兴趣的每个结构(第5行),在线计算嵌入zs(第6行)。它用于对g的子图嵌入Z(第7行)进行k-最近邻搜索,以获得候选结构。
选择子图。在搜索同构子图时,对候选结构进行修剪是基于不同类型的子图,如节点、树或路径。更小、更简单的子图更容易枚举,但它们的选择性更低。在我们的设置中,我们使用2节点子图(即边)作为修剪策略的基础。边易于枚举,同时比节点更具有区别性。尽管可以使用3节点或4节点的子图,但我们实验中随后使用的数据集各自的子图的指数增长带来了严峻的计算挑战(例如,Wordnet数据集中3节点或4节点的子图的数量分别超过3M和155M)。
上述基于嵌入的策略与其他filter机制正交。请注意,我们稍后通过实验证明,通过这种方式,将我们的策略添加到任何子图同态算法中,可以显著减少需要考虑的候选图的数量。
4.2 处理缓存命中率
过去查询的缓存结果是否可以被当前查询重用取决于它们的重叠。传统上,查询图q和缓存查询图w之间的重叠是通过它们的最大公共子图(MCS)来挖掘的。MCS越大,结果对q的重用越好。然而,MCS算法在图大小的指数时间内运行。因此,每个缓存的查询图q的MCS的计算都会导致显著的性能损失。MCS越大,结果对q的重用越好。然而,MCS算法在图大小的指数时间内运行。因此,每个缓存的查询图q的MCS的计算都会导致显著的性能损失。
为了加快这一进程,我们建议将MCS计算限制在承诺缓存的查询w上,即那些结构上类似于q的查询。为此,我们使用§3中引入的子图索引。具体来说,我们使用查询图q和缓存的查询图的嵌入来寻找q的k个最近邻。虽然kNN搜索可以使用我们的索引有效地完成,但MCS问题需要仅针对k对图来解决。
上面的步骤是我们查询流处理的一般方法中的第一步,在Alg. 3中进行了形式化。一旦通过kNN搜索(第1行)确定了有希望的缓存查询,对每个查询和查询图(第3行)计算MCS。基于MCS节点映射,我们根据四种情况评估缓存结果的重用程度:
案例1:当存在q的一个精确匹配和一个缓存查询w,在q到w和w到g投影后,我们返回w的映射缓存,获得q到g的映射(第4行)。
案例2: 如果q与缓存查询w的子图是同构的(第9行),我们以类似于第一种情况的方式进行,并通过缓存映射的投影构造结果。
案例3: 一个缓存的查询w被认为与查询q = (Vq, Eq)有一些重叠,如果它们的MCS至少有|Vq |−ω的大小,其中ω是重叠阈值(第11行)。这个阈值避免了使用非常小的重叠结果的重用,由于隐含的开销,这将不会得到回报。如果重叠足够大,则缓存的映射从q映射到w,从w映射到g之后,只是q和g之间映射的子集。然而,这个部分映射在构造实际结果时是有用的。由于子图同构的常见算法通过建立节点之间的通信来构造映射,每次一个节点,它们可以合并从缓存结果导出的部分映射作为搜索的起点。
案例4: 如果不能识别出有希望的缓存查询(第14行),我们观察到缓存丢失,并采用§4.1中描述的过程,即带有基于嵌入过滤的Alg. 1 (Alg. 2)。
在我们的实验中,我们观察到很小的ω值会导致缓存查询和当前查询之间的微小差异。在某些情况下,差异是单个节点,这没有意义。一个大ω减少了重叠的大小,增加了检测子图同构的时间。在我们的实验中,我们观察到将ω设置为|Vq |的10%能够很好地平衡这种平衡。
- 缓存管理
由于缓存的大小是有限的,因此缓存的接收和回收都需要进行管理,以减少缓存未命中的数量,并在当前和过去的查询之间存在很大的重叠。在本节中,我们首先讨论缓存管理的一般方法,然后再讨论具体的策略。
5.1 一般方法
在我们的上下文中,缓存管理类似于在线文件缓存的问题,定义为固定大小的缓存和对文件的请求序列,这些请求具有指定的检索成本。如果一个文件不在缓存中,它将根据所分配的成本被检索,而其他文件将被驱逐,以便为它腾出空间。虽然这种方法似乎对流子图同构问题也很有用,但在我们的环境中,还存在一些额外的要求,使在线缓存的现有解决方案表现不佳。
流子图同构的缓存要求。传统的在线缓存假设每个请求都需要得到响应。但是,如果引起的延迟变得太大,我们可能会从缓存管理中摆脱查询。这为缓存策略提供了额外的自由度。此外,在我们的上下文中,查询可能会被缓存的结果部分响应,参见§4.2。因此,缓存管理策略应考虑部分缓存命中。
现有的在线缓存算法。而在文献中已经提出了各种在线缓存算法,其中大部分都可以在Landlord算法的框架中描述。该算法为每个查询分配一个积分,以表示回答该查询的代价。将查询保存在缓存中,就可以节省这个回答成本。当到达一个与缓存中的任何查询不匹配的新查询时,所有缓存查询的信用都会降低。没有任何剩余信用的查询将被取消。另一方面,当一个查询被重用时,它的信用会增加。
Landlord算法不满足以上要求: 它要求将每个查询放入缓存中,并单独合并完整的缓存命中。像Greedy-Dual和LRU这样的在线缓存算法都是Landlord算法的实例,所以它们都有同样的缺点。
5.2 查询工具
上述要求促使我们设计了一种新的缓存管理策略,我们称之为Screening Landlord (SL)策略。它采用了Landlord算法,并依赖查询的效用来决定缓存的允许与否。在这里,实用程序是基于时间的,以合并回答查询的工作,以及基于多样性的,以反映查询的可重用性。
基于时间的效用。有三个方面会影响将查询保存在缓存中所节省的时间。首先,回答时间是回答查询并将其结果添加到缓存所需的时间,它对应于Alg. 2中第四种情况的运行时。查询q的回答时间,用a(q)表示,在缓存命中的情况下保存。
其次,重用时间是访问和重用查询w缓存的结果以回答查询q(用r(q,w)表示)所需的时间。它捕获由缓存引起的开销,即Alg. 2中前三种情况的运行时。请注意,重用时间取决于当前查询和缓存查询重叠的大小。重叠越大,重用时间就越短。
给定一个查询流Q,每个缓存的查询w的回答时间和重用时间汇总。
Diversity-based效用。传统的地主算法实例,如LRU或Recache,在确定缓存结果的效用时只考虑时间和频率。然而,我们努力缓存可以被许多其他查询重用的查询结果,因此我们建议纳入可重用性的概念。直观地说,缓存中有许多“类似”查询是没有用的,因为不同的查询集增加了结果被新查询重用的机会。因此,我们根据查询w与一组缓存查询C之间的平均嵌入距离定义了基于多样性的实用工具的概念。
上面的实用工具概念第一次在缓存管理中包含了查询图的多样性。这种方法对于传统的、基于结构的索引极其难以实现:基于结构属性度量查询图之间的不同/相似度在计算上非常昂贵,因此不适合缓存管理。只有使用了嵌入,以多样性考虑为指导的缓存管理才变得可行。我们后来用经验证明,缓存多样性确实是有益的。它增加了缓存命中的次数,并显著减少了应答时间
结合实用程序。我们结合以上的概念来定义查询的总体效用。虽然效用的这两个方面都很重要,但我们必须承认,它们的规范化因素是不同的。因此,为了得到一个有意义的组合,总体效用由它们的乘积定义,即µ(q) =µt (q)µd(q)。
5.3 基于用途的缓存管理
利用上述概念,我们提出了一种用于缓存管理的筛选算法。与传统的Landlord算法不同,它包含了筛选步骤,使用两个边界来决定一个新的查询q是否应该被允许进入缓存。
首先,有一个处理q的时间上限,这是一个用户定义的阈值。如果处理q的时间超过这个阈值,则不考虑将查询纳入缓存。这样,缓存的开销就限制了查询的挑战性。
其次,处理q的时间也有一个下限。它是由缓存查询的最小总体效用和基于距离的q效用动态推导而来的。具体来说,界限是这些值的比值。直观上,它定义了在哪个回答时间之后的q,有一个盈亏平衡点,也就是说,q的总体效用高于当前缓存中查询的最小效用。
基于这种一般的直觉,Alg. 4形式化了我们的筛选地主算法。对于一个新的查询q,我们根据q的子图嵌入和缓存C(第2行)中的查询计算其基于距离的实用程序μ d(q)。然后我们提取缓存查询的最小效用(第3行),然后确定q的回答时间的下界(第4行)。也就是说,下界基于传入查询和当前缓存设置。接下来,使用Alg. 3处理查询q,同时根据用户定义的阈值监视运行时并中止缓存管理(第5-8行)。如果查询处理在超时前完成,则缓存将允许查询(第10行)。这确保了缓存中的最低实用程序不会随着我们处理更多查询而减少。
当需要将查询添加到缓存时,可能需要使用最小的实用程序来清除缓存的查询(第13行)。根据Landlord算法,一旦查询被驱逐,我们将每个缓存查询的效用降低到最小效用值(第14行)。通过这种方式,我们可以确保缓存不饱和。如果没有这种机制,实用程序将永远不会减少,这将阻止任何新的缓存进入。
在使用Alg. 3处理查询q时,我们可以重用缓存的查询w的结果。在这种情况下,我们根据Eq. 3(第17行)更新了w的效用。为了获得关于查询q的缓存查询w的重用成本,我们测量处理缓存结果的运行时,即Alg. 3的前三种情况(第3-14行)。
5.4 进一步考量
处理cache冷启动。最初,由于缓存是空的,没有结果可以重用,而且由于在完整数据图上进行子图同构搜索,查询处理很慢。因此,我们建议在脱机阶段用随机子图的结果预先填充缓存。
也就是说,我们在数据图中随机选择k个不同的、彼此相距较远的节点。从每个节点开始,我们构建一个自我网络,作为子图查询,结果被添加到缓存中。在处理实际的查询流时,我们希望这些代理查询从缓存中被移除。我们通过一个专门的实验证实了以这种方式填充缓存的好处。
最小化距离计算开销。要计算从新查询到缓存查询的距离(Alg. 4中的第2行),需要遍历所有缓存查询。为了减少诱导开销,我们将计算限制在查询的k个最近邻。虽然这仅仅是缓存多样性的一个近似值,但在实践中,这些估计是足够准确的,可以做出关于缓存驱逐和接纳的正确决定。
结果基数。由于每个查询可能有不同数量的匹配子图,因此存储查询结果的时间在不同的查询之间是不同的。因此,我们建议只存储前k个匹配子图,这类似于在信息检索系统中显示前k个结果。在检查这些初步结果之后,用户可以决定是否应该得到完整的查询答案。如果是,则利用前一个结果,类似于我们在Alg. 3中查询流处理的第三种情况。
6. 评估
6.1 实验设置
数据集:We used six standard real-world benchmark datasets for subgraph isomorphism: Yeast, Human, Wordnet, Cora, Citeseer, and Pubmed.
Baselines. VF2[8],TurboISO[18],MQO[37]. embedding-based approach: GGSX [5] and CTIndex [25]. cache management: LRU [44] and Recache [3].
Metrics. the average processing time over the whole query stream.
7. 相关工作:
单查询的子图同构。通过利用查询图和数据图之间的结构等价性,已经开发了许多方法来回答单个子图同构查询。映射通常是迭代构造的,以保持节点的连通性。VF2[8]是一种传统的算法,它实例化Alg. 1,并通过比较标签和节点的度来构造映射。WaSQ[29]执行查询图的重写,以匹配已知部分映射且最终映射派生自部分映射的结构。
虽然我们的重点是流子图同构,但我们的方法也可以用于回答单个查询。所提出的节点嵌入可以看作是一种支持子图搜索的附加数据结构。它们的作用类似于在构造映射时过滤候选节点集的现有技术所使用的节点标签或节点度。
加快子图同构的另一种方法是将特征识别为子图指标,用于比较[4,5,22,25]。CPI[4]构造了一个称为紧凑路径索引的数据结构,类似于生成树。GGSX[5]以长度有界的路径(后缀树)为特征。CTIndex[25]使用周期创建图形指纹。不过,基于结构的指数存在几个问题。首先,它们不有效,因为识别图中的结构或基元通常是一个子图同构问题本身。其次,它们通常需要用户识别哪些结构与子图同构问题相关。我们的基于嵌入的索引避免了这些问题,因为嵌入可以有效地学习和自动捕获图的结构。
多个查询子图同构。同时回答多个子图同构查询的问题能够识别查询之间的公共结构,这为优化提供了一个角度,例如[27]中针对RDF图的SPAQRL查询。这种方法根据查询的边缘标签、Jaccard相似性和批量优化的好处将查询分成组。然后,为每个组提取一个公共子图模式,并重写查询以包含模式和可选约束。支持这种可选约束的查询引擎用于回答原始查询。MQO[37]处理通用图的多查询子图同构搜索。MQO还对结构相似的查询图进行分组。但是,MQO将它们组织在一个称为模式包容映射(PCM)的包容树中,其中有向边连接查询,其中一个是另一个的子图。然后以一种自顶向下的方式回答有关PCM的查询。这允许MQO使用父查询的映射来派生子查询的答案。虽然在争取子图同构搜索中的重用方面,MQO与我们的工作很接近,但有几个重要的区别。首先,MQO与缓存无关,而我们的方法严重依赖缓存。缓存不仅可以重用即时结果(例如,在同一批查询中),还可以重用所有过去的结果。第二,MQO是一种批处理算法,它处理一组又一组的查询。提出了一种合适的流处理算法。在流上应用MQO需要将流划分为批,这是不实际的。第三,MQO利用同一批查询图的结构来识别类似的查询,这很耗时。通过利用子图嵌入,我们的方法更有效地处理查询图。