Spanner Graph 演算法目錄

Spanner Graph 與 Google 研究 Graph Mining 密切合作,提供一套演算法,可滿足下列用途的圖形分析需求:

中心性

中心性演算法會根據節點在圖中的結構重要性進行排名。可協助您找出金融科技中的詐欺帳戶、社交關係圖中的影響者、電信網路中的重要路由器等。

PageRank

PageRank 會依重要性為節點評分。如果許多其他重要節點都連結至某個節點,該節點的重要性就會提高。演算法會模擬圖中的隨機漫步。在這項隨機漫步中,造訪頻率較高的節點會視為較重要。如要瞭解演算法詳情,請參閱網頁排名。

函式簽章

PageRank(input_parameters) YIELD node, score

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
source_nodes 圖表節點陣列 否 (無) 如有,則為個人化 PageRank 的來源。
damping_factor FLOAT64 否 0.85 在任何特定疊代中,演算法選擇周遊目前節點其中一個傳出邊緣的機率。必須介於 [0, 1) 範圍內。
max_iterations INT64 否 10 演算法疊代次數上限。必須為正數。 疊代次數越多,結果通常越精確,但執行時間也會拉長。
approx_precision FLOAT64 否 1e-2 演算法的近似精確度閾值。不得為負數。值越小,結果越精確,但執行時間會越長。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
分數 FLOAT64 節點的 PageRank 分數。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/my-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL PageRank(
    node_labels => ['Account'], edge_labels => ['Transfers'],
    source_nodes => ARRAY {
                      MATCH (n:Account {id:7})
                      RETURN n
                    }
  ) YIELD node, score
RETURN node.id, score;

BetweennessCentrality

BetweennessCentrality 衡量節點位於其他節點配對之間最短路徑的頻率。中介中心度高的節點通常是連接圖形不同部分的關鍵橋樑。如要瞭解演算法詳細資料,請參閱中介中心性。

函式簽章

BetweennessCentrality(input_parameters) YIELD node, score

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
num_source_nodes INT64 否 (無) 如果設定此值,必須為正數,並指定演算法應選取多少來源節點,以計算近似中間度中心性。如果未設定,或設定的數字大於圖中的節點數量,則所有節點都會做為來源節點,也就是說,演算法會計算確切的中介中心性。值越高,近似值越準確,但執行時間也越長。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
分數 FLOAT64 節點的中心性分數。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/my-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL BetweennessCentrality(
    node_labels => ['Account'], edge_labels => ['Transfers'], num_source_nodes => 5
  ) YIELD node, score
RETURN node.id, score;

ClosenessCentrality

ClosenessCentrality 衡量節點與圖中所有其他節點的接近程度。緊密度中心性高的節點,可透過較短的路徑到達其他節點。如要瞭解演算法詳情,請參閱「緊密度中心性」。

函式簽章

ClosenessCentrality(input_parameters) YIELD node, score

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
模式 STRING 否 EXACT 演算法模式。支援的值為 EXACT 和 HYBRID。
use_wasserman_faust BOOL 否 FALSE 如果 false,則計算標準接近中心度。如果 true,則計算 Wasserman-Faust 緊密中心度。
epsilon FLOAT64 否 0.1 僅適用於 HYBRID 演算法。必須介於 (0.0, 1.0) 之間。 值越小,精確度通常越高。值越大,演算法的執行速度通常越快。
sample_size INT64 否 0 僅供 HYBRID 演算法使用。用於大約計算中心性值的中樞節點數量。不得為負數。 如果未設定或設為零,系統會使用預設值 min(100 * ln(N), N),其中 N 是輸入圖表的節點數量。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
分數 FLOAT64 節點的緊密度中心性分數。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/my-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL ClosenessCentrality(
    node_labels => ['Account'], edge_labels => ['Transfers'],
    mode => 'EXACT'
  ) YIELD node, score
RETURN node.id, score;

分群

分群演算法會將節點分組為叢集 (也稱為社群),使每個叢集內的節點彼此之間的連結,比與其他叢集內節點的連結更為密集。這項功能可用於偵測金融科技中潛在的詐欺集團、找出零售業中的顧客區隔等。

WeaklyConnectedComponents

