(1) ์ฃผ์ ๋ฐ ๋ชฉํ
- ๋ถ์คํธ์บ ํ AI Tech NLP ํธ๋ level 2 MRC
- ์ฃผ์ : ODQA (Open-Domain Question Answering)
ODQA ๋ฐ์ดํฐ์ ์ ํ์ฉํด ์ง๋ฌธ์ ๋ง๋ ์ ๋ต์ ์์ธก
(2) ํ๊ฐ์งํ
- ์ฃผ ํ๊ฐ์งํ : Exact Match (๋ชจ๋ธ์ ์์ธก๊ณผ ์ค์ ๋ต์ด ์ ํํ๊ฒ ์ผ์นํ ๋๋ง ์ ์๊ฐ ์ฃผ์ด์ง)
- ์ฐธ๊ณ ์ฉ : F1 score (๋ชจ๋ธ์ ์์ธก๊ณผ ์ค์ ๋ต์ ๊ฒน์น๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋ถ๋ถ์ ์๊ฐ ์ฃผ์ด์ง)
(3) ๊ฐ๋ฐ ํ๊ฒฝ
- GPU : Tesla V100 * 4
(4) ํ์ ํ๊ฒฝ
Tool | Description |
---|---|
GitHub | - Task ๋ณ issue ์์ฑ - ๋ด๋นํ issue์ ๋ํ branch ์์ฑ ํ PR & main์ merge |
Slack | - GitHub๊ณผ ์ฐ๋ํด์ ๋ ํฌ์งํ ๋ฆฌ์ ์
๋ฐ์ดํธ ๋๋ ๋ด์ฉ ์ค์๊ฐ์ผ๋ก ํ์ธ - ํ๋ค์ ์ด์ฉํ ํ์ ๋ฐ ๊ฒฐ๊ณผ ๊ณต์ |
Notion | - ํ์๋ผ์ธ ์ ๋ฆฌ - ์นธ๋ฐ๋ณด๋๋ฅผ ์ด์ฉํ task ๊ด๋ฆฌ |
Zoom | - ์งํ์ํฉ ๊ณต์ |
WandB | - Sweep์ ํตํ ํ์ดํผ ํ๋ผ๋ฏธํฐ ์ต์ ํ |
(5) ํ์ ์๊ฐ
๊น๋ํ | ๊น์ฑํ | ๊น์์ | ๊นํ์ฑ | ์ก์๋น | ์ ์ํ |
---|---|---|---|---|---|
Github | Github | Github | Github | Github | Github |
Member | Team | Role |
---|---|---|
๊น๋ํ | Data, Model | - Extraction Reader Modeling(ํ์ต ๋ฐ ์ถ๋ก ) - Extraction Reader ์ํคํ ์ฒ ์์ (CNN Head) - Sparse Passage Retrieval(Retrieval ๊ฒฐ๊ณผ ๋ถ์) - EDA(๋ฐ์ดํฐ ํ ํฐ ๊ฐ์ ๋ถํฌ ๋ถ์) |
๊น์ฑํ | Data, Model | - Code Modularization - Sparse/Dense Passage Rrieval(๊ตฌํ ๋ฐ ์คํ) - Generation Reader Modeling(LLM ํ์ต ๋ฐ ์คํ) - ML Pipeline |
๊น์์ | Model | - Question augmentation(KoBART) - Experimentation(top-k) |
๊นํ์ฑ | Data, Model | - Generation Reader Modeling(ํ์ต ๋ฐ ์ถ๋ก ) - EDA(๋ฐ์ดํฐ ํ ์คํธ ํ๋ฆฌํฐ ๋ถ์) |
์ก์๋น | Model | - Extraction Reader Modeling(ํ์ต ๋ฐ ์ถ๋ก ) - Experimentation(์คํ ๋ชจ๋ธ ๋ชฉ๋ก ๊ตฌ์ฑ ๋ฐ ๊ฒฐ๊ณผ ์ ๋ฆฌ) - Logging & HyperParameter Tuning(Wandb Sweep) - Ensemble(์์๋ธ ์ฝ๋ ์์ฑ, ๋ชจ๋ธ ์ ์ ์ ์ํ ์๊ด๊ด๊ณ ๋ถ์ ์ฝ๋ ์์ฑ) |
์ ์ํ | Data, Model | Sparse Passage Retrieval(BM25 ์ฑ๋ฅ ๊ฐ์ ),ย ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ(Data Cleaning) |
Step 1. ํ๋ก์ ํธ์ ํ์ํ ๋ชจ๋ dependencies๋ requirements.txt
์ ์๊ณ , ์ด์ ๋ํ ๊ฐ์ํ๊ฒฝ์ ์์ฑํด์ ํ๋ก์ ํธ๋ฅผ ์คํ
# ๊ฐ์ํ๊ฒฝ ๋ง๋ค๊ธฐ
$ python -m venv .venv
# ๊ฐ์ํ๊ฒฝ ์ผ๊ธฐ
$ . .venv/bin/activate
# ์ ๊ณต๋๋ ์๋ฒ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ํ์ ์ฌ์ฉ
$ export TMPDIR=/data/ephemeral/tmp
$ mkdir -p $TMPDIR
# ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
$ pip install --upgrade pip
$ pip install -r requirements.txt
Step 2. Pre Processing ์คํ
# ์์
ํ๊ฒฝ ๋ณ๊ฒฝ
$ cd pre_process
# ๋ค์ ์ฃผํผํฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ KorQuAD 1.0 ๋ฐ์ดํฐ ์ฆ๊ฐ
$ data_augment_korquadv1.ipynb
# ๋ค์ ์ฃผํผํฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ AIHub ๋ฐ์ดํฐ ์ฆ๊ฐ
$ data_augment_aihub.ipynb
# ๋ค์ ์ฃผํผํฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ DPR retrieval์ ํ์ตํ๊ธฐ ์ํ ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ
$ generate_DPR_dataset_korquad.ipynb
Step 3. DPR ๋ชจ๋ธ ํ์ต
utils/arguments_dpr.py ์์ DPR ํ์ต์ ์ํ ํ๋ผ๋ฏธํฐ ๋ณ๊ฒฝ
- model : ์ํ๋ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ
- train_data : generate_DPR_dataset_korquad.ipynb ์์ ์์ฑํ ๋ฐ์ดํฐ ๊ฒฝ๋ก
- valid_data : generate_DPR_dataset_korquad.ipynb ์์ ์์ฑํ ๋ฐ์ดํฐ ๊ฒฝ๋ก
- q_output_path : Query embedding ๋ชจ๋ธ ์ ์ฅํ ๊ฒฝ๋ก
- c_output_path : Context embedding ๋ชจ๋ธ ์ ์ฅํ ๊ฒฝ๋ก
# ./level2-mrc-nlp-08 ๊ฒฝ๋ก์์ ์คํ
$ python train_dpr.py
Step 4. Retrieval๋ฅผ ์ํ ์ฌ์ ์ฒ๋ฆฌ ์งํ
database/python get_embedding_vec.csv : BM25 ๋ชจ๋ธ ๋ฐ DPR์ embedding vector ์ ์ฅ
- model : ํ์ต๋ context embedding ๋ชจ๋ธ ๊ฒฝ๋ก
- wiki_path : Wiki.doc ๋ฐ์ดํฐ ๊ฒฝ๋ก
- valid_data : Query-Passage ์ ๋ฐ์ดํฐ์ ๊ฒ์ฆ ๋ฐ์ดํฐ ๊ฒฝ๋ก
- save_path : Embedding vector ์ ์ฅ ๊ฒฝ๋ก
test_retrieval.py
- model : ํ์ต๋ query embedding ๋ชจ๋ธ ๊ฒฝ๋ก
- valid_data : Query-Passage ์ ๋ฐ์ดํฐ์ ๊ฒ์ฆ ๋ฐ์ดํฐ ๊ฒฝ๋ก
- faiss_path : database/python get_embedding_vec.csv ์์ ์คํํ save_path ๊ฒฝ๋ก
- bm25_path : database/python get_embedding_vec.csv ์์ ์คํํ save_path ๊ฒฝ๋ก
- context_path : database/python get_embedding_vec.csv ์์ ์คํํ save_path ๊ฒฝ๋ก
test_retrieval_inference.py
- model : ํ์ต๋ query embedding ๋ชจ๋ธ ๊ฒฝ๋ก
- test_dataset : Query-Passage ์ ๋ฐ์ดํฐ์ ํ ์คํธ ๋ฐ์ดํฐ ๊ฒฝ๋ก
- faiss_path : ์์ ๋์ผ
- bm25_path : ์์ ๋์ผ
- context_path : ์์ ๋์ผ
# ์์
ํ๊ฒฝ ๋ณ๊ฒฝ
$ cd database
# ๋ค์ ์ฝ๋๋ฅผ ์คํํ์ฌ embedding vector ์ถ์ถ
$ python get_embedding_vec.csv
# BM25 ๋ฐ DPR ์ฑ๋ฅ ํ์ธ
$ cd ..
$ python test_retrieval.py
# Inference ์ ์ฌ์ฉํ retireve ๋ ๋ฐ์ดํฐ ์์ฑ
$ python test_retrieval_inference.py
Step 5. Reader ํ์ต
utils/arguments_extraction_reader.py์์ extracion based model ํ์ต์ ์ํ ํ๋ผ๋ฏธํฐ ๋ณ๊ฒฝ
- model_name_or_path : ์ฌ์ ํ์ต๋ ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ
- dataset_name : Query-Passage ์ ๋ฐ์ดํฐ๋ ์ฆ๊ฐ๋ ๋ฐ์ดํฐ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝ
- output_dir : ํ์ต๋ ๋ชจ๋ธ ๋ฐ ํ๊ฐ ๊ฒฐ๊ณผ ์ ์ฅ ๊ฒฝ๋ก
# ๋ค์ ์ฝ๋๋ฅผ ์คํํ์ฌ extraction based model ํ์ต
$ python train_extraction_reader.py
# ํ๋ก์ ํธ ๋๋ ์ฌ์ฉํ์ง ์์์ง๋ง generation based model ํ์ต, ํ๋ผ๋ฏธํฐ ๋ณ๊ฒฝ์ ์์ ๋์ผ
$ python train_generation_reader_Seq2SeqLM,.py
$ python train_generation_reader_CausalLM,.py
Step 6. Inference ์คํ
utils/arguments_inference.py์์ inference ํ extraction based ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ ๋ณ๊ฒฝ
- model_name_or_path : ํ์ต์ด ์๋ฃ๋ ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ
- output_dir : Inference ๊ฒฐ๊ณผ ์ ์ฅ ๊ฒฝ๋ก
# ์ฝ๋ 50๋ฒ์งธ ์ค์์ retireve ๋ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๋ ๊ฒฝ๋ก ์ํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด์ ์ฌ์ฉ
$ python inference.py
Step 7. ์์๋ธ ์คํ
# train_extraction_reader ์คํ ์ ์์ฑ๋๋ predictions.json ๊ฐ๋ค๋ก ์๊ด๋ถ์ ๋ถ์
$ correlation_exp.ipynb
# ์๊ด๋ถ์์ ํตํด ์ฌ์ฉํ ๋ชจ๋ธ ์ ํ ๋์๋ค๋ฉด ๊ทธ ๋ชจ๋ธ๋ค๋ก inference ์ ์์ฑ๋ nbest_predictions.json ํ์ผ๋ค๋ก ์์๋ธ ์งํ / ๋๊ฐ์ง ๋ฒ์ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅ
$ ensemble_v1.ipynb
$ ensemble_v2.ipynb
Task | Task Description |
---|---|
EDA | ๋ฐ์ดํฐ์ ํน์ฑ์ ์ดํด๋ณด๊ธฐ ์ํด ์ค๋ณต ๋ฐ์ดํฐ ํ์ธ, ํ ํฐ ๊ฐ์ ๋ถํฌ, ๋ฐ์ดํฐ ํ๋ฆฌํฐ ์ฒดํฌ ๋ฑ ์๊ฐํ ๋ฐ ๋ถ์ |
๋ฒ ์ด์ค๋ผ์ธ ๋ชจ๋ธ | Reader Model๋ก ์ฌ์ฉํ๊ธฐ ์ ํฉํ pre-trained model ์คํ ๋ฐ ์ ์ |
Retrieval | BM25, DPR Retrieval ๊ธฐ๋ฒ ๊ตฌํ ๋ฐ ์คํ |
Reader Model | Transfer Learning CNN Head Cleaning |
Post-Processing | ํ์ฒ๋ฆฌ ๋ชจ๋ธ ๋ค์์ฑ ์ฒดํฌ ์์๋ธ |
- ํตํฉ๋ชจ๋ธ์ด ์ต์ ์ ๋ต์ ๋์ถํ ๋, ๋ฌธ์ ๋ด์ ๋ค๋ฅธ ์์น์ ์๋ ๊ฐ์ ๋จ์ด์์๋ start logit๊ณผ end logit ๊ฐ์ด ๋ฌ๋ผ ๊ฐ ์์น์ ๋ํ ํ๋ฅ ์ด ๋ถ๋ฆฌ๋์ด ๊ณ์ฐ๋๋ ํ์์ด ๋ฐ์ํ์ฌ Inference ํ์ฒ๋ฆฌ ์งํ
- ํ ์คํธ๊ฐ ๋์ผํ ๊ฒฝ์ฐ ํ๋ฅ ์ ํฉ์ฐํด ์ด ํ๋ฅ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณ์ ์ ํํ๋ ํ์ฒ๋ฆฌ ๊ณผ์ ์ ์ ์ฉํจ
- ๋ชจ๋ธ์ ์์ธก๊ฐ์ ๋ฒกํฐ๋ก ์นํํ์ฌ(์ค๋ต์ 1, ์ ๋ต์ 0) ๋ชจ๋ธ ๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ๋ถ์ํจ์ผ๋ก์จ, ๋ชจ๋ธ๋ค์ด ์ํธ๋ณด์์ ์ธ ์์ฉ์ ํ๋๋ก ํจ
- model1, model2์ด ์๊ณ ๊ฐ๊ฐ 5๊ฐ๋ฅผ ์์ธกํ๋ค๊ณ ํ๋ฉด ๋ ๋ฒกํฐ [1, 0, 0, 1, 1], [0, 1, 1, 0, 1]์ ์๊ด๊ด๊ณ๋ฅผ ๋์ถ
-
๋ค์ํ๊ฒ ํ๋ จ๋ ์ฌ๋ฌ ๋ชจ๋ธ์ ๊ฒฐํฉํ์ฌ ๋ชจ๋ธ๋ค์ด ์๋ก๋ฅผ ๋ณด์ํ์ฌ ๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์ ์๋๋ก ํ๊ธฐ ์ํด ์์๋ธ์ ๋์
-
ํ๋ฅ ํฉ์ ํตํด soft voting (์์ ์ด์ผ๊ธฐ ํ ํ์ฒ๋ฆฌ ๋ฐฉ์๊ณผ ๋์ผ)
- ์์๋ธ ํ ๋ชจ๋ธ๋ค์ ๋ต๋ณ-ํ๋ฅ ๊ฐ์ ๋ถ๋ฌ์ค๊ณ ๊ฐ์ ๋จ์ด์ ๋ํ ํ๋ฅ ๋ค์ sum
- ๊ฐ์ฅ ๋์ ํ๋ฅ ์ ๋ต๋ณ์ ์ ๋ต์ผ๋ก ์ฑํ
-
๋ค์๊ฒฐ (majority voting)
Publicย Leader Board ์์
Private Leader Board ์์