BioPlayground

🧬
목록으로

Geneformer: 발현값 대신 순위로 유전자 문맥을 배우다

발현값 대신 유전자 순위를 입력으로 쓰는 Geneformer의 rank-value encoding 원리와, 유전자 결손 섭동 시뮬레이션 실습을 다룹니다.

심화
|
20
|
검증 완료 (2026-07-29)
Geneformerrank encodingin silico perturbationgene network
진행률0/120 (0%)

같은 문제, 다른 답 — 값 대신 순서

F21의 scGPT는 발현값을 구간으로 이산화해 임베딩에 담았습니다. Geneformer(2023, Broad Institute)는 다른 선택을 했습니다 — 세포 안에서 각 유전자가 발현량 기준 몇 번째 순위인지만 남기고, 절대 발현값 자체는 아예 버립니다. 왜 이런 선택을 했을까요?

원리 — rank-value encoding과 배치 효과 회피

절대값이 아니라 순위를 쓰는 이유

단일세포 데이터는 실험마다, 심지어 같은 실험 안의 배치(batch)마다 시퀀싱 깊이(depth)와 기술적 잡음이 크게 다릅니다. S28~S30에서 다룬 정규화 절차가 이 차이를 어느 정도 보정하지만, 완전히 없애지는 못합니다. Geneformer는 이 문제를 아예 다른 각도에서 접근합니다 — "이 세포에서 유전자 A가 유전자 B보다 상대적으로 더 많이 발현되었는가"라는 순위 관계는 절대 발현량 스케일보다 배치 효과에 훨씬 덜 민감하다는 관찰입니다.

세포 c의 유전자 g 순위=rank(xg,c{xg,c}g전체 유전자)\text{세포 } c\text{의 유전자 } g \text{ 순위} = \text{rank}(x_{g,c} \mid \{x_{g',c}\}_{g' \in \text{전체 유전자}})

이때 흔한 하우스키핑 유전자(housekeeping gene)처럼 거의 모든 세포에서 항상 최상위권인 유전자는 상대적으로 정보량이 적다고 보고, 세포 유형에 따라 발현 순위가 크게 요동치는 유전자에 더 큰 가중치를 주는 정규화를 함께 적용합니다.

손 계산 예제: 순위 정규화 확인하기

세포 하나에서 유전자 5개의 발현값이 [12,3,45,0,8][12, 3, 45, 0, 8]이라고 합시다. 발현량 내림차순으로 순위를 매기면

유전자발현값순위(1=최고)
G1122
G234
G3451
G405 (시퀀스에서 제외)
G583

발현값 0인 G4는 애초에 발현이 관찰되지 않았으므로 순위 시퀀스에서 제외됩니다. 이렇게 얻은 순서 G3,G1,G5,G2G3, G1, G5, G2가 이 세포를 대표하는 "문장"이 됩니다. 다른 배치에서 같은 세포 유형을 측정해 절대값 스케일이 통째로 달라지더라도, 유전자 간 상대 순위는 훨씬 안정적으로 유지되는 경향이 있습니다.

사전학습과 downstream 미세조정

Geneformer도 F16·F21과 같은 masked language modeling으로 사전학습됩니다. 순위 시퀀스의 일부 유전자를 가리고, 나머지 순위 문맥으로 가려진 유전자를 맞히도록 학습합니다. 원 공개 학습 코퍼스인 Genecorpus-30M은 약 3,000만 개의 인간 단일세포 전사체로 구성됩니다. 후속 체크포인트·코퍼스의 범위는 사용 시점의 공식 모델 카드와 원 자료를 다시 확인해야 합니다.

실습: in silico 유전자 결손 섭동으로 네트워크 영향 가늠하기

Geneformer의 대표적 활용 사례 중 하나는 in silico perturbation입니다. 실제로 유전자를 knockout하는 습식 실험 없이, 입력 시퀀스에서 특정 유전자 토큰을 제거한 뒤 모델의 예측이 어떻게 바뀌는지를 관찰해 그 유전자가 다른 유전자 발현에 미치는 영향을 가늠하는 방법입니다.

python
# Kaggle 무료 GPU(T4) 환경 기준. Geneformer 공식 저장소의 전처리 형식을
# 그대로 따라야 실제 사전학습 가중치와 호환됩니다.
def in_silico_deletion(rank_sequence: list[str], target_gene: str) -> list[str]:
"""
순위 시퀀스에서 특정 유전자를 제거해 '결손된' 가상 세포를 만듭니다.
이 시퀀스를 사전학습 모델에 다시 넣어 다른 유전자들의 예측 임베딩이
원본 대비 얼마나 달라지는지를 비교하는 것이 섭동 분석의 핵심입니다.
"""
return [g for g in rank_sequence if g != target_gene]
original_seq = ["G3", "G1", "G5", "G2"]
perturbed_seq = in_silico_deletion(original_seq, target_gene="G1")
print(f"원본: {original_seq}")
print(f"G1 결손 후: {perturbed_seq}")
# 실제 분석에서는 원본과 섭동 시퀀스 각각을 Geneformer에 넣어 얻은
# 임베딩 벡터 사이의 코사인 거리 변화를 비교해, 어떤 유전자가
# G1 결손에 가장 민감하게 반응하는지(가상 네트워크 영향)를 순위화합니다.

이 방식으로 얻은 결과는 실제 CRISPR knockout 실험을 대체하지 않으며, 후속 습식 검증이 필요한 가설 생성 단계로 취급해야 합니다.

CS 매핑

  • 순위 정규화(rank normalization): 절대값 대신 순위를 쓰는 것은 통계학의 비모수적(non-parametric) 방법론에서 이상치·스케일 편차에 강건한 표현을 얻기 위해 흔히 쓰는 기법과 동일한 발상입니다.
  • 어블레이션(ablation) 분석: in silico deletion으로 모델 출력 변화를 관찰하는 것은 딥러닝 해석가능성(interpretability) 연구에서 특정 입력 요소를 제거해 그 중요도를 가늠하는 어블레이션 스터디와 같은 방법론입니다.
  • 배치 불변 표현: 순위 기반 인코딩이 배치 효과에 덜 민감한 것은, 특징 정규화(feature normalization)가 도메인 시프트(domain shift)에 강건한 표현을 만드는 것과 같은 계보의 아이디어입니다.

자주 만나는 결함

  • 순위 정보만으로 절대적 발현 강도 해석 시도: 순위 기반 표현은 상대적 서열 구조만 담을 뿐, "이 유전자가 몇 배 더 발현되었는가" 같은 정량적 질문에는 답할 수 없습니다. 정량 비교가 필요하면 원본 발현값 기반 분석(S27~S31)을 병행해야 합니다.
  • in silico 섭동 결과를 실험적 증거로 오인: 섭동 분석은 가설 생성 도구입니다. 실제 유전자 조절 네트워크에 대한 결론은 최소한 일부라도 습식 실험(CRISPR 스크리닝 등)으로 검증해야 합니다.

더 깊게 파고 싶다면

본문은 BPD 연구진이 직접 재구성한 서술입니다. 원 논문과 공식 자료로 심화해봅시다.

  • Geneformer 원 논문: Theodoris et al. (2023), Transfer learning enables predictions in network biology, Nature 618.
  • 단일세포 배치 효과 배경: S32~S33 (scrna-batch-correction-harmony-scvi).

다음 편(F23)에서는 UCE가 유전자 순서나 값 인코딩 없이도 여러 종의 세포를 하나의 임베딩 공간에 zero-shot으로 옮기는 방법을 다룹니다.