Ollama로 논문 요약 자동화 — 로컬 LLM의 가능성과 한계
바이오마커 DB 구축을 위해 Ollama + qwen3:30b로 논문 요약을 시도한 경험. 잘 되는 것과 안 되는 것, 그리고 BioAI Market에서 배운 환각 대응 교훈을 공유한다.
배경: 논문 100편의 정보를 정리해야 했다
BioAI Market의 바이오마커 DB를 구축하려면, 대량의 논문에서 바이오마커-질병 연관성, evidence level, 검체 유형 등의 정보를 추출해야 했다. PubMed에서 스크리닝한 논문이 100편 이상이었고, 이 중 20편은 전문을 정독해야 했다.
수동으로 하면 2주는 걸릴 작업이었다. Ollama + qwen3:30b로 자동화를 시도했다.
환경 설정
Ollama는 로컬에서 LLM을 실행할 수 있는 오픈소스 도구다. 설치부터 실행까지 5분이면 된다.
# macOS
brew install ollama
ollama serve # 백그라운드 서버 시작
# qwen3:30b 모델 다운로드 (약 18GB)
ollama pull qwen3:30b
# GPU 메모리 확인
# RTX 3090 24GB → qwen3:30b 구동 가능 (VRAM 약 20GB 사용)
qwen3:30b를 선택한 이유:
- 30B 파라미터로 요약 품질이 양호
- 24GB VRAM(RTX 3090)에서 구동 가능
- 한국어/영어 모두 지원
- 무료
잘 되는 것: 초록 요약
논문 초록을 넣고 구조화된 요약을 요청하면 결과가 괜찮았다:
ollama run qwen3:30b
프롬프트: 다음 논문 초록을 분석해서 (1) 연구 목적 (2) 방법론 (3) 주요 결과
(4) 한계점으로 구분하여 한국어로 요약해줘:
"Background: Blood-based biomarkers for Alzheimer's disease (AD) have emerged
as promising tools for early detection. We evaluated the diagnostic accuracy
of plasma p-tau217 compared to cerebrospinal fluid biomarkers and amyloid PET..."
응답:
(1) 연구 목적: 혈장 p-tau217의 알츠하이머 진단 정확도를 CSF 바이오마커 및
아밀로이드 PET과 비교 평가
(2) 방법론: 다기관 코호트 연구, 혈장 p-tau217 면역분석법 사용
(3) 주요 결과: 혈장 p-tau217이 아밀로이드 PET과 90% 이상의 일치율을 보임
(4) 한계점: 단일 면역분석 플랫폼 사용, 다양한 인종/민족 포함 부족
이 수준이면 초록 스크리닝에 충분히 활용할 수 있었다. 100편의 초록을 빠르게 분류하는 데 도움이 됐다.
키워드 추출도 좋았다
프롬프트: 다음 초록에서 핵심 키워드 5개를 추출해줘:
응답: p-tau217, Alzheimer, blood biomarker, amyloid PET, diagnostic accuracy
정확하고 빠르다. 논문 분류에 유용했다.
안 되는 것: 수치 추출
문제는 구체적인 수치를 추출할 때 나타났다:
프롬프트: 이 논문에서 sensitivity와 specificity 수치를 추출해줘.
응답: sensitivity 94.3%, specificity 87.2%
실제: sensitivity 96.1%, specificity 91.4%
숫자를 날조했다. 소수점까지 자신 있게 써놓았지만 완전히 틀렸다. 이건 초록에 있는 수치를 정확히 읽지 못하는 게 아니라, 없는 수치를 그럴듯하게 만들어내는 환각이었다.
더 심각한 환각 사례들:
❌ 존재하지 않는 DOI 생성
프롬프트: 이 연구의 DOI를 알려줘
응답: doi:10.1038/s41591-023-02891-7 ← 이 DOI는 존재하지 않음
❌ 실험 결과 수치 변조
프롬프트: 이 논문의 sample size는?
응답: 총 1,247명의 참가자 ← 실제는 892명
❌ 저자 정보 환각
프롬프트: 이 논문의 교신저자는?
응답: Dr. Michael Johnson, Stanford University ← 완전히 틀린 정보
BioAI Market에서의 교훈: 리포트 생성의 환각 폭발
이 경험이 BioAI Market 개발에 직접적인 교훈을 줬다. 초기 버전에서는 프로테오믹스 분석 리포트를 LLM에게 생성시켰다. DE 분석 결과를 넣고 "리포트를 작성해줘"라고 했더니:
❌ LLM 생성 리포트 (환각)
"127개의 유의미한 DEP 중 78개(61.4%)가 알려진 바이오마커와 매칭되었습니다."
→ 실제: 53개(41.7%) 매칭
"상위 3개 therapeutic area: Oncology (34%), Neurology (28%), Cardiology (19%)"
→ 실제 비율과 전혀 다름
모든 수치가 환각이었다. LLM은 숫자를 생성할 때 정확도가 극도로 낮다.
해결책: 템플릿 기반 렌더링으로 전면 전환
// LLM이 수치를 생성하지 않고, 코드에서 계산한 값을 템플릿에 삽입
function renderReport(data: AnalysisResult): string {
return `## 분석 결과
- 전체 DEP: ${data.totalDEPs}개
- 매칭된 바이오마커: ${data.matchedDEPs}개 (${data.matchRate.toFixed(1)}%)
- 상위 therapeutic area: ${data.topAreas.map(a =>
`${a.name} (${a.percentage.toFixed(1)}%)`).join(', ')}`;
}
LLM은 정성적 해석(왜 이 결과가 중요한지, 다음 단계 제안 등)에만 사용하고, 모든 수치는 코드가 생성하도록 바꿨다.
로컬 LLM의 장점과 한계
장점
- 비용 ₩0 — API 호출 비용 없음. 100편 요약해도 전기세만 나감
- 프라이버시 — 미발표 논문 데이터가 외부 서버로 전송되지 않음
- 속도 — RTX 3090이면 30B 모델도 token/sec 약 20~30. 체감 속도 양호
- 오프라인 — 인터넷 없이도 작동
한계
- VRAM 부족 — 70B+ 모델은 24GB VRAM으로 부족. 양자화(Q4)하면 돌릴 수 있지만 품질 저하
- 최신 정보 없음 — 학습 데이터 이후의 논문은 모름. 2024년 이후 발표된 연구 결과를 알 수 없음
- 긴 context 처리 약함 — 논문 전문(8,000~15,000 단어)을 한 번에 넣으면 품질 급락
- 수치 정확도 낮음 — 위에서 본 것처럼, 구체적 숫자 처리에 약함
# VRAM 사용량 비교
# qwen3:8b → 약 6GB (가벼움, 품질 보통)
# qwen3:30b → 약 20GB (RTX 3090에서 구동 가능)
# qwen3:72b → 약 45GB (RTX 3090 불가, A100 필요)
실용적 활용 가이드
BioAI Market 개발과 논문 리서치 경험을 종합하면, 로컬 LLM의 실용적 활용 범위는 명확하다:
✅ 활용 추천:
- 초록 요약 및 구조화
- 키워드/카테고리 추출
- 간단한 Q&A (초록 범위 내)
- 텍스트 분류 (관련/비관련)
- 번역 (영→한, 전문 용어 포함)
❌ 사용 주의:
- 구체적 수치 추출 (p-value, sample size, sensitivity 등)
- 사실 확인 (DOI, 저자, 저널, 날짜)
- 논문 전문 요약 (8,000단어 이상)
- 리포트 생성 (수치 포함)
원칙: LLM은 요약/분류/변환에만, 수치/사실은 반드시 원문 확인.
Ollama 공식 GitHub에서 설치 방법과 지원 모델 목록을 확인할 수 있다.
💡 RTX 3090으로 Ollama를 구축하는 과정은 bric.pe.kr의 RTX 3090 Ollama 구축기에서 다루었다.
로컬 LLM과 RAG를 결합한 바이오 지식 검색 시스템은 이전 글: RAG 시스템으로 바이오 지식 검색 엔진 만들기에서 자세히 다루었다.