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