boostcampaitech2/final-project-level3-nlp-02

final-project-level3-nlp-02 created by GitHub Classroom

11

stars

233

commits

Python

primary language

Dec 31, 2021

updated

README

Korean Title Generator

Final Project in 2nd BoostCamp AI Tech 2기 by 메타몽팀 (2조)

Demo

Demo

Members

고창용박범진박상하안명철이기성이예빈정유석
GithubGithubGithubGithubGithubGithubGithub

Content

Project Abstract

🔥 생성 요약을 통한 한국어 문서 제목 생성기 🔥

  • 데이터셋 :
    • 종류 : 논문 데이터 162,341개, 문서 데이터 371,290개
    • train_data : 275,219개 (Text, Title, Document Type)
    • validation_data : 91,741개 (Text, Title, Document Type)
    • test_data : 81,739개 (Text, Title, Document Type)

How to use (최종 모델 checkpoint로 수정해야함)

import torch
from transformers import AutoConfig
from transformers import AutoTokenizer
from models.modeling_kobigbird_bart import EncoderDecoderModel

config = AutoConfig.from_pretrained('metamong1/bigbird-tapt-ep3')
tokenizer = AutoTokenizer.from_pretrained('metamong1/bigbird-tapt-ep3')
model = EncoderDecoderModel.from_pretrained('metamong1/bigbird-tapt-ep3', config=config)

text = "본 논문의 목적은 수도권 지역의 수출입 컨테이너 화물에 대한 최적 복합운송 네트워크를 찾는 데 있다. 따라서 이 지역의 컨테이너 화물의 물동량 흐름을 우선적으로 분석하였고, 총 수송비용과 총 수송 시간을 고려한 최적 경로를 구하려 시도하였다. 이를 위해 모형 설정은 0-1 이진변수를 이용한 목적계획법을 사용하였고, 유전알고리즘 기법을 통해 해를 도출하였다. 그 결과, 수도권 지역의 33개 각 시(군)에 대한 내륙 수송비용과 수송 시간을 최소화하는 수송거점 및 운송 수단을 도출함으로써 이 지역의 수출입 컨테이너 화물에 대한 최적 복합운송 네트워크를 발견할 수 있었다. 또한 시나리오별 수송비용 및 수송 시간의 절감 효과를 정량적으로 제시한다."

raw_input_ids = tokenizer.encode(text)
input_ids = [tokenizer.bos_token_id] + raw_input_ids + [tokenizer.eos_token_id]

summary_ids = model.generate(torch.tensor([input_ids]))
tokenizer.decode(summary_ids.squeeze().tolist(), skip_special_tokens=True)

정답 제목

유전알고리즘을 이용한 복합운송최적화모형에관한 연구

생성 제목

유전알고리즘을 이용한 수도권의 수출입 컨테이너 화물에 대한 최적 복합운송

Result (결과 뽑고 수정 필요)

RougeL
Test41.687

Hardware

  • Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz
  • NVIDIA Tesla V100-SXM2-32GB

Operating System

  • Ubuntu 18.04.5 LTS

Archive Contents

  • final-project-level3-nlp-02 : 구현 코드와 모델 checkpoint 및 모델 결과를 포함하는 디렉토리
final-project-level3-nlp-02/
├── model
│   ├── args  
│   │   ├── __init__.py
│   │   ├── DataTrainingArguments.py
│   │   ├── GenerationArguments.py
│   │   ├── LoggingArguments.py
│   │   ├── ModelArguments.py
│   │   └── Seq2SeqTrainingArguments.py
│   ├── models  
│   │   ├── modeling_distilbert.py
│   │   ├── modeling_kobigbird_bart.py
│   │   └── modeling_longformer_bart.py
│   ├── utils   
│   │   ├── data_collator.py
│   │   ├── data_loader.py
│   │   ├── data_preprocessor.py
│   │   ├── rouge.py
│   │   └── trainer.py
│   ├── optimization   
│   │   ├── knowledge_distillation.py
│   │   ├── performance_test.py
│   │   ├── performnaceBenchmark.py
│   │   └── quantization.py
│   ├── predict.py
│   ├── pretrain.py
│   ├── REDAME.md
│   ├── running.sh
│   └── train.py
├── serving
│   ├── app.py
│   ├── GenerationArguments.py
│   ├── postprocessing.py
│   ├── predict.py
│   ├── utils.py
│   └── viz.py
├──.gitignore
└──requirements.sh

  • utils
    • utils/data_collator.py : 모델에 입려되는 Batch를 생성하는 코드
    • utils/data_preprocessor.py : Text를 전처리하는 코드
    • utils/processor.py : Text를 Tokenizer를 이용해서 정수 인코딩을 하는 코드
    • utils/rouge.py : 모델의 평가지표와 관련되는 코드
    • utils/trainer.py : 모델을 학습하는데 활용하는 trainer 코드
  • models
    • modeling_kobigbird_bart.py : bigbird bart 모델 코드
    • modeling_longformerbart.py : longformer bart 모델 코드
  • optimization
    • knowledge_distillation.py :
    • performanceBenchmark.py :
    • performance_test.py :
    • quantization.py :
  • predict.py : 모델을 이용해서 입력된 문서의 제목을 생성하는 코드
  • pretrain.py : summarization model을 fintune을 위한 코드
  • train.py : summarization model을 pretrain을 위한 코드

