2025년 9월 21일 일요일

인간이 무엇을 더 할 수 있을까?

외부 의뢰로 오랜만에 나노포어 시퀀싱 데이터를 매만지게 되었다. 나는 MinION Mk1B와 Mk1C에서 만들어진 데이터를 다루어 보았을 뿐이다. 그것도 약 3년 전이 마지막이었다. 이번에 부탁받은 8건의 데이터(박테리오파지)는 기록을 참조해 보니 PromethION에서 나온 것이었다. 

수년 전의 경험에 의하면 FAST5 raw data를 GPU가 달린 컴퓨터에서 정확하게 basecalling하는 일이 골칫거리였다. CPU로 실시하면 정확성도 떨어지고 너무 느린데다가, GPU가 장착된 컴퓨터는 연구실에 흔하지 않았기 때문이다. 지금 받은 raw data는 POP5라는 생소한 것이었다. 검색을 해 보니 나노포어 raw data의 새로운 표준인 것 같다. 

POD5 is a file format for storing nanopore sequencing data inan easily accessible way.

전달받은 데이터 뭉치에는 Dorado를 이용하여 어댑터를 제거하고 quality trimming을 실시한 FASTQ 파일이 함께 들어 있었다. 다행스럽게도 정확하게 basecalling이 이루어진 FASTQ 파일을 얻기 위해 별도의 전처리를 할 필요가 없는 셈이다. Flye로 조립을 실시한 뒤 결과를 살펴 보았다. 실은 Canu를 쓸까 생각하였다가 챗GPT에게 어떻게 하면 좋겠냐고 물어 본 뒤에 Flye를 택한 것이다. 다음은 구글이 생성한 AI 기반의 답이다.

Canu produces highly accurate, but often fragmented assemblies with long runtimes, while Flye is faster, generates more contiguous (though potentially less accurate) assemblies, and is better for metagenomic applications. Canu is a mature assembler but has reached end-of-life, with Flye being the recommended choice for newer projects. 

총 8개의 샘플 중 2개는 너무 많은 contig가 나왔다. 이걸 어떻게 한다? Flye의 로그 파일을 챗GPT에게 입력한 뒤 개선책을 제시해 보라고 하였다. 이를 여기에 싣는다.

----------

원인 압축 정리부터 할게요. 로그에 답이 다 있습니다.

왜 실패했나 (로그로 짚기)

  1. 커버리지가 지나치게 높음 → 과도한 길이 컷오프

  • Estimated coverage: 4071× (입력 genome-size=200k 기준).

  • Flye가 “Using longest 150× reads” 전략으로 바뀌면서, Min read length cutoff = 79,477 bp 가 잡혔습니다.

  • 그런데 원시 리드 분포는 N50 = 39,981 bp. 즉, 절반 이상 리드가 컷오프에 의해 버려짐(79.5 kb 이상 초장리드만 남음).
    → 소수의 아주 긴 리드만 남고, 지역적·구간별 균형이 무너지면 disjointig 시드(최소 4리드) 를 만들기 어려워집니다.
    (로그: min_reads_in_disjointig=4, Min read length cutoff: 79477Assembled 0 disjointigs)

  1. --genome-size 추정치가 부정확

  • 경고 그대로: “Expected read coverage is 4071, … genome size was entered correctly?

  • T7 파지는 실제 길이가 ~40 kb 수준입니다. 여기에 200k 를 넣으면 Flye의 커버리지 추정과 리드 서브샘플링 로직이 비정상적으로 동작합니다(쓸데없이 긴 컷오프, 과도한 150× 추림 대상).
    → 작은 바이러스/파지에서는 genome-size를 현실값으로 정확히 주는 게 매우 중요합니다.

  1. (부차) --min-overlap 1000의 경직성

  • HQ 리드라 1 kb 오버랩도 가능하지만, 파지처럼 작은 게놈에서는 500 bp 정도로 낮추면 씨앗 그래프가 더 쉽게 잡히는 경우가 많습니다.

  • 특히 79 kb 이상 초장리드만 남은 상태에서는, 내부 품질·키트 트리밍 상태에 따라 오버랩 탐색이 더 예민해질 수 있습니다.

  1. (부차) 오차율·혼입 신호

  • 로그상 median overlap divergence ≈ 3.17%. Dorado SUP(HQ)라면 보통 1–2%대가 흔한데, 샘플/트리밍/디멀티플렉싱 상태에 따라 3%대도 나올 수 있습니다.

  • 다만 핵심 실패 원인은 위 1)–2)로 설명이 충분합니다.

