AlphaMissense 完整技術教學

AlphaMissense — Google DeepMind 發佈的 missense variant pathogenicity (錯義變異致病性) 預測模型,基於 AlphaFold 2 架構修改而成,可對人類蛋白質體中所有可能的單胺基酸替換進行致病性評分。

項目資訊
GitHubgoogle-deepmind/alphamissense
Stars / Forks634 / 85
語言Python (JAX / Haiku)
授權Apache 2.0(程式碼);CC BY 4.0(預測資料)
論文Cheng et al., Science (2023) DOI: 10.1126/science.adg7492
建立日期2023-09-13
最後更新2026-06-18

1. 專案概述

1.1 什麼是 AlphaMissense?

AlphaMissense 是 Google DeepMind 於 2023 年在 Science 期刊發表的深度學習模型,專門用於預測人類蛋白質中 missense variant (錯義變異) 的致病性。所謂 missense variant,是指 DNA 上的單核苷酸變異 (single nucleotide variant, SNV) 導致蛋白質中某個胺基酸被替換為另一個胺基酸。

人類基因體中約有 7,100 萬個可能的 missense variant,但目前臨床上僅有不到 0.1% 被明確分類為致病 (pathogenic) 或良性 (benign)。AlphaMissense 正是為了填補這個巨大的知識空白而設計。

1.2 核心能力

  • 全蛋白質體預測 (proteome-wide prediction):對人類蛋白質體中所有 7,100 萬個可能的 missense variant 進行致病性評分
  • 高準確度:在 ClinVar benchmark 上達到 AUROC 0.940(優於 CADD、REVEL、PrimateAI-3D 等同類工具)
  • 分類系統:將變異分為 likely pathogenic (可能致病)、likely benign (可能良性)、ambiguous (模糊) 三類
  • 預計算資料庫:提供所有預測結果的下載,無需自行運算

1.3 repo 提供什麼

1提供的內容:
2  - AlphaMissense 模型的完整實作(modules_missense.py)
3  - 訓練 loss function(clipped sigmoid cross-entropy)
4  - 資料管線(pipeline_missense.py)— 建立推論輸入特徵
5  - 預計算預測資料(託管於 Google Cloud Storage)
6
7不提供的內容:
8  - 訓練好的模型權重(weights)
9  - 因此無法直接用此 repo 進行新的預測

1.4 檔案結構

 1alphamissense/
 2├── LICENSE                          # Apache 2.0
 3├── README.md
 4├── requirements.txt                 # JAX/Haiku 依賴
 5├── setup.py                         # 套件安裝
 6├── test/
 7   ├── test_installation.py         # 安裝驗證腳本
 8   └── test_sequence.fasta          # 測試用 FASTA
 9└── alphamissense/
10    ├── __init__.py
11    ├── version.py
12    ├── common/
13       └── residue_constants.py     # 胺基酸常數定義
14    ├── data/
15       ├── pipeline_missense.py     # 資料管線(核心)
16       ├── mmcif_parsing.py         # mmCIF 結構解析
17       ├── msa_identifiers.py       # MSA 序列識別
18       ├── parsers.py               # 序列格式解析器
19       ├── templates.py             # 模板處理
20       └── tools/
21           ├── jackhmmer.py         # HMMER 搜尋包裝
22           └── utils.py             # 工具輔助函式
23    └── model/
24        ├── config.py                # 模型配置(48 層 Evoformer 等)
25        ├── modules_missense.py      # AlphaMissense 模型主體(核心)
26        ├── modules.py               # 共用模組(來自 AlphaFold)
27        ├── common_modules.py        # 基礎神經網路元件
28        ├── folding_multimer.py      # 結構預測模組
29        ├── layer_stack.py           # 層堆疊工具
30        ├── mapping.py               # 張量映射
31        ├── prng.py                  # 安全亂數產生器
32        ├── utils.py                 # 模型工具函式
33        └── geometry/                # 3D 幾何運算
34            ├── rigid_matrix_vector.py
35            ├── rotation_matrix.py
36            ├── struct_of_array.py
37            ├── vector.py
38            └── test_utils.py

2. 核心架構與技術原理

2.1 AlphaFold → AlphaMissense 的演化

