본문 바로가기

머신러닝, 딥러닝

딥러닝 프로젝트 4 : mT5 모델로 번역기 만들기

어제 한 것

[주의 : 삽질이 난무합니다]

데이터셋 용량이 큰데 구글 드라이브에 계속 버전 1 백업 1 샘플 1 추린 샘플 2 이런 식으로 저장하다 보니 용량 초과가 떴다. 그래서 100G 클라우드 결제... 

결제하니 이렇게 프로필에 구글 One을 표시해주는 원이 뜬다.

 

simple transfomer로 110만 pair의 데이터로 mT5 모델을 학습시키니 학습 시간만 10시간, 평가 시간만 6시간가량 걸렸다. (평가 시간 측정은 cpu 모드로 되어있어, gpu 모드로 바꾸니 1시간 정도만에 할 수 있었다..ㅎ)

속도를 개선하기 위해 구글 TPU 버킷도 만들고,

구글 TPU Research Cloud에서 31일 무료 TPU 클라우드를 쓸 수 있다고 해서 신청하고,

튜토리얼로 있는 번역 모델 한다고 따라 했는데 잘 안 됐다.. 흑흑...

 

그래서 결국 다시 simpletransfomer로 돌아와서 opus 데이터셋 버전 780만 한-영 pair 학습시키다가 램 두 번 터졌다. ㅜ 

780만 pair에서 ->110만 pair로 다시 돌아와 세 번째로 시도해봤으나 6시간을 학습시키고 나서 클래스 레이블 개수가 일치하지 않다고 에러가 떴다 ^^(51만 2천 개, 51만 1천 개 정도의 근소한 차이였는데... 후... 에러 날 거면 처음부터 띄우란 말이야... )

무튼 그렇게 학습시키고, sacre bleu를 사용한 BLEU 스코어를 매겨봤는데... base라인보다 한참 모자랐다.

그래도 지금껏 돌려본 번역기 중에 가장 자연스러운! 문장을 만들어서 만족한다.

 

mT5로 번역한 문장

kor> 너 참 예쁘다
eng> you look pretty

kor> 뭐야 이게?
eng> what?

kor> 우리집 고양이가 세상에서 제일 귀엽습니다
eng> my cat is the most cute in the world

로 번역했다.

 

기존에 6시간 학습한 트랜스포머 모델

kor> 너 참 예쁘다
eng> I hope you are a great person

kor> 500번이나 모델을 돌린다는 게 말이 된다고 생각하니?
eng> I 'm going to be a lot of the company

kor> 뭐야 이게?
eng> I ' m a student of organic materials

kor> 우리집 고양이가 세상에서 제일 귀엽습니다
eng> We are the best soccer team in the world

로 번역했다... ㅋㅋㅋㅋㅋㅋㅋ 근본 없는 번역...

 

Attention+GRU를 번역 모델

kor> 오늘 뭐 먹지 .
Eng> don t ve come to me .

kor> 목소리 듣고 싶다
eng> i think i m still a little reading .

kor> 나 소설 완전 좋아해
eng> why don t translate novels anymore .

kor> 우리 친구 맞지 ? .
eng> how many boys ?

이렇게 번역했다...ㅎ.... (학습 데이터가 적긴 해서, 기회가 된다면 동일한 데이터로 다시 학습시켜서 비교해야겠다.)

 

그리고 mT5에 대한 논문arxiv.org/abs/2010.11934을 꼼꼼히 읽었다.

갤탭...사길 잘했어...

이번 프로젝트를 하면서 논문을 한 4편 정도를 처음부터 끝까지 읽었다. 

무튼 저렇게 읽으니 mT5의 장점(다국어로 학습시켰고, 마스킹 시에도 BERT 기반 모델보다 성능이 낫고, 질문/응답 모델의 성능이 우수하다. 파라미터 사이즈가 큰 모델(110억 파라미터의 XXL 모델부터 300만 개의 파라미터로 구성된 Small 모델도 있다. 일반적인 성능-특히 번역 성능도 파라미터가 커질수록 올라가는데, 이럴 줄 알았으면 Large~XL 모델로 학습을 시작했을 것이다...)

그리고 신기한 게, mT5 모델은 101개의 언어를 기반으로 학습했지만, fine-tuning 시에 영어만 학습시킨다면 다른 언어를 출력 시에 뱉지 못한다. fine-tuning의 위력이 크구나...

그리고 최근 나온 다른 모델들이 위키피디아 기반으로 데이터를 긁어와 학습한다는 걸 알게 되었다. 신기하다. 위키피디아 문장들은 좀 딱딱하고 포멀할 텐데, 그럼 문서 기계번역에 더 유리할 듯싶다.

아쉬운 점은 이 논문에는 번역에 대한 성능보다는 질문/응답, 문장 생성 등에 대한 성능 비교가 많았다. 그것이 요새의 트렌드이기 때문일까...! 챗봇은 여러 기업의 홈페이지에서 기본적으로 깔 수 있고, 문장 생성은 검색 엔진이나 문서 요약 등 다방면에서 유리하기 때문에 그런 듯하다. 흠...

 

아, hugging face에 학습한 모델을 올렸다!

huggingface.co/AimB/mT5-en-kr-natural

 

AimB/mT5-en-kr-natural · Hugging Face

This model is currently loaded and running on the Inference API. ⚠️ This model could not be loaded by the inference API. ⚠️ This model can be loaded on the Inference API on-demand.

huggingface.co

50만 개의 구어체, 넷플릭스 자막 기반의 영-한 문장 fair로 10시간가량 학습된 모델이다.

simpletransfomers 기반이라,

from simpletransformers.t5 import T5Model

model = T5Model("mt5", "AimB/mT5-en-kr-natural")
print(model.predict(["우리집 고양이는 세상에서 제일 귀엽습니다"]))

이렇게 세줄만으로 간단하게 배포된 모델을 받아서 실행시켜볼 수 있다. `!pip install simpletransformers`가 필요하긴 하지만,,^^,,,