Getting Started

Dependencies

  • python=3.8.5
  • transformers==4.11.0
  • datasets==1.15.1
  • torch==1.10.0
  • streamlit==1.1.0
  • elasticsearch==7.16.1
  • pyvis==0.1.9
  • plotly==5.4.0

Install Requirements

sh requirements.sh

Arguments

Model Arguments

argumentdescriptiondefault
model_name_or_path사용할 사전 학습 모델 선택gogamza/kobart-base-v1
use_model모델 타입 선택 [auto, bigbart, longbart]auto
config_namePretrained된 model config 경로None
tokenizer_namecustomized tokenizer 경로 선택None
use_fast_tokenizerfast tokenizer 사용 여부True
hidden_sizeembedding hidden dimension 크기128

👇 longBART specific

argumentdescriptiondefault
attention_window_sizeattention window 크기256
attention_head_sizeattention head 개수4
encoder_layer_sizeencoder layer 수3
decoder_layer_sizedecoder layer 수3

DataTrainingArguments

argumentdescriptiondefault
text_columndataset에서 본문 column 이름text
title_columndataset에서 제목 column 이름title
overwrite_cache캐시된 training과 evaluation set을 overwrite하기False
preprocessing_num_workers전처리동안 사용할 prcoess 수 지정1
max_source_lengthText Sequence 길이 지정1024
max_target_lengthTitle Sequence 길이 지정128
pad_to_max_length최대 길이로 Padding을 진행False
num_beamsEvaluation 할 때의 beam search에서 beam의 크기None
use_auth_token_pathHuggingface에 Dataset을 혹은 Model을 불러올 때 private key 주소./use_auth_token.env
num_samplestrain_dataset에서 sample 추출 갯수(None일 때는 전체 데이터 수 사용)None
relative_eval_stepsEvaluation 횟수10
is_pretrainPretraining 여부False
is_part전체 데이터 수의 50% 정도 사용False
use_preprocessing전처리 여부False
use_doc_type_idsdoc_type_embedding 사용 여부False

LoggingArguments

argumentdescriptiondefault
wandb_unique_tagwandb에 기록될 모델의 이름None
dotenv_pathwandb key값을 등록하는 파일의 경로./wandb.env
project_namewandb에 기록될 project nameKobart

GenerationArguments

argumentdescriptiondefault
max_length생성될 문장의 최대 길이None
min_length생성될 문장의 최소 길이1
length_penalty문장의 길이에 따라 주는 penalty의 정도1.0
early_stoppingBeam의 갯수 만큼 문장의 생성이 완료 되었을 때 생성을 종료 여부True
output_scoresprediction score 출력 여부False
no_repeat_ngram_size반복 생성되지 않을 ngram의 최소 크기3
num_return_sequences생성 문장 갯수1
top_kTop-K 필터링에서의 K 값50
top_p생성 과정에서 이어지는 토큰을 선택할 때의 최소 확률 값0.95

Seq2SeqTrainingArguments

argumentdescriptiondefault
metric_for_best_modeltrain 후 저장될 모델 선정 기준rougeL
es_patienceearly stopping이 되는 patience 값3
is_noamnoam scheduler 사용 여부False
use_rdropR-drop 사용 여부False
reg_alphaR-drop 사용 시 적용될 KL loss 비율0.7
alphaknowledge distillation 시 CE loss 적용 비율0.5
temperaturedistillation을 할 때의 temperature 값1.0
use_originaltiny distillation을 할 때 prediction loss 사용 여부False
teacher_check_pointteacher model의 checkpointNone
use_teacher_forcingteacher forcing 적용 여부False

