• HuggingFace에서 Transformer 모델을 fine-turning 해보자
    DEV 2023. 12. 8. 21:27

    hug

    Hugging Face

    • The platform where the machine learning community collaborates on models, datasets, and applications.
    • https://huggingface.co/

    자연어 처리(Natural Language Processing)

    • NLP(Natural Language Processing)란 사람의 언어와 관련된 모든 것을 이해하는 데에 중점을 둔 언어학 및 기계 학습(머신 러닝) 분야를 말합니다. NLP의 목적은 단순히 하나의 개별 단어를 이해하는 것을 넘어, 해당 단어들의 문맥을 이해하는 것
      1. 전체 문장 분류(Classifying whole sentences): 리뷰(review)의 감정(sentiment)을 식별, 이메일이 스팸인지 감지, 문장이 문법적으로 올바른지 또는 두 문장이 논리적으로 관련되어 있는지 여부를 판단
      2. 단일 문장에서 각 단어 분류(Classifying each word in a sentence): 문장의 문법적 구성요소(명사, 동사, 형용사) 또는 명명된 개체(개체명, e.g., 사람, 위치, 조직) 식별
      3. 텍스트 컨텐트 생성(Generating text content): 자동 생성된 텍스트로 프롬프트 완성(completing a prompt), 마스킹된 단어(masked words)로 텍스트의 공백 채우기
      4. 텍스트에서 정답 추출(Extracting an answer from a text): 질문(question)과 맥락(context)이 주어지면, 맥락에서 제공된 정보를 기반으로 질문에 대한 답변을 추출
      5. 입력 텍스트에서 새로운 문장 생성(Generating a new sentence from an input text): 텍스트를 다른 언어로 번역(translation), 텍스트 요약(summarization)

    Transformer model

    • 위에 언급한 NLP 문제를 해결하기 위해 사용
    • Hugging Face에서 모델을 공유하고 사용
      - Transformer model만 있는 것은 아님, 어떠한 종류의 모델이나 데이터셋을 공유 가능

    트랜스포머 모델(언어 모델)의 학습

    • 자가 지도 학습(self-supervised learning) : 비지도학습 기법 중 하나로, 다수의 레이블이 존재하지 않는 원본 데이터로부터 레이블을 자동으로 생성하여 지도학습에 이용
    • 자가 지도 학습을 한 모델은 실생활 문제에 적합하지 않기 때문에 전이 학습(Transfer Learning) 과정을 거침

     전이 학습(Transfer Learning)

    • 빅데이터를 이용해 사전 학습(Pretraining)을 진행
    • 특정한 일(task)을 위한 데이터를 가지고 미세조정(Fine-tunning)하는 과정, 레이블 된 품질 좋은 데이터 필요
    • GPT-3을 파인튜닝한 모델이 ChatGPT, GTP-4를 파인튜닝한 모델이 GitHub Copilot

    finetuning models

    트랜스포머 모델의 일반적인 구조

    Model Example Tasks
    인코더 ALBERT, BERT, DistilBERT, ELECTRA, RoBERTa 문장 분류, 개체명 인식, 추출 질의 응답
    디코더 CTRL, GPT, GPT-2, Transformer XL 텍스트 생성
    인코더-디코더 BART, T5, Marian, mBART 요약, 번역, 생성 질의 응답
    핵심은 어떤 문제를 풀고 싶냐에 따라 전체구조(인코더-디코더 모두)를 사용하거나 인코더, 디코더만 사용 가능 🙃

    트랜스포머 라이브러리

    • 트랜스포머 모델의 종류가 너무 많고, 수많은 파라미터를 가진 모델을 훈련시키고 배포하는 작업이 어렵기 때문에 만듬
    • Transformer 모델을 가져오고, 훈련시킨 후 저장할 수 있는 단일 API를 제공하는 것이 목표
    • 사용 가능한 파이프라인(pipeline) = 트랜스포머 라이브러리 가장 기본 객체
      • feature-extraction : 특징 추출 (텍스트에 대한 벡터 표현 추출)
      • fill-mask : 마스크 채우기
      • ner : 개체명 인식 (named entity recognition)
      • question-answering : 질의응답
      • sentiment-analysis : 감정 분석
      • summarization : 요약
      • text-generation : 텍스트 생성
      • translation : 번역
      • zero-shot-classification : 제로샷 분류

    파이프라인(pipeline) 동작 과정

    • 전처리(tokenizer) → 모델(model)로 입력 전달 → 후처리

    transformer model pipeline

    • 파이프라인을 사용하기 위해서(모델로 학습/추론하기 위해서) 해당 모델과 모델을 학습 시 사용한 토크나이저가 필요

    개체명 인식(Named entity recognition) 가능한 모델을 파인튜닝 해보자

    파인튜닝 결과

    before finetuning
    after finetuning

    • 파인튜닝 전 모델은 '5만원 이상' 키워드를 QT(QUANTITY)라는 태그로 분석했지만, '지오지아'는 PS(PERSON)으로 인식
    • 파인튜닝 후 '5만원 이상' QT(QUANTITY), 지오지아 OG(ORGANIZATION), 여자 PS(PERSON), 가방(CIVILIZATION)으로 학습한 대로 분류됨
    • 태그 카테고리는 이전 파인튜닝한 모델의 태깅 체계를 따라야 했음. 추가도 안 되는 것 같음,
    • 원하는 태그 체계를 만들려면 NER태그가 학습되지 않은 base model을 가지고 처음부터 학습해야 할 것 같다.

    파인튜닝 후 모델

    파인튜닝 전 모델

    🫤 좋은 파인튜닝 결과를 얻기 위해서는 고품질의 데이터가 필요(레이블 된) 해 보인다.
    얼마 전 일론 머스크가 트위터를 인수한 것을 충동적인 행동으로 판단하는 기사들도 많이 봤지만,
    아마 테슬라 LLM에 들어갈 고품질의 대화(instruction-dataset)가 필요했다는 분석들도 존재

    prompt engineering vs finetuning

    • 프롬프트 엔지니어링과 파인튜닝은 각각의 장단점을 가지고 있다.

    Ref.

    728x90
go.