강혜빈 | 권현정 | 백인진 | 이용우 | 이준원 |
---|---|---|---|---|
데이터 탐색, 코드 리뷰 |
모델링-Retriever, Researcher |
모델링-Reader, Project Manager |
모델링-Reader, Researcher |
모델링-Retriever, 코드리뷰 |
@hyeb | @malinmalin2 | @eenzeenee | @wooy0ng | @jun9603 |
Question Answering (QA)는 다양한 종류의 질문에 대답하는 인공지능을 만드는 연구 분야이다.
다양한 QA 시스템 중, Open-Domain Question Answering (ODQA)는
주어진 지문이 별도로 존재하지 않고 사전 구축된 Knowledge Resource에서 질문에 대답할 수 있는 문서를 찾는 과정이 추가된다.
이번 프로젝트에서는
- 관련 문서를 찾는 "Retriever"
- 관렴 문서를 읽고 적절한 답변을 찾거나 만드는 "Reader"
두가지 단계를 적절히 합쳐 질문에 답변을 할 수 있는 ODQA 시스템을 만드는 것이 목표이다.
Reader 환경 설정
./install/install_requirements.sh
Elastic Search 설치 및 사용 설정
./code/elastic_install.sh
./code/elastic_setting.py
|-- code
| |-- conf
| | |-- MLM
| | | `-- base_config.yaml
| | |-- reader
| | | |-- base_config.yaml
| | | |-- koelectra_config.yaml
| | | |-- roberta-large_config.yaml
| | | |-- roberta-large_config_39.17.yaml
| | | |-- roberta-large_config_40.00.yaml
| | | |-- roberta-large_config_51.25.yaml
| | | `-- roberta-large_config_62.08.yaml
| | |-- retrieval
| | | `-- base_config.yaml
| | `-- wandb_sweep
| | `-- wandb_config.yaml
# code/conf/reader/roberta-large_config.yaml
reader:
mode:
generation: False # 생성 기반 reader 모델을 활용할 것인지
train:
path:
output_dir: ./models/finetuning_dataset/ # 학습한 모델을 저장할 경로
dataset_name: ../data/train_dataset/ # 학습 데이터셋 경로
delete_exist_output: True # 현재 존재하는 모델 저장 경로일 경우 내부 내용을 삭제할지 여부
stage:
do_train: True
do_eval: True
overwrite_cache: True
model:
model_name_or_path: './models/pretraining_dataset'
tokenizer_name: './models/pretraining_dataset'
label_smoothing_factor: 0.0
num_train_epochs: 3
per_device_train_batch_size: 32
learning_rate: 3e-5
warmup_steps: 250
weight_decay: 0.005
fp16: True
test:
path:
output_dir: ./outputs/test_dataset/
dataset_name: ../data/test_dataset/
delete_exist_output: False
stage:
do_train: False
do_eval: False
do_predict: True
model:
model_name_or_path: ./models/finetuning_dataset/
# code/conf/retrieval/base_config.yaml
path:
dataset_name: ../data/train_dataset/
data_path: ../data
model:
model_name_or_path: 'klue/roberta-large'
context_path: wikipedia_documents.json
use_faiss: False
bm25: True
# code/arguments.py
@dataclass
class DataTrainingArguments:
"""
Arguments pertaining to what data we are going to input our model for training and eval.
"""
# line 79 부터
eval_retrieval: bool = field(
default=True,
metadata={"help": "Whether to run passage retrieval using sparse embedding."},
)
num_clusters: int = field(
default=64, metadata={"help": "Define how many clusters to use for faiss."}
)
top_k_retrieval: int = field(
default=100,
metadata={
"help": "Define how many top-k passages to retrieve based on similarity."
},
)
use_faiss: bool = field(
default=False, metadata={"help": "Whether to build with faiss"}
)
use_elastic: bool = field(
default = True, metadata={"help" : "Whether to build with elastic search"},
)
elastic_index_name: str = field(
default = "origin-wiki", metadata= {"help" : "Define the elastic search name"},
)
# code/conf/wandb_sweep/wandb_sweep.yaml
method: 'random'
parameters:
learning_rate:
distribution: 'uniform'
min: 1e-5
max: 1e-4
label_smoothing_factor:
values: [0., 0.1]
warmup_steps:
values: [250, 500]
weight_decay:
values: [0.01, 0.005]
metric:
name: 'train/loss'
goal: 'minimize'
- DAPT / TAPT paper : https://arxiv.org/abs/2004.10964
- Dense Passage Retrieval : https://arxiv.org/pdf/2004.04906v3.pdf
- BM25 + Cross Encoder : https://arxiv.org/pdf/2104.08663v4.pdf
- Question Generation code : https://github.com/codertimo/KorQuAD-Question-Generation