(변환) BERT Tensorflow 모델 Pytorch 모델로 사용하기
■ 개요
- 기본적으로 앞의 실험들은 (pretraining, fine-tunning) 텐서플로우로 진행하는 것이다.
- 구글에서 제공한 공식 텐서플로우 코드였고 버전은 TF 1.4로 1점대 버전이다.
- 이렇게 학습을 하기에는 다음과 같은 문제점이 있다고 판단한다.
- 2점대 버전인 요즘 텐서플로우와는 사용방법의 거리가 있음
- 기존에 사용하던 fine-tunning에는 squad처럼 코드의 일부분을 수정하여 사용은 가능하나
내가 원하는 뒷단의 layer 수정, 새로운 task에 fine-tunning 핸들링하는 것이 쉽지 않다.- 물론 구글식 텐서플로우 코드가 상당히 익숙하면 어렵지 않겠지만...
- 따라서 비교적 사용법이 쉬운 huggingface 방식으로 파이토치로 변환하는 과정을 해보자.
■ 내용
- 텐서플로우 모델을 파이토치에서 사용하는 것이 불가능하지는 않다. (처음 시도해봄)
- 찾아보니 기본적으로는 파이토치에서 똑같은 모델을 코드로 짠 후, 텐서플로우 모델을 불러와 weight에 name별로 대입시켜서 파이토치 모델을 저장하여 사용한다.
- 내가 맨땅에서 짠 텐서플로우 모델을 파이토치에서 사용하려면 이런 방법을 해야하는 것 같다.
- 물론 변환해주는 라이브러리들도 있지만 자세히 안찾아봄 (사용법이 그렇게 간단해보이지는 않음)
- 하지만 BERT는 매우매우 유명한 모델이고 huggingface에서 애초에 이런 변환작업을 많이 하였기 때문에 BERT 계열 모델들은 변환을 하는 가이드가 있다.
- https://huggingface.co/transformers/converting_tensorflow_models.html
- 1) Bert/GPT/GPT-2/Transformer-XL/XLNet/XLM 의 모델들을 변환할 수 있다
- 2) model.ckpt와 config.json이 필요하다.
- 3) 주어진 스크립트를 실행하면 model.bin이 생성된다.
- 4) 이 모델을 사용하기 위해서는 config.json과 vocab.txt가 필요하다.
- model.bin을 실제 사용하는 과정
- 사용할 떄는 https://huggingface.co/transformers/main_classes/model.html 의 링크를 참고하면 된다.
- 여기서 2번째 셀은 현재 주석 처리 되어있는데 이 방법은 model.bin으로 저장안하고 텐서플로우 모델을 바로 파이토치로 부르는 것이다.
- 하지만 이 방법은 로딩하는데 시간이 오래걸리고 기존의 BERT와 모델이 다른 경우는 error가 난다 (가령 vocab size가 다르다거나, hidden state 차원이 다르다거나)
- 이 모델을 사용하기 위해서는 token_idx을 넣어줘야하는데 tokenizer는 custom tokenizer이기 때문에 따로 파일을 불러읽어야 한다.
- 이 코드는 기존의 BERT 학습시킬 때 사용했던 tokenization 파일이다.
- 이제는 다음과 같이 사용하면 된다.
- 뒷 부분의 학습이나 fine-tunning은 불러 읽어들인 모델에 custom하게 코드를 짜서 사용하면 된다.
- 즉 기존의 영어 등의 pretrained_model을 사용하는 것과 같다.
댓글
댓글 쓰기