기계번역기

BLEU

지원인데요 2022. 1. 18. 17:21
728x90
반응형

valid set, test set은 각각 20만 20만 개로 매우 많아 1000으로 줄여서 BLEU를 측정하였습니다.

valid : head -n 1000 ./corpus.shuf.valid.tok.bpe.en > ./corpus.shuf.valid.tok.bpe.head-1000.en

          head -n 1000 ./corpus.shuf.valid.tok.bpe.ko > ./corpus.shuf.valid.tok.bpe.head-1000.ko

 

test : head -n 1000 ./corpus.shuf.test.tok.bpe.en > ./corpus.shuf.test.tok.bpe.head-1000.en

          head -n 1000 ./corpus.shuf.test.tok.bpe.ko > ./corpus.shuf.test.tok.bpe.head-1000.ko

 

BLEU를 구하기는 위해서 detokenize를 적용 후 다시 tokenize를 적용합니다.

한국어 : mecab, 영어 : moses

명령어는 다음과 같습니다.

valid

  • cat ./corpus.shuf.valid.tok.bpe.head-1000.ko | python ../detokenizer.py | mecab -O wakati > ./corpus.shuf.valid.tok.bpe.head-1000.detok.ko
  • cat ./corpus.shuf.valid.tok.bpe.head-1000.en | python ../detokenizer.py | python ../tokenizer.py > ./corpus.shuf.valid.tok.bpe.head-1000.detok.en

test

  • cat ./corpus.shuf.test.tok.bpe.head-1000.ko | python ../detokenizer.py | mecab -O wakati > ./corpus.shuf.test.tok.bpe.head-1000.detok.ko
  • cat ./corpus.test.valid.tok.bpe.head-1000.en | python ../detokenizer.py | python ../tokenizer.py > ./corpus.shuf.test.tok.bpe.head-1000.detok.en

 

BLEU 결과 확인!!

 

명령어는 다음과 같이 입력(valid set)

time cat ./corpus.shuf.valid.tok.bpe.head-1000.en | python ../translate.py --model_fn ../models/models.20220115/enko.bs-256.max_length-64.dropout-2.ws-512.hs-768.n_layers-4.iter_per_update-2.20.1.88-6.54.2.15-8.63.pth --gpu_id -1 --lang enko --beam_size 1 | python ../detokenizer.py | mecab -O wakati | ./multi-bleu.perl ./corpus.shuf.valid.tok.bpe.head-1000.detok.tok.ko

 

결과

BLEU = 18.14, 49.5/23.7/12.9/7.6 (BP=0.985, ratio=0.985, hyp_len=27747, ref_len=28173)

cat ./corpus.shuf.valid.tok.bpe.head-1000.en  0.00s user 0.00s system 0% cpu 1:39.04 total

python ../translate.py --model_fn  --gpu_id -1 --lang enko --beam_size 1  146.56s user 27.12s system 118% cpu 2:27.05 total

python ../detokenizer.py  0.04s user 0.02s system 0% cpu 2:27.06 total

mecab -O wakati  0.13s user 0.10s system 0% cpu 2:27.08 total

./multi-bleu.perl ./corpus.shuf.valid.tok.bpe.head-1000.detok.tok.ko  0.33s user 0.01s system 0% cpu 2:27.08 total

 

이번엔 test set으로!!

time cat ./corpus.shuf.test.tok.bpe.head-1000.en | python ../translate.py --model_fn ../models/models.20220115/enko.bs-256.max_length-64.dropout-2.ws-512.hs-768.n_layers-4.iter_per_update-2.20.1.88-6.54.2.15-8.63.pth --gpu_id -1 --lang enko --beam_size 1 | python ../detokenizer.py | mecab -O wakati | ./multi-bleu.perl ./corpus.shuf.test.tok.bpe.head-1000.detok.tok.ko

 

결과

BLEU = 16.95, 49.1/22.5/11.8/6.6 (BP=0.989, ratio=0.989, hyp_len=28310, ref_len=28612)

cat ./corpus.shuf.test.tok.bpe.head-1000.en  0.00s user 0.00s system 0% cpu 1:42.95 total

python ../translate.py --model_fn  --gpu_id -1 --lang enko --beam_size 1  148.28s user 27.93s system 117% cpu 2:29.74 total

python ../detokenizer.py  0.04s user 0.02s system 0% cpu 2:29.74 total

mecab -O wakati  0.13s user 0.04s system 0% cpu 2:29.75 total

./multi-bleu.perl ./corpus.shuf.test.tok.bpe.head-1000.detok.tok.ko  0.32s user 0.01s system 0% cpu 2:29.76 total

 

사실 매 에포크마다 저장된 모델을 valid데이터로 BLEU를 검증해서 가장 높게 나온 모델을 선택하여 BLEU를 측정하는 것이 기본입니다.

하지만 지금은 공부하면서 경험해보고자 하는 의미로 마지막 에포크 모델을 사용하여 측정하였습니다.

더욱더 발전하는 인공지능 개발자가 되고 싶다!!

 

좀 더 정리하여 더 자세히 업로드하겠습니다.

반응형

'기계번역기' 카테고리의 다른 글

모델  (0) 2022.01.17
preprocessing  (0) 2022.01.06