WeaklyConnectedComponents 會找出不相交的節點集,使集合中的每個節點都能從同一集合中的任何其他節點連線,但無法從其他集合中的節點連線。如要瞭解演算法詳情,請參閱這篇文章。

函式簽章

WeaklyConnectedComponents(input_parameters) YIELD node, cluster

輸入參數

所有常見輸入參數。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
叢集 INT64 節點所屬的已連線元件/叢集 ID。 範圍為 [0, N),其中 N 是圖表中的節點數。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/wcc-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL WeaklyConnectedComponents(
    node_labels => ['Account'], edge_labels => ['Transfers']
  ) YIELD node, cluster
RETURN node.id, cluster;

ModularityClustering

ModularityClustering 會將圖表分割成叢集,並盡可能提高模組化程度,也就是叢集內連線密度的品質指標,與隨機網路中的預期值相比。如要瞭解演算法詳情,請參閱模組化分群。

函式簽章

ModularityClustering(input_parameters) YIELD node, cluster

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
resolution FLOAT64 否 1.0 控制叢集化的精細程度。必須為有限且非負數。解析度值越小,叢集越大。 一般值介於 [0.5, 5] 之間。當解析度為零時,演算法 (經過足夠的疊代次數) 會找出圖表的連線元件 (忽略權重為零的邊緣)。
max_iterations INT64 否 10 演算法的外部疊代次數上限。必須為正數。 值越大,叢集品質通常越高,但執行時間會較長。
max_inner_iterations INT64 否 10 演算法的內部疊代次數上限。必須為正數。 值越大,分群品質通常越高,但執行時間也越長。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
叢集 INT64 節點所屬社群/叢集的 ID。範圍為 [0, N),其中 N 是圖表中的節點數。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/modularity-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL ModularityClustering(
    node_labels => ['Account'], edge_labels => ['Transfers'],
    resolution => 1.0, max_iterations => 10
  ) YIELD node, cluster
RETURN node.id, cluster;

CorrelationClustering

CorrelationClustering會根據節點的成對相似度或不相似度,將節點分區,目的是將相似的節點分在同一組,並將不相似的節點分開。如需演算法詳細資料,請參閱關聯分群。

函式簽章

CorrelationClustering(input_parameters) YIELD node, cluster

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
resolution FLOAT64 是 (無) 控制分群的精細程度。必須由用戶端明確定義。必須為有限且非負數。值越小,叢集通常越大。如果解析度為零,且所有邊緣權重均為正值,演算法 (經過足夠的疊代次數) 會找出圖表的連結元件。
max_iterations INT64 否 10 演算法的外部疊代次數上限。必須為正數。 值越大,叢集品質通常越高,但執行時間會較長。
max_inner_iterations INT64 否 10 演算法的內部疊代次數上限。必須為正數。 值越大,分群品質通常越高,但執行時間也越長。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
叢集 INT64 節點所屬社群/叢集的 ID。範圍為 [0, N),其中 N 是圖表中的節點數。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/correlation-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL CorrelationClustering(
    node_labels => ['Account'], edge_labels => ['Transfers'],
    resolution => 0.5
  ) YIELD node, cluster
RETURN node.id, cluster;

LabelPropagation

LabelPropagation 會使用標籤傳播技術,將節點指派給叢集,從初始標記開始,這項標記可能會使用輸入內容中提供的種子標籤。節點會反覆採用多數鄰近節點共用的標籤,因此密集連結的群組會收斂至共識標籤,形成社群。如要瞭解演算法詳情,請參閱標籤傳播。

函式簽章

LabelPropagation(input_parameters) YIELD node, cluster

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
seed_label_property STRING 否 (無) 種子標籤的節點屬性名稱。
max_iterations INT64 否 10 演算法執行標籤傳播的最大疊代次數。必須是有限的正數。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
叢集 INT64 節點傳播的叢集/標籤 ID。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/lp-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL LabelPropagation(
    node_labels => ['Account'], edge_labels => ['Transfers'],
    max_iterations => 10
  ) YIELD node, cluster
RETURN node.id, cluster;

CliqueFinding

CliqueFinding 會找出可能重疊且符合最低密度門檻的密集社群,確保每個 clique (一組節點,其中每個節點都與其他節點相連) 至少包含在一個叢集中。如要瞭解演算法詳情,請參閱集團匯總工具。

