MRC
ODQA
아래는 제공하는 데이터셋의 분포를 보여준다.
데이터셋은 편의성을 위해 Huggingface 에서 제공하는 datasets를 이용하여 pyarrow 형식의 데이터로 구성
EM(Exact Match)
F1 score
.
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.py
의 DataTrainingArguments
에서 확인 가능하다.
bash install_requirements.sh
arguments.py
참고# Retriever 학습 예시 # 내부에서 변경
python dense_retriver.py
# Reader 학습 예시 (train_dataset 사용)
python train.py --output_dir ./models/train_dataset --do_train
--do_eval
사용--do_eval
을 추가로 입력해서 훈련 및 평가를 동시에 진행할 수도 있다.# mrc 모델 평가 (train_dataset 사용)
python train.py --output_dir ./outputs/train_dataset --model_name_or_path ./models/train_dataset/ --do_eval
retrieval 과 mrc 모델의 학습이 완료되면 inference.py
를 이용해 odqa 를 진행한다.
--do_predict
)만 진행한다. # 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
--do_predict
)만 진행하면 됩니다. 위와 과정은 동일하고 실행 파일만 변경하면 됩니다. (elastic search를 통한 retrieval 구성이 포함되어 있는 파일입니다.)# ODQA 실행 (test_dataset 사용)
python elastic_inference.py --output_dir ./outputs/test_dataset/ --dataset_name ../data/test_dataset/ --model_name_or_path ./models/train_dataset/ --do_predict
elastic_score: bool = field(
default = True,
metadata={"help": "whether to score to top_k of each query"}
)
# elastic search로 context만 뽑아내고 싶다면 False
# score도 함께 뽑아내고 싶다면 True
inference.py
파일을 위 예시처럼 --do_predict
으로 실행하면 --output_dir
위치에 predictions.json
이라는 파일이 생성되고 해당 파일을 제출한다.
preprocess_wiki_documents(contexts)
use_wiki_preprocessing=True
인 경우 해당 함수를 사용할 수 있다.DPR retriever
BM25 retriever
Elasticsearch retriever
Ensemble
성능이 향상된 방법
Baseline
train.py
에서 sparse embedding 을 훈련하고 저장하는 과정은 시간이 오래 걸리지 않아 따로 argument 의 default 가 True로 설정되어 있다.
실행 후 sparse_embedding.bin 과 tfidfv.bin 이 저장이 된다.
만약 sparse retrieval 관련 코드를 수정 시 존재하는 파일이 load되지 않도록 두 파일을 지우고 다시 실행한다
모델의 경우 --overwrite_cache
를 추가하지 않으면 같은 폴더에 저장되지 않는다.
./outputs/ 폴더 또한 --overwrite_output_dir
을 추가하지 않으면 같은 폴더에 저장되지 않는다.