Speaker-Listener Label Propagation

Supported Graph Characteristics

Unweighted edges

Directed edges

Undirected edges

Homogeneous vertex types

Heterogeneous vertex types

The Speaker-listener Label Propagation Algorithm (SLPA) is a variation of the Label Propagation algorithm that is able to detect overlapping communities. The main difference between LPA and SLPA is that each node can only hold a single label in LPA while it is allowed to possess multiple labels in SLPA.

The algorithm begins with each vertex having its own unique label. It then iteratively records labels in a local accumulator based on specific speaking and listening rules. Then the post-processing of the record labels is applied. Finally, the algorithm removes the nested communities and outputs all the communities. Note that it is not guaranteed to produce the same results every time.


CREATE QUERY tg_slpa ( SET<STRING> v_type_set,  SET<STRING> e_type_set, FLOAT threshold, INT maximum_iteration, INT print_limit,
BOOL print_results = TRUE, STRING file_path = "")


Parameter Description Default

SET<STRING> v_type_set

The vertex types to use

(empty set of strings)

SET<STRING> e_type_set

The edge types to use

(empty set of strings)

FLOAT threshold

The threshold to drop a label


INT maximum_iteration

The maximum number of iterations


BOOL print_results

Whether to print the output in JSON format


STRING file_path

The file to write the output to in CSV format

(empty string)

INT print_limit

The maximum number of vertices to output. A value of -1 will output all vertices.



Assigns a list of component IDs in INT form to each vertex, such that members of the same component have the same ID value.

The result size is equal to \$V\$, the number of vertices.

Time complexity

This algorithm has a complexity of \$O(E*k)\$, where \$E\$ is the number of edges and \$k\$ is the number of iterations.

Run commands

Schema-Free Query

RUN QUERY tg_slpa(<parameters>)

Packaged Template Query

CALL GDBMS_ALGO.community.slpa (<parameters>)


In the example below, we run the tg_slpa algorithm on the social10 graph. We set maximum_iteration = 10 and threshold = 0.1.

  • Query

  • Result

# Use _ for default values
RUN QUERY tg_slpa(["Person"], ["Coworker"], _, _, _, _, _
    "@@COM": {
      "Fiona": [294649859],
      "Alex": [270532609],
      "Damon": [279969793],
      "Justin": [270532609],
      "Eddie": [279969793],
      "Chase": [279969793],
      "Howard": [294649859],
      "George": [294649859],

The result shows that each community has a unique community ID in the com attribute.

Visualized results