[AI 모델 탐험기] #3 모델 Fine-Tuning(feat. Teachable NLP)

Changyeop·2021년 4월 21일
5


해당 글은 제가 커먼컴퓨터에서 재직 중에 작성한 글이며 회사 공식 블로그에도 올라오고 있습니다.

Teachable NLP는 NLP 모델들을 복잡한 코드, GPU 없이 fine-tuning 할 수 있게 도와주는 프로그램입니다. 누구든지 학습에 사용할 데이터만 업로드하면 모델이 자동적으로 학습되고, 학습이 완료된 모델은 Ainize를 통해서 바로 API 형태로 배포되는데 이 API를 통해 fine-tuning 된 모델을 사용할 수 있습니다.

해당 프로그램을 바로 사용해보고 싶으신 분들은 아래 링크를 확인해주세요!

학습된 모델 사용해 보기 (TabTab) : https://kubecon-tabtab-ainize-team.endpoint.ainize.ai/

Teachable NLP : https://ainize.ai/teachable-nlp

Teachable NLP Tutorial : https://forum.ainetwork.ai/t/teachable-nlp-how-to-use-teachable-nlp/65


안녕하세요. 이번 시간에는 모델을 소개하는 시간이 아닌 모델을 직접 fine-tuning하는 시간입니다. 재밌을 거 같지 않나요? 저는 벌써 기대가 됩니다. 만들어볼 모델은 GPT-2 기반의 텍스트 생성 모델입니다. 텍스트 생성 모델은 예를 들어 ‘사과’라는 텍스트를 입력하면 ‘사과는 맛있다’라는 문장을 생성해주는 모델입니다.
모델을 만들어보기 앞서 준비물이 필요한데요, 학습에 사용할 데이터가 필요합니다. 저는 데이터를 Kaggle dataset에서 구했습니다. 제가 사용할 데이터는 News Articles 데이터입니다. 데이터를 받을 때는 라이센스를 잘 확인해주세요!
모델을 만들기 위해서는 크게 보면 1. 데이터 전처리 2. 모델 학습 3. 인퍼런스로 3단계로 볼 수 있을 거 같습니다. 각 단계마다 제가 작성한 코드를 제공해드릴테니 잘 보면서 따라와주세요~

데이터 전처리

재료 손질이 안되면 요리가 제대로 안되듯이 데이터 전처리 역시 제대로 안되면 모델 성능이 낮아집니다. 그렇기에 데이터 전처리는 모델 성능을 높이기 위해 꼭 필수적입니다. 각자 준비해온 데이터를 한번 훑어봐주세요. 제가 받은 데이터에는 불필요한 개행, 태그, URL등이 포함되어 있어 이를 제거하는 작업이 필요할 거 같습니다.
먼저 제가 받은 데이터를 파이썬 데이터 분석 라이브러리인 Pandas의 DataFrame 형태로 생성하겠습니다. 그다음 이 데이터의 결측값을 제거하겠습니다. 그 후 위에서 말했던 개행, 태그, URL 등을 파이썬 정규표현식을 사용하여 제거하겠습니다. 그 후 txt 파일로 만들면 끝입니다. 이 과정이 끝나게 되면 다음과 같은 사진처럼 됩니다. 자세한 코드는 여기에서 확인할 수 있습니다.

모델 학습

데이터 전처리가 끝났다면 이제는 모델을 학습할 차례입니다. 다양한 NLP 모듈들을 제공해주는 Transformers 라이브러리를 사용하여 모델을 학습해보겠습니다. 우선 학습 데이터가 있는 경로, 기본 베이스 모델의 이름, 에폭 등의 파라미터를 설정합니다. 그 후 학습할 모델과 토크나이저를 불러옵니다. 저는 GPT-2를 사용했습니다. TextDataset를 통해 만들어진 데이터셋, 토크나이저, 모델을 통해 학습을 진행하면 됩니다. 저는 colab에서 학습하였는데 약 30분 정도가 소요되었습니다. 자세한 코드는 여기에서 확인할 수 있습니다.

인퍼런스

이제 마지막 단계인 인퍼런스 과정을 진행해보겠습니다. 인퍼런스는 예측값을 얻는 행위를 말합니다. 우선 학습을 마친 모델과 토크나이저를 불러옵니다. 원하는 텍스트와 예측값의 길이를 입력하면 텍스트를 아까 불러왔던 토크나이저를 사용하여 인코딩을 합니다. 인코딩을 거치면 tensor([[16844, 24615, 1541, 11378]])와 같은 형식이 되는데 이를 예측값의 길이와 함께 모델에 넣어주면 디코딩을 거쳐 결과값을 얻을 수 있습니다. 아마 학습 데이터의 용량이 적어서 그런지 가끔 이상한 말을 하네요. 자세한 코드는 여기에서 확인할 수 있습니다.