Running Command

Train

$ python train.py \
--model_name_or_path metamong1/bigbird-tapt-ep3 \
--use_model bigbart \
--do_train \
--output_dir checkpoint/kobigbirdbart_full_tapt_ep3_bs16_pre_noam \
--overwrite_output_dir \
--num_train_epochs 3 \
--use_doc_type_ids \
--max_source_length 2048 \
--max_target_length 128 \
--metric_for_best_model rougeLsum \
--es_patience 3 \
--load_best_model_at_end \
--project_name kobigbirdbart \
--wandb_unique_tag kobigbirdbart_full_tapt_ep5_bs16_pre_noam \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 16 \
--gradient_accumulation_steps 8 \
--use_preprocessing \
--warmup_steps 1000 \
--evaluation_strategy epoch \
--is_noam \
--learning_rate 0.08767941605644963 \
--save_strategy epoch

Predict

$ python predict.py \
--model_name_or_path model/baseV1.0_Kobart_ep2_1210 \
--num_beams 3

Reference

  1. BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

    https://arxiv.org/pdf/1910.13461.pdf

  2. Longformer: The Long-Document Transformer

    https://arxiv.org/pdf/2004.05150.pdf

  3. Big Bird: Transformers for Longer Sequences

    https://arxiv.org/pdf/2007.14062.pdf

  4. Scheduled Sampling for Transformers

    https://arxiv.org/pdf/1906.07651.pdf

  5. On the Effect of Dropping Layers of Pre-trained Transformer Models

    https://arxiv.org/pdf/2004.03844.pdf

  6. R-Drop: Regularized Dropout for Neural Networks

    https://arxiv.org/pdf/2106.14448v2.pdf

Contributors

presto105

52 commits

abbymark

50 commits

gistarrr

38 commits

changyong93

37 commits

boostcampaitech2/final-project-level3-nlp-02

final-project-level3-nlp-02 created by GitHub Classroom

11

stars

233

commits

Python

primary language

Dec 31, 2021

updated

README

Korean Title Generator

Final Project in 2nd BoostCamp AI Tech 2기 by 메타몽팀 (2조)

Demo

Demo

Members

고창용박범진박상하안명철이기성이예빈정유석
GithubGithubGithubGithubGithubGithubGithub

Content

Project Abstract

🔥 생성 요약을 통한 한국어 문서 제목 생성기 🔥

  • 데이터셋 :
    • 종류 : 논문 데이터 162,341개, 문서 데이터 371,290개
    • train_data : 275,219개 (Text, Title, Document Type)
    • validation_data : 91,741개 (Text, Title, Document Type)
    • test_data : 81,739개 (Text, Title, Document Type)

How to use (최종 모델 checkpoint로 수정해야함)

import torch
from transformers import AutoConfig
from transformers import AutoTokenizer
from models.modeling_kobigbird_bart import EncoderDecoderModel

config = AutoConfig.from_pretrained('metamong1/bigbird-tapt-ep3')
tokenizer = AutoTokenizer.from_pretrained('metamong1/bigbird-tapt-ep3')
model = EncoderDecoderModel.from_pretrained('metamong1/bigbird-tapt-ep3', config=config)

text = "본 논문의 목적은 수도권 지역의 수출입 컨테이너 화물에 대한 최적 복합운송 네트워크를 찾는 데 있다. 따라서 이 지역의 컨테이너 화물의 물동량 흐름을 우선적으로 분석하였고, 총 수송비용과 총 수송 시간을 고려한 최적 경로를 구하려 시도하였다. 이를 위해 모형 설정은 0-1 이진변수를 이용한 목적계획법을 사용하였고, 유전알고리즘 기법을 통해 해를 도출하였다. 그 결과, 수도권 지역의 33개 각 시(군)에 대한 내륙 수송비용과 수송 시간을 최소화하는 수송거점 및 운송 수단을 도출함으로써 이 지역의 수출입 컨테이너 화물에 대한 최적 복합운송 네트워크를 발견할 수 있었다. 또한 시나리오별 수송비용 및 수송 시간의 절감 효과를 정량적으로 제시한다."

