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 |