Teachable NLP

위와 같은 과정은 일일이 코드를 작성해야 해서 번거로울 뿐만 아니라 개인적인 GPU가 없다면 시간이 오래 걸립니다(저 같은 경우는 4.6MB의 데이터로 5에폭 학습하는데 약 30분이 소요되었습니다). 따라서 이번에는 Ainize의 Teachable NLP를 사용해보겠습니다. Teachable NLP는 데이터만 넣어주게 되면 자동적으로 빠르게 학습이 되어 모델을 사용할 수 있는 API를 제공해줍니다. 즉 앞에서 설명한 모델 학습, 인퍼런스 부분에 대한 코드를 작성하지 않아도 됩니다. 한번 Teachable NLP를 사용하여 GPT-2를 fine-tuning 해볼까요?

  • 학습에 사용할 데이터 업로드

    데이터를 업로드 해주세요(txt 파일만 가능합니다).

  • 모델 타입과 에폭 설정

    모델 타입과 에폭을 설정해주세요. 모델의 타입에는 small, medium, large가 있고 에폭은 1 ~ 5에서 정할 수 있습니다. 저는 small, 5로 설정했습니다.

  • 모델 학습

    모델 학습 중 입니다. colab에서는 약 30분이 소요되었지만, Teachable NLP에서는 20분이 걸리네요.

  • 모델 바로 사용해보기(feat. TabTab)

학습이 완료되었다면, 모델을 바로 사용해보겠습니다. ‘Test your model’을 눌러주세요.

원하는 텍스트를 입력 후, ‘Tab 키’를 누르거나 ‘Run autocomplete’를 클릭하게 되면 다음 그림과 같이 학습된 모델이 입력 한 내용에 따라 기사를 자동 완성합니다.
제가 학습한 모델의 TabTab은 여기에서 사용할 수 있습니다. 제가 학습한 모델 뿐 만 아니라 다른 모델들도 사용해볼 수 있으니 한번 사용해보세요~

  • API 사용하기

    이번에는 API를 통해 모델을 사용해보겠습니다. 학습이 완료되면 Ainize를 통해서 바로 API서비스 형태로 모델이 배포가 됩니다. 제가 만든 모델은
$ curl — request POST ‘https://train-hiyvnarv0c3eyoh3qvv1-gpt2-train-teachable-ainize.endpoint.ainize.ai/predictions/gpt-2-en-small-finetune' \
— header ‘Content-Type: application/json’ \
— data-raw ‘{
“text”: [3666, 1438, 318, 14200, 11, 314, 16486, 1850, 287, 13851, 3783],
“num_samples”: 5,
“length”: 8
}’

와 같이 API 호출을 할 수 있군요. 한번 모델을 사용해보겠습니다. 우선 모델에 텍스트를 입력하기 전에 텍스트를 벡터로 만드는 과정이 필요합니다.

위의 사진처럼 벡터의 형태로 만들었다면 이를 가지고 결과값을 얻을 차례입니다. 결과값은 벡터의 형태로 얻을 수 있습니다.

이제 마지막으로 결과값으로 나온 벡터를 텍스트로 변환하게 되면 끝입니다.

자세한 코드는 여기에서 확인할 수 있습니다.

현재는 GPT-2 모델 밖에 없지만 지난번 openchat에 관한 포스트에서 설명했던 DialoGPT와 같은 모델을 포함하여 다양한 모델들이 추가 될 예정이니 여러분만의 데이터로 쉽게 모델을 fine-tuning 해보세요!

레퍼런스

  1. Kaggle Data Preprocessing
  2. Transformers

AI 네트워크는 블록체인 기반 플랫폼으로 인공지능 개발 환경의 혁신을 목표로 하고 있습니다. 수백만 개의 오픈 소스 프로젝트가 라이브로 구현되는 글로벌 백엔드 인프라를 표방합니다.

최신 소식이 궁금하시다면 아래 커뮤니케이션 채널을 참고해주시기 바랍니다. 다시 한 번 감사합니다.

AI네트워크 공식 홈페이지: https://ainetwork.ai/

공식 텔레그램: https://t.me/ainetwork_kr

아이나이즈(Ainize): https://ainize.ai

유튜브: https://www.youtube.com/channel/UCnyBeZ5iEdlKrAcfNbZ-wog

페이스북:https://www.facebook.com/ainetworkofficial/

포럼:https://forum.ainetwork.ai/

AIN Price chart: https://coinmarketcap.com/currencies/ai-network/onchain-analysis/

profile
성창엽(24)/???

0개의 댓글