raw_input_ids = tokenizer.encode(text)
input_ids = [tokenizer.bos_token_id] + raw_input_ids + [tokenizer.eos_token_id]

summary_ids = model.generate(torch.tensor([input_ids]))
tokenizer.decode(summary_ids.squeeze().tolist(), skip_special_tokens=True)

정답 제목

유전알고리즘을 이용한 복합운송최적화모형에관한 연구

생성 제목

유전알고리즘을 이용한 수도권의 수출입 컨테이너 화물에 대한 최적 복합운송

Result (결과 뽑고 수정 필요)

RougeL
Test41.687

Hardware

  • Intel(R) Xeon(R) Gold 5120 CPU @ 2.20GHz
  • NVIDIA Tesla V100-SXM2-32GB

Operating System

  • Ubuntu 18.04.5 LTS

Archive Contents

  • final-project-level3-nlp-02 : 구현 코드와 모델 checkpoint 및 모델 결과를 포함하는 디렉토리
final-project-level3-nlp-02/
├── model
│   ├── args  
│   │   ├── __init__.py
│   │   ├── DataTrainingArguments.py
│   │   ├── GenerationArguments.py
│   │   ├── LoggingArguments.py
│   │   ├── ModelArguments.py
│   │   └── Seq2SeqTrainingArguments.py
│   ├── models  
│   │   ├── modeling_distilbert.py
│   │   ├── modeling_kobigbird_bart.py
│   │   └── modeling_longformer_bart.py
│   ├── utils   
│   │   ├── data_collator.py
│   │   ├── data_loader.py
│   │   ├── data_preprocessor.py
│   │   ├── rouge.py
│   │   └── trainer.py
│   ├── optimization   
│   │   ├── knowledge_distillation.py
│   │   ├── performance_test.py
│   │   ├── performnaceBenchmark.py
│   │   └── quantization.py
│   ├── predict.py
│   ├── pretrain.py
│   ├── REDAME.md
│   ├── running.sh
│   └── train.py
├── serving
│   ├── app.py
│   ├── GenerationArguments.py
│   ├── postprocessing.py
│   ├── predict.py
│   ├── utils.py
│   └── viz.py
├──.gitignore
└──requirements.sh

  • utils
    • utils/data_collator.py : 모델에 입려되는 Batch를 생성하는 코드
    • utils/data_preprocessor.py : Text를 전처리하는 코드
    • utils/processor.py : Text를 Tokenizer를 이용해서 정수 인코딩을 하는 코드
    • utils/rouge.py : 모델의 평가지표와 관련되는 코드
    • utils/trainer.py : 모델을 학습하는데 활용하는 trainer 코드
  • models
    • modeling_kobigbird_bart.py : bigbird bart 모델 코드
    • modeling_longformerbart.py : longformer bart 모델 코드
  • optimization
    • knowledge_distillation.py :
    • performanceBenchmark.py :
    • performance_test.py :
    • quantization.py :
  • predict.py : 모델을 이용해서 입력된 문서의 제목을 생성하는 코드
  • pretrain.py : summarization model을 fintune을 위한 코드
  • train.py : summarization model을 pretrain을 위한 코드

Getting Started

Dependencies

  • python=3.8.5
  • transformers==4.11.0
  • datasets==1.15.1
  • torch==1.10.0
  • streamlit==1.1.0
  • elasticsearch==7.16.1
  • pyvis==0.1.9
  • plotly==5.4.0

Install Requirements

sh requirements.sh

Arguments

Model Arguments

argumentdescriptiondefault
model_name_or_path사용할 사전 학습 모델 선택gogamza/kobart-base-v1
use_model모델 타입 선택 [auto, bigbart, longbart]auto
config_namePretrained된 model config 경로None
tokenizer_namecustomized tokenizer 경로 선택None
use_fast_tokenizerfast tokenizer 사용 여부True
hidden_sizeembedding hidden dimension 크기128

👇 longBART specific

argumentdescriptiondefault
attention_window_sizeattention window 크기256
attention_head_sizeattention head 개수4
encoder_layer_sizeencoder layer 수3
decoder_layer_sizedecoder layer 수3

DataTrainingArguments

