Coder Social home page Coder Social logo

kor_pretrain_lm's Introduction

Pre-Trained Korean Language Model

NLP 발전을 위해 한글 Corpus로 Pre-train한 Language Model을 공개합니다.

V2 모델의 max_seq_length는 384입니다. V2 모델 사용 시 config의 max_position_embeddings를 384로 변경하여 사용부탁드립니다.

Large Model의 경우 Fine-Tuning Step에서도 많은 Computational resource가 필요하기 때문에 고사양 Machine이 없을 시 Fine-Tuning이 어렵습니다. 이에 따라 Benchmark를 진행한 3가지 Task(KorQuAD1.0, KorNLI, KorSTS)에 대한 Fine-Tuning Model도 공개합니다.

Pre-train Corpus

  • Small: 한국어 Wikipedia
  • V1: 한국어 Wikipedia + News (88M Sentences)
  • V2: 한국어 Wikipedia + News (174M Sentences)

Model Detail

  • Masking Strategy: Dynamic Masking(RoBERTa) + n-gram Masking(ALBERT)
  • Additional Task: SOP(Sentence Order Prediction)(ALBERT)
  • Optimizer:
  • Scheduler:
  • Mixed-Precision Opt Level "O1" (Nvidia Apex)
  • Hyper-parameters
Hyper-parameter Small Model Large Model
Number of layers 12 24
Hidden Size 256 1024
FFN inner hidden size 1024 4048
Attention heads 8 16
Attention head size 32 64
Mask percent 15 15
Learning Rate 0.0001 0.00125
Warmup Proportion 0.1 0.0125
Attention Dropout 0.1 0.1
Dropout 0.1 0.1
Batch Size 256 2048
Train Steps 500k 125k(V1) 250k(V2)

Model Benchmark

KorQuAD1.0 (EM/F1) KorNLI (acc) KorSTS (spearman)
multilingual-BERT (Base Size) 70.42/90.25 76.33 77.90
KoBERT (Base Size) 52.81/80.27 79.00 79.64
KoELECTRA (Base Size) 61.10/89.59 80.85 83.21
KoELECTRA-v2 (Base Size) 84.34/92.58 80.61 84.30
HanBERT (Base Size) 78.74/92.02 80.89 83.33
Ours (Small Size) 78.98/88.20 74.67 74.53
Ours (Large Size) 85.61/93.89 81.68 83.90
Ours-V2 (Large Size) 125k steps 65.15/91.82 82.14 84.27
Ours-V2 (Large Size) 250k steps 65.17/91.77 83.21 84.75

V2 모델은 형태소분석기를 사용하지 않았기때문에 KorQuAD Task에서 EM이 낮습니다. Fine-tuning step의 pre-processing 또는 post-processing에 형태소분석기를 추가하여 이를 개선할 수 있습니다. KorNLI, KorSTS Task에서는 V2 모델의 성능이 향상된것을 확인할 수 있습니다.

  • Fine-tuning Setting (Ours Model)
    • Optimizer: Adam
    • Scheduler: LinearWarmup
    • Mixed Precision Opt Level "O2"
    • KorQuAD1.0
      • lr: 5e-5(V1) 3e-5(V2)
      • epochs: 4(V1) 2(V2)
      • batch size: 16
    • KorNLI
      • lr: 2e-5
      • epochs: 3
      • batch size: 32
    • KorSTS
      • Fine-tuning Step에서 분산은 상당히 클 수 있으므로 상대적으로 Dataset의 크기가 작은 KorSTS Task는 Random Seed에 대해 Grid Search({1~10})를 사용하여 가장 성능이 좋은 Model을 사용하였습니다. (Reference)
      • lr: 3e-5
      • epochs: 10
      • batch size: 16(V1) 32(V2, Small)
      • best random seed: 9(V1) 3(V2) 7(Small)

Example Scripts

KorQuAD1.0

  • Train
python3 run_qa.py \
  --checkpoint $MODEL_FILE \
  --config_file $CONFIG_FILE \
  --vocab_file $VOCAB_FILE \
  --train_file data/korquad/KorQuAD_v1.0_train.json \
  --max_seq_length 512 \
  --doc_stride 128 \
  --max_query_length 64 \
  --max_answer_length 30 \
  --per_gpu_train_batch_size 16 \
  --learning_rate 5e-5 \
  --num_train_epochs 4.0 \
  --adam_epsilon 1e-6 \
  --warmup_proportion 0.1
  • Eval
