Skip to content

boostcampaitech7/level2-mrc-nlp-13

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

24 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Level 2 Project :: ODQA(Open-Domain Question Answering)

πŸ“ Abstract

  • 이 ν”„λ‘œμ νŠΈλŠ” 넀이버 λΆ€μŠ€νŠΈ μΊ ν”„ AI-Tech 7κΈ° NLP Level 2 기초 ν”„λ‘œμ νŠΈ κ²½μ§„λŒ€νšŒλ‘œ, Daconκ³Ό Kaggleκ³Ό μœ μ‚¬ν•œ λŒ€νšŒν˜• λ°©μ‹μœΌλ‘œ μ§„ν–‰λ˜μ—ˆλ‹€.
  • ODQA(Open-Domain Question Answering) taskλŠ” 주어진 μ§ˆλ¬Έμ— λŒ€ν•΄ λŒ€κ·œλͺ¨ λ¬Έμ„œ μ§‘ν•©μ—μ„œ κ΄€λ ¨ 정보λ₯Ό κ²€μƒ‰ν•˜κ³ , κ·Έ μ •λ³΄λ‘œλΆ€ν„° μ •ν™•ν•œ 닡변을 μΆ”μΆœν•˜λŠ” 것이 주제둜, λͺ¨λ“  νŒ€μ›μ΄ 데이터 μ „μ²˜λ¦¬λΆ€ν„° μ•™μƒλΈ”κΉŒμ§€ AI λͺ¨λΈλ§μ˜ μ „ 과정을 ν•¨κ»˜ ν˜‘μ—…ν–ˆλ‹€.

Project Leader Board

  • Public Leader Board
public_leader_board
  • Private Leader Board
private_leader_board

πŸ§‘πŸ»β€πŸ’» Team Introduction & Members

Team name : μŠ€λΉˆλΌν‚¨μŠ€λ°° [ NLP 13μ‘° ]

πŸ‘¨πŸΌβ€πŸ’» Members

κΆŒμ§€μˆ˜ 김성은 κΉ€νƒœμ› μ΄ν•œμ„œ μ •μ£Όν˜„
Github Github Github Github Github

πŸ§‘πŸ»β€πŸ”§ Members' Role

이름 μ—­ν• 
κΆŒμ§€μˆ˜ 데이터 EDA, LLM을 ν†΅ν•œ 데이터 증강, MRC λͺ¨λΈ 탐색 및 parameter μ‘°μ •, 앙상블
김성은 데이터 EDA(λ¬Έμž₯ 길이, Queryλ¬Έ), 데이터 증강(AEDA, Back translation, llm, lmqg), 앙상블
κΉ€νƒœμ› DPR κ΅¬ν˜„, Hybrid Retriever κ΅¬ν˜„ 및 Score function μ„ΈλΆ„ν™”, Soft voting 앙상블 κ΅¬ν˜„
μ΄ν•œμ„œ Reader λͺ¨λΈ κ°œμ„ , MRC λͺ¨λΈ 탐색 및 parameter μ‘°μ •, 데이터 증강 및 λ³€ν˜• μ‹œλ„,
Score Normalize λ₯Ό ν†΅ν•œ Retrieval 방법 κ°œμ„  , 앙상블
μ •μ£Όν˜„ 데이터 EDA, DPR κ΅¬ν˜„, Kfold κ΅¬ν˜„, MRC λͺ¨λΈ 탐색 및 앙상블

πŸ–₯️ Project Introduction

ν”„λ‘œμ νŠΈ 주제 Open-Domain Question Answering : 사전에 κ΅¬μΆ•λ˜μ–΄μžˆλŠ” Knowledge resource μ—μ„œ μ§ˆλ¬Έμ— λŒ€λ‹΅ν•  수 μžˆλŠ” λ¬Έμ„œλ₯Ό μ°Ύκ³ , ν•΄λ‹Ή λ¬Έμ„œμ—μ„œ μ§ˆλ¬Έμ— λ§žλŠ” 닡변을 μΆ”μΆœν•˜λŠ” NLP Task
ν”„λ‘œμ νŠΈ κ΅¬ν˜„λ‚΄μš© Dense Passage Retrieval (DPR) λͺ¨λΈμ„ ν•™μŠ΅ν•˜μ—¬ 질문과 λ¬Έμ„œ κ°„μ˜ μž„λ² λ”©μ„ μƒμ„±ν•œλ‹€. 이후, Train dataset을 ν™œμš©ν•˜μ—¬ Machine Reading Comprehension (MRC) λͺ¨λΈμ„ ν•™μŠ΅ν•˜κ³ , 이λ₯Ό 톡해 ODQA 예츑 νŒŒμΌμ„ μƒμ„±ν•œλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, μ—¬λŸ¬ 예츑 κ²°κ³Όλ₯Ό μ•™μƒλΈ”ν•˜μ—¬ μ΅œμ’…μ μΈ 닡변을 λ„μΆœν•œλ‹€.
개발 ν™˜κ²½ β€’ GPU : Tesla V100 μ„œλ²„ 4개 (RAM32G)
β€’ 개발 Tool : Jupyter notebook, VS Code [μ„œλ²„ SSHμ—°κ²°]
ν˜‘μ—… ν™˜κ²½ β€’ Github Repository : Baseline μ½”λ“œ 곡유 및 버전 관리, 개인 branchλ₯Ό μ‚¬μš©ν•΄ μž‘μ—…μƒν™© 곡유
β€’ Notion : ODQA ν”„λ‘œμ νŠΈ νŽ˜μ΄μ§€λ₯Ό ν†΅ν•œ μ—­ν• λΆ„λ‹΄, μ‹€ν—˜ κ°€μ„€ μ„€μ • 및 κ²°κ³Ό 곡유
β€’ SLACK, Zoom : μ‹€μ‹œκ°„ λŒ€λ©΄/λΉ„λŒ€λ©΄ 회의

