2-상태 HMM에서 100-상태 HMM으로
M18~M20에서 다룬 HMM은 상태 두 개(H, L)의 장난감 모델이었습니다. 실무에서 HMM이 정말 강력해지는 지점은 상태 수가 폭발하면서 시퀀스 구조를 정교하게 표현하기 시작할 때입니다. Profile HMM은 이 확장의 대표작이고, gene finding은 그 실전 응용의 왕관입니다.
이 편에서는 Profile HMM의 세 가지 상태(Match, Insert, Delete)와 그 위상 구조, HMMER 도구의 실제 사용법, 그리고 HMM이 유전자 구조 검출에 어떻게 쓰이는지 전부 훑습니다. HMM 시리즈의 마지막이자 실전 편입니다.
Profile HMM — MSA에서 HMM으로
Multiple Sequence Alignment(MSA)를 마쳤다고 합시다. 100개 상동 단백질을 정렬한 결과 컬럼 200개짜리 매트릭스가 나왔습니다. 이 정보를 요약해서 새 서열이 이 패밀리의 일원인지 검색할 방법이 필요합니다.
가장 단순한 접근은 각 컬럼의 문자 빈도를 저장한 PSSM(Position-Specific Scoring Matrix). 그런데 PSSM은 갭(삽입·삭제)을 자연스럽게 다루지 못합니다. Profile HMM은 이 한계를 넘습니다.
세 가지 상태를 각 MSA 컬럼마다 정의합니다.
- Match state (M_i): 컬럼 i에서 문자 방출. 방출 확률은 그 컬럼의 아미노산 분포에서 학습
- Insert state (I_i): 컬럼 i와 i+1 사이의 삽입. 방출 확률은 백그라운드 분포에 가까움
- Delete state (D_i): 컬럼 i를 건너뜀. 방출 없음(silent state)
이 세 상태가 각 컬럼마다 있고, 서로 정해진 위상으로만 연결됩니다.
M_1 → M_2 → M_3 → ... → M_L
↕ ↕ ↕ ↕
D_1 → D_2 → D_3 → ... → D_L
↕ ↕ ↕ ↕
I_0 I_1 I_2 ... I_L
↑ ↑ ↑ ↑
(loop) (loop) ... (loop)Match는 다음 Match·Delete·Insert로. Delete는 다음 Match·Delete로. Insert는 자기 자신 loop 또는 다음 Match·Delete로. 상태 수는 대략 3L + 2 (L = MSA 컬럼 수)로, L=200이면 상태 602개. 큰 HMM이지만 격자 채우기의 뼈대는 M18과 완전히 같습니다.
Viterbi로 Profile HMM 검색
새 단백질 서열 X가 들어오면 Profile HMM 위에서 Viterbi를 돌립니다.
k는 지금 상태(M_i, I_i, D_i 중 하나), j는 서열의 위치. 격자 크기는 O(L × T). 결과 최적 경로는 X의 각 문자를 어떤 컬럼의 어떤 상태(Match/Insert/Delete)에 대응시킨 배열입니다.
이 경로의 총 점수가 비트 스코어(bit score)이고, 도메인 히트 판정에 씁니다. Pfam의 각 도메인은 이 Profile HMM 하나로 표현되고, 새 단백질 서열은 Pfam 전체(~2만 개)를 대상으로 이 검색을 반복합니다. 원리는 M18과 같지만 규모가 완전히 다릅니다.
HMMER — Profile HMM의 표준 도구
HMMER(Sean Eddy et al.)는 Profile HMM의 사실상 표준 구현입니다. Pfam·InterPro의 백엔드로 쓰이고, 명령 몇 줄이면 실무 도메인 검색이 됩니다.
# 1) 설치 (Colab이나 SageMaker Studio Lab에서 그대로 됩니다)wget http://eddylab.org/software/hmmer/hmmer-3.4.tar.gztar xzf hmmer-3.4.tar.gzcd hmmer-3.4 && ./configure && make && sudo make installhmmscan -h
# 2) Pfam 데이터베이스 다운로드wget https://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.hmm.gzgunzip Pfam-A.hmm.gzhmmpress Pfam-A.hmm
# 3) 쿼리 서열 준비 (예: p53)cat > p53.fasta <<'EOF'>P04637 Human p53MEEPQSDPSVEPPLSQETFSDLWKLLPENNVLSPLPSQAMDDLMLSPDDIEQWFTEDPGPDEAPRMPEAAPPVAPAPAAPTPAAPAPAPSWPLSSSVPSQKTYQGSYGFRLGFLHSGTAKSVTCTYSPALNKMFCQLAKTCPVQLWVDSTPPPGTRVRAMAIYKQSQHMTEVVRRCPHHEEOF
# 4) 도메인 검색hmmscan --domtblout p53.domtbl Pfam-A.hmm p53.fastahead -20 p53.domtbl--domtblout 출력의 컬럼을 보면 도메인 이름, 좌표, i-Evalue(개별 도메인 E-value), c-Evalue(조건부 E-value), 스코어가 나옵니다. p53은 P53 도메인(PF00870)이 정확한 좌표로 잡힙니다. PSI-BLAST가 여러 번 반복해야 얻던 원거리 상동성을 한 번의 검색으로 얻습니다.
두 개의 큰 변종 도구도 알아둡시다.
hmmsearch: 하나의 HMM(Profile)으로 여러 서열 검색hmmscan: 여러 HMM(Pfam 전체)으로 하나의 서열 검색
방향이 반대입니다. 실무에서 도메인 프로파일링에는 hmmscan, 특정 패밀리 스크리닝에는 hmmsearch.
새 도메인 만들기 — hmmbuild
Pfam에 없는 나만의 도메인 프로파일을 만들려면 MSA를 재료로 hmmbuild.
# MSA 파일(FASTA aligned or Stockholm 포맷) → HMM 파일hmmbuild my_domain.hmm my_msa.sto
# 사전 훈련 확률화(Baum-Welch가 여기 안에서 돌아갑니다)head -30 my_domain.hmmHMM 파일 내부를 열어보면 각 컬럼의 방출 확률표와 전이 확률표가 로그 도메인으로 저장돼 있습니다. 이 파일 하나가 한 도메인의 통계적 지문입니다. 팀원과 공유하면 그대로 재현됩니다.
HMM으로 유전자 찾기 — gene finding
원핵생물 유전자 예측은 상대적으로 단순합니다. 유전자의 시작(ATG), 코돈 3자 반복, 종료(TAA/TAG/TGA). GeneMark나 Prodigal 같은 도구는 이 구조를 상태 6~10개짜리 HMM으로 표현합니다.
- 인터제닉(intergenic) 상태
- ORF 시작 상태 (start codon)
- 코돈 3자 상태 (codon position 1, 2, 3)
- 종료 상태 (stop codon)
이 상태들 사이 전이가 유전자 시작·종료의 확률을 정합니다. 방출 확률은 GC content · 코돈 사용 편향 등을 반영합니다.
진핵생물은 훨씬 복잡합니다. 엑손·인트론·5'UTR·3'UTR·스플라이스 사이트·프로모터. AUGUSTUS나 GENSCAN 같은 도구는 상태 수백 개짜리 HMM을 씁니다. 다음 편 예고 삼아 상태 위상을 스케치하면.
5'UTR → Start → Exon → Donor → Intron → Acceptor → Exon → ... → Stop → 3'UTR
↓ ↑
└─────── (반복) ───────────┘각 상태에서의 방출 확률은 종별로 학습됩니다. AUGUSTUS는 훈련 세트가 큰 인간·마우스에서는 정확도가 90%대, 훈련 데이터가 적은 비모델 종에서는 60~70%대. HMM 유전자 예측기의 정확도는 훈련 데이터의 질과 양에 종속됩니다.
실습 — Prodigal로 박테리아 유전자 찾기
원핵생물 편만 짧게 실습해봅시다.
# Prodigal 설치 (경량, HMMER보다 훨씬 단순)conda install -c bioconda prodigalprodigal -v
# E. coli K-12 게놈 다운로드wget https://ftp.ncbi.nlm.nih.gov/genomes/all/GCA/000/005/845/GCA_000005845.2_ASM584v2/GCA_000005845.2_ASM584v2_genomic.fna.gzgunzip GCA_000005845.2_ASM584v2_genomic.fna.gz
# 유전자 예측 실행 (single mode = 하나의 유기체)prodigal -i GCA_000005845.2_ASM584v2_genomic.fna \ -o ecoli.gff -a ecoli.faa -f gff -p single
# 예측된 유전자 수grep -c "^>" ecoli.faaE. coli K-12는 약 4,300개 유전자가 예측됩니다 (실제 값과 5% 이내로 일치). 이 결과가 실질적으로 상태 몇 개 HMM에서 나온 것이라는 사실이 놀랍습니다. Profile HMM의 힘이 여기서 다시 확인됩니다.
복잡도와 실무의 감
- Profile HMM 검색: O(L × T). L은 프로파일 길이, T는 쿼리 길이. Pfam 전체(2만 프로파일)를 훑어도 노트북에서 분 단위
- Gene finding: 게놈 크기 T와 상태 수 N에 O(T × N²). 인간 게놈(3 × 10⁹)에서도 서버 한 대 며칠
이 두 규모가 실무의 감입니다. HMMER는 노트북 도구, AUGUSTUS는 서버 도구. GPU 가속은 최근에야 붙기 시작했습니다(HMMER의 SIMD 벡터화가 이미 잘 돼서 CPU 최적화만으로 충분했던 배경).
CS 매핑 — 유한 상태 기계의 확률판
DryBench에서 다룬 finite state machine 개념이 여기 그대로 확장됩니다.
- 결정론적 FSM: 각 상태에서 다음 상태가 확정
- 비결정론적 FSM: 여러 다음 상태 가능 (선택 방법 미정)
- HMM: 각 다음 상태에 확률 부여
- Profile HMM: HMM에 삽입·삭제 상태를 추가해서 갭 처리
이 점진적 확장 과정을 몸에 익히면, 훗날 Transformer의 attention을 보아도 "가중치 붙은 상태 전이의 완전 연결 확장"으로 해석할 수 있습니다. 모든 시퀀스 모델은 상태-전이-방출의 재조합에 지나지 않는다.
다음 편으로 이어지는 갈래 — Micro Tier 마감
M21이 Micro Tier(M01~M30)의 §M.4 마지막입니다. 다음 편부터는 어셈블리 알고리즘으로 넘어갑니다.
- 다음 편 (M22): OLC 어셈블리 — Overlap-Layout-Consensus. 오버랩 그래프와 해밀턴 경로
- 두 편 뒤 (M23): De Bruijn Graph — 오일러 경로 어셈블리. 짧은 리드 시대의 표준
- 세 편 뒤 (M24): hifiasm — PacBio HiFi 다이플로이드 조립. 최신 롱리드 표준
HMM 시리즈가 Rosalind에서 채점받을 수 있는 확률 모델의 대표였다면, 어셈블리 시리즈는 그래프 알고리즘의 바이오 응용입니다. 격자에서 그래프로 뇌를 바꿀 준비를 합시다.
더 깊게 파고 싶다면
- Krogh, Brown, Mian, Sjölander, Haussler (1994), Hidden Markov Models in Computational Biology: Applications to Protein Modeling, JMB — Profile HMM을 처음 정립한 논문. 지금 봐도 유효합니다.
- HMMER 공식 문서:
http://eddylab.org/software/hmmer/— 사용법·확률 유도·튜토리얼 전량. - EMBL-EBI Training — Pfam·InterPro 실전 재생목록. 도메인 검색이 왜 그렇게 유용한지 감을 잡을 수 있습니다.
- Stanford CS262 — Gill Bejerano 교수의 gene finding 강의 (자막 완비). GENSCAN의 HMM 위상도를 판서로 봅니다.
- AUGUSTUS 튜토리얼:
https://github.com/Gaius-Augustus/Augustus/wiki— 실전 진핵 유전자 예측 파이프라인.
Pfam 웹사이트에서 아무 단백질 서열이나 붙여넣고 검색을 돌려봅시다. 도메인 지도가 그려지는 것을 보면, HMM이 왜 반세기 넘게 살아남은 알고리즘 프레임인지 몸으로 알게 됩니다.