AlphaMissense 完整技術教學
AlphaMissense — Google DeepMind 發佈的 missense variant pathogenicity (錯義變異致病性) 預測模型,基於 AlphaFold 2 架構修改而成,可對人類蛋白質體中所有可能的單胺基酸替換進行致病性評分。
| 項目 | 資訊 |
|---|---|
| GitHub | google-deepmind/alphamissense |
| Stars / Forks | 634 / 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_block | 48 | Evoformer 堆疊層數 |
seq_channel | 384 | 序列特徵維度 |
msa_channel | 256 | MSA 特徵維度 |
pair_channel | 128 | 配對特徵維度 |
num_msa | 256 | 取樣 MSA 序列數 |
num_extra_msa | 1152 | 額外 MSA 序列數 |
max_relative_idx | 32 | 相對位置編碼最大距離 |
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 推薦) |
| Python | 3.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
這會執行:
- 使用 test FASTA 建立
DataPipeline - 處理一個範例變異 (Q08708 蛋白質, A3C)
- 初始化模型(隨機權重,非訓練好的)
- 輸出特徵形狀與模型參數摘要
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% | 高度懷疑致病 |
| Ambiguous | 0.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 可在以下場景發揮作用:
- 標靶蛋白質變異分析:評估標靶蛋白的已知 missense variants 是否影響藥物結合
- 患者分層 (patient stratification):根據 missense variant 致病性預測,篩選可能受益的患者群體
- 安全性評估:分析候選藥物標靶蛋白上的常見變異,評估不同基因型的安全性差異
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 | 整合多來源特徵 + ML | 0.895 | 涵蓋所有 SNV 類型 | 計算密集 |
| REVEL | 多工具 ensemble | 0.908 | 整合 13 個工具 | 依賴上游工具品質 |
| PrimateAI-3D | 靈長類保守性 + 3D | 0.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"
參考資料
- Cheng, J., et al. (2023). Accurate proteome-wide missense variant effect prediction with AlphaMissense. Science, 381(6664). DOI: 10.1126/science.adg7492
- AlphaMissense GitHub Repository
- AlphaMissense 預計算資料
- Ensembl VEP AlphaMissense Plugin
- AlphaFold 2 Repository
- Jumper, J., et al. (2021). Highly accurate protein structure prediction with AlphaFold. Nature, 596, 583–589.
本教學文件由 Apotek 生物資訊團隊整理,內容基於 AlphaMissense 公開原始碼與論文。最後更新:2026-06-20。
Comments