如何评估graph embedding的效果

  • 2021 年 2 月 2 日
  • AI

//github.com/VHRanger/nodevectorsgithub.com图标VHRanger/nodevectorsVHRanger/nodevectorsgithub.com图标

(目前能找到单机性能最高并且不要求GPU的graph embedding library了,不过可惜没有实现全。。。不过话说目前graph embedding的library就没有实现全的;graphvite号称直接通过cuda来写graph embedding的逻辑,但是他们家的library我一直没能装上。。。)

1、link prediction:通过移除graph中的部分edges,然后我们去预测被移除了edge的两个节点是否存在edges,这样就把问题转化为一个二分类问题了,可以使用逻辑回归或者lightgbm来完成,具体的做法就是:

(1)存在edge的两个节点对为正样本,标签为1;

(2)不存在edges的两个节点为负样本,标签为0,这里的问题在于我们如何选择,简单的做法就是graph上仍以两个节点进行组合成node pairs,然后存在edge的node pairs移除,剩下不存在的就都是负样本了;但是这样构造出来的node pairs会非常多,比如100个节点,则有100*(100-1)=9900种组合,针对这种情况,合适的做法就是随机采样了,采样一部分负样本即可;

最后我们可以通过auc、f1score等方式来评估;

这种方法对标签没有依赖性,最灵活;

2、图聚类(在带有社区/聚类标签的图形上),我们在graph embedding结果上使用分层的聚类聚类,并测量graph embeding的聚类结果与网络中实际社区的重叠。选择分层的层次聚类是因为它是确定性的,并且对聚类形状或缩放或嵌入度量空间不敏感。我们用RAND指数,相互信息得分和Fowlkes-Mallows得分来测量重叠(这些也是常规的无监督聚类里使用的评估指标)。这类方法需要具有社区的标签,即哪些节点属于一个社区,将graph embedding的分层聚类结果与社区标签做比较,如果没有社区标签可以考虑使用社区发现算法来计算社区标签;

3、直接对标下游任务,这种适用于存在较多标签的情况,即每一个节点都有标签存在,那么graph embedding之后,embedding的结果对应的就是原始节点的标签了,此时我们可以根据下游任务的评估指标来判定embedding的效果,这也是针对下游任务最好的度量方式,不过需要大量的已知标签的支持;