我正在使用Neo4j Graph Data Science(GDS)库和快速随机投影(FastRP)进行图嵌入。我面临的挑战是如何有效地更新这些嵌入以响应频繁的图更改(节点和边的添加/删除)。我特别感兴趣的是了解更新这些嵌入的最佳实践-我应该在每次更改后选择增量更新,还是定期进行批量处理?此外,我很好奇是否可以只为受影响的子图更新嵌入,同时保持嵌入的完整性和一致性,就像它们在全局图投影上完成一样。
6tr1vspr1#
图形更改的频率将决定您是否应该进行批处理。对于你的主要问题,FastRP依赖于一个节点和它的邻居,这些邻居的邻居,这些邻居的邻居,等等。有一个配置参数IterationWeights,它做两件事:1.确定要查看的邻居-邻居-邻居的数量。1.确定每个分离度的相关程度。如果您将迭代权重设置为[1.0],FastRP将只查看直接邻居。如果使用[0.0,1.0],则将使用第一和第二次邻居,权重相等。上面应该更准确地表述为“第一次迭代只查看直接邻居。第二次迭代查看直接和第二次邻居。使用[0.0,1.0]将迭代次数设置为2,意味着第二次迭代结果将被独占使用。”说“加权相等”是不正确的。为了在发生变化时更新嵌入,假设你使用的是二级邻居,而你的节点A发生了变化。创建一个只有A、它的邻居和邻居-邻居的投影,然后在写模式下运行FastRP。与批量更新的想法相同,只需选择已更改的节点,然后从这些节点中跳出最多2个节点。
1条答案
按热度按时间6tr1vspr1#
图形更改的频率将决定您是否应该进行批处理。
对于你的主要问题,FastRP依赖于一个节点和它的邻居,这些邻居的邻居,这些邻居的邻居,等等。
有一个配置参数IterationWeights,它做两件事:
1.确定要查看的邻居-邻居-邻居的数量。
1.确定每个分离度的相关程度。
如果您将迭代权重设置为[1.0],FastRP将只查看直接邻居。
如果使用[0.0,1.0],则将使用第一和第二次邻居,权重相等。
上面应该更准确地表述为“第一次迭代只查看直接邻居。第二次迭代查看直接和第二次邻居。使用[0.0,1.0]将迭代次数设置为2,意味着第二次迭代结果将被独占使用。”说“加权相等”是不正确的。
为了在发生变化时更新嵌入,假设你使用的是二级邻居,而你的节点A发生了变化。创建一个只有A、它的邻居和邻居-邻居的投影,然后在写模式下运行FastRP。
与批量更新的想法相同,只需选择已更改的节点,然后从这些节点中跳出最多2个节点。