GNoME Materials Discovery - AI 驅動的新材料探索完整教學
Graph Networks for Materials Exploration (GNoME) 是 Google DeepMind 開發的材料探索專案,利用 Graph Neural Network (圖神經網路; GNN) 大規模預測無機晶體 (inorganic crystal) 的穩定性,已發現超過 381,000 種新型穩定材料 (stable materials),並於 2024 年 8 月擴展至 520,000+ 種距 convex hull (凸包) 1 meV/atom 以內的材料。研究成果發表於 Nature (2023)。
1. 專案概述 (Project Overview)
1.1 背景與動機
無機晶體材料 (inorganic crystalline materials) 是現代科技的基石:從微晶片 (microchip) 到電池 (battery)、光伏元件 (photovoltaic) 到藥物遞送載體 (drug delivery carrier),新材料的發現直接推動技術進步。然而傳統材料發現流程依賴:
- 密度泛函理論 (Density Functional Theory; DFT) 計算:精確但極度耗時
- 實驗試錯法 (trial-and-error): 高成本、低效率
- 化學直覺 (chemical intuition): 受限於研究者經驗
GNoME 透過將 Graph Neural Network (GNN; 圖神經網路) 與主動學習 (active learning) 結合,以 DFT 計算成本的一小部分,實現了大規模材料穩定性預測 (stability prediction),將已知穩定材料數量從約 48,000 種增加至超過 421,000 種。
1.2 核心成就
| 指標 | 數值 |
|---|---|
| 新發現穩定材料 (novel stable materials) | 381,000+ |
| 擴展數據集 (expanded dataset, 2024-08) | 520,000+ |
| GNoME 模型預測精度 (prediction accuracy) | 21 meV/atom (MAE) |
| 發表期刊 | Nature (2023) |
| DFT 計算功能 (functional) | PBE + r2SCAN 驗證 |
1.3 專案結構
1materials_discovery/
2├── model/ # 模型定義
3│ ├── gnome.py # GNoME 主模型入口 (model factory + optimizer)
4│ ├── gnn.py # 通用 Graph Network 定義 (message passing)
5│ ├── nequip.py # NequIP 等變神經網路 (equivariant NN)
6│ ├── crystal.py # 晶體特徵化 (crystal featurization)
7│ ├── e3nn_layer.py # E(3) 等變層 (equivariant layers)
8│ └── util.py # 神經網路基礎元件 (NN primitives)
9├── notebooks/ # Colab 互動範例
10│ ├── Exploring_Chemical_Systems.ipynb
11│ ├── Compute_Decomposition_Energies.ipynb
12│ ├── Visualize_GNoME_Structures.ipynb
13│ ├── Air_Stability.ipynb
14│ └── a2c_Explorer.ipynb
15├── scripts/ # 資料下載工具
16│ ├── download_data_wget.py
17│ └── download_data_cloud.py
18├── requirements.txt # Python 依賴
19├── DATASET.md # 資料集說明
20└── README.md
1.4 資料集概觀
GNoME 資料集託管於 Google Cloud Storage bucket gs://gdm_materials_discovery,包含:
- stable_materials_summary.csv: 所有穩定材料的組成、能量、帶隙 (bandgap) 等屬性
- stable_materials_r2scan.csv: r2SCAN functional 驗證結果
- by_composition.zip / by_id.zip / by_reduced_formula.zip: 晶體結構 CIF (Crystallographic Information File) 檔案
- external_materials_summary.csv: Materials Project + OQMD 外部資料
2. 核心架構與技術原理 (Architecture & Technical Principles)
2.1 系統整體架構
GNoME 系統由三大模組構成:資料管線 (data pipeline)、模型推理引擎 (model inference engine)、穩定性評估框架 (stability evaluation framework)。
graph TB
subgraph Input["資料輸入層 (Data Input)"]
A[Crystal Structure
晶體結構 CIF]
B[Materials Project
MP 資料庫]
C[OQMD / WBM
外部資料庫]
end
subgraph Model["模型推理層 (Model Inference)"]
D[Crystal Featurizer
晶體特徵提取
crystal.py]
E[Graph Construction
圖建構
jraph GraphsTuple]
F[GNoME GNN
圖神經網路
gnn.py + crystal.py]
G[NequIP E3NN
等變神經網路
nequip.py + e3nn_layer.py]
end
subgraph Output["輸出與評估層 (Output & Evaluation)"]
H[Energy Prediction
能量預測
eV/atom]
I[Convex Hull
凸包計算]
J[Decomposition Energy
分解能]
K[Stability Label
穩定性標籤]
end
A --> D
B --> I
C --> I
D --> E
E --> F
E --> G
F --> H
G --> H
H --> I
I --> J
J --> K
style Input fill:#e8f4fd,stroke:#2196f3
style Model fill:#fff3e0,stroke:#ff9800
style Output fill:#e8f5e9,stroke:#4caf50
2.2 Graph Neural Network (圖神經網路) 核心原理
GNoME 將晶體結構 (crystal structure) 轉換為圖 (graph) 表示:
- 節點 (Node): 原子 (atom),以元素種類 (element type) 的 one-hot encoding 表示(支援 94 種元素)
- 邊 (Edge): 原子間的鍵結或空間鄰近關係 (spatial neighbor relation)
- 全局特徵 (Global feature): 整個晶體的全域描述子 (descriptor)
訊息傳遞 (message passing) 機制遵循 Battaglia et al. (2018) 的 Algorithm 1:
- Edge Update (邊更新): 聚合發送節點 (sender)、接收節點 (receiver) 與當前邊的特徵
- Node Update (節點更新): 聚合所有入邊 (incoming edges) 的訊息,更新節點狀態
- Global Update (全局更新): 聚合所有節點與邊的資訊,產生全局預測
flowchart LR
subgraph MP["Message Passing 循環 (T 輪)"]
direction TB
E1["Edge Update
e_ij = phi_e(v_i, v_j, e_ij, u)"]
N1["Node Update
v_i = phi_v(v_i, AGG(e_ij), u)"]
G1["Global Update
u = phi_u(AGG(v_i), AGG(e_ij), u)"]
E1 --> N1 --> G1
end
Crystal["晶體圖
Crystal Graph"] --> MP
MP --> Pred["能量預測
E (eV/atom)"]
style MP fill:#fff8e1,stroke:#ffc107
2.3 兩種模型架構
專案提供兩種互補的模型架構 (model architecture):
GNoME 模型 (crystal.py + gnn.py)
- 簡單訊息傳遞架構 (simple message passing)
- 使用 BetaSwish 激活函數 (activation function)
- 以 coordination-normalized aggregation (配位數正規化聚合) 處理鄰居數量變化
- 預設
AVERAGE_NODE_COORDINATION = 9 - 預設
AVERAGE_EDGE_COORDINATION = 17
- 預設
- 支援 attention mechanism (注意力機制),含 softmax normalization
- 基於 2018 年 Materials Project 快照訓練,達到 21 meV/atom 最佳精度
NequIP 模型 (nequip.py + e3nn_layer.py)
- E(3) equivariant neural network (E(3) 等變神經網路)
- 使用
e3nn_jax實作 irreducible representations (不可約表示) - Tensor product convolution (張量積卷積) 保持旋轉等變性 (rotational equivariance)
- 用於訓練 interatomic potentials (原子間勢能),學習大規模資料集的動力學 (dynamics)
- JAX 原生實作 (native JAX implementation)
graph LR
subgraph GNoME_Model["GNoME 模型"]
A1[One-hot Element
94 維] --> B1[Message Passing
coordination-norm]
B1 --> C1[BetaSwish MLP]
C1 --> D1[Energy Readout]
end
subgraph NequIP_Model["NequIP 模型"]
A2[Element Embedding] --> B2[Radial Basis
Bessel Functions]
B2 --> C2[Tensor Product
E3 Equivariant]
C2 --> D2[Invariant Readout]
end
E[Crystal Structure
晶體結構] --> GNoME_Model
E --> NequIP_Model
D1 --> F[Stability Prediction]
D2 --> F
style GNoME_Model fill:#e3f2fd,stroke:#1565c0
style NequIP_Model fill:#fce4ec,stroke:#c62828
2.4 穩定性評估 (Stability Evaluation)
材料穩定性透過 convex hull (凸包) 分析判定:
- Formation Energy (形成能): 材料相對於元素參考態 (elemental reference) 的能量差
- Decomposition Energy (分解能): 材料相對於 convex hull 上最近穩定相 (stable phase) 的能量差
- 分解能 <= 0 表示材料位於 convex hull 上或下方,即為熱力學穩定 (thermodynamically stable)
穩定性判定閾值:5e-5 eV(數值精度考量)
2.5 技術棧 (Technology Stack)
| 層級 | 技術 | 用途 |
|---|---|---|
| 深度學習框架 | JAX + Flax + Optax | 模型定義、訓練、優化 |
| 圖計算 | jraph | 圖資料結構與操作 |
| 等變計算 | e3nn_jax | E(3) 不可約表示與張量積 |
| 分子動力學 | jax_md | 空間運算與鄰居列表 |
| 材料科學 | pymatgen | 晶體結構處理與分析 |
| 資料處理 | pandas + numpy + scipy | 數據操作 |
| 視覺化 | plotly + matplotlib + seaborn | 互動式圖表 |
3. 安裝與環境設定 (Installation & Setup)
3.1 系統需求
- Python: 3.9+ (建議 3.10 或 3.11)
- 作業系統: Linux (推薦) / macOS
- GPU: 建議搭配 NVIDIA GPU + CUDA (加速 JAX 計算)
- 儲存空間: 至少 10 GB (完整資料集 ~5 GB + 模型與中間檔)
3.2 環境建立
1# 使用 uv 建立虛擬環境 (推薦)
2uv venv gnome-env
3source gnome-env/bin/activate
4
5# 或使用傳統 venv
6python -m venv ~/venv/gnome
7source ~/venv/gnome/bin/activate
3.3 安裝依賴
1# 克隆倉庫
2git clone https://github.com/google-deepmind/materials_discovery.git
3cd materials_discovery
4
5# 安裝依賴
6pip install -r requirements.txt
關鍵依賴 (key dependencies) 說明:
| 套件 | 版本 | 用途 |
|---|---|---|
jax / jaxlib | 0.4.20 | 高效能數值計算 (JAX 後端) |
flax | 0.7.5 | 神經網路模型定義 |
jraph | 0.0.6.dev0 | 圖神經網路資料結構 |
e3nn_jax | 0.20.3 | E(3) 等變計算 |
jax_md | 0.2.8 | 分子動力學與空間運算 |
pymatgen | 2024.2.20 | 材料科學分析工具 |
optax | 0.1.7 | 梯度優化器 |
3.4 GPU 支援 (選用)
1# 若需 GPU 加速,安裝對應 CUDA 版本的 jaxlib
2pip install --upgrade "jax[cuda12]"
3
4# 驗證 GPU 偵測
5python -c "import jax; print(jax.devices())"
3.5 下載資料集
GNoME 提供兩種資料下載方式:
方式 A: wget 腳本 (無需 Google Cloud 認證)
1python scripts/download_data_wget.py --data_dir=./data
方式 B: Google Cloud Storage (需認證)
1# 安裝 Google Cloud CLI
2pip install google-cloud-storage
3
4# 認證
5gcloud auth application-default login
6
7# 下載
8python scripts/download_data_cloud.py --data_dir=./data
方式 C: 直接使用 gcloud CLI
1gcloud storage cp --recursive gs://gdm_materials_discovery/ data/
下載後的資料結構:
1data/
2└── gnome_data/
3 ├── stable_materials_summary.csv # 主要摘要 (~381K rows)
4 ├── stable_materials_r2scan.csv # r2SCAN 驗證資料
5 ├── by_composition.zip # CIF 結構 (按組成)
6 ├── by_id.zip # CIF 結構 (按 ID)
7 ├── by_reduced_formula.zip # CIF 結構 (按化學式)
8 └── auxiliary_gnome_data/
9 └── a2c_supporting_data.json # A2C 輔助資料
4. 使用教學與範例 (Usage Tutorial & Examples)
4.1 載入與探索資料集
1import pandas as pd
2
3# 載入穩定材料摘要
4df = pd.read_csv("data/gnome_data/stable_materials_summary.csv")
5print(f"Total stable materials: {len(df):,}")
6print(f"Columns: {df.columns.tolist()}")
7
8# 關鍵欄位說明
9# - Composition: 字母排序的化學組成 (alphabetical composition)
10# - MaterialId: 唯一識別碼
11# - Reduced Formula: 簡化化學式 (reduced chemical formula)
12# - Formation Energy Per Atom: 每原子形成能 (eV/atom)
13# - Decomposition Energy Per Atom: 每原子分解能 (eV/atom)
14# - Space Group: 空間群 (space group)
15# - Bandgap: 帶隙 (eV)
4.2 探索特定化學系統 (Chemical System)
1# 篩選含鋰 (Li) 的材料,常見於電池研究 (battery research)
2li_materials = df[df['Elements'].str.contains('Li')]
3print(f"Li-containing materials: {len(li_materials):,}")
4
5# 篩選特定化學系統 (如 Li-Fe-O 三元系統)
6lifo = df[df['Elements'] == 'Fe-Li-O']
7print(f"Li-Fe-O system: {len(lifo)} materials")
8
9# 檢視能量分布
10print(lifo[['Reduced Formula', 'Formation Energy Per Atom',
11 'Decomposition Energy Per Atom', 'Space Group']].head(10))
4.3 計算分解能 (Decomposition Energy)
1# 參考 notebooks/Compute_Decomposition_Energies.ipynb 的核心邏輯
2
3from pymatgen.core import Composition
4from pymatgen.analysis.phase_diagram import PhaseDiagram, PDEntry
5
6# 建立相圖 (phase diagram) 所需的條目
7entries = []
8for _, row in df[df['Elements'].str.contains('Li')].iterrows():
9 comp = Composition(row['Reduced Formula'])
10 energy = row['Corrected Energy']
11 entries.append(PDEntry(comp, energy))
12
13# 建構相圖
14pd_diagram = PhaseDiagram(entries)
15
16# 計算特定組成的分解能
17target = Composition("Li2O")
18decomp_energy = pd_diagram.get_decomp_and_e_above_hull(
19 PDEntry(target, -6.0) # 假設能量值
20)
21print(f"Decomposition energy: {decomp_energy[1]:.4f} eV/atom")
4.4 視覺化晶體結構
1# 從壓縮檔解壓特定結構
2import zipfile
3
4material_id = "YOUR_MATERIAL_ID" # 替換為實際 MaterialId
5
6with zipfile.ZipFile("data/gnome_data/by_id.zip", 'r') as z:
7 # 列出檔案,找到目標 CIF
8 matching = [f for f in z.namelist() if material_id in f]
9 if matching:
10 z.extract(matching[0], "extracted_structures/")
11
12# 使用 pymatgen 讀取與視覺化
13from pymatgen.core import Structure
14
15structure = Structure.from_file(f"extracted_structures/{matching[0]}")
16print(f"Formula: {structure.formula}")
17print(f"Space group: {structure.get_space_group_info()}")
18print(f"Volume: {structure.volume:.2f} A^3")
19print(f"Density: {structure.density:.2f} g/cm^3")
4.5 使用模型進行推理
1from ml_collections import ConfigDict
2from model import gnome
3
4# 建立模型配置 (model configuration)
5cfg = ConfigDict({
6 'model_family': 'nequip',
7 # NequIP 架構參數
8 'num_species': 94,
9 'r_max': 5.0,
10 'num_layers': 5,
11 'num_features': 64,
12 'max_ell': 2,
13})
14
15# 從配置建立模型
16model = gnome.model_from_config(cfg)
17
18# 注意:推理需要預訓練權重 (pretrained weights)
19# 目前 repo 提供模型定義但未公開預訓練權重
20# 可使用 Materials Project 快照自行訓練
4.6 Pseudopotential Correction (贗勢修正)
GNoME 使用的 DFT 贗勢 (pseudopotential) 與 Materials Project 部分元素不同,需進行修正:
1# 元素修正值 (eV per atom)
2pp_corrections = {
3 "Ga": -0.0028805,
4 "Ge": 0.10417085,
5 "Li": -0.00301278,
6 "Mg": 0.0924014,
7 "Na": -0.00447437,
8}
9
10def correct_energy(energy: float, composition: dict) -> float:
11 """修正包含特定元素的結構能量。"""
12 total_atoms = sum(composition.values())
13 correction = sum(
14 pp_corrections.get(elem, 0) * count
15 for elem, count in composition.items()
16 )
17 return energy + correction
5. 進階功能與最佳實踐 (Advanced Features & Best Practices)
5.1 模型架構選擇指南
flowchart TD
Start["選擇模型架構"] --> Q1{"需要等變性
(equivariance)?"}
Q1 -->|Yes| NequIP["NequIP
E(3) equivariant
精度更高"]
Q1 -->|No| Q2{"訓練資料量?"}
Q2 -->|"< 10K 結構"| NequIP
Q2 -->|"> 10K 結構"| GNoME_M["GNoME GNN
Message Passing
訓練更快"]
NequIP --> Use1["適用場景:
- 原子間勢能
- 分子動力學
- 力場預測"]
GNoME_M --> Use2["適用場景:
- 大規模篩選
- 穩定性預測
- 形成能計算"]
style Start fill:#f3e5f5,stroke:#9c27b0
style NequIP fill:#e3f2fd,stroke:#1565c0
style GNoME_M fill:#e8f5e9,stroke:#388e3c
5.2 自訂 Aggregation (聚合函數)
GNoME 的 crystal.py 提供三種聚合策略:
1# 原始碼中定義的聚合方式
2AGGREGATION = {
3 'coordination': segment_normalized(AVERAGE_EDGE_COORDINATION),
4 'mean': jraph.segment_mean,
5 'sum': ops.segment_sum,
6}
- coordination: 以平均配位數 (coordination number) 正規化,適合晶體材料
- mean: 平均聚合,對節點數量變化最穩健 (robust)
- sum: 總和聚合,保留圖大小資訊但可能受 size effect 影響
5.3 學習率排程 (Learning Rate Schedule)
GNoME 實作了 ScaleLROnPlateau 優化策略(定義於 gnome.py):
1# 當 loss 不再下降時自動縮減學習率
2from model.gnome import scale_lr_on_plateau
3
4optimizer = scale_lr_on_plateau(
5 initial_step_size=1e-3,
6 max_steps_without_reduction=50,
7 reduction_factor=0.5,
8)
這是一種 patience-based 策略:連續 max_steps_without_reduction 步未改善 loss 時,學習率乘以 reduction_factor。
5.4 Convex Hull 最佳實踐
建構完整 convex hull 需要合併多個資料來源:
- GNoME 資料:
stable_materials_summary.csv - Materials Project: 透過
external_materials_summary.csv提供 - OQMD + WBM: 外部資料集修正
1# 合併所有資料來源建構完整 convex hull
2gnome_df = pd.read_csv("data/gnome_data/stable_materials_summary.csv")
3external_df = pd.read_csv("data/external_data/external_materials_summary.csv")
4
5# 合併並去重
6all_materials = pd.concat([gnome_df, external_df], ignore_index=True)
7print(f"Total materials for convex hull: {len(all_materials):,}")
8
9# 使用 pymatgen 建構相圖
10# 注意:完整 convex hull 計算為計算密集型操作
5.5 r2SCAN 驗證
GNoME 主要計算使用 PBE functional (泛函),但提供 r2SCAN 驗證以確認穩定性:
1r2scan_df = pd.read_csv("data/gnome_data/stable_materials_r2scan.csv")
2print(f"r2SCAN validated materials: {len(r2scan_df):,}")
3
4# 注意:不同 functional 的穩定性判定可能不同
5# 部分 PBE 穩定材料在 r2SCAN 下可能不穩定
5.6 大規模篩選工作流 (High-Throughput Screening Workflow)
1# 範例:篩選帶隙 (bandgap) 在太陽能電池最佳範圍的材料
2optimal_bandgap = df[
3 (df['Bandgap'] >= 1.0) &
4 (df['Bandgap'] <= 1.8) &
5 (df['Decomposition Energy Per Atom'] <= 0.0) # 確認穩定性
6]
7
8print(f"Candidates for photovoltaics: {len(optimal_bandgap):,}")
9print(optimal_bandgap[['Reduced Formula', 'Bandgap', 'Space Group',
10 'Crystal System']].head(20))
6. 應用價值與整合潛力 (Application Value & Integration Potential)
6.1 藥物遞送材料 (Drug Delivery Materials)
GNoME 資料集對藥物遞送 (drug delivery) 領域的潛在應用:
- 多孔材料篩選 (porous material screening): 透過 dimensionality 與 volume 篩選潛在載體材料
- 生物相容性預測 (biocompatibility prediction): 結合 GNoME 穩定性資料與毒理學資料庫
- 控釋材料設計 (controlled-release material design): 利用 bandgap 與晶體系統資訊設計回應性材料
1# 篩選可能適用於藥物遞送的材料
2# 條件:低維度 (可能為層狀) + 穩定 + 含生物相容元素
3biocompatible_elements = {'Zn', 'Fe', 'Ca', 'Mg', 'Si', 'Ti', 'O'}
4
5drug_delivery_candidates = df[
6 (df['Dimensionality Cheon'] <= 2) & # 2D 或 1D 材料
7 (df['Decomposition Energy Per Atom'] <= 0.0) & # 穩定
8 (df['NSites'] <= 20) # 結構相對簡單
9]
10print(f"Potential drug delivery candidates: {len(drug_delivery_candidates):,}")
6.2 與其他計算平台整合
| 平台 | 整合方式 | 應用場景 |
|---|---|---|
| Materials Project | 直接相容 (CIF format + pymatgen) | 完整材料性質查詢 |
| AFLOW | CIF 轉換 + REST API | 自動化高通量計算 |
| OPTIMADE | 標準化查詢介面 | 跨資料庫搜索 |
| ASE (Atomic Simulation Environment) | pymatgen 橋接 | 進階分子動力學模擬 |
| VASP / Quantum ESPRESSO | CIF 輸入 → DFT 驗證 | 高精度能量計算 |
6.3 電池材料探索 (Battery Material Discovery)
1# 篩選鋰離子電池正極材料候選
2# 條件:含 Li + 過渡金屬 (transition metal) + O
3transition_metals = {'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu'}
4
5battery_candidates = df[
6 df['Elements'].str.contains('Li') &
7 df['Elements'].str.contains('O') &
8 df['Decomposition Energy Per Atom'] <= 0.0
9]
10print(f"Li-containing oxide candidates: {len(battery_candidates):,}")
6.4 光伏材料研究 (Photovoltaic Research)
GNoME 資料集中的 bandgap 資訊可直接用於光伏材料篩選。根據 Shockley-Queisser 極限 (limit),最佳單結太陽能電池帶隙為 1.1-1.4 eV。
6.5 產業整合路徑
- 學術研究: 直接使用 Colab notebooks 探索化學空間
- 材料篩選: 將 CSV 資料匯入內部資料庫,結合專有篩選條件
- 計算驗證: 將候選材料送入 DFT 計算進行精確驗證
- 實驗合成: 基於 GNoME 預測進行定向實驗合成 (targeted synthesis)
7. 常見問題與限制 (FAQ & Limitations)
7.1 常見問題
Q1: GNoME 預測的材料都能被合成嗎?
不一定。GNoME 預測的是 thermodynamic stability (熱力學穩定性),但實際合成還需考慮:
- Kinetic barriers (動力學障壁): 反應路徑是否可行
- Synthesis conditions (合成條件): 溫度、壓力、前驅物 (precursor) 可用性
- Metastability (亞穩態): 部分材料可能為動力學穩定但熱力學亞穩
Q2: 預訓練模型權重是否公開?
目前 (2026-06) repo 僅提供模型架構定義 (model definition),未公開預訓練權重 (pretrained weights)。使用者需使用 Materials Project 資料自行訓練。
Q3: 資料集的授權條款是什麼?
- 程式碼與 Colab notebooks: Apache License 2.0 (可商用)
- GNoME 資料集: CC BY-NC 4.0 (非商業使用; non-commercial use only)
- DFT 計算: 使用 VASP (Vienna Ab initio Simulation Package) 執行
Q4: 如何引用 GNoME?
1@article{merchant2023scaling,
2 title={Scaling deep learning for materials discovery},
3 author={Amil Merchant and Simon Batzner and Samuel S. Schoenholz
4 and Muratahan Aykol and Gowoon Cheon and Ekin Dogus Cubuk},
5 journal={Nature},
6 year={2023},
7 doi={10.1038/s41586-023-06735-9},
8}
Q5: Bandgap 資料的精確度?
Bandgap 值為 PBE-level 計算,已知 PBE 功能泛函會系統性低估帶隙 (underestimate bandgap)。GNoME 的 bandgap 資料仍為實驗性質 (experimental),可能隨後續版本更新修正。
Q6: 如何處理大型 CIF 壓縮檔?
建議使用 Python zipfile 模組選擇性解壓所需結構,避免全量解壓:
1import zipfile
2
3with zipfile.ZipFile("by_id.zip", 'r') as z:
4 # 只解壓特定檔案
5 target = "target_material_id.cif"
6 matching = [f for f in z.namelist() if target in f]
7 for m in matching:
8 z.extract(m, "output_dir/")
7.2 已知限制 (Known Limitations)
| 限制 | 說明 | 影響 |
|---|---|---|
| 數值精度閾值 | 穩定性判定使用 5e-5 eV 閾值 | 邊界材料的穩定性可能隨後續計算改變 |
| PBE functional 偏差 | PBE 對某些材料系統 (如強關聯系統) 的描述不準確 | bandgap 與能量值可能有系統性偏差 |
| Convex hull 時效性 | 基於特定時間點的 MP/OQMD 快照 | 隨社群發現新材料,穩定性判定可能變化 |
| 無動力學穩定性 | 僅考慮 thermodynamic stability | 不保證材料在常溫常壓下可穩定存在 |
| 無合成路徑 | 不提供合成方法建議 | 需自行設計合成策略 |
| 贗勢差異 | 與 MP 部分元素使用不同贗勢 | 需手動套用修正值 (Li, Na, Mg, Ga, Ge) |
| 非商業授權 | 資料集為 CC BY-NC 4.0 | 商業應用需另行取得授權 |
7.3 待開發功能 (Roadmap)
根據 README 中的 Upcoming 清單:
- Reference structures and search paths (參考結構與搜索路徑)
- Model training colabs and configs (模型訓練 Colab 與配置)
- Additional material properties, e.g. electronic band structure (額外材料性質,如電子能帶結構)
7.4 替代方案與互補工具
- MACE: 另一種 E(3) 等變神經網路勢能 (equivariant neural network potential)
- M3GNet / CHGNet: Materials Project 團隊的 universal potential (通用勢能)
- ALIGNN: NIST 的 atomistic line graph neural network
- Crystal Diffusion Variational Autoencoder (CDVAE): 生成式材料設計 (generative material design)
參考資料 (References)
- Merchant, A. et al. “Scaling deep learning for materials discovery.” Nature (2023). DOI: 10.1038/s41586-023-06735-9
- Batzner, S. et al. “E(3)-equivariant graph neural networks for data-efficient and accurate interatomic potentials.” Nature Communications 13, 2453 (2022).
- Battaglia, P.W. et al. “Relational inductive biases, deep learning, and graph networks.” arXiv:1806.01261 (2018).
- Google DeepMind Blog: “Millions of new materials discovered with deep learning” (2023).
- GNoME Dataset:
gs://gdm_materials_discovery(Google Cloud Storage)
Comments