argumentdescriptiondefault
text_columndataset에서 본문 column 이름text
title_columndataset에서 제목 column 이름title
overwrite_cache캐시된 training과 evaluation set을 overwrite하기False
preprocessing_num_workers전처리동안 사용할 prcoess 수 지정1
max_source_lengthText Sequence 길이 지정1024
max_target_lengthTitle Sequence 길이 지정128
pad_to_max_length최대 길이로 Padding을 진행False
num_beamsEvaluation 할 때의 beam search에서 beam의 크기None
use_auth_token_pathHuggingface에 Dataset을 혹은 Model을 불러올 때 private key 주소./use_auth_token.env
num_samplestrain_dataset에서 sample 추출 갯수(None일 때는 전체 데이터 수 사용)None
relative_eval_stepsEvaluation 횟수10
is_pretrainPretraining 여부False
is_part전체 데이터 수의 50% 정도 사용False
use_preprocessing전처리 여부False
use_doc_type_idsdoc_type_embedding 사용 여부False

LoggingArguments

argumentdescriptiondefault
wandb_unique_tagwandb에 기록될 모델의 이름None
dotenv_pathwandb key값을 등록하는 파일의 경로./wandb.env
project_namewandb에 기록될 project nameKobart

GenerationArguments

argumentdescriptiondefault
max_length생성될 문장의 최대 길이None
min_length생성될 문장의 최소 길이1
length_penalty문장의 길이에 따라 주는 penalty의 정도1.0
early_stoppingBeam의 갯수 만큼 문장의 생성이 완료 되었을 때 생성을 종료 여부True
output_scoresprediction score 출력 여부False
no_repeat_ngram_size반복 생성되지 않을 ngram의 최소 크기3
num_return_sequences생성 문장 갯수1
top_kTop-K 필터링에서의 K 값50
top_p생성 과정에서 이어지는 토큰을 선택할 때의 최소 확률 값0.95

Seq2SeqTrainingArguments

argumentdescriptiondefault
metric_for_best_modeltrain 후 저장될 모델 선정 기준rougeL
es_patienceearly stopping이 되는 patience 값3
is_noamnoam scheduler 사용 여부False
use_rdropR-drop 사용 여부False
reg_alphaR-drop 사용 시 적용될 KL loss 비율0.7
alphaknowledge distillation 시 CE loss 적용 비율0.5
temperaturedistillation을 할 때의 temperature 값1.0
use_originaltiny distillation을 할 때 prediction loss 사용 여부False
teacher_check_pointteacher model의 checkpointNone
use_teacher_forcingteacher forcing 적용 여부False

Running Command

Train

$ python train.py \
--model_name_or_path metamong1/bigbird-tapt-ep3 \
--use_model bigbart \
--do_train \
--output_dir checkpoint/kobigbirdbart_full_tapt_ep3_bs16_pre_noam \
--overwrite_output_dir \
--num_train_epochs 3 \
--use_doc_type_ids \
--max_source_length 2048 \
--max_target_length 128 \
--metric_for_best_model rougeLsum \
--es_patience 3 \
--load_best_model_at_end \
--project_name kobigbirdbart \
--wandb_unique_tag kobigbirdbart_full_tapt_ep5_bs16_pre_noam \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 16 \
--gradient_accumulation_steps 8 \
--use_preprocessing \
--warmup_steps 1000 \
--evaluation_strategy epoch \
--is_noam \
--learning_rate 0.08767941605644963 \
--save_strategy epoch

Predict

$ python predict.py \
--model_name_or_path model/baseV1.0_Kobart_ep2_1210 \
--num_beams 3

Reference

  1. BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

    https://arxiv.org/pdf/1910.13461.pdf

  2. Longformer: The Long-Document Transformer

    https://arxiv.org/pdf/2004.05150.pdf

  3. Big Bird: Transformers for Longer Sequences

    https://arxiv.org/pdf/2007.14062.pdf

  4. Scheduled Sampling for Transformers

    https://arxiv.org/pdf/1906.07651.pdf

  5. On the Effect of Dropping Layers of Pre-trained Transformer Models

    https://arxiv.org/pdf/2004.03844.pdf

  6. R-Drop: Regularized Dropout for Neural Networks

    https://arxiv.org/pdf/2106.14448v2.pdf

Contributors

presto105

52 commits

abbymark

50 commits

gistarrr

38 commits

changyong93

37 commits

Languages

Python

98.0%

Shell

2.0%