導入
Neo4jには、最短経路よりもさらに高度な分析を行うための拡張機能として GDS(Graph Data Science)ライブラリ が用意されています。ここでは代表的な2つのアルゴリズムを概念として押さえておきましょう。
説明
GDSは、グラフ全体の構造を分析する、統計・機械学習寄りのアルゴリズム集です。ここでは読み物として、代表的な2つを紹介します。
PageRank(ページランク) … 「どれだけ重要なノードか」をリレーションシップのつながり方から計算するアルゴリズムです。もともとはGoogleがWebページの重要度を測るために考案したもので、「重要なノードからリンクされているノードほど重要」という考え方を再帰的に計算します。
graph LR
A((A<br/>重要度: 高)) --> C((C))
B((B<br/>重要度: 高)) --> C
D((D)) --> C
C((C<br/>重要度: とても高い))
上の図のように、多くの「重要なノード」からリンクされているノード(C)ほど、PageRankのスコアが高くなります。SNSで「影響力のあるアカウント」を見つけたり、ナレッジグラフで「中心的な概念」を見つけたりするのに使われます。
コミュニティ検出(Community Detection) … グラフの中から「密につながっているグループ(クラスタ)」を自動的に見つけ出すアルゴリズムです。SNSの友達関係グラフに適用すると、「よく一緒に関わり合っているグループ」がいくつかの塊として浮かび上がってきます。
GDSライブラリは、これらのアルゴリズムを次のような形のCypher呼び出しで実行できます(実際の環境ではGDSプラグインの有効化が必要です)。
CALL gds.pageRank.stream('myGraph')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC
LIMIT 10
GDSはこのコースの範囲を超える高度な内容ですが、「Neo4jは単純な検索だけでなく、グラフ理論に基づいた分析もできる」ということを知っておくと、実務での活用の幅がぐっと広がります。