pro-nlp-mrc-nlp-05 created by GitHub Classroom
Jupyter Notebook
0
39 commits
updated Feb 22, 2026
일반 기계독해와 달리 질문에 대한 지문이 미리 주어지지 않기 때문에 Knowledge Resource(Wikipedia 문서 더미)에서
관련 문서를 직접 검색하는 Retriever, 문서를 읽고 답변을 생성하는 Reader가 필요한 태스크
목표: 한국어 MRC(Machine Reading Comprehension) 대회 환경에서 형태소 분석기(Kiwi), 개체명 인식(GLiNER), 지식 그래프(유의어 확장)를 결합한 Hybrid Retrieval과 추출 모델 및 생성 모델을 조합한 Compound AI Reader 시스템을 구축하여 정답 추출 성능(EM)을 극대화함.
한국어가 조사와 용언 활용이 다양한 교착어라는 언어적 특성을 반영하여, 형태소 기반 토큰화 및 개체명 인식을 활용한 정교한 문서 검색 전략을 설계했습니다. 대규모 사전학습 모델(LLM)의 문맥 이해력과 추출형 모델(Extractive QA)의 형식 안정성을 시스템적으로 결합한 Compound AI System을 통해 하드웨어 제약 내에서 최적의 성능을 도출하는 데 목적이 있습니다.
BGE-reranker-v2-m3로 재정렬하여 최종 컨텍스트를 선정합니다.
nlp-mrc-project/
│
├── llm/ # LLM 기반 추론 및 프롬프트 관리
│ ├── configs/ # LLM 실행을 위한 설정 파일
│ │ ├── config.yaml
│ │ └── prompts/ # 프롬프트 템플릿 모음
│ │ ├── initial_rules.yaml
│ │ └── system_prompt_template.txt
│ ├── data/
│ ├── experiments/
│ ├── textgrad/
│ │ ├── __init__.py
│ │ ├── metrics.py
│ │ ├── optimizer.py
│ │ ├── qa_engine.py
│ │ ├── train.py
│ │ └── utils.py
│ │
│ ├── llm_inference.py
│ ├── system_msg_written_by_human.txt
│ ├── requirements.txt
│ └── README.md
│
├── rag/ # Retrieval-Augmented Generation 모듈
│ ├── retriever/ # 다양한 리트리버 구현체
│ │ ├── kiwi_NER_synonym_hybrid.py # Kiwi + NER + 유의어 확장 하이브리드 리트리버
│ │ ├── kiwi_dense_hybrid.py # Kiwi + Dense 하이브리드
│ │ ├── NER_dense_hybrid.py # NER + Dense 하이브리드
│ │ ├── dense_rag_bge.py # BGE 임베딩 기반 Dense RAG
│ │ ├── dense_rag_qwen.py # Qwen 임베딩 기반 Dense RAG
│ │ ├── Reranker.py # Cross-Encoder 리랭커
│ │ └── convert_to_json.py # 검색 결과 JSON 변환 유틸
│ │
│ └── compress.py # 검색 문서 압축/전처리 로직
│
├── roberta/ # Roberta 기반 Encoder 모델
│ ├── util/
│ │ ├── calculate_recall.py # Recall 계산 스크립트
│ │ └── ensemble_nbest.ipynb # n-best 앙상블 실험
│ │
│ ├── arguments.py # 학습/추론 인자 정의
│ ├── train.py # Roberta 학습 스크립트
│ ├── inference.py # Roberta 추론 스크립트
│ ├── retrieval.py # Roberta 기반 retrieval
│ ├── precomputed_retrieval.py # 사전 계산된 retrieval 로딩
│ ├── trainer_qa.py # QA 전용 Trainer
│ └── utils_qa.py # QA 유틸 함수
│
├── ner/ # NER 관련
│ ├── Kiwi+Ner+유의어확장.ipynb # Kiwi + NER + 유의어 확장 실험
│ └── Ner+BM25.ipynb # NER + BM25 실험
├── .gitignore
└── README.md # 프로젝트 전체 설명
지식 그래프 기반 유의어 확장과 Sparse-Dense 결합을 통해 정답 문서 확보 능력을 극대화했습니다. 특히 단독 검색 방식 대비 약 3~4%p의 Recall 상승을 기록했습니다.
| 분석 단위 (k) | Recall 점수 (%) | 비고 |
|---|---|---|
| Top-5 | 97.50% | 최종 파이프라인 채택 기준 |
| Top-8 | 98.33% | |
| Top-10 | 98.75% |
Multi-role 피드백 루프를 통해 LLM의 정답 추출 성능(EM)을 유의미하게 향상시켰습니다.
| 모델 명칭 | 정답 추출 방식 | EM Score | F1 Score |
|---|---|---|---|
| Qwen3-Instruct | Base Prompt | 0.6542 | - |
| Qwen3-Instruct | Tuned (Proposed) | 0.7000 | 0.7860 |
| Gemma3-27b-it | Base Prompt | 0.6750 | 0.7632 |
| Gemma3-27b-it | Tuned (Proposed) | 0.7042 | 0.7767 |
전이 학습과 난이도별 데이터 학습(Curriculum Learning)을 통해 성능을 개선했습니다.
추출형 모델의 안정성과 생성형 모델의 추론 능력을 결합한 Compound AI System 앙상블 전략으로 최종 순위를 확보했습니다.
| 평가 구분 | EM Score | 최종 순위 |
|---|---|---|
| Public 리더보드 | 77.50% | 1위 |
| Private 리더보드 | 71.11% | 2위 |
pro-nlp-mrc-nlp-05 created by GitHub Classroom
Jupyter Notebook
0
39 commits
updated Feb 22, 2026
일반 기계독해와 달리 질문에 대한 지문이 미리 주어지지 않기 때문에 Knowledge Resource(Wikipedia 문서 더미)에서
관련 문서를 직접 검색하는 Retriever, 문서를 읽고 답변을 생성하는 Reader가 필요한 태스크
목표: 한국어 MRC(Machine Reading Comprehension) 대회 환경에서 형태소 분석기(Kiwi), 개체명 인식(GLiNER), 지식 그래프(유의어 확장)를 결합한 Hybrid Retrieval과 추출 모델 및 생성 모델을 조합한 Compound AI Reader 시스템을 구축하여 정답 추출 성능(EM)을 극대화함.
한국어가 조사와 용언 활용이 다양한 교착어라는 언어적 특성을 반영하여, 형태소 기반 토큰화 및 개체명 인식을 활용한 정교한 문서 검색 전략을 설계했습니다. 대규모 사전학습 모델(LLM)의 문맥 이해력과 추출형 모델(Extractive QA)의 형식 안정성을 시스템적으로 결합한 Compound AI System을 통해 하드웨어 제약 내에서 최적의 성능을 도출하는 데 목적이 있습니다.
BGE-reranker-v2-m3로 재정렬하여 최종 컨텍스트를 선정합니다.
nlp-mrc-project/
│
├── llm/ # LLM 기반 추론 및 프롬프트 관리
│ ├── configs/ # LLM 실행을 위한 설정 파일
│ │ ├── config.yaml
│ │ └── prompts/ # 프롬프트 템플릿 모음
│ │ ├── initial_rules.yaml
│ │ └── system_prompt_template.txt
│ ├── data/
│ ├── experiments/
│ ├── textgrad/
│ │ ├── __init__.py
│ │ ├── metrics.py
│ │ ├── optimizer.py
│ │ ├── qa_engine.py
│ │ ├── train.py
│ │ └── utils.py
│ │
│ ├── llm_inference.py
│ ├── system_msg_written_by_human.txt
│ ├── requirements.txt
│ └── README.md
│
├── rag/ # Retrieval-Augmented Generation 모듈
│ ├── retriever/ # 다양한 리트리버 구현체
│ │ ├── kiwi_NER_synonym_hybrid.py # Kiwi + NER + 유의어 확장 하이브리드 리트리버
│ │ ├── kiwi_dense_hybrid.py # Kiwi + Dense 하이브리드
│ │ ├── NER_dense_hybrid.py # NER + Dense 하이브리드
│ │ ├── dense_rag_bge.py # BGE 임베딩 기반 Dense RAG
│ │ ├── dense_rag_qwen.py # Qwen 임베딩 기반 Dense RAG
│ │ ├── Reranker.py # Cross-Encoder 리랭커
│ │ └── convert_to_json.py # 검색 결과 JSON 변환 유틸
│ │
│ └── compress.py # 검색 문서 압축/전처리 로직
│
├── roberta/ # Roberta 기반 Encoder 모델
│ ├── util/
│ │ ├── calculate_recall.py # Recall 계산 스크립트
│ │ └── ensemble_nbest.ipynb # n-best 앙상블 실험
│ │
│ ├── arguments.py # 학습/추론 인자 정의
│ ├── train.py # Roberta 학습 스크립트
│ ├── inference.py # Roberta 추론 스크립트
│ ├── retrieval.py # Roberta 기반 retrieval
│ ├── precomputed_retrieval.py # 사전 계산된 retrieval 로딩
│ ├── trainer_qa.py # QA 전용 Trainer
│ └── utils_qa.py # QA 유틸 함수
│
├── ner/ # NER 관련
│ ├── Kiwi+Ner+유의어확장.ipynb # Kiwi + NER + 유의어 확장 실험
│ └── Ner+BM25.ipynb # NER + BM25 실험
├── .gitignore
└── README.md # 프로젝트 전체 설명
지식 그래프 기반 유의어 확장과 Sparse-Dense 결합을 통해 정답 문서 확보 능력을 극대화했습니다. 특히 단독 검색 방식 대비 약 3~4%p의 Recall 상승을 기록했습니다.
| 분석 단위 (k) | Recall 점수 (%) | 비고 |
|---|---|---|
| Top-5 | 97.50% | 최종 파이프라인 채택 기준 |
| Top-8 | 98.33% | |
| Top-10 | 98.75% |
Multi-role 피드백 루프를 통해 LLM의 정답 추출 성능(EM)을 유의미하게 향상시켰습니다.
| 모델 명칭 | 정답 추출 방식 | EM Score | F1 Score |
|---|---|---|---|
| Qwen3-Instruct | Base Prompt | 0.6542 | - |
| Qwen3-Instruct | Tuned (Proposed) | 0.7000 | 0.7860 |
| Gemma3-27b-it | Base Prompt | 0.6750 | 0.7632 |
| Gemma3-27b-it | Tuned (Proposed) | 0.7042 | 0.7767 |
전이 학습과 난이도별 데이터 학습(Curriculum Learning)을 통해 성능을 개선했습니다.
추출형 모델의 안정성과 생성형 모델의 추론 능력을 결합한 Compound AI System 앙상블 전략으로 최종 순위를 확보했습니다.
| 평가 구분 | EM Score | 최종 순위 |
|---|---|---|
| Public 리더보드 | 77.50% | 1위 |
| Private 리더보드 | 71.11% | 2위 |