주어진 Open-Domain 질문에 대해 정확한 답변을 생성하는 모델을 개발하는 프로젝트입니다.
네이버 커넥트재단 부스트캠프 AI Tech 7기 NLP 과정의 일환으로 3주간 진행했습니다. (진행기간: 2024.10.02 ~ 2024.10.24)
- 주제: 미리 구축된 Knowledge Resource를 기반으로 2단계(2-Stage)의 ODQA 모델을 설계하여, Retrieval 단계에서 적합한 문서를 찾아내고, Reader 단계에서 답변을 생성합니다.
- 평가기준: Exact Match (EM), F1-Score
- Wrap-Up Report
최종 리더보드에서 EM(Exact Match) 점수 66.11% 달성 (Baseline 33.06% 대비 33.05%p 개선)
- 데이터
- Retrieval model
- Reader Model
- Extractive: BERT, RoBERTa, KoELECTRA fine-tuning
- Abstractive: GPT-4o Prompt Tuning, Llama-3.1-8B Q-LoRA Instruction Tuning
- Ensemble: Hard voting
- Hardware: Tesla V100 GPU (4 servers)
- Software: Linux, Git, Python (3.10.15 버전)
- 협업 도구:
- Github: 진행 상황 추적 및 코드 버전 관리
- Confluence: 프로젝트 단위 작업 결과 기록
아래의 실행 방법은 최상위 폴더 기준입니다. 구체적인 내용은 ODQA README를 참조하세요.
# 필수 라이브러리 설치
pip install -r requirements.txt
# konlpy.tag의 Mecab() 토크나이저 설치
bash install_mecab.sh
sparse_train.sh
스크립트 실행
bash sparse_train.sh
- Extractive 모델 학습은
train_mrc.sh
스크립트를 사용하며,--type=ext
옵션을 포함해야 합니다. - 자세한 설정 방법은 Extractive README를 참조하세요.
bash train_mrc.sh --type=ext --do_eval
- ODQA 모델을 테스트하려면
inference.sh
스크립트를 실행합니다. - 평가 모드로 실행하려면
--do_eval
옵션을 추가하고, 예측 결과 저장 시--do_predict
옵션을 사용합니다. - 자세한 설정 방법은 ODQA README를 참조하세요.
# 평가 모드
bash inference.sh --qa ext --retrieval sparse --do_eval
# 예측 결과 저장
bash inference.sh --qa ext --retrieval sparse --do_predict
level2-mrc-nlp-06
├── Data
│ ├── EDA # EDA 수행 노트북 파일
│ ├── preprocessing # 데이터 전처리
│ └── augmentation # 데이터 증강
├── retrieval # Retrieve 모델 관련 코드
│ ├── sparse
│ ├── dense
│ └── hybrid
├── reader # Reader 모델 관련 코드
│ ├── abstractive
│ ├── extractive
│ └── utils
├── ODQA # ODQA 추론 코드
├── ODQA2 # Retrieval과 Reader에 서로 다른 버전의 데이터셋 적용 가능 ODQA 추론 코드
├── sparse_train.sh # Sparse Retrieval 임베딩 생성을 위한 실행 스크립트
├── train_mrc.sh # Reader 모델 fine-tuning을 위한 실행 스크립트
├── inference.sh # 전체 ODQA 수행을 통해 평가 및 예측을 위한 실행 스크립트
├── README.md
├── assets
└── requirements.txt