boostcampaitech2 / mrc-level2-nlp-06

KLUE-MRC - Machine Reading Comprehension
6 stars 2 forks source link

BoostCamp AI Tech - [NLP] ODQA

tags: MRC ODQA

         

Table of Contents

  1. Project Overview
  2. Usage
  3. Experiment
  4. Result
  5. Things to know
  6. Contributors


1. Project Overview

Goals

Dataset

아래는 제공하는 데이터셋의 분포를 보여준다.

데이터셋 분포

데이터셋은 편의성을 위해 Huggingface 에서 제공하는 datasets를 이용하여 pyarrow 형식의 데이터로 구성

Evaluation Metrics

Directory Structure

.
mrc-level2-nlp-06
|-- arguments.py -> 학습 관련 설정
|-- dense_retrieval.py -> retriever 모델 학습
|-- inference.py
|-- elastic_inference.py
|-- install
|   `-- install_requirements.sh
|-- retrieval.py
|-- train.py -> reader 모델 학습
|-- trainer_qa.py
|-- utils_qa.py
|-- utils
|   |-- init_wandb.py
|   |-- postprocess.py
|   |-- preprocess.py
|   |-- trainer_qa.py
|   |-- utils_dpr.py
|   `-- utils_qa.py
`-- wandb_arguments.py -> wandb 설정

data에 대한 argument 는 arguments.pyDataTrainingArguments 에서 확인 가능하다.


2. Usage

Install Requirements

bash install_requirements.sh

Train

# Retriever 학습 예시 # 내부에서 변경
python dense_retriver.py 
# Reader 학습 예시 (train_dataset 사용) 
python train.py --output_dir ./models/train_dataset --do_train

Evaluation

# mrc 모델 평가 (train_dataset 사용)
python train.py --output_dir ./outputs/train_dataset --model_name_or_path ./models/train_dataset/ --do_eval 

Inference

retrieval 과 mrc 모델의 학습이 완료되면 inference.py 를 이용해 odqa 를 진행한다.

# ODQA 실행 (test_dataset 사용)
# wandb 가 로그인 되어있다면 자동으로 결과가 wandb 에 저장되고 아니면 단순히 출력된다.
python inference.py --output_dir ./outputs/test_dataset/ --dataset_name ../data/test_dataset/ --model_name_or_path ./models/train_dataset/ --do_predict
dpr:bool - 학습된 dpr encoder와 bm25를 정한 비율로 결합해서 inference
dpr_negative:bool - dense_retriver.py에 있는 코드를 통해 학습된 모델로 inference

Inference through Elastic Search

elastic_score: bool = field(
        default = True,
        metadata={"help": "whether to score to top_k of each query"}
    )

# elastic search로 context만 뽑아내고 싶다면 False
# score도 함께 뽑아내고 싶다면 True 

How to submit

inference.py 파일을 위 예시처럼 --do_predict 으로 실행하면 --output_dir 위치에 predictions.json 이라는 파일이 생성되고 해당 파일을 제출한다.


3. Experiment

Data Preprocessing

Retriver

Reader


4. Result

Retriver 결과

Retriver 결과

MRC 결과(train)

ODQA 결과(LB 점수)


5. Things to know

  1. train.py에서 sparse embedding 을 훈련하고 저장하는 과정은 시간이 오래 걸리지 않아 따로 argument 의 default 가 True로 설정되어 있다. 실행 후 sparse_embedding.bin 과 tfidfv.bin 이 저장이 된다. 만약 sparse retrieval 관련 코드를 수정 시 존재하는 파일이 load되지 않도록 두 파일을 지우고 다시 실행한다

  2. 모델의 경우 --overwrite_cache 를 추가하지 않으면 같은 폴더에 저장되지 않는다.

  3. ./outputs/ 폴더 또한 --overwrite_output_dir 을 추가하지 않으면 같은 폴더에 저장되지 않는다.


6. Contributors