/Paper-QA

Primary LanguagePython

πŸ’¬ ν‚€μ›Œλ“œλ₯Ό ν™œμš©ν•œ 기계 독해 λͺ¨λΈ (Machine Reading Comprehension using Keywords)


πŸ™‹ Why

  • κ΅¬μΆ•λ˜μ–΄ μžˆλŠ” κ΅­λ‚΄ λ…Όλ¬Έ QA 데이터셋을 μ΄μš©ν•΄μ„œ κ΅­λ‚΄ λ…Όλ¬Έ 검색을 μš©μ΄ν•˜κ²Œ ν•˜κ³ μžν•¨
  • 기계 독해 λͺ¨λΈ 고도화λ₯Ό μœ„ν•œ ν‚€μ›Œλ“œ μž„λ² λ”©, λ‹¨μ„œ λ¬Έμž₯ μž„λ² λ”© 기법을 μ œμ•ˆ

Training Enviroment

  • 각 λͺ¨λΈ μ„€μ •κ°’ μ°Έκ³ 
  • RTX 8000 x 1
  • CUDA 10.2
  • huggingface μ½”λ“œ μ°Έκ³ 

1. Directory and Pre-processing

1-1. ν‚€μ›Œλ“œ μΆ”μΆœ(Keyword Extraction) λͺ¨λΈ

β”œβ”€β”€ data
β”‚   β”œβ”€β”€ train.json
β”‚   └── val.json
β”œβ”€β”€ init_weight
β”œβ”€β”€ models
β”‚   └── 1_2000_model.pt
β”œβ”€β”€ preproc
β”‚   β”œβ”€β”€ train_pre.json
β”‚   β”œβ”€β”€ val_pre.json
β”‚   └── ###_keyword.json
β”œβ”€β”€ src
β”‚   β”œβ”€β”€ main.py
β”‚   β”œβ”€β”€ model.py
β”‚   β”œβ”€β”€ processor.py
β”‚   └── utils.py
β”œβ”€β”€ requirements.txt
└── README.md
  • processor.py μ—μ„œ λžœλ€μƒ˜ν”Œλ§ν•œ νŒŒμΌλ“€μ„ 가지고 데이터 μ „μ²˜λ¦¬ β†’ preproc 디렉토리에 ###_pre.json 파일 생성
  • preproc 디렉토리에 ν‚€μ›Œλ“œ λͺ¨λΈ μ‹€ν–‰ κ²°κ³Ό 파일 ###_keyword.json 생성

1-2. 기계 독해(Machine Reading Comprehension; MRC) λͺ¨λΈ

β”œβ”€β”€ data
β”‚   β”œβ”€β”€ train
β”‚   β”‚   └── train_#.json
β”‚   β”œβ”€β”€ val
β”‚   β”‚   └── val_#.json
β”‚   └── evidence
β”‚       β”œβ”€β”€ ###_#_pre.json
β”‚       └── ###_#_evidence.json
β”œβ”€β”€ model
β”‚   └── roberta_proposed
β”‚        └── checkpoing-16883
β”œβ”€β”€ src
β”‚   β”œβ”€β”€ functions
β”‚   β”‚   β”œβ”€β”€ evaluate.py
β”‚   β”‚   β”œβ”€β”€ modules.py
β”‚   β”‚   β”œβ”€β”€ mrc_metrics.py
β”‚   β”‚   β”œβ”€β”€ processor_plus.py
β”‚   β”‚   └── utils.py
β”‚   β”‚
β”‚   └── model
β”‚       β”œβ”€β”€ main_functions.py
β”‚       β”œβ”€β”€ models.py
β”‚       └── roberta_model.py
β”‚ 
β”œβ”€β”€ ir
β”‚   β”œβ”€β”€ evidence_sent_retrieval.py
β”‚   └── processor.py
β”‚
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ evidence_processing.py
└── README.md
  • data/train , data/val μ—λŠ” 원본 λ…Όλ¬Έ 데이터λ₯Ό λžœλ€μƒ˜ν”Œλ§(5%,10%)ν•œ νŒŒμΌλ“€μ΄ λ“€μ–΄μžˆμŒ
  • data/evidence/###_pre.json νŒŒμΌμ€ λ…Όλ¬Έ 데이터와 λ§€μΉ­λ˜λŠ” 검색 λͺ¨λΈ κ²°κ³Ό 데이터
  • evidence_processing.py μ—μ„œ ###_#pre.json νŒŒμΌμ„ 가지고 mrc λͺ¨λΈμ„ μœ„ν•œ λ°μ΄ν„°λ‘œ μ •μ œ μ‹œν‚΄ β†’ data/evidence 디렉토리에 ####_evidence.json 생성
  • ν•™μŠ΅/ν‰κ°€μ‹œ 각 원본 데이터 파일과 ν•΄λ‹Ήν•˜λŠ” evidence.json νŒŒμΌμ„ λ‘œλ“œν•΄μ„œ μ‚¬μš©

