说话者-听众标签传播

此功能处于 Alpha 阶段。有关功能层级的更多信息,请参阅API 层级

词汇表

有向

有向特性。该算法在有向图上定义良好。

有向

有向特性。该算法忽略图的方向。

有向

有向特性。该算法不在有向图上运行。

无向

无向特性。该算法在无向图上定义良好。

无向

无向特性。该算法忽略图的无向性。

异构节点

异构节点完全支持。该算法能够区分不同类型的节点。

异构节点

异构节点允许。该算法对所有选定的节点一视同仁,无论其标签如何。

异构关系

异构关系完全支持。该算法能够区分不同类型的关系。

异构关系

异构关系允许。该算法对所有选定的关系一视同仁,无论其类型如何。

加权关系

加权特性。该算法支持使用关系属性作为权重,通过 relationshipWeightProperty 配置参数指定。

加权关系

加权特性。该算法将每个关系视为同等重要,忽略任何关系权重的价值。

简介

说话者-听众标签传播算法 (SLLPA) 是标签传播算法的一种变体,能够为每个节点检测多个社区。GDS 的实现基于 Xie 等人发表的SLPA:通过说话者-听众交互动态过程揭示社交网络中的重叠社区论文。

该算法本质上是随机的,不会产生确定性结果。为了适应这一点,我们建议使用更高的迭代次数。

语法

本节介绍在每种执行模式下执行 SLLPA 算法所使用的语法。我们描述的是命名图变体的语法。要了解更多关于通用语法变体的信息,请参阅语法概述

每种模式的 SLLPA 语法
在命名图上以流模式运行 SLLPA。
CALL gds.sllpa.stream(
  graphName: String,
  configuration: Map
)
YIELD
  nodeId: Integer,
  values: Map {
    communtiyIds: List of Integer
  }
表 1. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

映射

{}

算法特定配置和/或图过滤配置。

表 2. 配置
名称 类型 默认值 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。将包含具有任何给定标签的节点。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。将包含具有任何给定类型的关系。

并发

整数

4 [1]

用于运行算法的并发线程数。

jobId

字符串

内部生成

可以提供一个 ID,以便更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,则不会记录进度百分比。

maxIterations

整数

不适用

最大运行迭代次数。

minAssociationStrength

字符串

0.2

社区保留节点所需的最小影响力。

分区

字符串

"RANGE"

用于在线程之间划分工作的分区方案。可用选项为 AUTORANGEDEGREE

1. 在 GDS 会话中,默认值为可用处理器数量

表 3. 结果
名称 类型 描述

nodeId

整数

节点 ID。

values

映射

包含键 communityIds 的映射。

