您的位置:

LINE算法详解

一、LINE算法

LINE(Large-scale Information Network Embedding)算法是由Facebook研究人员提出的用于将大型信息网络映射到向量空间中的算法。其核心思想是通过对节点的一阶和二阶相似性建立目标函数,并使用随机梯度下降算法来学习节点的向量表示。

其它网络嵌入算法的问题在于不同类型的网络结构会留下不同的网络特征,而LINE算法通过通过直接学习网络的重要特征进行解决,并具有很好的通用性。

二、line算法中的一阶相似性

在LINE算法中,一阶相似性指的是节点直接相连的相似性,即通过共同邻居来计算节点的相似性。计算方式为使用softmax函数对邻居节点的向量和自身节点的向量进行点积得到一个分数,再将所有邻居向量的分数归一化,得到一个向量的相似性。

使用一阶相似性的原因在于节点之间通过直接链接构成的网络种类相同的结构比较多,并且计算相对简单,可扩展性较强。

三、LINE算法优势

LINE算法相较于传统的网络嵌入算法(如DeepWalk、node2vec等)具有以下优势:

1、高效的模型训练:Levy等人在论文中指出,LINE算法对于大型网络的训练模型比DeepWalk更快,更节省内存。

2、高质量的向量表示:LINE算法使用一阶和二阶相似性计算节点向量表示,相比于其它方法,生成的向量表示更贴近网络结构。

3、可扩展的节点表示:LINE算法的向量表示维度较低,可以扩展到包含数百万个节点的大型网络。

四、anatline的总体目标

anatline是LINE算法的升级版,目标是将anatomical connectomes嵌入到共同空间中,通过计算节点之间的相似度来更好地理解大脑的结构和功能。研究人员使用anatline算法将图像数据转换为网络结构,并将网络结构进行向量表示,从而较好地理解大脑结构信息。

五、line函数

LINE算法的核心代码如下所示:

def LINE(G, dim, order=3):
    n_nod = G.shape[0]
    q, r = divmod(dim, order)
    return init_network(G, dim), learn_G(G, q, r, n_nod)

六、baseline算法

在LINE算法提出之前,DeepWalk和node2vec是处理大型信息网络的常见算法。深度行走算法(DeepWalk)使用随机游走的方法来采样节点,使用基于向量表示的方法来学习节点的embedding;而node2vec算法定义了一个参数化随机游走进行采样,并提供了可调节的随机游走策略别选项,可以更好地反映网络结构。

七、line算法和ELSR算法比较

LSR是由著名计量经济学家Ridge回归提出的方法。与LINE算法相比,LSR算法采用更广泛的异构数据进行训练,因此其表达效果更加优秀。但是,相较于LINE算法,LSR算法更加需要数据的多样性支持。

八、Online算法

线上算法是在处理大规模数据时具有优异性能的算法之一。LINE算法也可以扩展到线上算法,其具体实现方法是将学习和更新过程分批进行,并且每个批次具有足够的数据量和具有代表性的数据,从而提高了效率和效果。

九、inode算法

在LINE算法的基础上,inode算法提出了节点间协同探查机制,利用邻居节点之间的依赖关系优化了节点向量表示。在许多大型信息网络上,inode算法较LINE算法都获得了更优的效果。

十、line的用法

在python中可以通过安装gensim来使用LINE算法,具体代码实现方式如下:

from gensim.models import Line

model = Line(sentences, size=100, window=5, min_count=5, sg=1, hs=1, workers=12)

#sentences是语料,可以是任意形式的迭代器或者一个可以迭代的文件,如:
model = Line(corpus_file='coor.txt')

#size是生成的向量的维度
#window是窗口大小
#min_count是忽略所有频率小于此值的单词
#sg是训练算法,1代表skip-gram,0代表cbow
#hs是否使用层次softmax。如果使用则negative参数将失效
#workers是线程数

#训练线上的模型:
model.train(corpus_file='coor.txt', epochs=model.iter)

通过以上方式可以进行语料的训练,产生非常优秀的高维向量,同时也可以通过对LINE算法进行调整来进行优化!