函式簽章

CliqueFinding(input_parameters) YIELD node, clique

注意:與大多數演算法不同,同一個節點可能會有多個資料列,因為節點可能屬於多個集團。

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
min_density FLOAT64 否 0.9 要傳回的叢集密度下限。必須介於 [0, 1] 之間。

輸出內容

函式產生:

名稱 類型 說明
節點 GRAPH_ELEMENT (節點) 圖表中的節點。
clique INT64 節點所屬的 clique ID。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/clique-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL CliqueFinding(
    node_labels => ['Account'], edge_labels => ['Transfers'],
    min_density => 0.9
  ) YIELD node, clique
RETURN node.id, clique;

相似度

相似度演算法會根據節點鄰近區域的結構,量化節點配對的相似程度。這項功能可用於推論節點之間缺少的邊緣,以便進行實體解析、推薦等。

Spanner Graph 支援下列成對節點相似度,其中相似度分數是根據節點的鄰域計算而得。

  • JaccardSimilarity:根據共同鄰點與總鄰點的比率
  • CosineSimilarity:根據常見鄰居的邊緣權重
  • CommonNeighborsSimilarity:根據共用鄰近項目的數量
  • TotalNeighborsSimilarity:根據至少一個節點的鄰居數量

如要瞭解演算法詳情,請參閱成對節點相似度。

這四種演算法共用相同的引數和輸出結構。

函式簽章

[JaccardSimilarity|CosineSimilarity|CommonNeighborsSimilarity|TotalNeighborsSimilarity](input_parameters) YIELD source_node, target_node, similarity

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
source_nodes 圖表節點陣列 是 不適用 用於計算成對相似度的來源節點。
target_nodes 圖表節點陣列 是 不適用 用於計算兩兩相似度的目標節點。

輸出內容

函式產生:

名稱 類型 說明
source_node GRAPH_ELEMENT (節點) 用於計算相似度的來源節點。
target_node GRAPH_ELEMENT (節點) 用於計算相似度的目標節點。
相似度 FLOAT64 來源節點和目標節點之間計算出的相似度分數。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/jaccard-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL JaccardSimilarity(
    source_nodes => ARRAY {
                      MATCH (n:Account {id: 7})
                      RETURN n
                    },
    target_nodes => ARRAY {
                      MATCH (n:Account)
                      WHERE n.id != 7
                      RETURN n
                    }
  ) YIELD source_node, target_node, similarity
RETURN source_node.id AS source_id, target_node.id AS target_id, similarity;

路徑尋找

路徑尋找演算法會計算節點之間的最佳路徑。這項功能可用於找出供應鏈中最便宜的路線、評估網路安全漏洞等。

ShortestPath

ShortestPath 會計算一組指定來源節點和一組指定目標節點之間的最短路徑。如要瞭解演算法詳情,請參閱多對多最短路徑。

函式簽章

ShortestPath(input_parameters) YIELD source_node, target_node, path, cost

輸入參數

所有常見輸入參數,以及:

名稱 類型 必填 預設 說明
source_nodes 圖表節點陣列 是 不適用 用於計算最短路徑的來源節點。
target_nodes 圖表節點陣列 是 不適用 計算最短路徑的目標節點。

輸出內容

函式產生:

名稱 類型 說明
source_node GRAPH_ELEMENT (節點) 路徑的來源節點。
target_node GRAPH_ELEMENT (節點) 路徑的目標節點。
路徑 GRAPH_PATH 找到的最短路徑。
費用 FLOAT64 最短路徑的費用。

範例

EXPORT DATA OPTIONS (
  uri = "gs://my-bucket-name/shortest-path-output.csv",
  format = "csv"
) AS
GRAPH FinGraph
CALL ShortestPath(
    source_nodes => ARRAY {
                      MATCH (n:Account {id: 7})
                      RETURN n
                    },
    target_nodes => ARRAY {
                      MATCH (n:Account {id: 16})
                      RETURN n
                    }
  ) YIELD source_node, target_node, path, cost
RETURN source_node.id AS source_id, target_node.id AS target_id, PATH_LENGTH(path) AS length, cost;

後續步驟