πŸ“ Project Structure

πŸ—‚οΈ 디렉토리 ꡬ쑰 μ„€λͺ…

  • ν•™μŠ΅ 데이터 경둜:Β /data
  • ν•™μŠ΅ 메인 μ½”λ“œ: train.py
  • ν•™μŠ΅ 데이터셋 경둜: /data/train_dataset/train
  • ν…ŒμŠ€νŠΈ 데이터셋 경둜: /data/train_dataset/validation

πŸ“„ μ½”λ“œ ꡬ쑰 μ„€λͺ…

script νŒŒμΌμ„ μƒμ„±ν•˜μ—¬, ν•˜μ΄νΌ νŒŒλΌλ―Έν„°μ˜ μ‘°μ • 및 train,test,ensemble 을 μš©μ΄ν•˜κ²Œ ν–ˆλ‹€.

  • Dense Retriever Train : dense_train.py
  • Train : train.sh
  • Predict : test.sh
  • Ensemble : softvoting.py
  • μ΅œμ’… 제좜 파일 : /ensemble/predictions.json
πŸ“¦ base
┣ πŸ“‚ dense_model
┣ πŸ“‚ ensemble
┃ β”— diff.py
┣ πŸ“‚ models
┣ πŸ“‚ nbest
┣ arguments.py
┣ dense_encoder.py
┣ dense_train.py
┣ dense_util.py
┣ eval.sh
┣ inference.py
┣ requirements.txt
┣ retrieval.py
┣ softvoting.py
┣ test.sh
┣ train.py
┣ train.sh
┣ trainer_qa.py
β”— utils_qa.py

πŸ“ Project Ground Rule

νŒ€ ν˜‘μ—…μ„ μœ„ν•΄ ν”„λ‘œμ νŠΈ κ΄€λ ¨ Ground Rule을 μ„€μ •ν•˜μ—¬ ν”„λ‘œμ νŠΈκ°€ μ›ν™œν•˜κ²Œ λŒμ•„κ°ˆ 수 μžˆλ„λ‘ κ·œμΉ™μ„ μ •ν–ˆμœΌλ©°, λ‚ μ§œ λ‹¨μœ„λ‘œ κ°„λž΅ν•œ λͺ©ν‘œλ₯Ό μ„€μ •ν•˜μ—¬ ν˜‘μ—…μ„ μ›ν™œν•˜κ²Œ 진행할 수 μžˆλ„λ‘ κ³„νšν•˜μ—¬ μ§„ν–‰ν–ˆλ‹€.

- a. Server κ΄€λ ¨ : κΆŒμ§€μˆ˜, 김성은, μ΄ν•œμ„œ, μ •μ£Όν˜„ μΊ νΌλŠ” 각자 μ„œλ²„λ₯Ό 생성해 λͺ¨λΈ μ‹€ν—˜μ„ μ§„ν–‰ν•˜κ³ , κΉ€νƒœμ› μΊ νΌλŠ” μ„œλ²„κ°€ 유휴 μƒνƒœμΈ μ„œλ²„μ—μ„œ μ‹€ν—˜μ„ μ§„ν–‰ν–ˆλ‹€.

- b. Git κ΄€λ ¨ : 각자 branch 생성해 μž‘μ—…ν•˜κ³ , κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•  νŒŒμΌμ€ main에 push ν•˜λŠ” λ°©λ²•μœΌλ‘œ ν˜‘μ—…ν–ˆλ‹€.

- c. Submission κ΄€λ ¨ : λŒ€νšŒ 마감 5일 μ „κΉŒμ§€λŠ” 자유둭게 μ œμΆœν–ˆκ³ , 5일 μ „λΆ€ν„°λŠ” 인당 2νšŒμ”© λΆ„λ°°ν–ˆλ‹€.

- d. Notion κ΄€λ ¨ : μ›ν™œν•œ 아이디어 λΈŒλ ˆμΈμŠ€ν† λ°κ³Ό 뢄업을 μœ„ν•΄ 회의λ₯Ό ν•  경우 λ…Έμ…˜μ— κΈ°λ‘ν•˜λ©°, 연ꡬ 및 μ‹€ν—˜κ²°κ³Όμ˜ 기둝을 κ³΅μœ ν–ˆλ‹€.


