StructureTokenizer 설계 명세 (Module B)
담당 승원 · 버전 v2.0 (2026-09-17) · 상위 문서 deepRAD51C — Two-stage Tokenization & Fusion 설계 및 실행 계획 §6
0. 한눈에 보기
✅ 확정
| 항목 |
값 |
| 토큰 구성 |
Block A 9개 (연속 8 + 범주 1). Block B 제외 |
| validity mask |
없음 — 모든 토큰이 항상 valid |
| 변이 scope |
5,887개 (synonymous 973 포함) |
| 연속형 인코딩 |
Q-PLE (분위수 기반 구간별 선형) |
| pLDDT knot |
도메인 고정 [0, 50, 70, 90, 100] |
e_type |
3-way [missense, synonymous, indel] |
| Block A feature |
추가 없음. 9개로 고정 |
🔶 잠정 — 진행하되 확정 아님
| 항목 |
현재 |
비고 |
| Aggregator |
mean pooling으로 우선 진행 |
attention pooling과 비교 후 결정 |
⬜ 미정 — 서버에서 성능 보며 결정
| 항목 |
후보 |
PLE 구간 수 T |
[4, 8, 16, 32] |
feature별 T 공유 여부 |
전역 공통 / feature별 |
d_s |
32 / 64 / 128 |
| adapter 위치 |
pooling 앞 / 뒤 — aggregator 확정 후 |
| 범위 밖 값 |
clip / 외삽 허용 |
⚠️ 의존관계: d_s와 adapter 위치는 aggregator가 정해진 뒤에 결정합니다. 선형 pooling이면 adapter와 순서를 바꿔도 결과가 같지만, 비선형 pooling이면 순서가 의미를 갖습니다.
1. 전체 그림
┌──────────────────────────────────────────────────────────────────────────┐
│ 입력: 변이 1개 │
│ chr17_58692673_G_C (missense, z = −6.10) │
└───────────────────────────────┬──────────────────────────────────────────┘
│ pp 컬럼
▼
앵커 위치 p = 10
┌───────────────────────────────────────────┐
│ sav / syn → 그 residue │
│ del → 결실 구간의 시작 │
│ ins → 삽입 지점 앞 │
└───────────────────────────────────────────┘
│
▼
AlphaFold 구조에서 residue 10의 값 9개를 읽음
│
┌────────────────────────────┴──────────────────────────────┐
│ 연속 8개 범주 1개 │
▼ ▼
┌──────────────────────────────────┐ ┌─────────────────────────┐
│ pLDDT 48.06 │ │ secondary structure │
│ rSASA 0.62 │ │ = loop │
│ Walker A 거리 32.44 Å │ └───────────┬─────────────┘
│ Walker B 거리 30.08 Å │ │
│ ATP-contact 거리 16.24 Å │ │
│ ssDNA 거리 14.82 Å │ │
│ BCDX2 거리 0.00 Å │ │
│ CX3 거리 19.01 Å │ │
└──────────────┬───────────────────┘ │
│ │
▼ Q-PLE ▼ Embedding
┌───────────────────────────────────────┐ ┌──────────────────────┐
│ 스칼라 1개 → 구간 채움 벡터 │ │ 3-class lookup │
│ │ │ helix / sheet / loop│
│ 예) ATP-contact 거리 = 16.24 Å │ └──────────┬───────────┘
│ │ │
│ 경계 [0, 7.8, 14.9, 21.9, 50.9] │ │
│ └─①─┘ └─②─┘ └─③─┘ └──④──┘ │ │
│ │ │
│ ① 0~7.8 다 지남 → 1.00 │ │
│ ② 7.8~14.9 다 지남 → 1.00 │ │
│ ③ 14.9~21.9 여기! → 0.19 │ │
│ (16.24−14.9)/(21.9−14.9) │ │
│ ④ 21.9~50.9 아직 → 0.00 │ │
│ │ │
│ → [1.00, 1.00, 0.19, 0.00] │ │
└───────────────────┬───────────────────┘ │
│ │
▼ Linear_f (feature마다 독립 가중치) │
e^value ∈ R^d_s ▼
│ e^value ∈ R^d_s
└──────────────┬──────────────────────┘
│
▼
┌──────────────────────────────┐
│ + field-ID embedding │ "이 토큰이 pLDDT인가
│ e_f^field ∈ R^d_s │ rSASA인가 ATP거리인가"
└──────────────┬───────────────┘ (순서가 아니라 의미)
▼
LayerNorm
│
▼
╔════════════════════════════════════════════╗
║ T_A ∈ [B, 9, d_s] ║
║ ║
║ ① pLDDT ④ WalkerA ⑦ ssDNA ║ ← 9개 토큰 완성
║ ② ss(범주) ⑤ WalkerB ⑧ BCDX2 ║ mask 없음
║ ③ rSASA ⑥ ATP ⑨ CX3 ║ (전부 valid)
╚════════════════════╤═══════════════════════╝
│
┌─────────────────────┴───────────────────────┐
│ 🔶 Aggregator 잠정: mean pooling │
│ ⬜ Adapter d_s → 128, 위치 미정 │
│ ※ 둘의 순서는 aggregator 확정 후 결정 │
└─────────────────────┬───────────────────────┘
▼
q_struct ∈ [B, 128]
│
▼ + e_type (3-way) , L2Norm
q_cond ∈ [B, 128]
│
════════════════════════════╪════════════════════════════════
여기부터 Stage 2 (호준)
▼
frozen ESM K/V 조회 → FiLM → Δŷ_struct
그림에서 꼭 읽어야 할 것
| # |
포인트 |
| 1 |
Block A는 앵커 위치 p만의 함수. 같은 위치의 변이는 9개 값이 전부 동일 |
| 2 |
따라서 “무엇이 바뀌었나”는 ESM과 e_type이 담당. 구조는 “어디인가”만 |
| 3 |
스칼라 1개 → 벡터 1개가 PLE의 핵심. 구간마다 독립 가중치를 가져 꺾인 관계 표현 가능 |
| 4 |
field-ID embedding은 순서가 아니라 의미. 토큰을 섞어도 모델은 같은 걸 봄 |
| 5 |
e_type은 tokenizer 밖. Stage 2의 조건으로 들어감 |
2. 입력 스펙
2.1 변이 scope — 5,887개
slim_consequence |
type3 |
전체 |
train |
val |
test |
missense |
missense |
4,555 |
3,195 |
671 |
689 |
synonymous |
synonymous |
973 |
675 |
158 |
140 |
codon_deletion + clinical_inframe_deletion |
indel |
357 |
253 |
52 |
52 |
clinical_inframe_insertion |
indel |
2 |
1 |
0 |
1 |
| 합계 |
|
5,887 |
4,124 |
881 |
882 |