Skip to content

Pytorch 트랜스포머 구현과 언어모델(BERT MLM, ELECTRA), 기계번역 테스트.

Notifications You must be signed in to change notification settings

nawnoes/pytorch-transformer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pytorch Transformer

Pytorch 트랜스포머 구현과 언어모델(BERT MLM, ELECTRA), 기계번역 테스트.

Model

model
 ㄴ transformer.py    ﹒﹒﹒ Transformer 모델
 ㄴ electra.py        ﹒﹒﹒ ELECTRA 모델
 ㄴ util.py           ﹒﹒﹒ 모델에 사용되는 유틸
 ㄴ visualization.py  ﹒﹒﹒ 모델의 각 부분 시각화
example
 ㄴ language_model    ﹒﹒﹒ 언어모델 예제
 ㄴ translation       ﹒﹒﹒ 번역 예제

1. Masked Language Model(ex. BERT)

BERT에서 사용한 MLM을 이용한 언어모델 Pretraining

Usage

① 디렉토리 및 파일 코랩으로 이동 
② config/mlm 경로의 학습할 설정 확인 
③ Pretraining 할 Data와 Vocab 확인 
④ train-mlm.ipynb로 Pretraining 
⑤ Pretraining 완료 후 korquad-transformer-mlm.ipynb로 Korquad 학습 및 테스트 

Model Config

  "dim": 512,
  "depth": 6,
  "n_head": 8,
  "max_seq_len" : 512,

KorQuAD 1.0

  • epoch: 5

model exact_match f1 score
KoBERT(Base) 52.81 80.27
transformer-bert-small 56.47 83.04

2. ELECTRA

트랜스포머 인코더 블록을 이용한 ELECTRA Pretraining

Usage

① 디렉토리 및 파일 코랩으로 이동 
② config/electra 경로의 학습하기 위한 json 설정 확인 
③ Pretraining 할 Data와 Vocab 확인 
④ train-electra.ipynb에서 electra/run_pretraing.py를 이용해 Pretraining 
⑤ Pretraining 완료 후 korquad-transformer-electra.ipynb로 Korquad 학습 및 테스트 

Model Config

ELECTRA-small 모델 테스트

Layers Embedding Size Hidden Size # heads
ELECTRA-small Discriminator 12 128 256 12
Generator 12 128 256 4

Training

① Warm up

  • torch.optim.lr_scheduler.StepLR: Generator가 충분히 수렴하지 못하는 경향.
  • torch.optim.lr_scheduler.OneCycleLR: 5e-3 까지 Warm up 후 learning rate 떨어지도록 학습. 5e-2 동작 X

② Amp

mixed precision을 사용해 학습 및 배치 사이즈 증가.

KorQuAD 1.0

  • epoch: 5

model exact_match f1 score
KoBERT(Base) 52.81 80.27
KoELECTRA-Small-v3 82.11 91.13
transformer-electra-small 55.83 82.02

3. Ko-En Translation

AI Hub 번역 데이터를 이용한 한국어 -> 영어 번역 모델

Data

① AI Hub Ko-En Translation Sample Data.

② AI Hub Ko-En Translation Spoken Data

구어체 번역 데이터 사용.

csv format data

당신한테는 언제가 좋은가요?,When would be a good day for you?
당신한테서 답장이 오면 난 하루가 행복해요.,I feel happy all day long if I get your reply.
당신회사는 공장과 직접 일을 하나요?,Does your company work with the factory directly?

Train Setting

# Model setting
model_name = 'transformer-translation-spoken'
vocab_num = 22000
max_length = 64
d_model = 512
head_num = 8
dropout = 0.1
N = 6
device = 'cuda:0' if torch.cuda.is_available() else 'cpu'

# Hyperparameter
epochs = 50
batch_size = 8
learning_rate = 0.8

Training

train_translation.py으로 번역 모델 학습.

python3 train_translation.py

Train Result

  • Epoch: 50
-----------------------------------------------------------------------------------------
| end of epoch   0 | time: 2005.31s | valid loss  4.95 | valid ppl   141.70
-----------------------------------------------------------------------------------------
| end of epoch   1 | time: 2149.59s | valid loss  4.62 | valid ppl   101.26
-----------------------------------------------------------------------------------------
| end of epoch   2 | time: 2058.49s | valid loss  4.39 | valid ppl    80.86
-----------------------------------------------------------------------------------------
| end of epoch   3 | time: 1966.75s | valid loss  4.25 | valid ppl    70.38
-----------------------------------------------------------------------------------------
                                ...중략...
| end of epoch  47 | time: 1973.69s | valid loss  2.79 | valid ppl    16.26
-----------------------------------------------------------------------------------------
| end of epoch  48 | time: 2076.40s | valid loss  2.77 | valid ppl    16.00
-----------------------------------------------------------------------------------------
| end of epoch  49 | time: 2080.24s | valid loss  2.79 | valid ppl    16.26
-----------------------------------------------------------------------------------------

Ko-En Translation Test

  • 10000 데이터 대비, 220000 데이터에서 더 좋은 성능
ko: 나는 먹고 자기만 했어요. en: I just had a lot of things.
------------------------------------------------------
ko: 나는 먹기 위해 운동했어요. en: I exercised to eat.
------------------------------------------------------
ko: 나는 먹을 음식을 좀 샀습니다. en: I bought some food.
------------------------------------------------------
ko: 나는 아침으로 매일 토스트를 만들어 먹어. en: I eat breakfast every morning.
------------------------------------------------------
ko: 당신이 노래부르는 영상을 보고싶어요 en: I singing videos and watched the song.
------------------------------------------------------
ko: 대단히 미안하지만 오늘 회의가 있어서 수업에 늦을것 같아요. en: I'm sorry but I am sorry but I am sorry but I am sorry.
------------------------------------------------------
ko: 당신이 준 장미는 향기로워요. en: I'm very happy to see you.
------------------------------------------------------
ko: 당신이 제일 많이 생각하는 게 무엇인가요? en: What is the most important thing you think?
------------------------------------------------------
ko: 가정집을 개조한 분위기 좋은 레스토랑이 있습니다. en: There is a good restaurant to be a good restaurant.
------------------------------------------------------
ko: 가난뱅이인 제가 당신을 어떻게 사랑할 수 있습니까? en: How can I love you and love you?

References

About

Pytorch 트랜스포머 구현과 언어모델(BERT MLM, ELECTRA), 기계번역 테스트.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published