정보검색(IR) 분야에서 오래된 문제 중 하나가 어휘 불일치 문제다 — 사용자가 찾고 싶은 개념과 문서에 쓰인 실제 단어가 다를 때 검색에 실패하는 현상.
ex) "environment"가 없는데 "space"로 존재, "evolution"이 U로 분류. 이 현상이 Vocabulary Mismatch 문제의 예시이며, present-only 추출 방식은 문제를 근본적으로 해결하지 못하고 absent Keyphrase 생성 능력이 있어야 해결 가능하다.
실험적 근거: B0(TF-IDF)·B1(KeyBERT)·B2(KeyBERT+MMR) 등 순수 추출 기반 baseline의
recall_U(unseen/absent 회수율)는 각각 0.0165 / 0.0026 / 0.0033으로 사실상 0에 가깝다. 구조적으로 absent를 생성할 수 없는 방식이라는 1-3의 주장이 정량적으로 확인된다.
| 사용자 | 겪는 문제 | 프로젝트가 해결하는 방식 |
|---|---|---|
| 논문 검색/추천 서비스 이용자 | 논문을 다 읽지 않고 핵심 개념만 빠르게 파악 | 랭킹된 top-k 키프레이즈로 "이 논문이 뭘 다루는지"를 몇 단어로 즉시 파악 가능 |
| 일반 사용자 | 긴 요약문 대신 한눈에 들어오는 태그 형태 정보를 원함 | 요약보다 압축률이 높은 "개념 태그" 형태로 정보 제공 |
| RAG 파이프라인 설계자 | dense 임베딩만으로는 어휘 불일치로 인한 검색 실패(recall 손실) 발생 | present keyphrase → sparse 인덱스(BM25), absent keyphrase → query/document expansion으로 hybrid retrieval 구성 |
입력 문서
본 문제를 만족하려면 아래 세 가지 하위 문제가 동시에 풀려야 한다.
1. 표현 문제 —
2. 우선순위 문제 —
3. 중복/다양성 문제 —
- 기존 연구들은 이 문제, 혹은 유사 문제에 대하여 어떻게 접근하였는가? (논문 리서치, 리뷰는 생략)
| ID | 모델 | 학습 여부 | 계열 |
|---|---|---|---|
| B0 | TF-IDF | 무학습 | Statistical extractive |
| B1 | KeyBERT | 무학습 | Embedding-based extractive |
| B2 | KeyBERT + MMR | 무학습 | Embedding-based extractive + diversity |
| B3 | BART-base (beam5, fine-tuned) | 지도학습 | Seq2Seq generative |
| B4 | KeyBART (beam5, fine-tuned) | 지도학습 | Seq2Seq generative (keyphrase 특화 사전학습) |
무학습 계열(B0, B1, B2)과 지도학습 seq2seq 계열(B3, B4)을 모두 baseline에 포함시켜, "학습 없이 어디까지 가능한가"와 "학습 시 얼마나 향상되는가"를 동시에 비교축으로 확보했다.
Keyphrase 추출 기준, 중요도 랭킹의 의미를 다음 세 관점에서 논의하고, 본 프로젝트는 ③을 채택한다.
| 관점 | 내용 | 채택 여부 |
|---|---|---|
| ① 문서를 잘 대표하는가 | 저자의 편집 의도(요약 목적)에 가까운 관점 | 참고 |
| ② 검색량을 늘리기 위한 의도가 있는가 | KP20K gold label에 "AI", "NLP" 같은 광범위 상위어가 섞여 있을 가능성 → 저자 편향 가설 (1-1 참고) | 데이터 한계로 인지, 배제 |
| ③ 검색 인덱스로서 기능하는가 (RAG 성능 향상) | present → sparse 인덱스 재료, absent → query/document expansion 재료로서의 실용적 가치 | 채택 — 본 프로젝트의 최종 목적 |
| 항목 | 내용 |
|---|---|
| 원 논문 / PRMU 출처 | Meng et al. 2017 (ACL) / Boudin & Gallina 2021 (NAACL) |
| 도메인·언어 | 컴퓨터공학(CS) 논문 abstract+title, 영어 |
| 총 문서 수 | 570,809건 (약 721MB) |
| Feature | id, title, abstract, keyphrases(list), prmu(list) |
| Split | 문서 수 | 평균 keyphrase 수 | Present | Reordered | Mixed | Unseen |
|---|---|---|---|---|---|---|
| Train | 530,809 | 5.29 | 58.19% | 10.93% | 17.36% | 13.52% |
| Test | 20,000 | 5.28 | 58.40% | 10.84% | 17.20% | 13.56% |
| Validation | 20,000 | 5.27 | 58.20% | 10.94% | 17.26% | 13.61% |
- Feature: title, abstract
- Target: keyphrase, PRMU 라벨
- PRMU는 gold keyphrase를 문서와의 관계에 따라 4범주로 나눈 태그다:
- P (Present): 원문에 형태소/어순 그대로 등장
- R (Reordered): 구성 단어는 원문에 있으나 어순이 다름
- M (Mixed): 원문 단어 일부 + 원문에 없는 단어가 혼합
- U (Unseen/absent): 원문에 전혀 등장하지 않는 표현
- P/R은 추출(extractive) 계열이 담당 가능, M/U는 생성(generative) 계열이 필요 — hybrid 구조 설계의 직접적 근거가 되는 라벨
- PRMU는 gold keyphrase를 문서와의 관계에 따라 4범주로 나눈 태그다:
- KP20K 전체 학습셋(530,809건) 규모를 감안, 학습 단계에서는 전량 사용하되 평가는 20,000건 sample(
eval_docs=20000)로 고정하여 baseline/proposed 간 공정 비교가 가능하도록 통제 - 정규화: 소문자화, Porter stemming (평가 시 매칭 기준과 통일)
- 중복 제거(dedup): 각 keyphrase를 임베딩 벡터로 변환 후 일정 표준편차 이내를 동일 의미로 간주해 병합 (라이브러리 기반)
- H1. present를 추출하고 absent를 생성하는 hybrid 모델이 성능 면에서 우수할 것이다.
- H2. 랭킹화는 pairwise 전략을 도입한다.
- H3. 도메인 특화 encoder(SciBERT)를 hybrid 구조의 present 추출기로 사용하면, 일반 encoder 기반 추출기보다 present 추출 정확도와 최종 F1/MAP/nDCG가 모두 향상될 것이다.
- 근거: KP20K가 CS 논문 abstract 도메인에 특화되어 있어, 도메인 특화 사전학습(SciBERT)이 일반 encoder 대비 어휘·개념 표현에서 우위를 가질 것으로 예상
| 실험 | 내용 | 대응 run_id |
|---|---|---|
| E1. Baseline 재현 및 성능 측정 | 무학습(TF-IDF/KeyBERT/KeyBERT+MMR) + 지도학습(BART/KeyBART) 5종 재현 | B0, B1, B2, B3, B4 |
| E2. Proposed 학습 및 측정, candidate 생성(P/R, M/U) | Hybrid fusion 구조로 present(P/R)·absent(M/U) 동시 생성 | P1, P2 |
| E3. 랭킹화 및 중복 제거 기법 비교 | pairwise 랭킹 손실 도입, PRMU 조건부 실험, encoder 교체(SciBERT) | P5, P6, P7, P7+MMR |
| E4. 정성 분석 | 상위 예측 keyphrase 정성 비교, LLM(Qwen) 채점표 활용 | (전체 run 대상 사후 분석) |
- 하이브리드 모델(present 추출 + absent 생성) vs. one-stop 모델(인코더-디코더 기반) → P1(hybrid fusion, F1@10=0.1842)이 B3(BART one-stop, F1@10=0.1711)를 상회했고, absent_R@10은 P1(0.0323)이 B3(0.0132) 대비 약 2.4배 — hybrid 구조가 H1을 지지
- 랭킹화 전략: pairwise vs MMR → pairwise 계열(P5, P6)이 F1@10에서 MMR 계열(P2)과 유사하거나 근소 우위(P5 F1@10=0.2479 vs P2 0.2105)를 보였고, 특히 absent_R@10에서 pairwise가 뚜렷이 높음(P5=0.0460, P6=0.0494 vs P2=0.0219) — 순위 학습이 absent 후보의 우선순위 조정에 특히 효과적임을 시사
- Encoder 교체(SciBERT) 효과 → P7(SciBERT hybrid)이 전체 run 중 F1@10(0.2621), MAP@10(0.2659), nDCG@10(0.3975) 최고치 기록 — H3 지지
| 구분 | 지표 | 비고 |
|---|---|---|
| Extractive (present) | Precision / Recall / F1 (@5, @10, @M) | 표준 stemmed exact-match |
| Abstractive (absent) | MAP@10, nDCG@10, absent_R@5/@10 | 순위 품질 + absent 회수율 별도 측정 |
| 다양성 | dup_ratio | 중복 제거 효과 정량화 |
| 생성량 | avg_preds_per_doc | 모델별 평균 예측 개수 — precision/recall 트레이드오프 해석 시 참조 |
| 일자 | 수행 내용 | 산출물 |
|---|---|---|
| 7/9 | 팀 구성 및 주제 후보 선택 | Keyphrase Extraction 선정 |
| 7/10 | EDA, 모델 전략, 후보 모델 비교 실험 | Baseline 노트북 |
| 7/13 | 랭킹화 전략, 평가지표 선정 | 1차 모델(P1, P2), 예측값 csv |
| 7/14 | pairwise 랭킹 손실 실험(P5, P6), PRMU 조건부 실험, SciBERT encoder 교체(P7), KeyBART 앙상블 시도 | 2차 모델(P5~P7), final_all_systems 평가지표 리스트 |
| 7/15 | 전체 run 비교 분석, MVP(P7) 결정, 멘토링 피드백 반영 | 리더보드 확정, MVP 선정 근거 문서 |
| 7/16 | 결과 정리, 발표자료 작성 | 시연 영상, PPT |
| 7/20 | 발표 진행 | 최종 발표 |
| rank | run_id | 계열 | F1@5 | F1@10 | F1@M | present_F1@5 | absent_R@10 | MAP@10 | nDCG@10 | dup_ratio |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | P7_scibert_hybrid_full | Hybrid+SciBERT | 0.2850 | 0.2621 | 0.2890 | 0.3619 | 0.0504 | 0.2659 | 0.3975 | 0.0 |
| 2 | P7_scibert_hybrid_mmr_full | Hybrid+SciBERT+MMR | 0.2695 | 0.2532 | 0.2762 | 0.3418 | 0.0481 | 0.2569 | 0.3844 | 0.0 |
| 3 | P5_pairwise_full | Hybrid+Pairwise | 0.2388 | 0.2479 | 0.2360 | 0.3109 | 0.0460 | 0.2133 | 0.3396 | 0.0 |
| 4 | P6_pairwise_prmu_full | Hybrid+Pairwise+PRMU | 0.2267 | 0.2443 | 0.2228 | 0.2980 | 0.0494 | 0.1994 | 0.3246 | 0.0 |
| 5 | P2_hybrid_fusion_mmr_full | Hybrid+MMR | 0.2560 | 0.2105 | 0.2662 | 0.3420 | 0.0219 | 0.2312 | 0.3429 | 0.0 |
| 6 | P1_hybrid_fusion_full | Hybrid(raw fusion) | 0.2070 | 0.1842 | 0.2201 | 0.3137 | 0.0323 | 0.1876 | 0.3012 | 0.0 |
| 7 | B3_bart_beam5_full | Baseline(BART) | 0.2445 | 0.1711 | 0.2653 | 0.3039 | 0.0132 | 0.2144 | 0.3088 | 0.0 |
| 8 | B4_keybart_beam5_full | Baseline(KeyBART) | 0.2377 | 0.1672 | 0.2632 | 0.2965 | 0.0097 | 0.2186 | 0.3111 | 0.0 |
| — | B0_tfidf_full | Baseline(무학습) | 0.1261* | 0.1142 | 0.1275 | 0.1734 | — | 0.0994 | 0.1770 | 0.0231 |
| — | B1_keybert_full | Baseline(무학습) | 0.0502* | 0.0601 | 0.0484 | 0.1369 | — | 0.0340 | 0.0767 | 0.0240 |
| — | B2_keybert_mmr_full | Baseline(무학습) | 0.0285* | 0.0270 | 0.0297 | 0.0590 | — | 0.0215 | 0.0421 | 0.0002 |
* B0~B2의 F1@5는 results_full_dataset 산출값 (F1 컬럼, avg_preds_per_doc≈20 조건에서 계산)
| 지표 | B4 (Baseline 최고) | P7 (Proposed 최고) | 개선폭 |
|---|---|---|---|
| F1@10 | 0.1672 | 0.2621 | +56.8% |
| MAP@10 | 0.2186 | 0.2659 | +21.6% |
| nDCG@10 | 0.3111 | 0.3975 | +27.8% |
| absent_R@10 | 0.0097 | 0.0504 | 약 5.2배 |
| dup_ratio | 0.0 | 0.0 | 유지 |
- H1 (hybrid 우위) 지지: P1~P7 전 계열이 F1@10 기준으로 B3/B4를 상회 (P1 최저 0.1842도 B3 0.1711보다 높음)
- H2 (pairwise 랭킹) 지지: absent_R@10에서 pairwise 계열(P5·P6)이 MMR 계열(P2) 대비 2배 이상 — 순위 학습이 특히 absent 후보 우선순위에 기여
- H3 (SciBERT encoder) 지지: P7이 전 지표에서 최고치 — 도메인 특화 encoder 가설 확인
- 주의: dup_ratio가 대부분 run에서 0.0으로 수렴 — 후처리 dedup이 효과적으로 작동했으나, 동시에 이 지표만으로는 모델 간 다양성 차이를 변별하기 어려움 → 정성 분석(E4)으로 보완 필요
- MMR 적용 효과가 혼재: P7 대비 P7+MMR은 모든 지표에서 소폭 하락 (F1@10 0.2621→0.2532) — dedup이 이미 충분히 이루어진 상태에서 MMR의 추가 다양성 페널티가 오히려 relevant한 후보를 밀어내는 것으로 추정, 후속 정성 분석 필요
6-4의 Open Item(LLM 앙상블 채점표)을 구현·수행한 결과다. 앙상블은 **gold-F1을 두고 겨루는 참가 모델이 아니라, 다른 모델의 랭킹을 채점하는 채점표(정답 기준)**로 쓴다.
채점표 구성 — 4개 리랭커의 RRF 합의 (모두 P7과 동일 레시피, 인코더만 상이):
| 멤버 | 모델 (HuggingFace) | 혈통 |
|---|---|---|
| P8 | allenai/specter2_base |
과학 인용 (110M) |
| P10 | Alibaba-NLP/gte-reranker-modernbert-base |
리랭킹 전용 (149M) |
| P11 | Qwen/Qwen3-Reranker-0.6B |
LLM 디코더 (596M) |
| P12 | google/embeddinggemma-300m |
Gemma 임베딩 (303M) |
(팀 지정 5개 중 DeBERTa-v3는 bf16 발산으로 탈락 → 4개. P7은 채점 대상이라 채점표에서 제외 = 순환 방지.)
채점 결과 — 앙상블 채점표 랭킹을 정답으로 P7 vs KeyBART 채점:
| 지표 (채점표 기준) | P7 | KeyBART | P7 우세 문서 | Wilcoxon p |
|---|---|---|---|---|
| nDCG@10 | 0.898 | 0.784 | 85.2% | ≈0 |
| RBO@10 | 0.452 | 0.325 | 85.1% | ≈0 |
해석: P7 단일 모델이 4-모델 앙상블의 합의 랭킹을 사실상 재현한다(문서 85%에서 베이스라인 압도). 즉 P7은 앙상블의 배포용 단일 대리자 — 4모델 추론 없이 P7 하나로 채점표 품질에 근접한다. §6-3의 H1(hybrid)·H3(도메인 encoder) 지지에 더해, 7절 타당성 검증(gold 편향 우회)의 정량 근거가 된다.
- 상세:
docs/ENSEMBLE_REFERENCE_COMPARISON.md· 노트북notebooks/05_ensemble_reference_comparison.ipynb - 채점표 재료(인코더 토너먼트 P8~P15 선정 기록):
docs/ENCODER_TOURNAMENT_STATUS.md
| 찬성 논리 | 반박 논리 |
|---|---|
| 논문 저자 본인이 라벨링 → 논문을 가장 잘 아는 사람의 판단 | 인간 편향 존재 가능 — 검색량을 늘리려는 의도로 "AI", "NLP" 같은 과도하게 큰 범주어를 포함했을 가능성 |
정량적 검증 방안: LLM 앙상블 채점표 정성적 검증 방안: LLM 출력 10개 vs 본 모델(P7) 출력 10개 직접 비교
6-1의 실험 결과 자체도 간접적 타당성 근거가 된다 — gold label만을 정답으로 삼는 present_F1@5 지표에서조차 P7(0.3619)이 B3/B4(각 0.3039, 0.2965)를 상회한다는 것은, 단순히 "gold를 더 잘 외운" 결과가 아니라 구조적 개선(hybrid + domain encoder)의 효과로 해석할 수 있다.
본 계획서의 전 실험은 재현 가능한 코드로 구현돼 있다 (본 브랜치에 포함).
| 자산 | 위치 | 내용 |
|---|---|---|
| 모델 카탈로그 | MODEL_CATALOG.md |
모델 ↔ 코드 ↔ 산출물 ↔ 기법 완전 매핑 |
| 핵심 모듈 | src/ |
단일 평가기 src/metrics.py, 전처리·PRMU src/preprocessing.py 등 |
| 실행 스크립트 | scripts/ |
B0~B4, P1/P2, P5/P6, P7, 인코더 토너먼트, 채점표 앙상블 |
| 노트북 (출력 포함) | notebooks/ |
00 결과 · 01 데이터/평가 · 02 베이스라인 · 03 리랭커 · 04 토너먼트 · 05 채점표 |
| 결과·지표 | results/metrics/ |
리더보드 grand_comparison_all_models.csv, 원장 experiments.csv 등 |
| 문서별 예측 | results/predictions_per_document/ |
모델별 top-10 예측 + 정오 대조 (17종) |
| 상세 문서 | docs/ |
지표 정의·모델 설명·채점표 검증 등 (재현 개요: docs/IMPLEMENTATION_OVERVIEW.md) |
pip install -r requirements.txt # GPU 권장
python scripts/run_experiments.py --profile full # B0~B4, P1, P2
python scripts/pairwise_reranker.py --stage all # P5, P6
python scripts/scibert_hybrid_ranker.py # P7
python scripts/encoder_tournament.py --stage run # 채점표 재료 P8~P15
python scripts/team_spec_ensemble.py # 채점표(앙상블)참고: 구절별 상세 예측(
predictions_per_keyphrase, ~708MB)은 용량 문제로 본 팀 브랜치에서 제외했다 (문서별 예측 + 지표는 포함). 필요 시python scripts/organize_results.py로 재생성한다.
§2-1에서 **채택한 관점 ③(검색 인덱스로서 기능 = RAG 성능 향상)**과 §1-2의 RAG 파이프라인 설계자 persona를, 말이 아니라 동작하는 검색 시스템으로 구현·검증·배포한 결과다. 핵심은 §1-1의 어휘 불일치 문제를 P7이 생성한 absent 키프레이즈 = document expansion으로 극복하는 것 — 문서 본문에 없는 개념으로 질의해도 원 논문을 찾아가게 만든다.
코드·문서는
feature/rag-mvp브랜치의rag_mvp/에 있다 (구현 브랜치 위에 얹음). 개요rag_mvp/README.md· 아키텍처rag_mvp/ARCHITECTURE.md· 배포rag_mvp/DEPLOY.md.
React SPA ──REST──▶ FastAPI ──▶ Chroma 벡터DB + GPU 모델(bge·P7·KeyBART·Qwen)
(검색·카드·LLM답변) (/api/search,answer,ingest) (색인·검색·인용 답변)
- 색인: 문서(title+abstract) → KeyBERT/KeyBART 후보 → P7(SciBERT+aux) 재랭크 → bge-small 임베딩 → Chroma. 문서 하나를 본문 벡터 1 + 키프레이즈 벡터 N으로 색인 → 본문에 없는 개념(absent)까지 검색 대상이 된다.
- 검색: 질의 → bge 임베딩 → 코사인 → 혼합 랭킹
0.6·doc_sim + 0.4·kp_sim→ top-k → (선택) Qwen2.5-1.5B가 근거 인용([n]) 답변, 근거 없으면 "모른다"(환각 억제).
| 코퍼스 | 문서 | 벡터 | 용도 |
|---|---|---|---|
| arXiv cs.CL | 3,000 (2026 최신) | 33,000 | 사용자용 "최신 논문 검색" |
| KP20k test | 20,000 (gold 보유) | 220,000 | 논지 정량 평가 |
| mixed | 22,000 | 242,000 | 혼합 강건성 |
각 문서의 absent gold(U)를 질의로 삼아, plain(본문만) 색인 vs kp(키프레이즈 강화) 색인의
검색 성공률을 비교했다. absent 질의는 본문과 어휘가 겹치지 않으므로, kp 색인이 이기면 곧
document expansion이 어휘 불일치를 해결했다는 직접 증거다.
| 지표 | 2,000편 개선 | 20,000편 개선 |
|---|---|---|
| MRR | +3.7% | +14.7% |
| Hit@1 | +2.3% | +31.5% |
| Hit@10 | +7.7% | +6.2% |
결론: 코퍼스가 10배 커지자 키프레이즈 강화의 상대적 이득이 급증(Hit@1 +31.5%)했다.
문서가 많아질수록 본문만으로는 못 찾고 absent 키프레이즈(document expansion)가 결정적이 된다
→ §1-1 어휘 불일치·관점 ③이 실제 검색에서 성립함을 실증. mixed 22,000편에서도 동일 경향
(MRR +14.5% / Hit@1 +28.6%). 재현: python rag_mvp/eval_absent_fast.py.
- Docker(GPU, CUDA 12.8/cu128) 로 켰다/껐다:
docker compose up -d/stop. 벡터DB·모델캐시· 체크포인트는 볼륨 마운트라 이미지엔 코드만 포함(가볍게 뜸). - 공개 URL:
cloudflared tunnel --url http://localhost:8000→ 무료 임시 공개 주소 (PC 켜져 있는 동안). - 정성 시연: 프론트의
키프레이즈 강화vs본문만토글로 absent 색인 효과를 실시간 대비. - 시연 영상: https://www.youtube.com/watch?v=LiHxrePnw-g&feature=youtu.be