- Wrap-up Report : NLP_5조_ODQA_wrap-up_report.pdf
이름 | Github Profile | 역할 |
---|---|---|
공통 | EDA, git, baseline code debugging | |
강나경 | angieKang | ideas, title+context, ensemble |
김산 | mounKim | data augmentation, back translation |
김현지 | TB2715 | 환경설정, top-k 수정, back translation |
정민지 | minji2744 | dense passage retrieval, bm25, data 추가해서 훈련 |
최지연 | jeeyeon51 | top-k 수정, retriever doc score + reader score 방식 시도 |
본 프로젝트에서는 궁금한 것이 생겼을 때 구글링으로 답을 찾는 것과 유사한 시스템을 만들어보고자, Open Domain Question Answering(ODQA) 태스크를 수행했습니다.
QA는 질문에 대한 답을 내는 인공지능 모델을 만드는 연구 분야입니다. 여기에 지문이 주어지고 답을 찾는 것이 아니라, 사전에 구축해 둔 지식 데이터베이스에서 질문과 관련이 있는 문서를 찾고 답을 아웃풋하는 것이 ODQA 태스크입니다.
ODQA를 수행하기 위해서 retriever-reader 구조를 가지는 two-stage 모델 구조를 사용했습니다. retriever는 질문과 관련된 문서들을 찾아오는 단계이며, 다음으로는 찾아온 문서들을 읽고 질문에 대한 답을 찾거나 만드는 reader 단계입니다. 두 단계의 모델을 구성하고 훈련한 후 두 단계를 연결하고 통합하는 과정을 통해 태스크 수행이 가능합니다.
- Retriever
- Sparse retrieval: tf-idf, bm25
- Dense passage retrieval
- Passage: title + context
- Linking MRC and retrieval
- Doc score
- Reader
- klue/bert-base
- klue/roberta-large
id
: 질문의 고유 idquestion
: 질문answers
: 답변에 대한 정보. 하나의 질문에 하나의 답변만 존재함answer_start
: 답변의 시작 위치text
: 답변의 텍스트
context
: 답변이 포함된 문서title
: 문서의 제목document_id
: 문서의 고유 id
- EM: 55.8300
- F1: 66.5900
- EM: 50.0000
- F1: 61.3300
Confirmed that it runs on Ubuntu 18.04.5, Python 3.8, and pytorch 1.10.2
필요한 패키지들은 /code/install/install_requirements.sh
에서 확인하실 수 있습니다.
- retrieval.py : retreiver 모듈
- arguments.py : 실행되는 모든 argument가 dataclass의 형태로 저장됨
- trainer_qa.py : MRC 모델 학습시 필요한 trainer 제공
- utils_qa.py : 기타 유틸 함수 제공
- train.py : MRC, Retrieval 모델 학습 및 평가
- inference.py : ODQA 모델 평가
- 학습 방법
arguments에 대한 세팅은arguments.py
에서 진행합니다.
python train.py --output_dir ./models/train_dataset --do_train
- 평가 방법
- 훈련과 평가를 동시에 진행:
python train.py --output_dir ./models/train_dataset --do_train --do_eval
- MRC 모델의 평가:
python train.py --output_dir ./outputs/train_dataset --model_name_or_path ./models/train_dataset/ --do_eval
- 훈련과 평가를 동시에 진행:
- 추론 방법
python inference.py --output_dir ./outputs/test_dataset/ --dataset_name ../data/test_dataset/ --model_name_or_path ./models/train_dataset/ --do_predict