Node2Vec
此功能处于 Beta 阶段。有关功能阶段的更多信息,请参阅 API 阶段。
词汇表
- 有向
-
有向特性。该算法在有向图上定义良好。
- 有向
-
有向特性。该算法忽略图的方向。
- 有向
-
有向特性。该算法不会在有向图上运行。
- 无向
-
无向特性。该算法在无向图上定义良好。
- 无向
-
无向特性。该算法忽略图的无向性。
- 异构节点
-
异构节点 完全支持。该算法能够区分不同类型的节点。
- 异构节点
-
异构节点 允许。该算法对所有选定的节点进行类似处理,而不管其标签如何。
- 异构关系
-
异构关系 完全支持。该算法能够区分不同类型的关系。
- 异构关系
-
异构关系 允许。该算法对所有选定的关系进行类似处理,而不管其类型如何。
- 加权关系
-
加权特性。该算法支持将关系属性用作权重,通过 relationshipWeightProperty 配置参数指定。
- 加权关系
-
加权特性。该算法将每个关系视为同等重要,丢弃任何关系权重的值。
Node2Vec 是一种节点嵌入算法,它基于图中的随机游走计算节点的向量表示。 通过随机游走对邻域进行采样。 使用多个随机邻域样本,算法训练一个单隐藏层神经网络。 神经网络被训练来预测一个节点基于另一个节点出现的概率出现在游走中的可能性。
有关此算法的更多信息,请参阅
随机游走
Node2Vec 算法的主要概念是二阶随机游走。 随机游走模拟图的遍历,其中遍历的关系是随机选择的。 在经典的随机游走中,每种关系都有相同(可能加权)的被选中的概率。 此概率不受先前访问的节点的影响。 然而,二阶随机游走的概念试图根据当前访问的节点v
、在当前节点之前访问的节点t
以及作为候选关系目标的节点x
来建模转换概率。 因此,Node2Vec 随机游走受两个参数的影响:returnFactor
和 inOutFactor
-
如果
t
等于x
,则使用returnFactor
,即随机游走返回到先前访问的节点。 -
如果
t
到x
的距离等于 2,则使用inOutFactor
,即游走进一步远离节点t
通过指定relationshipWeightProperty
,可以进一步影响随机游走期间遍历关系的概率。 大于 1 的关系属性值将增加遍历关系的可能性,介于 0 和 1 之间的属性值将降低该概率。
对于图中的每个节点,Node2Vec 生成一系列以特定节点作为起始节点的随机游走。 每个节点的随机游走数量可以通过walkPerNode
配置参数来影响,游走长度由walkLength
参数控制。
在机器学习管道中的使用
为了使机器学习模型能够做出有用的预测,预测过程中产生的特征与模型训练过程中产生的特征具有相似的分布非常重要。 此外,添加到管道中的节点属性步骤(无论是否为 Node2Vec)都将在训练期间和训练后的模型进行预测期间执行。 因此,当管道包含一个嵌入步骤时,在训练和预测期间产生完全不同的嵌入会存在问题。
Node2Vec 生成的最终嵌入取决于生成初始节点嵌入向量的随机性以及计算中采用的随机游走。 目前,即使设置了randomSeed
配置参数,Node2Vec 也会产生非确定性结果。 因此,由于嵌入在运行之间不会是确定性的,因此目前不应将 Node2Vec 用作管道中的节点属性步骤,除非目的是实验性的并且仅使用训练模式。
如果在管道外部生成 Node2Vec 节点嵌入作为管道中的特征,它仍然可能有用,只要意识到不使用管道中的数据集拆分的数据泄漏风险。
语法
CALL gds.node2vec.stream(
graphName: String,
configuration: Map
) YIELD
nodeId: Integer,
embedding: List of Float
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
字符串列表 |
|
是 |
使用给定的节点标签过滤命名图。 将包含具有任何给定标签的节点。 |
|
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。 将包含具有任何给定类型的关系。 |
|
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
可以提供的 ID,以便更轻松地跟踪算法的进度。 |
|
布尔值 |
|
是 |
如果禁用,则不会记录进度百分比。 |
|
walkLength |
整数 |
|
是 |
单个随机游走中的步数。 |
walksPerNode |
整数 |
|
是 |
为每个节点生成的随机游走数。 |
inOutFactor |
浮点数 |
|
是 |
随机游走保持靠近起始节点或在图中扇出的趋势。 值越高表示保持局部。 |
returnFactor |
浮点数 |
|
是 |
随机游走返回到上次访问节点的趋势。 小于 1.0 的值表示更高的趋势。 |
字符串 |
|
是 |
用作权重以影响随机游走概率的关系属性的名称。 权重需要 >= 0。 如果未指定,则算法以未加权的方式运行。 |
|
windowSize |
整数 |
|
是 |
训练神经网络时上下文窗口的大小。 |
negativeSamplingRate |
整数 |
|
是 |
为每个正样本生成的负样本数。 |
positiveSamplingFactor |
浮点数 |
|
是 |
影响正样本分布的因素。 值越高,频繁节点被下采样的概率就越高。 |
negativeSamplingExponent |
浮点数 |
|
是 |
应用于节点频率以获得负采样分布的指数。 值为 1.0 时,按频率进行采样。 值为 0.0 时,每个节点都平等地采样。 |
embeddingDimension |
整数 |
|
是 |
计算出的节点嵌入的大小。 |
embeddingInitializer |
字符串 |
|
是 |
初始化嵌入的方法。 值从范围 |
iterations |
整数 |
|
是 |
训练迭代次数。 |
initialLearningRate |
浮点数 |
|
是 |
最初用于训练神经网络的学习率。 学习率在每次训练迭代后都会降低。 |
minLearningRate |
浮点数 |
|
是 |
学习率的下限,因为它在训练期间会降低。 |
randomSeed |
整数 |
|
是 |
用于生成随机游走的种子值,这些随机游走用作神经网络的训练集。 请注意,生成的嵌入仍然是非确定性的。 |
walkBufferSize |
整数 |
|
是 |
在开始训练之前要完成的随机游走数量。 |
名称 | 类型 | 描述 |
---|---|---|
|
整数 |
Neo4j 节点 ID。 |
|
浮点数列表 |
计算出的节点嵌入。 |
CALL gds.node2vec.mutate(
graphName: String,
configuration: Map
)
YIELD
preProcessingMillis: Integer,
computeMillis: Integer,
postProcessingMillis: Integer,
mutateMillis: Integer,
nodeCount: Integer,
nodePropertiesWritten: Integer,
lossPerIteration: List of Float,
configuration: Map
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
mutateProperty |
字符串 |
|
否 |
将嵌入写入的 GDS 图中的节点属性。 |
字符串列表 |
|
是 |
使用给定的节点标签过滤命名图。 |
|
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。 |
|
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
可以提供的 ID,以便更轻松地跟踪算法的进度。 |
|
walkLength |
整数 |
|
是 |
单个随机游走中的步数。 |
walksPerNode |
整数 |
|
是 |
为每个节点生成的随机游走数。 |
inOutFactor |
浮点数 |
|
是 |
随机游走保持靠近起始节点或在图中扇出的趋势。 值越高表示保持局部。 |
returnFactor |
浮点数 |
|
是 |
随机游走返回到上次访问节点的趋势。 小于 1.0 的值表示更高的趋势。 |
字符串 |
|
是 |
用作权重以影响随机游走概率的关系属性的名称。 权重需要 >= 0。 如果未指定,则算法以未加权的方式运行。 |
|
windowSize |
整数 |
|
是 |
训练神经网络时上下文窗口的大小。 |
negativeSamplingRate |
整数 |
|
是 |
为每个正样本生成的负样本数。 |
positiveSamplingFactor |
浮点数 |
|
是 |
影响正样本分布的因素。 值越高,频繁节点被下采样的概率就越高。 |
negativeSamplingExponent |
浮点数 |
|
是 |
应用于节点频率以获得负采样分布的指数。 值为 1.0 时,按频率进行采样。 值为 0.0 时,每个节点都平等地采样。 |
embeddingDimension |
整数 |
|
是 |
计算出的节点嵌入的大小。 |
embeddingInitializer |
字符串 |
|
是 |
初始化嵌入的方法。 值从范围 |
iterations |
整数 |
|
是 |
训练迭代次数。 |
initialLearningRate |
浮点数 |
|
是 |
最初用于训练神经网络的学习率。 学习率在每次训练迭代后都会降低。 |
minLearningRate |
浮点数 |
|
是 |
学习率的下限,因为它在训练期间会降低。 |
randomSeed |
整数 |
|
是 |
用于生成随机游走的种子值,这些随机游走用作神经网络的训练集。 请注意,生成的嵌入仍然是非确定性的。 |
walkBufferSize |
整数 |
|
是 |
在开始训练之前要完成的随机游走数量。 |
名称 | 类型 | 描述 |
---|---|---|
nodeCount |
整数 |
处理的节点数。 |
nodePropertiesWritten |
整数 |
写入的节点属性数。 |
preProcessingMillis |
整数 |
预处理数据所用的毫秒数。 |
computeMillis |
整数 |
运行算法所用的毫秒数。 |
mutateMillis |
整数 |
将属性添加到投影图中所用的毫秒数。 |
postProcessingMillis |
整数 |
结果的后处理所用的毫秒数。 |
lossPerIteration |
浮点数列表 |
每个训练迭代注册的损失总和。 |
configuration |
映射 |
用于运行算法的配置。 |
CALL gds.node2vec.write(
graphName: String,
configuration: Map
)
YIELD
preProcessingMillis: Integer,
computeMillis: Integer,
writeMillis: Integer,
nodeCount: Integer,
nodePropertiesWritten: Integer,
lossPerIteration: List of Float,
configuration: Map
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
字符串列表 |
|
是 |
使用给定的节点标签过滤命名图。 将包含具有任何给定标签的节点。 |
|
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。 将包含具有任何给定类型的关系。 |
|
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
可以提供的 ID,以便更轻松地跟踪算法的进度。 |
|
布尔值 |
|
是 |
如果禁用,则不会记录进度百分比。 |
|
整数 |
|
是 |
用于将结果写入 Neo4j 的并发线程数。 |
|
字符串 |
|
否 |
将嵌入写入的 Neo4j 数据库中的节点属性。 |
|
walkLength |
整数 |
|
是 |
单个随机游走中的步数。 |
walksPerNode |
整数 |
|
是 |
为每个节点生成的随机游走数。 |
inOutFactor |
浮点数 |
|
是 |
随机游走保持靠近起始节点或在图中扇出的趋势。 值越高表示保持局部。 |
returnFactor |
浮点数 |
|
是 |
随机游走返回到上次访问节点的趋势。 小于 1.0 的值表示更高的趋势。 |
字符串 |
|
是 |
用作权重以影响随机游走概率的关系属性的名称。 权重需要 >= 0。 如果未指定,则算法以未加权的方式运行。 |
|
windowSize |
整数 |
|
是 |
训练神经网络时上下文窗口的大小。 |
negativeSamplingRate |
整数 |
|
是 |
为每个正样本生成的负样本数。 |
positiveSamplingFactor |
浮点数 |
|
是 |
影响正样本分布的因素。 值越高,频繁节点被下采样的概率就越高。 |
negativeSamplingExponent |
浮点数 |
|
是 |
应用于节点频率以获得负采样分布的指数。 值为 1.0 时,按频率进行采样。 值为 0.0 时,每个节点都平等地采样。 |
embeddingDimension |
整数 |
|
是 |
计算出的节点嵌入的大小。 |
embeddingInitializer |
字符串 |
|
是 |
初始化嵌入的方法。 值从范围 |
iterations |
整数 |
|
是 |
训练迭代次数。 |
initialLearningRate |
浮点数 |
|
是 |
最初用于训练神经网络的学习率。 学习率在每次训练迭代后都会降低。 |
minLearningRate |
浮点数 |
|
是 |
学习率的下限,因为它在训练期间会降低。 |
randomSeed |
整数 |
|
是 |
用于生成随机游走的种子值,这些随机游走用作神经网络的训练集。 请注意,生成的嵌入仍然是非确定性的。 |
walkBufferSize |
整数 |
|
是 |
在开始训练之前要完成的随机游走数量。 |
名称 | 类型 | 描述 |
---|---|---|
nodeCount |
整数 |
处理的节点数。 |
nodePropertiesWritten |
整数 |
写入的节点属性数。 |
preProcessingMillis |
整数 |
预处理数据所用的毫秒数。 |
computeMillis |
整数 |
运行算法所用的毫秒数。 |
writeMillis |
整数 |
将结果数据写回 Neo4j 所用的毫秒数。 |
lossPerIteration |
浮点数列表 |
每个训练迭代注册的损失总和。 |
configuration |
映射 |
用于运行算法的配置。 |
示例
以下所有示例都应在空数据库中运行。 这些示例使用 Cypher 投影 作为规范。 本机投影将在将来的版本中弃用。 |
考虑以下 Cypher 语句创建的图
CREATE (alice:Person {name: 'Alice'})
CREATE (bob:Person {name: 'Bob'})
CREATE (carol:Person {name: 'Carol'})
CREATE (dave:Person {name: 'Dave'})
CREATE (eve:Person {name: 'Eve'})
CREATE (guitar:Instrument {name: 'Guitar'})
CREATE (synth:Instrument {name: 'Synthesizer'})
CREATE (bongos:Instrument {name: 'Bongos'})
CREATE (trumpet:Instrument {name: 'Trumpet'})
CREATE (alice)-[:LIKES]->(guitar)
CREATE (alice)-[:LIKES]->(synth)
CREATE (alice)-[:LIKES]->(bongos)
CREATE (bob)-[:LIKES]->(guitar)
CREATE (bob)-[:LIKES]->(synth)
CREATE (carol)-[:LIKES]->(bongos)
CREATE (dave)-[:LIKES]->(guitar)
CREATE (dave)-[:LIKES]->(synth)
CREATE (dave)-[:LIKES]->(bongos);
MATCH (source:Person)-[r:LIKES]->(target:Instrument)
RETURN gds.graph.project(
'myGraph',
source,
target
)
myGraph
上运行 Node2Vec 算法CALL gds.node2vec.stream('myGraph', {embeddingDimension: 2})
YIELD nodeId, embedding
RETURN nodeId, embedding
nodeId | embedding |
---|---|
0 |
[-0.14295829832553864, 0.08884537220001221] |
1 |
[0.016700705513358116, 0.2253911793231964] |
2 |
[-0.06589698046445847, 0.042405471205711365] |
3 |
[0.05862073227763176, 0.1193704605102539] |
4 |
[0.10888434946537018, -0.18204474449157715] |
5 |
[0.16728264093399048, 0.14098615944385529] |
6 |
[-0.007779224775731564, 0.02114257402718067] |
7 |
[-0.213893860578537, 0.06195802614092827] |
8 |
[0.2479933649301529, -0.137322798371315] |