2. Model ⭐

2-1. ν‚€μ›Œλ“œ μΆ”μΆœ(Keyword Extraction) λͺ¨λΈ

  • μ œμ•ˆν•˜λŠ” λ°©λ²•μœΌλ‘œ ν•™μŠ΅μ‹œν‚€λ˜, μ œκ³΅λ°›μ€ λ°μ΄ν„°μ˜ 10%λ₯Ό λžœλ€μƒ˜ν”Œλ§ν•œ 데이터λ₯Ό ν•™μŠ΅ν•œ model
  • models/1_2000_model.pt
  • μ‚¬μš© μ½”λ“œλŠ” src 디렉토리에 μ €μž₯

2-2. 기계 독해(MRC) λͺ¨λΈ

  • μ œμ•ˆν•˜λŠ” λ°©λ²•μœΌλ‘œ ν•™μŠ΅μ‹œν‚€λ˜, μ œκ³΅λ°›μ€ λ°μ΄ν„°μ˜ 10%λ₯Ό λžœλ€μƒ˜ν”Œλ§ν•œ 데이터λ₯Ό ν•™μŠ΅ν•œ model
  • model/roberta_proposed/checkpoint-16883
  • μ‚¬μš© μ½”λ“œλŠ” src 디렉토리에 쑴재

3. How to use ⭐

3-1. ν‚€μ›Œλ“œ μΆ”μΆœ(Keyword Extraction) λͺ¨λΈ

python main.py
  • argument μ„€λͺ…

    • -- train_flag True: λͺ¨λΈ ν•™μŠ΅
    • -- trian_flag False: λͺ¨λΈ 평가 / 데λͺ¨
    • -- data_dir λͺ¨λΈμ˜ κ²°κ³Ό 데이터 μ €μž₯ μœ„μΉ˜
    • -- save_dir ν•™μŠ΅λœ λͺ¨λΈ μ €μž₯ μœ„μΉ˜
    • -- load_dir ν•™μŠ΅λœ λͺ¨λΈ λ‘œλ“œ
  • λͺ¨λΈ μ‹€ν–‰ 결과둜, ν‚€μ›Œλ“œ 좜λ ₯ λ ˆμ΄λΈ”μ΄ ν¬ν•¨λœ ###_keyword.json 파일 생성

3-2. 기계 독해(MRC) λͺ¨λΈ

requirements

pip install -r requirements.txt

Training

python run_mrc.py --do_train=True --from_init_weight=True dataset_nums=5  

Evaluate

python run_mrc.py --do_eval=True --from_init_weight=False --predict_file=[val_#.json] --checkpoint=16883 --filtered_context=False

Predict ⭐⭐

python run_mrc.py --do_predict=True --from_init_weight=False --checkpoint=16883
  1. Paper Context : λ…Όλ¬Έ λ‚΄μš© μž…λ ₯
  2. Question about the paper : λ…Όλ¬Έ κ΄€λ ¨ 질문 μž…λ ₯
  3. Question Keyword from Keyword Model : 사전 κ΅¬μΆ•λœ 질문 ν‚€μ›Œλ“œ or ν‚€μ›Œλ“œ μΆ”μΆœ λͺ¨λΈμ΄ μ˜ˆμΈ‘ν•œ 질문 ν‚€μ›Œλ“œ μž…λ ₯
  4. Evidence Sentence from IR Model : 사전 κ΅¬μΆ•λœ ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄ μΆ”μΆœν•œ λ‹¨μ„œλ¬Έμž₯ or 검색 λͺ¨λΈμ΄ κ²€μƒ‰ν•œ λ‹¨μ„œ λ¬Έμž₯ μž…λ ₯
  • argument μ„€λͺ…
    • μžμ„Έν•œ 섀정은 run_mrc.py 파일 μ°Έκ³ 
    • -- output_dir : ν•™μŠ΅λœ λͺ¨λΈ μ €μž₯ μœ„μΉ˜
    • -- dataset_num: ν•™μŠ΅ν•  파일 갯수
    • -- checkpoint : ν•™μŠ΅λœ λͺ¨λΈ checkpoint 16883
    • -- from_init_weight : pre trained roberta weight λ‘œλ“œ
    • -- filtered_context : 검색λͺ¨λΈμ΄ λ§Œλ“  context μ‚¬μš© (검색λͺ¨λΈ 예츑 파일이 μžˆμ–΄μ•Όν•¨)
    • -- do_train : λͺ¨λΈ ν•™μŠ΅
    • -- do_eval : λͺ¨λΈ 평가
    • -- do_predict : 데λͺ¨ μ‹€ν–‰, ν˜„μž¬ λ””ν΄νŠΈ κ°’

😎 Demo Video

데λͺ¨μ˜μƒ_0 (1)