πŸ—“ Project Procedure: 총 4μ£Ό 진행

  • (1~5 일차): κΈ°λ³Έ Baseline format 해석 및 script κ΅¬ν˜„
  • (6~12 일차): 데이터 EDA 및 ꡬ쑰 νŒŒμ•…, 데이터 μ „μ²˜λ¦¬, MRC λͺ¨λΈ 탐색
  • (12~20 일차) : MRC λͺ¨λΈ ν•˜μ΄νΌ νŒŒλΌλ―Έν„° νŠœλ‹(wandb), Dense Retriever κ΅¬ν˜„
  • (20~25 일차) : Dense Retriever κ³Ό Sparse Retriever 을 μ‚¬μš©ν•œ Hybrid Retriever κ΅¬ν˜„
  • (26~28 일차) : 앙상블 진행

MRC

  • μš°λ¦¬λŠ” λ¨Όμ € Retriever - Reader λͺ¨λΈμ„ κ΅¬ν˜„ν•˜κΈ°μ— μ•žμ„œ, KorQuad data 에 λŒ€ν•΄μ„œ pre-trained 된 λͺ¨λΈμ„ μ‚¬μš©ν•΄, λΆ€μ‘±ν•œ Train dataset 을 λ³΄κ°•ν•˜μ—¬ ν•™μŠ΅ν•˜κΈ°λ‘œ ν•˜μ˜€λ‹€.

Retriever

  • Retriever λͺ¨λΈμ˜ 경우, KorQuad data λ₯Ό 톡해 question, passage embedding 을 미리 ν•™μŠ΅ν•˜λŠ” 과정을 가진 Dense Retriever κ³Ό, BM25 λ₯Ό μ‚¬μš©ν•œ Sparse Retriever 을 κ²°ν•©ν•œ Hybrid Retriever 을 μ‚¬μš©ν–ˆλ‹€.
  • Hybrid Retriever 을 ν•˜λŠ” 방식은 크게 3가지 인데, 이 3가지λ₯Ό λͺ¨λ‘ ν™œμš©ν•˜μ—¬ passage 와 question 의 연관성을 μ΅œλŒ€λ‘œ ν•™μŠ΅ν•˜κ³ , μ‚¬μš©ν•˜κ³ μž ν•˜μ˜€λ‹€.
Score Function Type Description
1. Ξ» x Dense Similarity + BM25 Score Dense Retriever와 BM25 점수λ₯Ό κ²°ν•©ν•˜μ—¬ 질문과 λ¬Έμ„œ κ°„μ˜ 관계λ₯Ό κ°•ν™”ν•©λ‹ˆλ‹€. Ξ»λŠ” 두 점수 κ°„μ˜ κ°€μ€‘μΉ˜λ₯Ό μ‘°μ •ν•©λ‹ˆλ‹€.
2. Reciprocal Rank Fusion (RRF) μ—¬λŸ¬ Retriever의 λž­ν‚Ήμ„ 기반으둜 각 λ¬Έμ„œμ˜ reciprocal rankλ₯Ό ν•©μ‚°ν•˜μ—¬ μ΅œμ’… 점수λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
3. (Ξ» x Dense Similarity + BM25 Score) β†’ ko-reranker 1번의 Score λ₯Ό ν•œκ΅­μ–΄ re-ranker에 μž…λ ₯ν•˜μ—¬ μ΅œμ’… λž­ν‚Ήμ„ μ •μ œν•˜κ³  μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

Ensemble Model

  • μ΅œμ’…μ μœΌλ‘œ 3개의 json νŒŒμΌμ„ softvoting 기법을 ν™œμš©ν•˜μ—¬ μ‚¬μš©ν–ˆλ‹€.
File Name Score Function
nbest_predictions_op1.json Ξ» x Dense Similarity + BM25 Score
nbest_predictions_op2.json Reciprocal Rank Fusion (RRF)
nbest_predictions_op3.json (Ξ» x Dense Similarity + BM25 Score) β†’ ko-reranker

πŸ’» Getting Started

⚠️ How To install Requirements

# ν•„μš” 라이브러리 μ„€μΉ˜
pip install -r requirements.txt

⌨️ How To Train & Test

# Dense Retriever λ₯Ό μœ„ν•œ passage , question pt 파일 생성
python3 dense_train.py

# train.sh μ½”λ“œ μ‹€ν–‰ : MRC λ₯Ό μœ„ν•œ Train dataset 에 λŒ€ν•œ script file μ‹€ν–‰
chmod +x train.sh # κΆŒν•œ μΆ”κ°€
./train.sh

# test.sh μ½”λ“œ μ‹€ν–‰ : Retriever 을 μ‚¬μš©ν•΄μ„œ ODQA task μˆ˜ν–‰
chmod +x test.sh # κΆŒν•œ μΆ”κ°€
./test.sh

# 이후, nbest_prediction.json 듀이 ./nbest 에 μ €μž₯됨

⌨️ How To Ensemble

# ./nbest 에 μƒμ„±λœ json νŒŒμΌλ“€μ„ λͺ¨λ‘ ν™•λ₯  값에 λ”°λΌμ„œ soft voting ν•˜μ—¬ ensemble
python3 softvoting.py

About

level2-mrc-nlp-13 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published