ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. Neo4j Graph Data Science (GDS)插件概述
    • 1.1 主要特点:
  • 2. 安装与配置
    • 2.1 安装方法:
    • 2.3 版本兼容性:
    • 2.4 配置参数:
  • 3. 核心概念
    • 3.1 图投影(Graph Projection)
    • 3.2 算法执行模式
  • 4. 主要算法类别
    • 4.1 中心性算法
    • 4.2 社区检测算法
    • 4.3 路径查找算法
    • 4.4 节点相似性算法
    • 4.5 图嵌入算法
    • 4.6 链接预测算法
  • 5. 机器学习集成
    • 5.1 管道(Pipeline)功能
    • 5.2 模型管理
  • 6. 性能优化技巧
  • 7. 实际应用案例
    • 7.1 推荐系统
    • 7.2 欺诈检测
  • 8. 监控与管理
  • 9. 最新功能与未来发展
  • 10. 学习资源

1. Neo4j Graph Data Science (GDS)插件概述 #

Neo4j Graph Data Science (GDS) 是一个强大的图算法库,为Neo4j数据库提供了专业的图分析功能。它包含了一系列高效的图算法,可以帮助用户在图上执行各种分析任务,如社区检测、节点重要性计算、路径查找等。

1.1 主要特点: #

  • 高性能:针对大规模图优化,支持并行计算
  • 丰富的算法库:包含50+种图算法
  • 内存管理:支持投影图模型,高效利用内存
  • 生产就绪:可直接用于生产环境
  • 与Cypher集成:算法结果可直接用于Cypher查询

2. 安装与配置 #

2.1 安装方法: #

  1. 从Neo4j Desktop的"Plugins"选项卡安装
  2. 手动下载对应版本的.jar文件放入plugins目录

2.3 版本兼容性: #

确保GDS版本与Neo4j数据库版本匹配

2.4 配置参数: #

在neo4j.conf中可配置:

# 允许GDS过程调用
# 配置JVM堆内存大小
# 下面参数仅供参考,实际请根据服务器内存调整
#
dbms.security.procedures.unrestricted=gds.*
dbms.memory.heap.initial_size=4G
dbms.memory.heap.max_size=4G

3. 核心概念 #

3.1 图投影(Graph Projection) #

GDS不在原始图上操作,而是创建内存中的图投影,有三种类型:

  1. 原生投影:最高效,适合大型图

    // 创建名为'my-graph'的图投影,节点类型为Person,关系类型为KNOWS
    CALL gds.graph.project(
      'my-graph',
      'Person',
      'KNOWS'
    )
  2. Cypher投影:更灵活,可使用Cypher查询定义

    // 使用Cypher语句定义节点和关系,创建名为'cypher-graph'的图投影
    CALL gds.graph.project.cypher(
      'cypher-graph',
      // 定义节点集合
      'MATCH (n:Person) RETURN id(n) AS id',
      // 定义关系集合
      'MATCH (a:Person)-[r:KNOWS]->(b:Person) RETURN id(a) AS source, id(b) AS target'
    )
  3. 匿名投影:临时使用,不持久化

3.2 算法执行模式 #

  1. Stats:返回算法统计信息
  2. Stream:返回原始结果
  3. Write:将结果写回数据库
  4. Mutate:将结果保存在图投影中

4. 主要算法类别 #

4.1 中心性算法 #

用于识别图中最重要的节点:

  1. PageRank

    // 在'my-graph'图上执行PageRank算法,返回每个节点的得分
    CALL gds.pageRank.stream('my-graph')
    YIELD nodeId, score
    // 将nodeId转换为节点对象,并返回节点名称和得分
    RETURN gds.util.asNode(nodeId).name AS name, score
    // 按得分降序排列
    ORDER BY score DESC
  2. Betweenness Centrality

    // 在'my-graph'图上执行介数中心性算法
    CALL gds.betweenness.stream('my-graph')
  3. ArticleRank

    // 在'my-graph'图上执行ArticleRank算法
    CALL gds.articleRank.stream('my-graph')

4.2 社区检测算法 #

用于发现图中的社区结构:

  1. Louvain

    // 在'my-graph'图上执行Louvain社区检测算法
    CALL gds.louvain.stream('my-graph')
  2. Label Propagation

    // 在'my-graph'图上执行标签传播社区检测算法
    CALL gds.labelPropagation.stream('my-graph')
  3. Strongly Connected Components

    // 在'my-graph'图上执行强连通分量算法
    CALL gds.alpha.scc.stream('my-graph')

4.3 路径查找算法 #

  1. Shortest Path

    // 在'my-graph'图上使用Dijkstra算法查找最短路径
    CALL gds.shortestPath.dijkstra.stream('my-graph', {
      // 指定起点节点ID
      sourceNode: source,
      // 指定终点节点ID
      targetNode: target,
      // 指定权重属性
      relationshipWeightProperty: 'weight'
    })
  2. A*算法

    // 在'my-graph'图上使用A*算法查找最短路径
    CALL gds.shortestPath.astar.stream('my-graph', {
      // 指定起点节点ID
      sourceNode: source,
      // 指定终点节点ID
      targetNode: target,
      // 指定纬度属性
      latitudeProperty: 'lat',
      // 指定经度属性
      longitudeProperty: 'lon'
    })

