네이버 부스트캠프 AI Tech 4기 NLP 6조 HAPPY팀의 MRC task repository입니다.
- 프로젝트 개요
- 팀원 소개
- 파일 구성
- How to Use
- wrap-up report
MRC task에서는 모델의 ODQA(Open-Domain Question Answering) 의 수행 능력을 평가하여 모델의 기계독해 성능을 측정합니다.
ODQA 모델은 two-stage로 구성됩니다.
첫 번째 단계는 입력된 질문에 대해 관련된 문서를 찾아주는 retriever model이고,
두 번째 단계인 reader model에서는 retriever model이 전달한 context를 이용해 입력된 query에 대한 정답을 찾게 됩니다.
대회 평가 기준은 EM(Exact Match) 와 micro F1 score 입니다.
학습에 사용된 dataset은 KLUE-MRC dataset 과 KorQuAD 1.0 dataset입니다
- 박승현 : PM, Reader Model, Model Tuning, 결과 분석
- 김준휘 : DPR, Retriever Model
- 류재환 : 코드 리뷰어, Elastic Search
- 박수현 : EDA, 전처리, Reader Model, 결과 분석
- 설유민 : DPR, Retriever Model, Model Tuning
├──requirements.txt
├──reader
| ├──analysis
| ├──model
| | ├──model_selection.py
| | └──models.py
| ├──preprocessing
| | └──preprocessor.py
| ├──arg.yaml.template
| ├──inference.py
| ├──test_arg.yaml.template
| ├──train.py
| ├──trainer_qa.py
| └──utils_qa.py
|
└──retriever
├──dense_retriever
| ├──dataset
| | ├──retriever_dataset.py
| | └──utils.py
| ├──get_features
| | └──faiss_retriever.py
| ├──model
| | └──dense_retriever.py
| ├──utils
| | ├──seed.py
| | └──topk.py
| ├──config.yaml.template
| ├──inferene.py
| ├──train.py
| └──validation.py
├──elasticsearch_retriever
| ├──arg.yaml.template
| ├──body.json
| ├──elastic.py
| └──inference.py
└──sparse_retriever
├──BM25.py
├──config.yaml.template
├──inference.py
└──tf_idf.py
- retriever model과 reader model을 따로 train 합니다
- retriever model을 이용하여 wikipedia corpus에서 top-k passage를 inference 합니다
- 2.의 top-k passage를 reader model에 넣어 최종 답안을 inference합니다.
아래의 커맨드로 requirements.txt에 작성된 내용에 따라 패키지를 일괄 설치합니다.
pip install -r requirements.txt
dense_retriever
, sparse_retriever
, elasticsearch_retriever
3가지 retriever가 구현되어 있습니다.
retriever/dense_retriever/config.yaml.template
을 참고하여 config를 설정할 수 있습니다.
train.py, validation.py, inference.py 모두 --conf 라는 argument를 전달할 수 있습니다.
- train : 아래 코드를 실행시켜 학습을 시작할 수 있습니다.
python3 retriever/dense_retriever/train.py --conf config.yaml
- validation : 아래 코드를 실행시켜 평가를 시작할 수 있습니다. 평가 기준은 top-k accuracy (k=5,10,20,50,100) 입니다
python3 retriever/dense_retriever/validation.py --conf config.yaml
- inference : 아래 코드를 실행시켜 reader model이 정답을 찾기 적절한 passage를 추론할 수 있습니다.
python3 retriever/dense_retriever/inference.py --conf config.yaml
retriever/dense_retriever/config.yaml.template
에서 학습 및 추론 설정을 변경할 수 있습니다.
아래 코드를 실행시켜 reader model이 정답을 찾기 적절한 passage를 추론할 수 있습니다. 별도의 학습 과정은 필요하지 않습니다.
python3 retriever/sparse_retriever/inference.py
retriever/sparse_retriever/config.yaml.template
에서 추론 설정을 변경할 수 있습니다
아래 코드를 실행시켜 reader model이 정답을 찾기 적절한 passage를 추론할 수 있습니다. 별도의 학습 과정은 필요하지 않습니다.
python3 retriever/elasticsearch_retriever/inference.py
retriever/sparse_retriever/arg.yaml.template
에서 추론 설정을 변경할 수 있습니다.
연결 문제가 생긴다면 elasticsearch-8.5.3/config/elasticsearch.yml파일에서 xpack.security관련 옵션들을 false로 해주어야 합니다.
아래 코드를 실행시켜 학습을 시작할 수 있습니다
python3 reader/train.py
reader/arg.yaml.template
에서 학습 설정을 변경할 수 있습니다. 훈련 및 평가는 동시에 진행됩니다. 평가는 EM/micro F1으로 진행됩니다.
아래 코드를 실행시켜 retriever model이 추론한 passage를 이용, 정답에 대한 추론을 시작할 수 있습니다.
python3 reader/inference.py
reader/test_arg.yaml.template
에서 추론 설정을 변경할 수 있습니다.
reader/analysis
폴더 내 노트북들을 사용하여 데이터 및 결과를 분석할 수 있습니다.