python3 eval_qa.py \
  --checkpoint $MODEL_FILE \
  --config_file $CONFIG_FILE \
  --vocab_file $VOCAB_FILE \
  --predict_file data/korquad/KorQuAD_v1.0_dev.json \
  --max_seq_length 512 \
  --doc_stride 64 \
  --max_query_length 64 \
  --max_answer_length 30 \
  --batch_size 16 \
  --n_best_size 20

KorNLI

  • Train
python3 run_classifier.py \
  --data_dir data/kornli \
  --task_name kornli \
  --config_file $CONFIG_FILE \
  --vocab_file $VOCAB_FILE \
  --checkpoint $MODEL_FILE \
  --do_eval \
  --max_seq_length 128 \
  --train_batch_size 32 \
  --eval_batch_size 32 \
  --learning_rate 3e-5 \
  --num_train_epochs 3.0 \
  --warmup_proportion 0.1
  • Eval
python3 eval_classifier.py \
  --data_dir data/kornli \
  --task_name kornli \
  --config_file $CONFIG_FILE \
  --vocab_file $VOCAB_FILE \
  --checkpoint $MODEL_FILE \
  --max_seq_length 128 \
  --eval_batch_size 32

KorSTS

  • Train
python3 run_classifier.py \
  --data_dir data/korsts \
  --task_name korsts \
  --config_file $CONFIG_FILE \
  --vocab_file $VOCAB_FILE \
  --checkpoint $MODEL_FILE \
  --do_eval
  --max_seq_length 128 \
  --train_batch_size 16 \
  --eval_batch_size 32 \
  --learning_rate 3e-5 \
  --num_train_epochs 10.0 \
  --warmup_proportion 0.1
  • Eval
python3 eval_classifier.py \
  --data_dir data/korsts \
  --task_name korsts \
  --config_file $CONFIG_FILE \
  --vocab_file $VOCAB_FILE \
  --checkpoint $MODEL_FILE \
  --max_seq_length 128 \
  --eval_batch_size 32

Acknowledgement

본 연구는 과학기술정보통신부 및 정보통신산업진흥원의 ‘고성능 컴퓨팅 지원’ 사업으로부터 지원받아 수행하였음
Following(or This research) was results of a study on the "HPC Support" Project, supported by the ‘Ministry of Science and ICT’ and NIPA.

Reference


  • 추가적으로 궁금하신점은 해당 repo의 issue를 등록해주시거나 [email protected]으로 메일 주시면 답변 드리겠습니다.

kor_pretrain_lm's People

Contributors

enlipleai avatar jeonsworld avatar monologg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

kor_pretrain_lm's Issues

run_qa.py 파일에서 argument로 받지 않은 변수를 참조합니다.

run_qa.py로 korquad 학습중에 아래와 같은 에러가 발생하는데요.

원인을 보니, args.gradient_accumulation_steps 가 main에서 인자로 받은않은 파라미터로 보입니다.

Traceback (most recent call last):
  File "run_qa.py", line 280, in <module>
    main()
  File "run_qa.py", line 276, in main
    train(args, train_dataset, model)
  File "run_qa.py", line 46, in train
    t_total = len(train_dataloader) // args.gradient_accumulation_steps * args.num_train_epochs
AttributeError: 'Namespace' object has no attribute 'gradient_accumulation_steps'

우선 임시방편으로, run_classifier.py에서 아래 코드를 발췌하여 붙여넣기 하면 될듯합니다.

 parser.add_argument('--gradient_accumulation_steps',
                        type=int,
                        default=1,
                        help="Number of updates steps to accumulate before performing a backward/update pass.")

코드 수정 부탁드립니다.

BERT large v1.0 모델의 KorQuAD 성능

안녕하세요.

공개해주신 소스를 그대로 사용하여 BERT Large를 학습했을 경우
93.0~1 정도의 성능이 나오는데 공개한 성능과 다소 차이가 있어서요.

Hyper Parameter도 따로 수정하지는 않았는데 이유를 알 수 있을까요?

vocab file

vocab file도 upload해주실수 있나요??

requirements 올려주세요

안녕하세요
pretrained LM을 공개해주셔서 감사합니다.
requirements를 올려주시면 감사하겠습니다.

LM pretrain 코드도 공개해주실 수 있나요?

공개하신 코드에서 down-stream task 훈련에 사용된 Processor 구조는 single thread에 ram위에 list를 올리는 접근이니, 확장해서 pretrain 을 구현하기에는 시간과 메모리 스케일이 너무 커서 제약이 있어보이네요.. 별도의 방법으로 pretrain을 하셨을 것 같은데, 해당 코드는 올려주신 것에 포함이 안 되어 있는 것 같아서요,, 공개해 주실 수 있나요??

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.