기계번역기

preprocessing

지원인데요 2022. 1. 6. 22:22
728x90
반응형

이 자료는 패스트캠퍼스 김기현강사의 딥러닝을 활용한 자연어생성 올인원 패키지online 수업을 복습하고 내 맛대로 변경하면서 작성하는 글입니다.

 

 

1. AI-Hub에서 160만개의 데이터 수집

  1. 엑셀 형태임 —> txt파일로 추출하기
    • 내부는 tab으로 나뉘어져있음(한국어 tab 영어)
  • 형태는 다음과 같다.

 

총 1602419개의 text, 한국어 tab 영어로 이루어져있음


2. txt파일을 tsv파일로 변환

  • cat ./해당 폴더/*.txt > corpus.tsv

3. shuffle하기

 

  • 폴더내에 파일순으로 합쳐졌기 때문에 shuffling을 진행한다.
  • 셔플하기전 모습
  • 셔플후 모습
    ※ 명령어 : gshuf ./corpus.tsv > ./corpus.shuf.tsv
  • 오류없이 해결

4. train,valid,test set 나누기

 

  • 총 1602419개의 데이터
    • train : 120만
    • valid : 20만
    • test : 202419

※ 명령어 : head -n 1200000 ./corpus.shuf.tsv > corpus.shuf.train.tsv ; tail -n 402419 ./corpus.shuf.tsv | head -n 200000 > ./corpus.shuf.valid.tsv

tail -n 202419 ./corpus.shuf.tsv > ./corpus.shuf.test.tsv

 

다음과 같이 잘 분리 되었다


5. tokenization

 

5.1 한국어 영어 분리

  • train data의 한국어, 영어 분리
    • cut -f1 ./corpus.shuf.train.tsv > corpus.shuf.train.ko ; cut -f2 ./corpus.shuf.train.tsv > corpus.shuf.train.en

 

  • valid data의 한국어, 영어 분리
    • cut -f1 ./corpus.shuf.valid.tsv > corpus.shuf.valid.ko ; cut -f2 ./corpus.shuf.valid.tsv > corpus.shuf.valid.en
  • test data의 한국어, 영어 분리
    • cut -f1 ./corpus.shuf.test.tsv > corpus.shuf.test.ko ; cut -f2 ./corpus.shuf.test.tsv > corpus.shuf.test.en

 

5.2 tokenization

  • train(한국어)

train data에 mecab tokenize 적용후 post_tokenize.py적용하기 >> cat ./data/corpus.shuf.train.ko | mecab -O wakati > ./data/corpus.shuf.train.tok.ko | python ./post_tokenize.py ./data/corpus.shuf.train.ko > ./data/corpus.shuf.train.tok.ko

  • valid(한국어)

valid data에 mecab tokenize 적용후 post_tokenize.py적용하기 >> cat ./data/corpus.shuf.valid.ko | mecab -O wakati > ./data/corpus.shuf.valid.tok.ko | python ./post_tokenize.py ./data/corpus.shuf.valid.ko > ./data/corpus.shuf.valid.tok.ko

  • test(한국어)

test data에 mecab tokenize 적용후 post_tokenize.py적용하기 >> cat ./data/corpus.shuf.test.ko | mecab -O wakati > ./data/corpus.shuf.test.tok.ko | python ./post_tokenize.py ./data/corpus.shuf.test.ko > ./data/corpus.shuf.test.tok.ko

 

추가로 detokenize까지 적용가능(_를 없애주는 역할)

 

  • train(영어)

train data에 moses tokenize 적용후 post_tokenize.py적용하기 >> cat ./data/corpus.shuf.train.en | python ./tokenizer.py | python ./post_tokenize.py ./data/corpus.shuf.train.en > ./data/corpus.shuf.train.tok.en

  • valid(영어)

valid data에 moses tokenize 적용후 post_tokenize.py적용하기 >> cat ./data/corpus.shuf.valid.en | python ./tokenizer.py | python ./post_tokenize.py ./data/corpus.shuf.valid.en > ./data/corpus.shuf.valid.tok.en

  • test(영어)

test data에 moses tokenize 적용후 post_tokenize.py적용하기 >> cat ./data/corpus.shuf.test.en | python ./tokenizer.py | python ./post_tokenize.py ./data/corpus.shuf.test.en > ./data/corpus.shuf.test.tok.en


 

6. Subword Segmentation

 

tokenization을 진행 후, subword segmentation을 적용한다.

여기서 중요한 점은 train data set에서 bpe를 학습후 다른 데이터셋(valid,test)에 적용한다.

다른 데이터셋도 bpe를 학습하면 그것은 치팅..

 

  • train(영어, 한국어) bpe 학습하기
  1. 영어 : python ./subword-nmt/learn_bpe.py --input ./data/corpus.shuf.train.tok.en --output bpe.en.model --symbols 50000 --verbose
  1. 한국어 : python ./subword-nmt/learn_bpe.py --input ./data/corpus.shuf.train.tok.ko --output bpe.ko.model --symbols 30000 --verbose

 

  • train,valid,test(한국어) bpe 적용하기

>> cat ./data/corpus.shuf.train.tok.ko | python ./subword-nmt/apply_bpe.py -c ./bpe.ko.model > ./data/corpus.shuf.train.tok.bpe.ko ; cat ./data/corpus.shuf.valid.tok.ko | python subword-nmt/apply_bpe.py -c ./bpe.ko.model > ./data/corpus.shuf.valid.tok.bpe.ko ; cat ./data/corpus.shuf.test.tok.ko | python subword-nmt/apply_bpe.py -c ./bpe.ko.model > ./data/corpus.shuf.test.tok.bpe.ko

 

  • train,valid,test(영어) bpe 적용하기

>> cat ./data/corpus.shuf.train.tok.en | python ./subword-nmt/apply_bpe.py -c ./bpe.en.model > ./data/corpus.shuf.train.tok.bpe.en ; cat ./data/corpus.shuf.valid.tok.en | python subword-nmt/apply_bpe.py -c ./bpe.en.model > ./data/corpus.shuf.valid.tok.bpe.en ; cat ./data/corpus.shuf.test.tok.en | python subword-nmt/apply_bpe.py -c ./bpe.en.model > ./data/corpus.shuf.test.tok.bpe.en

 

적용후 모습이다.

다 정확하게 이루어졌다.

 

 

 

반응형

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

BLEU  (0) 2022.01.18
모델  (0) 2022.01.17