在命名图上以统计模式运行 SLLPA。
CALL gds.sllpa.stats(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  configuration: Map
表 4. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

映射

{}

算法特定配置和/或图过滤配置。

表 5. 配置
名称 类型 默认值 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。将包含具有任何给定标签的节点。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。将包含具有任何给定类型的关系。

并发

整数

4 [2]

用于运行算法的并发线程数。

jobId

字符串

内部生成

可以提供一个 ID,以便更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,则不会记录进度百分比。

maxIterations

整数

不适用

最大运行迭代次数。

minAssociationStrength

字符串

0.2

社区保留节点所需的最小影响力。

分区

字符串

"RANGE"

用于在线程之间划分工作的分区方案。可用选项为 AUTORANGEDEGREE

2. 在 GDS 会话中,默认值为可用处理器数量

表 6. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

图预处理的毫秒数。

computeMillis

整数

运行算法的毫秒数。

配置

映射

用于运行算法的配置。

在命名图上以变异模式运行 SLLPA。
CALL gds.sllpa.mutate(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  mutateMillis: Integer,
  nodePropertiesWritten: Integer,
  configuration: Map
表 7. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

映射

{}

算法特定配置和/或图过滤配置。

表 8. 配置
名称 类型 默认值 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。

并发

整数

4

用于运行算法的并发线程数。

mutateProperty

字符串

""

用于 PregelSchema 中所有公共属性的前缀。

jobId

字符串

内部生成

可以提供一个 ID,以便更轻松地跟踪算法的进度。

maxIterations

整数

不适用

最大运行迭代次数。

minAssociationStrength

字符串

0.2

社区保留节点所需的最小影响力。

分区

字符串

"RANGE"

用于在线程之间划分工作的分区方案。可用选项为 AUTORANGEDEGREE

表 9. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

图预处理的毫秒数。

computeMillis

整数

运行算法的毫秒数。

mutateMillis

整数

向投影图添加属性的毫秒数。

nodePropertiesWritten

整数

写入 Neo4j 的属性数量。

配置

映射

用于运行算法的配置。

在命名图上以写入模式运行 SLLPA。
CALL gds.sllpa.write(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  writeMillis: Integer,
  nodePropertiesWritten: Integer,
  configuration: Map
表 10. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

映射

{}

算法特定配置和/或图过滤配置。

表 11. 配置
名称 类型 默认值 可选 描述

nodeLabels

字符串列表

['*']

使用给定的节点标签过滤命名图。将包含具有任何给定标签的节点。

relationshipTypes

字符串列表

['*']

使用给定的关系类型过滤命名图。将包含具有任何给定类型的关系。

并发

整数

4 [3]

用于运行算法的并发线程数。

jobId

字符串

内部生成

可以提供一个 ID,以便更轻松地跟踪算法的进度。

logProgress

布尔值

true

如果禁用,则不会记录进度百分比。

writeConcurrency

整数

“concurrency”的值

用于将结果写入 Neo4j 的并发线程数。

writeProperty

字符串

""

用于 PregelSchema 中所有公共属性的前缀。

maxIterations

整数

不适用

最大运行迭代次数。

minAssociationStrength

字符串

0.2

社区保留节点所需的最小影响力。

分区

字符串

"RANGE"

用于在线程之间划分工作的分区方案。可用选项为 AUTORANGEDEGREE

3. 在 GDS 会话中,默认值为可用处理器数量

表 12. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

图预处理的毫秒数。

computeMillis

整数

运行算法的毫秒数。

writeMillis

整数

写回结果数据的毫秒数。

nodePropertiesWritten

整数

写入 Neo4j 的属性数量。

配置

映射

用于运行算法的配置。

示例

以下所有示例都应在空数据库中运行。

示例通常使用 Cypher 投影。原生投影将在未来的版本中弃用。

在本节中,我们将展示在具体图上运行 SLLPA 算法的示例。目的是说明结果是什么样子,并提供如何在实际设置中使用该算法的指南。我们将在一个包含少量节点并以特定模式连接的小型社交网络图上进行此操作。示例图如下所示

Visualization of the example graph
以下 Cypher 语句将在 Neo4j 数据库中创建示例图
CREATE
  (a:Person {name: 'Alice'}),
  (b:Person {name: 'Bob'}),
  (c:Person {name: 'Carol'}),
  (d:Person {name: 'Dave'}),
  (e:Person {name: 'Eve'}),
  (f:Person {name: 'Fredrick'}),
  (g:Person {name: 'Gary'}),
  (h:Person {name: 'Hilda'}),
  (i:Person {name: 'Ichabod'}),
  (j:Person {name: 'James'}),
  (k:Person {name: 'Khalid'}),

  (a)-[:KNOWS]->(b),
  (a)-[:KNOWS]->(c),
  (a)-[:KNOWS]->(d),
  (b)-[:KNOWS]->(c),
  (b)-[:KNOWS]->(d),
  (c)-[:KNOWS]->(d),

  (b)-[:KNOWS]->(e),
  (e)-[:KNOWS]->(f),
  (f)-[:KNOWS]->(g),
  (g)-[:KNOWS]->(h),

  (h)-[:KNOWS]->(i),
  (h)-[:KNOWS]->(j),
  (h)-[:KNOWS]->(k),
  (i)-[:KNOWS]->(j),
  (i)-[:KNOWS]->(k),
  (j)-[:KNOWS]->(k);

在此示例中,我们将使用 SLLPA 算法来查找图中的社区。

以下语句将投影图并将其存储在图目录中。
MATCH (source:Person)-[r:KNOWS]->(target:Person)
RETURN gds.graph.project(
  'myGraph',
  source,
  target,
  {},
  { undirectedRelationshipTypes: ['*'] }
)

在以下示例中,我们将演示在此图上使用 SLLPA 算法。

stream 执行模式下,算法返回每个节点的社区 ID。这使我们能够直接检查结果,或在 Cypher 中对其进行后处理,而不会产生任何副作用。

有关 stream 模式的更多详细信息,请参阅

以下将运行算法,并流式传输结果
CALL gds.sllpa.stream('myGraph', {maxIterations: 100, minAssociationStrength: 0.1})
YIELD nodeId, values
RETURN gds.util.asNode(nodeId).name AS Name, values.communityIds AS communityIds
  ORDER BY Name ASC
表 13. 结果
名称 communityIds

"Alice"

[0]

"Bob"

[0]

"Carol"

[0]

"Dave"

[0]

"Eve"

[0, 1]

"Fredrick"

[0, 1]

"Gary"

[0, 1]

"Hilda"

[1]

"Ichabod"

[1]

"James"

[1]

"Khalid"

[1]

由于算法的随机性,结果在不同运行之间会趋于变化。

© . All rights reserved.