4.4 节点相似性算法 #

  1. Jaccard Similarity

    // 在'my-graph'图上执行Jaccard节点相似性算法
    CALL gds.nodeSimilarity.stream('my-graph')
  2. Cosine Similarity

    // 在'my-graph'图上执行余弦相似性算法
    CALL gds.alpha.similarity.cosine.stream('my-graph')

4.5 图嵌入算法 #

  1. FastRP (Fast Random Projection)

    // 在'my-graph'图上执行FastRP图嵌入算法
    CALL gds.fastRP.stream('my-graph', {
      // 嵌入向量维度
      embeddingDimension: 256,
      // 迭代权重
      iterationWeights: [0.8, 1.0, 1.0]
    })
  2. Node2Vec

    // 在'my-graph'图上执行Node2Vec图嵌入算法
    CALL gds.beta.node2vec.stream('my-graph')

4.6 链接预测算法 #

  1. Adamic-Adar

    // 在'my-graph'图上执行Adamic-Adar链接预测算法
    CALL gds.alpha.linkprediction.adamicAdar('my-graph', {
      // 指定节点标签
      nodeLabels: ['Person'],
      // 指定关系类型
      relationshipTypes: ['KNOWS']
    })
  2. Common Neighbors

    // 在'my-graph'图上执行共同邻居链接预测算法
    CALL gds.alpha.linkprediction.commonNeighbors('my-graph')

5. 机器学习集成 #

GDS提供了与机器学习模型的集成:

5.1 管道(Pipeline)功能 #

  1. 节点分类管道

    // 创建节点分类管道,命名为'pipe'
    CALL gds.beta.pipeline.nodeClassification.create('pipe')
    
    // 向管道添加节点属性,使用PageRank分数,结果写入pr属性
    CALL gds.beta.pipeline.nodeClassification.addNodeProperty('pipe', 'pageRank', {
      mutateProperty: 'pr'
    })
    
    // 训练节点分类模型,指定目标属性为class,模型名为nc-model
    CALL gds.beta.pipeline.nodeClassification.train('my-graph', {
      pipeline: 'pipe',
      targetProperty: 'class',
      modelName: 'nc-model'
    })
  2. 链接预测管道

    // 创建链接预测管道,命名为'lp-pipe'
    CALL gds.beta.pipeline.linkPrediction.create('lp-pipe')

5.2 模型管理 #

// 列出所有已训练的GDS模型
CALL gds.beta.model.list()

// 删除名为'nc-model'的模型
CALL gds.beta.model.drop('nc-model')

6. 性能优化技巧 #

  1. 使用原生投影:比Cypher投影更快
  2. 合理配置内存:根据图大小调整JVM堆大小
  3. 并行执行:设置concurrency参数
  4. 采样:对大图使用采样技术
  5. 图过滤:只加载需要的节点和关系

7. 实际应用案例 #

7.1 推荐系统 #

// 1. 创建包含用户和产品的图投影
CALL gds.graph.project(
  'rec-graph',
  ['User', 'Product'],
  {
    PURCHASED: {orientation: 'UNDIRECTED'},
    SIMILAR: {orientation: 'UNDIRECTED'}
  }
)

// 2. 运行个性化PageRank
CALL gds.pageRank.stream('rec-graph', {
  maxIterations: 20,
  dampingFactor: 0.85,
  sourceNodes: [userNodeId]
})

// 3. 获取推荐结果
MATCH (p:Product)
WHERE id(p) = nodeId
RETURN p.name, score
ORDER BY score DESC
LIMIT 10

7.2 欺诈检测 #

// 1. 检测异常社区
CALL gds.louvain.stream('transaction-graph')
YIELD nodeId, communityId
WITH communityId, count(*) AS size
WHERE size < 5 // 小社区可能是异常

// 2. 结合中心性分析
CALL gds.betweenness.stream('transaction-graph')
YIELD nodeId, score
WHERE score > threshold

8. 监控与管理 #

// 查看已加载的图
CALL gds.graph.list()

// 查看图信息
CALL gds.graph.info('my-graph')

// 删除图释放内存
CALL gds.graph.drop('my-graph')

// 查看算法执行时间
CALL gds.alpha.debug.arrowlog()

9. 最新功能与未来发展 #

GDS持续更新,最新版本可能包含:

  • 新算法实现
  • 性能改进
  • 更多机器学习集成
  • 更强大的管道功能

建议定期查看官方文档获取最新信息。

10. 学习资源 #

  1. 官方文档:https://neo4j.com/docs/graph-data-science/current/
  2. GDS手册:https://neo4j.com/lp/graph-data-science/
  3. 示例项目:https://github.com/neo4j/graph-data-science
  4. 在线沙盒:https://sandbox.neo4j.com/

通过掌握GDS插件,您可以充分利用Neo4j的图分析能力,解决复杂的网络分析问题。# Neo4j Graph Data Science (GDS) 插件详解

访问验证

请输入访问令牌

Token不正确,请重新输入