跳转至

系统架构

系统概览

诺贝尔奖知识图谱采用多阶段数据流水线架构,将原始的诺贝尔奖和学术论文数据转化为可交互、可查询的知识图谱。

flowchart TB
    subgraph Input["输入数据"]
        CSV[CSV 表格<br>757 位得主, 245K 篇论文]
        JSON[JSON 文件<br>2.3GB 论文记录]
    end

    subgraph Phase1["阶段 1:数据基础"]
        DL[data_loader.py<br>加载与清洗]
        CE[content_enricher.py<br>内容富化]
    end

    subgraph Phase2["阶段 2:概念抽取"]
        OA[openalex_enricher.py<br>API 富化]
        LLM[concept_extractor.py<br>LLM 抽取]
    end

    subgraph Phase34["阶段 3+4:图谱构建"]
        GB[graph_builder.py<br>构建知识图谱]
    end

    subgraph Phase5["阶段 5:输出"]
        VIZ[visualize.py<br>交互式 HTML]
        IA[insight_analyzer.py<br>分析报告]
    end

    CSV --> DL
    JSON --> DL
    DL --> CE
    CE --> OA
    OA --> LLM
    LLM --> GB
    GB --> VIZ
    GB --> IA

    style Input fill:#fff3e0
    style Phase1 fill:#e3f2fd
    style Phase2 fill:#f3e5f5
    style Phase34 fill:#e8f5e9
    style Phase5 fill:#fce4ec

数据流

逐阶段数据转换

阶段 输入 处理 输出
1 CSV + JSONL 加载、解码摘要、清洗 laureates.parquetawards.parquetpublications.parquetinstitutions.parquet
1.5 publications.parquet Semantic Scholar API、OA PDF 更新后的 publications.parquet(含富化摘要/全文)
2a publications.parquet OpenAlex API 更新后的 publications.parquet(含概念/主题/领域)
2b publications.parquet + awards.parquet GPT-4o-mini LLM llm_extraction_raw.jsonconcepts.parquet
3+4 所有 Parquet + 概念 NetworkX 图谱构建 knowledge_graph.jsonnodes.jsonedges.json.graphml
5 knowledge_graph.json Pyvis + Plotly network.htmltimeline.htmlheatmap.html
6 knowledge_graph.json 图谱分析算法 insight_report.mdinsight_report.json

存储格式

flowchart LR
    RAW[原始数据] -->|CSV/JSON| PARQUET[Parquet 文件]
    PARQUET --> KG[知识图谱]
    KG -->|JSON| JSON_OUT[knowledge_graph.json]
    KG -->|GraphML| GRAPHML[knowledge_graph.graphml]
    KG -->|分离式| NODES[nodes.json + edges.json]
    KG -->|HTML| VIZ[交互式可视化]

核心设计决策

1. 分层概念抽取策略

并非所有 245K 篇论文都接受相同的处理。系统采用三层策略平衡成本和质量:

层级 论文 方法 成本
Tier 1 ~1,000 篇获奖相关 + 高引用 LLM 深度抽取
Tier 2 ~30,000 篇高引用 关键词 + OpenAlex 概念
Tier 3 其余论文 仅关键词粗粒度标注

2. 开发样本模式

流水线支持样本模式,仅处理 5 位代表性得主。这使得快速迭代成为可能,无需处理完整的 2.3GB 数据集。

3. 积极缓存

所有外部 API 调用(OpenAlex、Semantic Scholar、Unpaywall)均缓存为 JSON 文件:

output/openalex_cache/          # OpenAlex 论文数据
output/openalex_cache/fulltext/ # 各来源全文
output/openalex_cache/semantic_scholar/  # S2 API 响应
output/openalex_cache/unpaywall/         # Unpaywall OA 链接

4. 流式处理大文件

2.3GB 的 publication_records.json 以行分隔 JSON(JSONL)格式流式处理,避免将完整文件加载到内存。

5. NetworkX 作为主要图引擎

选择 NetworkX 是因为:

  • 丰富的算法库(最短路径、中心性、社区检测)
  • 便捷的 JSON 和 GraphML 序列化
  • 无外部数据库依赖

对于生产级扩展,Schema 设计兼容 Neo4j。

模块依赖图

flowchart TD
    INIT[src/__init__.py<br>配置加载] --> DL
    INIT --> CE
    INIT --> OA
    INIT --> CX
    INIT --> GB
    INIT --> VIZ
    INIT --> IA

    DL[data_loader.py] --> CE[content_enricher.py]
    CE --> OA[openalex_enricher.py]
    OA --> CX[concept_extractor.py]
    DL --> GB[graph_builder.py]
    CX --> GB
    GB --> VIZ[visualize.py]
    GB --> IA[insight_analyzer.py]

    MAIN[main.py<br>流水线运行器] -.->|编排| DL
    MAIN -.-> CE
    MAIN -.-> OA
    MAIN -.-> CX
    MAIN -.-> GB
    MAIN -.-> VIZ
    MAIN -.-> IA

技术栈

层面 技术 用途
数据处理 Polars / Pandas CSV/JSON 加载、清洗、变换
NLP / 抽取 OpenAI API (GPT-4o-mini) 从摘要中提取技术概念
数据富化 OpenAlex REST API 论文概念、主题、领域分类
内容富化 Semantic Scholar API、Unpaywall 摘要和全文获取
PDF 处理 PyMuPDF PDF 文本提取
图引擎 NetworkX 内存图操作与算法
可视化 Pyvis、Plotly 交互式 HTML 可视化
序列化 JSON、GraphML、Parquet 数据持久化
环境管理 uv Python 包和环境管理
配置 YAML + dotenv 设置和密钥管理