----------

답변의 제2부에서는 "정확한 genome size, 과한 필터 해제, 기본값 긴뢰"에 입각한 새로운 flye 명령어를 제시하였다.

뒤통수를 한대 맞은 느낌이 들었다. 사실 수십 년 넘게 genome assembly를 해 왔지만 프로그램이 뱉어내는 log 파일을 읽어보면서까지 문제점을 파악하려고 애쓴 적은 별로 없기 때문이다. 연구자 한 사람의 경험이나 그가 속한 커뮤니티에서 다루어지는 지성의 범위를 훨씬 뛰어넘는 세계를 넘나드는 챗GPT를 이길 수가 없다. 랩 미팅에서 '챗GPT에서는 뭐라고 하는데? 왜 따라서 하지 않았어?'라는 분위기가 조성된다면 그것은 더 이상 토론의 장이 아니다. 물론 기밀을 유지해야 하는 민간 연구소에서는 벌어지기 어려운 광경이겠지만.

지금까지 인류가 쌓은 경험(디지털화한 것에 국한되지만 이제 대부분의 지식은 다 컴퓨터 어딘가에 들어 있음)을 순식간에 '세 줄 요약' 형식으로 받아 먹을 수 있게 되었으니 효율이라는 측면에서는 이보다 더 좋을 수는 없다. 그러나 기술은 경험-직접적인 체험으로서-의 종말을 부채질한다. 최근 읽은 크리스텐 로젠의 책 『경험의 멸종』(원제: The Extingtion of Experience)과 같은 상황을 나도 이렇게 겪게 되다니.


(책 소개 중에서) 책을 읽지 않고 기기에게 요약해 달라고 하는 일은 독서의 종말을, 문서 작성을 인공지능에게 맡기는 일은 생각의 종말을, 지시어만을 입력해 그림을 얻는 일은 창작의 종말을 앞당길 수 있다. 우리가 인간의 영역이라고 불렀던 모든 경험을 기술에 맡기게 된다면 우리는 인간을 어떻게 정의해야 할까?

인공지능은 때때로, 새로운 경험을 세상과 나누려는 자연스러운 욕구를 위축시키는 부작용을 낳는다. 마치 인터넷을 처음 만난 사람처럼 신기한 소식을 접하면 누구나 그것을 공유하고 싶어 한다. 그러나 요즘의 AI 서비스는 일종의 ‘경험의 블랙홀’처럼 작동한다. 챗GPT와 대화를 통해 새로운 사실을 알게 되었더라도, 그것이 결국 이미 축적된 지식을 종합해 산출된 결론임을 깨닫는 순간, 내가 방금 ‘배운 것’을 다시 인터넷에 올리고 싶은 마음이 사그라들기 쉽다. 엄밀히 말하면 타인의 경험을 활용하고 있으면서(챗GPT를 통해), 그 대가로 무엇인가를 되돌려 놓는 선순환이 끊기는 셈이다. ‘어차피 누가 질문하든 비슷한 답을 금방 얻을 텐데…’라는 생각이, 공유의 동력을 조금씩 갉아먹는다.

요즘 답보상태에 이른 Nano Ardule MIDI Controller 역시 챗GPT와 뒤엉킨 나의 경험에 대해 섣부른 결론을 내리기 어렵게 하고 있다. 거의 백지 상태나 다름이 없었던 C++ 지식으로도 목표 기능의 70% 정도를 달성하게 된 것은 매우 놀라운 일이다. 그런데 코드 분량이 어느 정도 길어지니까 1의 기능을 추가해 달라고 하면 0.7 정도의 예상치 못한 오류를 포함한 답을  제시하는 것 아닌가. 이 오류를 해결해 달라고 요청하면 또 새로운 문제가 생기고... 계속 개발 과정이 산으로 가는 것 같아서 최근에는 이 무의미한 사이클을 너댓 차례 경험하다가 일단은 중단한 상태이다. 

일단 노트북 컴퓨터 뚜껑을 닫고 바람을 쐬러 나가는 것이 좋겠다.



댓글 없음: