안녕하세요. 올해 누리미디어에 새로 합류하게 된 AI 엔지니어입니다.
DBpia는 약 500만 건의 학술 논문이 서로를 인용하며 연결되어 있는 거대한 학술 네트워크입니다.
한 편의 논문에 달린 참고문헌은 그저 끝 페이지의 목록이 아니라 한 논문에서 다른 논문으로 건너가는 '링크'이자, 한 연구가 얼마나 후속 연구에 영향을 주었는지를 보여주는 피인용수(이용수)의 단위입니다.
따라서 참고문헌이 정확히 추출되어야 사용자는 인용 표기 하나에서 곧장 원본 논문으로 이동할 수 있고, 저자는 자신의 연구가 어디서 얼마나 인용되었는지 확인할 수 있으며, 검색·추천 알고리즘 역시 신뢰할 수 있는 영향력 지표 위에서 작동할 수 있습니다.
이번 글에서는 그 핵심이 되는 참고문헌 데이터를 정확하게 추출하기 위해 VLM 기반 파이프라인을 어떻게 설계했는지와 그 과정에서 마주친 문제와 해법을 공유하려 합니다.
제목없음
제목없음
1. 왜 VLM 기반 추출이 필요한가?
다양한 참고문헌 예시
논문 한 편에는 보통 수십 건의 참고문헌이 달려 있습니다.
이 데이터는 단순한 부록이 아니라, 인용 그래프 구축, RAG 응답의 근거 제시, 의미 기반 검색 확장 등 AI 서비스의 핵심 자산이 됩니다.
문제는 추출이 결코 간단하지 않다는 점입니다.
학술 분야마다 인용 양식(APA, MLA, IEEE, 시카고 등)이 다름
텍스트 파싱이 불가한 이미지 PDF 존재
한국어/영어/한자 등 다국어 혼재
페이지 경계에 참고문헌이 걸쳐 있을 수 있으며, 투컬럼/원컬럼 등 논문 형식 혼재
저자 약력의 "주요 저서" 등 참고문헌이 아님에도 참고문헌의 형식을 띤 본문 존재
한 참고문헌마다 제목, 저자, DOI 등을 의미적으로 분리해야 함.
규칙 기반 파서나 일반 OCR로는 이런 다양성을 감당하기 어렵습니다.
이미지에 담긴 의미를 이해하고 맥락을 자연어로 추론할 수 있는 VLM(Vision Language Model)이 필요한 이유입니다.
본 글에서 VLM은 CLIP, BLIP 등의 전통적인 encoder 통합 VLM이 아닌, 이미지가 지원되는 Multimodal LLM으로 이해해 주시면 됩니다.
제목없음
제목없음
2. 파이프라인 큰 그림
제가 설계한 파이프라인은 크게 세 단계로 구성됩니다.
[1단계] 추출 대상 페이지 탐지→ 전체 페이지 스캔 → 참고문헌 포함 여부 분류 → 클러스터링 + reasoning 재검증
[2단계] 참고문헌 추출 → 페이지별 1차 추출 → 페이지 경계 재탐색
[3단계] 후처리 → 중복 제거 → 저자 복원 → DOI 보완
핵심 아이디어는 단순합니다.
"페이지 단위로 잘게 나눠 정확도를 확보하고, 후처리에서 잃은 정보를 되찾는다."
제목없음
제목없음
3. 페이지 경계에 걸친 참고문헌 살리기
가장 먼저 부딪힌 문제는 페이지 경계였습니다.
각 페이지를 독립적으로 처리하면 정확도는 높지만,
한 참고문헌이 두 페이지에 걸쳐 있을 때 앞 페이지엔 절반만, 뒷 페이지엔 시작점이 없어 탐지조차 못 하는 사례가 빈번했습니다.
[시도 1] 전 페이지 통합 입력
Multi-image Inference 기능으로 여러 페이지를 한 프롬프트에 입력하는 방식입니다.직관적이지만, 6페이지 문서 기준 입출력 토큰 합이 약 4만 4천 토큰까지 치솟았습니다.처리 속도는 약 5배 느려지고, 컨텍스트가 길어질수록 모델의 집중도가 분산되어 정확도까지 떨어졌습니다.
[시도 2] 슬라이딩 윈도우 (2페이지씩)
2페이지씩 묶어 슬라이딩하며 추출하고, 중복은 제목 유사도로 제거하는 방식입니다.
효율은 나아졌지만 두 가지 한계가 남았습니다.
컨텍스트가 길어짐에 따라 경계에 걸치지 않은 일반 참고문헌에 대해서도 미세한 오타 발생
2페이지씩 입력하였음에도 경계에 걸친 데이터 탐지 실패가 여전히 존재
[최종] 2단계 경계 재탐색 로직
결국 "모든 페이지를 합치는" 발상을 버리고, 경계의 불완전한 데이터만 타겟팅하는 방향으로 선회했습니다.
페이지별 독립 추출: 각 페이지를 단일 단위로 처리해 정확도 확보
경계 후보군 분리: 각 페이지의 마지막 참고문헌은 다음 페이지로 이어질 가능성이 높으므로 1차 결과에서 일시 제외
컨텍스트 기반 재추출: 제외된 항목 정보를 힌트로 주고 인접 두 페이지를 같이 입력해 완전한 형태로 복원
이 구조 덕분에 평소엔 단일 페이지 입력의 정확도를, 경계에서는 다중 페이지 입력의 문맥 연속성을 동시에 누릴 수 있게 됐습니다.
매칭 성능 비교
또한 잘린 페이지 뒷부분에 위치하여 기존 알고리즘이 놓치던 DOI를 효과적으로 잡아내면서 DOI 정확도가 약 1.4%p 향상되었습니다.
제목없음
제목없음
4. 이미지 + 파싱 텍스트의 하이브리드 입력
VLM에게 PDF 이미지만 보여주는 방식에는 또 다른 약점이 있었습니다.
논문 제목이나 저자명처럼 의미 단위가 있는 텍스트는 잘 인식하는데, DOI처럼 무작위 문자열은 오타가 자주 났습니다.
LLM의 학습된 방식에 따라, 문맥상 "있을 법한" 글자로 한두 자가 미끄러지는 식이었죠.
다행히, DBpia에 등재된 논문들 중, PDF에서 텍스트 파싱이 가능한 형태가 많았습니다. 그렇다면 이 정보를 버리고 있을 이유가 없습니다.
적용 방식
PDF 페이지 내 추출 가능한 모든 텍스트를 수집
이미지와 함께 모델에 입력하되, 이미지를 우선하고 파싱 텍스트는 보조로 활용하도록 프롬프트 작성
추출 텍스트 성능 평가 결과
DOI 정확도가 6.15%p 향상된 99.25%를 기록했습니다.
이미지에 이미 답이 있어도, 깔끔한 텍스트가 옆에 있으면 모델이 훨씬 안정적으로 답을 맞춘다는 점을 확인한 순간입니다.
제목없음
제목없음
5. 트러블슈팅: Repetition Loop
텍스트를 함께 입력하니 점수는 올랐지만 새로운 문제가 생겼습니다.
전체 데이터의 약 1%, 25건 정도에서 모델이 같은 문장을 끝없이 반복하는 Repetition Loop 현상이 발생한 것입니다.
LLM이 확률적으로 가장 높은 토큰을 고르다 같은 패턴에 갇히는 현상이지만, 일반적인 처방들이 본 task에는 모두 맞지 않았습니다.
더 큰 모델 사용: 당시 테스트 중이던 Qwen3-VL-32B 위는 235B 사이즈로 비현실적
temperature 상향: 정답이 정해진 task에 비합리적
Repetition penalty: DOI나 JSON 구조처럼 같은 토큰이 반복되어야 정상인 task
여러 시도 끝에 다음 사실을 발견했습니다.
"파싱 텍스트 입력을 빼면 repetition loop가 거의 사라진다."
다만 텍스트를 통째로 빼는 것은 DOI 정확도 6%p를 다시 포기하는 것이라 비합리적이었습니다.
DOI만 골라 입력하거나, 추출을 두 단계로 나누는 시도도 해봤지만 큰 효과가 없었습니다.
최종적으로는 평상시엔 텍스트를 함께 쓰되, repetition loop가 감지되면 그 페이지에 한해 이미지만으로 재시도하는 폴백 구조를 채택했습니다. 평균 성능은 그대로 유지하면서, 1%의 오류 케이스를 안정적으로 제거할 수 있었습니다.
제목없음
제목없음
6. 페이지 스캔 고도화
정확도와 별개로 Precision 관점에서 또 다른 부류의 오류가 보였습니다.
저자 약력의 "주요 저서" 목록
본문 표 안의 인용 리스트
페이지 하단 각주
이런 페이지들이 참고문헌으로 잘못 분류되어 추출되는 것이었습니다.
기존 로직은 "이 페이지에 참고문헌이 있는가?"만 묻고 끝났는데, 학술 문서 특유의 함정 페이지들이 그 질문을 통과해버리곤 했습니다.
클러스터링 + Reasoning 재검증페이지 분류 결과를 연속 페이지끼리 묶어 클러스터를 만들고 클러스터가 둘 이상일 때만 각 대표 페이지를 다시 한 번 모델에게 보여 reasoning 기반으로 재분류하도록 했습니다.
예시
이 로직 하나로 18건의 오추출 사례 중 17건을 해결할 수 있었습니다.
제목없음
제목없음
7. 후처리: 누락된 저자·DOI 복원
추출이 끝나도 학술 양식 특유의 빈자리가 남습니다.
7.1 반복선 저자 자동 복원
같은 저자의 연속 참고문헌은 두 번째부터 저자명을 ____ , ———— 같은 반복선으로 줄이는 관행이 있습니다. 그대로 두면 저자 정보가 비어버리죠.
author_dashed 플래그가 붙은 항목은 직전 참고문헌의 저자 정보와 함께 LLM에 다시 보내, 반복선이 1저자만 대체하는지 전체를 대체하는지까지 문맥으로 판단해 복원합니다.
7.2 Crossref DOI 보완
DOI가 누락된 항목은 추출된 제목으로 Crossref API를 조회하고, 반환 제목과의 SequenceMatcher 유사도가 0.98 이상일 때만 DOI를 채워 넣습니다.
낮은 유사도까지 받아들이면 잘못된 DOI를 넣을 위험이 있어 보수적인 임계값을 두었습니다.
제목없음
제목없음
8. 추론 최적화
주어진 PDF를 합리적인 시간 안에 처리하기 위해 추론 최적화를 진행했습니다.
8.1 Flash-Attn → Flashinfer
어텐션 백엔드를 추론 특화 라이브러리인 Flashinfer로 교체하였습니다.
8.2 KV-cache dtype FP8
LLM serving KV-cache의 dtype을 FP8로 낮춰, key-value cache의 공간을 추가로 확보했습니다.
거의 동일한 성능을 유지하며 약 33% 속도 향상을 얻었습니다.
8.3 N-gram Speculative Decoding
상대적으로 작은 draft 모델 또는 통계 기반(n-gram)으로 일정 토큰을 미리 추론하고, 본 모델은 이를 검증만 하는 방식입니다.
본 task는 입력 텍스트 안에 정답 단서(저자명, DOI, 연도 등)가 그대로 들어 있어 n-gram 승인율이 평균 60% 이상으로 매우 높았습니다.
N-gram Speculative Decoding을 도입하여, 추가로 약 33%의 속도 향상을 얻었습니다.
세 가지를 누적 적용하니, 동일 워크로드의 처리 시간이 절반 이하로 떨어졌습니다.
Qwen3-VL-32B-Instruct-FP8에서 Qwen3.5-27B-FP8로 전환했을 때, 정량 지표는 거의 동일했지만 한국어 띄어쓰기 오류와 오추출 사례가 줄었습니다. 동일한 파이프라인에서 모델만 바꿔 얻은 "무료 개선"이었습니다.
9.2 Qwen3.5 → Gemma 4
3월 말 공개된 Gemma 4로 다시 한 번 백본을 교체했습니다.
최종 성능 테스트 결과
정량 지표는 거의 동등하지만, 추론 시간이 약 1.84배 빨라졌습니다.
Gemma 4의 강점은 두 가지였습니다.
한국어 줄바꿈 띄어쓰기/붙여쓰기 처리에서 Qwen3.5보다 자연스러움
N-gram Speculative Decoding 호환 (Qwen3-VL은 호환되었으나, Qwen3.5는 vLLM 미호환)
9.3 함정: 이미지 PDF에서의 할루시네이션
모델 결정 직전, 발견하지 못할 뻔한 심각한 문제가 있었습니다.
테스트셋 2,425건 중 단 5건의 이미지 PDF에서, Gemma 4가 모든 참고문헌을 "추출은 했지만" DOI 정확도가 0.23~0.67로 무너지는 할루시네이션을 보였던 것입니다.
이미지 PDF 4건 한정 평가
비율로는 0.2%였지만, 정량 평균에 묻혀 발견을 놓칠 뻔한 케이스였습니다.
원인은 Gemma 4의 비전 토큰 기본값 max_soft_tokens = 280이 이미지 PDF에는 너무 적었던 것.
1120으로 상향하니 거짓말처럼 모든 지표가 1.0으로 회복되었습니다.
"정량 지표 평균만 보지 말고, 데이터 유형별로 슬라이스해서 확인해야 한다는 교훈을 다시 한 번 새기는 계기였습니다."
제목없음
제목없음
10. 사람의 검수가 닿아야 하는 곳
99.30%의 DOI 정확도. 만족스러운 숫자처럼 보이지만, 학술 데이터에서 0.7%는 결코 적은 양이 아닙니다.
500만 건 단위에서 바라보면 실제로 잘못된 인용이 수만 건 남아 있다는 뜻이고, 한 건의 잘못된 인용 정보가 사용자의 신뢰를 무너뜨리기엔 충분합니다.
그래서 자동 추출 결과 위에 사람의 눈이 한 번 더 닿는 Human-in-the-loop(HITL) 검수 도구를 별도로 구축했습니다.
모든 문서를 처음부터 다시 보는 것이 아니라, 의심스러운 문서만 자동으로 골라내어 검수자에게 띄워주는 구조입니다.
바이브 코딩으로 구현한 검수 도구 UI
10.1 의심 케이스 자동 탐지
전체 문서를 사람이 다시 보는 것은 비현실적이므로, 추출 결과의 메타 정보만으로 "조금이라도 이상한" 문서를 골라내는 세 가지 휴리스틱을 만들었습니다.
앞쪽 참고문헌: 참고문헌 섹션은 보통 논문 후반부에 위치합니다. 전체 페이지의 60% 이전에 추출된 참고문헌이 있다면 본문 표나 각주를 잘못 잡았을 가능성이 큼
페이지 불연속: 참고문헌은 보통 연속된 페이지에 등장합니다. 추출된 페이지가 띄엄띄엄 떨어져 있다면 중간에 엉뚱한 페이지를 묶었을 가능성
index–order 불일치: 원본의 참고문헌 번호와 추출 순서가 10 이상 어긋나면 누락 또는 오추출 신호
세 가지 신호 중 하나라도 잡힌 문서만 검수 대상에 올라오기 때문에, 검수자는 전체의 일부에만 시간을 쓰면 됩니다.
10.2 검수 도구
검수 도구는 바이브 코딩으로 구현했습니다.
한 화면에 PDF 페이지 이미지와 그 페이지에서 추출된 참고문헌 목록이 나란히 뜨고, 검수자는 세 가지 버튼 중 하나를 누릅니다.
정상 추출: 그대로 통과
비정상 추출: 페이지 자체를 잘못 잡은 것 → 전부 제외
일부 비정상: 페이지는 맞지만 일부 ref만 잘못 추출됨 → 체크박스로 제외할 ref의 order만 선택
10.3 3단계 영속화: Pending → Commit → Apply
검수 결과는 곧장 데이터에 반영하지 않고, 세 단계를 거치도록 했습니다.
Pending: 검수자가 분류 버튼을 누르는 즉시 임시 저장. 실수로 잘못 누른 경우 손쉽게 취소 가능
Commit: "반영" 버튼을 눌렀을 때만 영속 분류로 머지
Apply: 별도의 적용 스크립트가 분류 결과를 실제 추출 결과에 반영
10.4 결과: 자동 + 수동의 협업
이 도구가 자리 잡으면서, 흐름이 세 단계의 협업으로 정리되었습니다.
VLM 파이프라인이 99% 이상의 자동 정확도를 만들고
휴리스틱이 의심 0.x% 케이스만 골라내고
사람이 그 부분만 빠르게 확인하고 정정하는
모델 정확도를 100%까지 끌어올리는 일은 사실상 불가능에 가깝지만,
100%에 가까운 신뢰성은 이런 식으로 쌓아 올릴 수 있다는 것을 확인한 작업이었습니다.
제목없음
제목없음
마치며
참고문헌 추출이라는 한 줄짜리 문제 정의 뒤에는, 생각보다 많은 고려 사항이 숨어 있었습니다.
페이지 경계 문제
이미지·텍스트의 하이브리드 입력
Repetition Loop 같은 LLM 특유의 함정
각주·약력 같은 도메인 특유의 함정
추론 최적화와 백본 모델 교체
사람의 검수까지 잇는 Human-in-the-loop 흐름
각 단계마다 한 번씩 막혔다 풀린 끝에,
정답셋 2,425건 기준 F1 0.9935, DOI 정확도 99.30%의 안정적인 추출 파이프라인이 자리 잡았습니다.
DBpia의 약 500만 건 논문 위에 쌓이는 인용 정보가 어떤 새로운 경험으로 돌아오게 될지, 기대해 주세요!