AlphaMissense 是從 AlphaFold 2 (v2.3.2) fork 而來,保留了 AlphaFold 的核心架構——Evoformer + Structure Module——但做了三項關鍵修改:


graph TD
    AF["AlphaFold 2
蛋白質結構預測"] AM["AlphaMissense
變異致病性預測"] AF -->|fork + 修改| AM subgraph "三項關鍵修改" M1["(i) MSA 與 Pair embedding
初始化方式不同"] M2["(ii) Single embedding
計算方式不同"] M3["(iii) MSA embedding
不參與 recycling"] end AM --- M1 AM --- M2 AM --- M3 style AF fill:#4285F4,color:#fff style AM fill:#EA4335,color:#fff

因為這三項修改,AlphaFold 2 或 AlphaFold Multimer 的 checkpoint 無法直接用於 AlphaMissense。

2.2 整體推論流程


flowchart LR
    subgraph 輸入
        FA["FASTA 序列檔"]
        VAR["變異資訊
(protein_id, position,
ref_aa, alt_aa)"] DB["基因序列資料庫
(UniRef90, MGnify, BFD)"] end subgraph 資料管線 JH["JackHMMER
多序列比對 MSA"] FE["特徵工程
(variant_sequence_features,
make_variant_masked_msa)"] CR["Cropping
(contiguous / spatial)"] end subgraph 模型 EVO["Evoformer
(48 blocks)"] SM["Structure Module"] LDH["LogitDiff
Pathogenicity Head"] end subgraph 輸出 SCORE["variant_pathogenicity
致病性分數"] end FA --> JH VAR --> FE DB --> JH JH --> FE FE --> CR CR --> EVO EVO --> SM EVO --> LDH SM -->|recycling| EVO LDH --> SCORE style SCORE fill:#34A853,color:#fff style EVO fill:#FBBC04,color:#333

2.3 資料管線詳解 (pipeline_missense.py)

2.3.1 ProteinVariant 資料結構

ProteinVariant 是不可變 (frozen) dataclass,封裝了一個 missense variant 的完整定義:

1@dataclasses.dataclass(frozen=True)
2class ProteinVariant:
3    sequence: str          # 原始蛋白質序列
4    position: int          # 1-based 位置
5    reference_aa: str      # 參考胺基酸(單字母)
6    alternate_aa: str      # 替換胺基酸(單字母)
7    protein_id: str        # 序列識別碼
8    pathogenicity: Optional[bool]  # 訓練用標籤

內建嚴格驗證:位置必須在序列長度範圍內、reference_aa 必須與序列對應位置吻合。

2.3.2 DataPipeline 類別

DataPipeline 是資料處理的入口,整合了 MSA 搜尋、特徵建構、裁切 (cropping) 等功能:


sequenceDiagram
    participant User
    participant DP as DataPipeline
    participant JH as JackHMMER
    participant DB as 基因資料庫
    participant AFDB as AlphaFold DB (GCS)
    
    User->>DP: process(protein_id, ref_aa, alt_aa, position)
    DP->>DP: 從 FASTA 讀取序列,建立 ProteinVariant
    DP->>JH: 搜尋 UniRef90 / MGnify / BFD
    JH->>DB: 序列比對
    DB-->>JH: MSA 結果
    JH-->>DP: 多序列比對 (MSA)
    DP->>DP: variant_sequence_features()
    DP->>DP: make_variant_masked_msa()
    DP->>DP: make_msa_profile()
    
    alt 使用 spatial cropping
        DP->>AFDB: 取得 AlphaFold 預測結構
        AFDB-->>DP: 原子座標
    end
    
    DP->>DP: Cropper.crop() — 裁切 + 填充
    DP-->>User: 特徵字典 (FeatureDict)

2.3.3 Cropping 策略

AlphaMissense 支援兩種 cropping 策略:

策略說明適用情境
Contiguous Cropping以變異位置為中心,擷取一段連續序列預設模式,不需結構資訊
Spatial Cropping基於 3D 結構,選擇空間上最接近變異位置的殘基需要 AlphaFold DB 的結構座標

2.4 模型架構詳解 (modules_missense.py)

2.4.1 類別層級


classDiagram
    class RunModel {
        +config: ConfigDict
        +params: Optional
        +init_params(feat, random_seed)
        +eval_shape(feat)
        +predict(feat, random_seed)
    }

    class AlphaMissense {
        +config: ConfigDict
        +global_config: ConfigDict
        +__call__(batch, is_training, return_representations)
    }

    class AlphaMissenseIteration {
        +config: ConfigDict
        +global_config: ConfigDict
        +__call__(batch, is_training, safe_key)
    }

    class EmbeddingsAndEvoformer {
        +config: ConfigDict
        +_relative_encoding(batch)
        +__call__(batch, is_training, safe_key)
    }

    class LogitDiffPathogenicityHead {
        +num_output: int
        +variant_row: int = 1
        +__call__(representations, batch, is_training)
        +loss(value, batch)
    }

    RunModel --> AlphaMissense : 包裝
    AlphaMissense --> AlphaMissenseIteration : 每次 recycling 呼叫
    AlphaMissenseIteration --> EmbeddingsAndEvoformer : 核心推論
    AlphaMissenseIteration --> LogitDiffPathogenicityHead : 分類頭

2.4.2 LogitDiff Pathogenicity Head — 致病性評分機制

這是 AlphaMissense 相對於 AlphaFold 最重要的新增元件:

1score = ref_score - variant_score  (logit difference)
2
3其中:
4  ref_score    = logits · one_hot(reference_aa)    參考胺基酸的 logit
5  variant_score = logits · one_hot(alternate_aa)   替換胺基酸的 logit
6  
7  logit_diff > 0  替換降低適應性  較可能致病
8  logit_diff < 0  替換不影響或提升適應性  較可能良性

Loss function 使用 clipped sigmoid cross-entropy:在正負樣本的 logit 空間中分別設定 clip 閾值,避免過度自信的預測。

2.4.3 Evoformer 配置

AlphaMissense 的 Evoformer 保留了 AlphaFold 2 的核心設計:

參數說明
evoformer_num_block48Evoformer 堆疊層數
seq_channel384序列特徵維度
msa_channel256MSA 特徵維度
pair_channel128配對特徵維度
num_msa256取樣 MSA 序列數
num_extra_msa1152額外 MSA 序列數
max_relative_idx32相對位置編碼最大距離

2.4.4 MSA 取樣機制

AlphaMissense 的 MSA 取樣有一項重要保證:

1# cluster_bias_mask 確保前兩列永遠被保留:
2# 第 0 列 = 目標序列 (target sequence)
3# 第 1 列 = 帶 mask 的變異序列 (masked variant row)
4cluster_bias_mask = batch['cluster_bias_mask']
5logits += cluster_bias_mask * 1e6  # 確保被選中

這保證模型在處理 MSA 時永遠能看到原始序列與變異序列的對比。

2.4.5 Recycling 機制


flowchart TD
    subgraph "Recycling Loop (預設 num_recycle=3)"
        INIT["初始化 prev_pos=0, prev_pair=0"]
        ITER["AlphaMissenseIteration"]
        PREV["提取 prev_pos, prev_pair
(stop_gradient)"] CHECK{{"i < num_iter?"}} INIT --> ITER ITER --> PREV PREV --> CHECK CHECK -->|Yes| ITER CHECK -->|No| FINAL end FINAL["最終推論
(使用最後一輪的 prev)"] HEAD["LogitDiffPathogenicityHead"] OUT["variant_pathogenicity score"] FINAL --> HEAD HEAD --> OUT style OUT fill:#34A853,color:#fff

注意:與 AlphaFold 不同,AlphaMissense 不 recycle MSA embedding,只 recycle 結構位置 (prev_pos) 和配對特徵 (prev_pair)。


3. 安裝與環境設定

3.1 系統需求

項目需求
作業系統Linux (Ubuntu/Debian 推薦)
Python3.10+
硬體GPU 推薦(JAX 支援 CUDA);CPU 可運行但極慢
磁碟空間模型程式碼 ~50 MB;基因資料庫 ~2.5 TB(完整)
記憶體建議 ≥32 GB RAM

3.2 安裝步驟

步驟 1:安裝系統依賴

1# Ubuntu/Debian
2sudo apt update
3sudo apt install python3.11-venv aria2 hmmer
4
5# HMMER Suite 提供 jackhmmer 二進位檔
6# aria2 用於高速下載基因資料庫

步驟 2:複製 repo 並建立虛擬環境

 1git clone https://github.com/google-deepmind/alphamissense.git
 2cd alphamissense
 3
 4# 建立虛擬環境
 5python3 -m venv ./venv
 6source venv/bin/activate
 7
 8# 安裝 Python 依賴
 9pip install -r requirements.txt
10pip install -e .

步驟 3:驗證安裝

1venv/bin/python test/test_installation.py

這會執行:

  1. 使用 test FASTA 建立 DataPipeline
  2. 處理一個範例變異 (Q08708 蛋白質, A3C)
  3. 初始化模型(隨機權重,非訓練好的)
  4. 輸出特徵形狀與模型參數摘要

3.3 requirements.txt 詳解

 1absl-py==1.0.0          # Google 的 Python 基礎函式庫
 2biopython==1.79         # 生物序列解析
 3dm-haiku==0.0.10        # DeepMind 的 JAX 神經網路框架
 4dm-tree==0.1.8          # 巢狀資料結構操作
 5immutabledict==2.0.0    # 不可變字典
 6jax==0.4.14             # Google 的數值計算框架
 7jaxlib==0.4.14          # JAX 後端
 8ml-collections==0.1.0   # ML 配置管理
 9numpy==1.24.3           # 數值運算
10scipy==1.11.1           # 科學運算
11typing_extensions==4.7.1 # 型別提示擴充

3.4 基因資料庫設定(完整推論需要)

AlphaMissense 的 MSA 管線需要以下資料庫:

資料庫用途大小
UniRef90非冗餘蛋白質序列集~100 GB
MGnify宏基因體蛋白質序列~120 GB
BFD (small)大型蛋白質序列集~17 GB

下載方式請參考 AlphaFold repo 的資料庫設定說明。

3.5 使用 uv 建立環境(建議)

1# 使用 uv 替代 pip(更快、更安全)
2uv venv .venv --python 3.11
3source .venv/bin/activate
4uv pip install -r requirements.txt
5uv pip install -e .

4. 使用教學與範例

4.1 最快上手:使用預計算資料

由於 AlphaMissense 不提供訓練好的模型權重,最實際的使用方式是直接下載預計算的預測結果:

1# 預計算資料託管在 Google Cloud Storage
2# 瀏覽器存取:
3# https://console.cloud.google.com/storage/browser/dm_alphamissense
4
5# 使用 gsutil 下載(需安裝 Google Cloud SDK)
6gsutil -m cp -r gs://dm_alphamissense/ ./alphamissense_predictions/

預計算資料包含:

  • 所有人類主要轉錄本 (major transcripts) 的 missense variant 致病性預測
  • 所有人類異構體 (isoforms) 的預測
  • 每個變異的致病性分數與分類

4.2 搭配 Ensembl VEP 使用

AlphaMissense 預測可整合進 Ensembl VEP (Variant Effect Predictor)

 1# 1. 安裝 VEP
 2# https://www.ensembl.org/info/docs/tools/vep/script/vep_download.html
 3
 4# 2. 下載 AlphaMissense VEP plugin
 5# https://www.ensembl.org/info/docs/tools/vep/script/vep_plugins.html
 6
 7# 3. 執行 VEP + AlphaMissense
 8vep --input_file variants.vcf \
 9    --plugin AlphaMissense,file=AlphaMissense_hg38.tsv.gz \
10    --output_file annotated_variants.vcf

4.3 理解資料管線程式碼

4.3.1 建立 DataPipeline

 1from alphamissense.data import pipeline_missense
 2
 3# 建立資料管線
 4pipeline = pipeline_missense.DataPipeline(
 5    jackhmmer_binary_path='/usr/bin/jackhmmer',
 6    protein_sequence_file='sequences.fasta',           # 目標蛋白質 FASTA
 7    uniref90_database_path='databases/uniref90/uniref90.fasta',
 8    mgnify_database_path='databases/mgnify/mgy_clusters_2022_05.fa',
 9    small_bfd_database_path='databases/small_bfd/bfd-first_non_consensus_sequences.fasta',
10)

4.3.2 處理單一變異

1# 處理一個 missense variant
2sample = pipeline.process(
3    protein_id='Q08708',        # FASTA 中的序列 ID
4    reference_aa='A',           # 參考胺基酸(大寫單字母)
5    alternate_aa='C',           # 替換胺基酸
6    position=3,                 # 位置(1-based!)
7    msa_output_dir='./msa_cache',  # MSA 結果快取目錄
8)
9# sample 是 FeatureDict (dict[str, np.ndarray])

4.3.3 模型推論(需要權重)

 1import jax
 2import jax.numpy as jnp
 3from alphamissense.model import config
 4from alphamissense.model import modules_missense
 5
 6# 建立模型
 7cfg = config.model_config()
 8model_runner = modules_missense.RunModel(cfg, params=None)
 9
10# 轉為 JAX 陣列
11sample_jax = jax.tree_map(jnp.asarray, sample)
12
13# 推論(注意:params=None 時使用隨機初始化的權重,僅供測試)
14output = model_runner.predict(sample_jax, random_seed=0)
15
16# 取得致病性分數
17pathogenicity_score = output['logit_diff']['variant_pathogenicity']
18print(f"致病性分數: {pathogenicity_score}")

4.4 解讀預測結果

AlphaMissense 的致病性分數 (variant_pathogenicity) 解讀方式:


graph LR
    subgraph "致病性分數解讀"
        B["Likely Benign
可能良性
score < 0.340"] A["Ambiguous
模糊
0.340 ≤ score ≤ 0.564"] P["Likely Pathogenic
可能致病
score > 0.564"] end B ---|閾值 0.340| A A ---|閾值 0.564| P style B fill:#34A853,color:#fff style A fill:#FBBC04,color:#333 style P fill:#EA4335,color:#fff
分類閾值佔比(人類蛋白質體)說明
Likely Pathogenic> 0.564~32%高度懷疑致病
Ambiguous0.340–0.564~11%無法明確判斷
Likely Benign< 0.340~57%高度懷疑良性

5. 進階功能

5.1 模型配置變體

AlphaMissense 提供一個配置差異 (CONFIG_DIFFS),即 model_3

1from alphamissense.model import config
2
3# 預設配置
4cfg_default = config.model_config()
5
6# model_3 配置:啟用 Extra MSA Stack
7cfg_model3 = config.model_config('model_3')
8# 差異:enable_extra_msa_stack = True(預設為 False)

Extra MSA Stack 是 AlphaFold 2 的一個額外處理層,對大量 MSA 序列做進一步處理,可能提升某些蛋白質的預測品質。

5.2 Spatial Cropping 與 AlphaFold DB 整合

當蛋白質長度超過 crop_size 時,spatial cropping 可利用 AlphaFold 預測的 3D 結構來選擇空間上最相關的殘基:

 1# Spatial cropping 會從 Google Cloud Storage 取得結構
 2# 存取路徑格式:
 3AFDB_BUCKET = 'gs://public-datasets-deepmind-alphafold-v4'
 4# 需要 gsutil 並有網路存取權限
 5
 6# DataPipeline 建構時設定 crop_size 和 spatial_crop_size
 7pipeline = pipeline_missense.DataPipeline(
 8    jackhmmer_binary_path='/usr/bin/jackhmmer',
 9    protein_sequence_file='sequences.fasta',
10    uniref90_database_path='...',
11    mgnify_database_path='...',
12    small_bfd_database_path='...',
13    crop_size=512,           # 裁切後的殘基數
14    msa_crop_size=256,       # 裁切後的 MSA 序列數
15    use_spatial_cropping=True,  # 啟用空間裁切
16)

flowchart TD
    subgraph "Cropping 決策流程"
        LEN{"蛋白質長度
≤ crop_size?"} NO_CROP["不裁切
(直接填充)"] SPATIAL{"啟用
spatial cropping?"} SC["Spatial Crop
基於 3D 結構
選擇最近鄰殘基"] CC["Contiguous Crop
以變異位置為中心
取連續區段"] LEN -->|Yes| NO_CROP LEN -->|No| SPATIAL SPATIAL -->|Yes| SC SPATIAL -->|No| CC end SC --> PAD["Padding 到固定大小"] CC --> PAD NO_CROP --> PAD

5.3 自訂 Loss Function

AlphaMissense 的 loss function 使用 clipped sigmoid cross-entropy,這是一項創新設計:

1def clipped_sigmoid_cross_entropy(
2    logits, labels,
3    clip_negative_at_logit=0.0,    # 負樣本的 clip 閾值
4    clip_positive_at_logit=-1.0,   # 正樣本的 clip 閾值
5):
6    # 在 logit 空間中 clip,避免過度自信
7    # 這讓模型對邊界案例保持適當的不確定性

這個設計考慮到 ClinVar 等資料庫中的標註品質不一致:某些「良性」標註可能並非真的良性(尤其是基於人群頻率推斷的),clip 機制可避免模型過度學習這些可能有噪音的標籤。

5.4 批次處理多個變異

 1import pandas as pd
 2from alphamissense.data import pipeline_missense
 3
 4# 假設有一組變異清單
 5variants = pd.DataFrame({
 6    'protein_id': ['Q08708', 'Q08708', 'P04637'],
 7    'position': [3, 15, 248],
 8    'ref_aa': ['A', 'G', 'R'],
 9    'alt_aa': ['C', 'D', 'W'],
10})
11
12pipeline = pipeline_missense.DataPipeline(...)
13
14# 批次處理(同一蛋白質的 MSA 可共用快取)
15results = []
16for _, row in variants.iterrows():
17    sample = pipeline.process(
18        protein_id=row['protein_id'],
19        reference_aa=row['ref_aa'],
20        alternate_aa=row['alt_aa'],
21        position=row['position'],
22        msa_output_dir=f'./msa_cache/{row["protein_id"]}',
23    )
24    results.append(sample)

5.5 預計算資料的程式化存取

 1import pandas as pd
 2
 3# 下載後讀取預計算資料
 4# 檔案格式為 TSV,包含所有 ~71M missense variants
 5predictions = pd.read_csv(
 6    'AlphaMissense_aa_substitutions.tsv.gz',
 7    sep='\t',
 8    comment='#',
 9)
10
11# 欄位說明:
12# CHROM, POS, REF, ALT           — 基因體座標
13# genome                          — 基因體版本 (hg38)
14# uniprot_id                      — UniProt ID
15# transcript_id                   — Ensembl transcript ID
16# protein_variant                 — 蛋白質變異 (e.g. A3C)
17# am_pathogenicity                — 致病性分數
18# am_class                        — 分類 (likely_pathogenic / likely_benign / ambiguous)
19
20# 查詢特定蛋白質的所有變異
21tp53_variants = predictions[predictions['uniprot_id'] == 'P04637']
22print(f"TP53 共有 {len(tp53_variants)} 個可能的 missense variants")
23
24# 篩選 likely pathogenic
25tp53_pathogenic = tp53_variants[tp53_variants['am_class'] == 'likely_pathogenic']
26print(f"其中 {len(tp53_pathogenic)} 個被預測為 likely pathogenic")

6. 與 Apotek 管線的整合潛力

6.1 整合情境分析

AlphaMissense 在 Apotek 的生物資訊分析管線中有多個潛在整合點:


flowchart TD
    subgraph "Apotek 現有管線"
        WES["WES/WGS
全外顯子/全基因體定序"] VCF["VCF 變異呼叫"] FILT["變異篩選"] ANNO["變異註解
(VEP / ANNOVAR)"] RANK["RANK 評分
致病性排序"] end subgraph "AlphaMissense 整合點" AM_VEP["VEP Plugin
直接在 VEP 步驟
加入 AM 評分"] AM_PRE["預計算查表
TSV 查詢
不需額外計算"] AM_RANK["RANK 輔助
與 CADD/REVEL 並列
作為多工具共識"] end WES --> VCF --> FILT --> ANNO --> RANK ANNO -.-> AM_VEP FILT -.-> AM_PRE RANK -.-> AM_RANK AM_VEP -.->|分數回傳| ANNO AM_PRE -.->|快速查詢| FILT AM_RANK -.->|多工具共識| RANK style AM_VEP fill:#4285F4,color:#fff style AM_PRE fill:#34A853,color:#fff style AM_RANK fill:#EA4335,color:#fff

6.2 三種整合策略

策略 A:VEP Plugin 整合(推薦)

最標準的整合方式,直接在 Ensembl VEP 註解步驟加入 AlphaMissense 分數:

1# 在現有 VEP 流程中加入 AlphaMissense plugin
2vep --input_file patient_variants.vcf \
3    --plugin AlphaMissense,file=AlphaMissense_hg38.tsv.gz \
4    --plugin CADD,snv=whole_genome_SNVs.tsv.gz \
5    --output_file annotated.vcf \
6    --vcf
  • 優點:與現有 VEP 流程無縫整合,無額外維護成本
  • 適用:臨床變異解讀、RANK 評分系統

策略 B:預計算查表整合

對於已知的變異清單,直接查表比跑模型更高效:

 1import pandas as pd
 2
 3class AlphaMissenseLookup:
 4    """AlphaMissense 預計算分數查詢器"""
 5    
 6    def __init__(self, predictions_path: str):
 7        self.predictions = pd.read_csv(
 8            predictions_path, sep='\t', comment='#',
 9            usecols=['uniprot_id', 'protein_variant', 
10                     'am_pathogenicity', 'am_class'],
11        )
12        # 建立索引加速查詢
13        self.predictions.set_index(
14            ['uniprot_id', 'protein_variant'], inplace=True
15        )
16    
17    def query(self, uniprot_id: str, variant: str):
18        """查詢單一變異的致病性分數
19        
20        Args:
21            uniprot_id: UniProt ID (e.g. 'P04637')
22            variant: 變異描述 (e.g. 'R248W')
23        
24        Returns:
25            dict with 'score' and 'classification'
26        """
27        try:
28            row = self.predictions.loc[(uniprot_id, variant)]
29            return {
30                'score': row['am_pathogenicity'],
31                'classification': row['am_class'],
32            }
33        except KeyError:
34            return {'score': None, 'classification': 'not_found'}

策略 C:多工具共識評分

將 AlphaMissense 與其他致病性預測工具組合,建立共識評分:

 1def consensus_pathogenicity(
 2    alphamissense_score: float,
 3    cadd_phred: float,
 4    revel_score: float,
 5    weights: dict = None,
 6) -> dict:
 7    """多工具共識致病性評分
 8    
 9    Args:
10        alphamissense_score: AM 分數 (0-1)
11        cadd_phred: CADD Phred 分數 (0-99)
12        revel_score: REVEL 分數 (0-1)
13        weights: 各工具權重
14    
15    Returns:
16        共識結果 dict
17    """
18    if weights is None:
19        weights = {'am': 0.4, 'cadd': 0.3, 'revel': 0.3}
20    
21    # 正規化 CADD 到 0-1 範圍
22    cadd_normalized = min(cadd_phred / 40.0, 1.0)
23    
24    consensus = (
25        weights['am'] * alphamissense_score +
26        weights['cadd'] * cadd_normalized +
27        weights['revel'] * revel_score
28    )
29    
30    return {
31        'consensus_score': consensus,
32        'am_class': _classify_am(alphamissense_score),
33        'tools_agree': _check_agreement(
34            alphamissense_score, cadd_phred, revel_score
35        ),
36    }

在 Apotek 從 cell experiments 邁向 animal experiments 和 pre-IND 的階段,AlphaMissense 可在以下場景發揮作用:

  1. 標靶蛋白質變異分析:評估標靶蛋白的已知 missense variants 是否影響藥物結合
  2. 患者分層 (patient stratification):根據 missense variant 致病性預測,篩選可能受益的患者群體
  3. 安全性評估:分析候選藥物標靶蛋白上的常見變異,評估不同基因型的安全性差異

6.4 部署考量

考量建議
資料授權預測資料使用 CC BY 4.0,商業使用需確認合規
運算資源建議使用預計算資料(查表),避免自行跑模型
版本管理預測資料應版本化並記錄來源 hash
臨床使用限制AlphaMissense 未經臨床驗證,不可作為唯一診斷依據
更新頻率repo 標注「不會積極維護」,預測資料為一次性發佈

7. 常見問題與限制

7.1 常見問題 (FAQ)

Q1:為什麼不提供模型權重?

Google DeepMind 在論文中說明,AlphaMissense 的訓練資料包含 ClinVar 等臨床資料庫的標註,且模型可能被用於臨床決策。基於責任考量,他們選擇僅發佈預計算預測結果和參考實作,而非可直接使用的推論模型。

Q2:預測結果可以用在臨床嗎?

不可以作為唯一依據。 官方聲明明確指出:「AlphaMissense has not been validated for, and is not approved for, any clinical use.」預測結果應與其他工具和專家判斷結合使用。

Q3:如何引用 AlphaMissense?

1@article{AlphaMissense2023,
2  author  = {Jun Cheng and Guido Novati and Joshua Pan and ...},
3  journal = {Science},
4  title   = {Accurate proteome-wide missense variant effect 
5             prediction with AlphaMissense},
6  year    = {2023},
7  doi     = {10.1126/science.adg7492},
8}

Q4:預計算資料涵蓋哪些物種?

目前僅涵蓋人類 (Homo sapiens) 蛋白質體。模型架構理論上可適用於其他物種,但官方未提供其他物種的預測。

Q5:position 參數是 0-based 還是 1-based?

1-based。 這是程式碼中明確標註的:

1position=3,  # Integer, note that the position is 1-based!

ProteinVariant.__post_init__ 會驗證 self.sequence[self.position - 1] != self.reference_aa 時拋出錯誤。

7.2 已知限制


mindmap
  root((AlphaMissense
限制)) 模型層面 不提供訓練權重 不可重新訓練 僅針對 missense variant 不處理 indel / nonsense / splice 資料層面 僅涵蓋人類蛋白質體 訓練依賴 ClinVar 標註品質 不含新發現的蛋白質 預計算資料為靜態快照 實務層面 未經臨床驗證 repo 不再積極維護 基因資料庫需 ~2.5 TB 空間 JAX 環境設定可能繁瑣 整合層面 與 AlphaFold checkpoint 不相容 MSA 建構需要 HMMER Spatial cropping 需 GCS 存取 版本固定 — 依賴版本較舊

7.3 與同類工具的比較

工具方法AUROC (ClinVar)特色限制
AlphaMissense深度學習 (AlphaFold-based)0.940全蛋白質體預測、結構感知不提供權重
CADD整合多來源特徵 + ML0.895涵蓋所有 SNV 類型計算密集
REVEL多工具 ensemble0.908整合 13 個工具依賴上游工具品質
PrimateAI-3D靈長類保守性 + 3D0.920演化資訊豐富需要靈長類資料
ESM1b蛋白質語言模型0.900不需 MSA無結構資訊

7.4 替代方案建議

如果你的使用情境不適合 AlphaMissense,考慮:

  • 需要處理非 missense 變異:使用 CADD(涵蓋所有 SNV 類型)
  • 需要即時預測新蛋白質:使用 ESM1b / ESM2(蛋白質語言模型,不需 MSA)
  • 需要臨床等級的證據:使用 ClinVar + InterVar(基於 ACMG 指南的分類)
  • 需要可自訂訓練的模型:使用 EVE(variational autoencoder,開放模型和訓練程式碼)

7.5 依賴版本注意事項

repo 中的 requirements.txt 使用較舊的版本釘定(JAX 0.4.14、NumPy 1.24.3)。在較新的 Python 環境中可能遇到相容性問題:

1# 常見問題:JAX 與 CUDA 版本不匹配
2# 解決方式:安裝與你的 CUDA 版本對應的 jaxlib
3pip install jax[cuda12_pip] -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
4
5# 常見問題:NumPy 2.x 不相容
6# 解決方式:固定 NumPy 版本
7pip install "numpy<2.0"

參考資料

  1. Cheng, J., et al. (2023). Accurate proteome-wide missense variant effect prediction with AlphaMissense. Science, 381(6664). DOI: 10.1126/science.adg7492
  2. AlphaMissense GitHub Repository
  3. AlphaMissense 預計算資料
  4. Ensembl VEP AlphaMissense Plugin
  5. AlphaFold 2 Repository
  6. Jumper, J., et al. (2021). Highly accurate protein structure prediction with AlphaFold. Nature, 596, 583–589.

本教學文件由 Apotek 生物資訊團隊整理,內容基於 AlphaMissense 公開原始碼與論文。最後更新:2026-06-20。