🐍 Python

Hugging Face로 시작하는 Transformer 모델 완벽 활용 가이드: GPT부터 BERT, T5까지

itstory(Booho) 2025. 2. 10. 15:46
728x90

1. Transformer Models (트랜스포머 모델 이해하기)

1.1 자연어 처리(NLP)와 벡터(vector)의 의미

  • 자연어 처리(NLP)
    • 컴퓨터가 사람의 언어(한국어, 영어 등)를 이해하고 생성하도록 하는 기술을 말합니다.
    • 예: 챗봇, 문서 분류, 감정 분석, 기계 번역 등
  • 벡터(vector)**란?
    • 수학적으로는 크기와 방향을 갖는 양을 뜻하지만, 딥러닝과 NLP에서는 주로 숫자들의 리스트(고차원 좌표)로 표현되는 데이터를 의미합니다.
    • 예) 0.25,−0.67,1.02,…0.25, -0.67, 1.02, …처럼 여러 개의 숫자가 1차원 배열 형태로 나열된 것
    • 왜 쓰는가?
      • 텍스트(문자)는 컴퓨터가 직접 다루기 어렵습니다.
      • 단어, 문장 등의 의미를 수치(숫자)로 나타내면, 컴퓨터가 기계 학습(학습 알고리즘)을 적용하기 쉬워집니다.
    • 어떻게 사용되는가?
      • 단어 임베딩(Word Embedding), 토큰 임베딩(Token Embedding) 등을 통해 각 단어/문장을 벡터화합니다.
      • 이 벡터들을 딥러닝 모델(BERT, GPT, T5 등)에 입력하면, 모델은 벡터 연산을 통해 자연어를 이해하거나 생성하게 됩니다.

벡터 관련 용어 정리

1차원 2차원 3차원 백터의 그림

 

  1. 임베딩(Embedding)
    • 단어(또는 문장)를 벡터 형태로 변환하는 기술
    • 예) ‘king’과 ‘queen’이라는 단어의 임베딩 벡터는 의미적으로 유사
  2. 차원(Dimension)
    • 벡터가 가진 숫자의 길이
    • 예) 768차원, 1024차원 등
    • 차원이 높을수록 정보를 더 정교하게 담을 수 있지만, 계산량도 증가
  3. 매트릭스(Matrix)
    • 벡터가 여러 개 합쳐진 2차원 배열(행렬)
    • 딥러닝에서 가중치(Weight), 입력(Embedding) 등 다양한 부분에서 매트릭스가 사용됨

1.2 기존 NLP 방식과 한계

  • RNN(Recurrent Neural Network), LSTM(Long Short-Term Memory) 등
    • 과거에는 문장 내 단어를 순서대로(시계열) 처리하면서 정보를 축적하는 방식이 많이 쓰였습니다.
    • 문제점
      • 문장이 길어질수록, 앞쪽 단어의 정보가 뒤쪽으로 전달되기 어려운 ‘장기 의존성 문제(Long-term dependency)’ 발생
      • 순차적(Serial)으로 처리해야 하므로, 병렬 처리가 어렵고 학습 속도가 느림
  • 결론
    • 이 한계를 극복하기 위해 Google이 2017년에 발표한 논문 "Attention is All You Need"에서 Transformer 모델이 제안되었습니다.

1.3 Transformer의 등장 (GPT, BERT, T5)

  • Transformer 구조의 특징
    1. 병렬 처리가 가능해 학습 속도가 빠름.
    2. 문장이 길어져도 정보 손실이 적으며, Self-Attention 기법으로 단어 간 상관관계를 효과적으로 파악.
  • 대표 모델

1. GPT (Generative Pre-trained Transformer)

  • 구조: 디코더(Decoder)-only 아키텍처
  • 목적: 텍스트 생성에 특화
  • 작동 방식:
    • 이전 단어(토큰) 정보를 바탕으로 다음 단어를 예측
    • 이를 통해 자연스러운 문장이나 긴 글을 생성 가능
  • 학습 과정: 주로 인터넷의 방대한 텍스트 데이터(웹 문서 등)를 사용해 언어 모델(다음 단어 예측) 형태로 사전 학습(Pre-training)

1.2 실제 예시

  1. 챗봇 대화 생성
    • 예: ChatGPT처럼 사용자의 질문이나 발화에 대해 적절한 답변을 생성
    • 실제 프롬프트 예시:
      makefile
      복사편집
      사용자: 오늘 날씨 어때? GPT 모델: 오늘은 서울 지역에 비가 올 예정이에요. 우산을 챙기는 게 좋겠습니다.
    • GPT 구조는 이전 문장을 기억(맥락)을 유지하며, 답변 문장을 새롭게 생성
  2. 글쓰기 보조
    • 글의 초안을 작성하거나, 특정 주제에 대한 장문의 글을 자동으로 생성
    • 예: “AI가 바꾸는 미래”라는 제목으로 짧은 에세이를 부탁하면 GPT 모델이 초안을 작성
  3. 스토리 생성
    • 소설, 시나리오, 짧은 동화 등 창의적인 글 생성 가능
    • 예: “옛날 옛적에 용이 사는 마을이 있었다…”라는 첫 줄을 주면, 후속 내용을 이어서 써줌

1.3 어떻게 활용될 수 있나?

  • 마케팅 카피 작성: 제품 소개 문구, 광고 글
  • 요약: 긴 문서를 요약해 주는 생성형 활용(특화 모델 필요 시 Fine-tuning)
  • 창의적 컨텐츠: 스토리텔링, 시나리오 아이디어, 대본 작성 등

2. BERT (Bidirectional Encoder Representations from Transformers)

  • 구조: 인코더(Encoder)-only 아키텍처
  • 목적: 텍스트의 이해(분류, 추론, 마스킹 예측 등)에 강점
  • 작동 방식:
    • 입력 문장을 양방향으로(왼쪽→오른쪽, 오른쪽→왼쪽) 동시에 파악하는 **비지도 학습(Masked Language Modeling)**으로 사전 학습
    • 문장 중 일부 토큰을 [MASK]로 가리고, 모델이 이를 예측하면서 문맥(맥락) 정보를 학습
  • 학습 과정:
    • 대규모 텍스트 데이터(위키백과, 북코퍼스 등)에서 문맥 이해 능력을 사전 학습
    • 이후 특정 작업(감정 분석, 질의응답 등)에 맞춰 파인 튜닝(Fine-tuning) 진행

2.2 실제 예시

  1. 감정 분석 (Sentiment Analysis)
    • 입력: “이 영화 정말 최고였어요! 다음에도 또 보고 싶어요.”
    • 출력: “긍정(Positive)”
    • BERT는 문장 이해가 뛰어나, 문맥을 종합적으로 파악해 감정 점수를 계산
  2. 텍스트 분류 (Text Classification)
    • 스팸 메일 분류, 뉴스 기사 주제 분류 등
    • 예: “해당 문서는 ‘정치’, ‘경제’, ‘스포츠’ 중 어느 카테고리에 속하나요?”
    • BERT를 분류용 헤드(출력 레이어)와 함께 파인 튜닝
  3. 질의응답 (Question Answering)
    • 주어진 문맥(Paragraph)과 질문(Question)을 입력하면, BERT가 정답 부분을 추출
    • 예:
      • 문맥: “대한민국의 수도는 서울이다.”
      • 질문: “대한민국의 수도는 어디인가?”
      • 답변: “서울”

2.3 어떻게 활용될 수 있나?

  • 검색 엔진: 사용자 질의와 문서 매칭
  • 챗봇(이해 측면): 사용자 의도를 이해하고, 적절한 답변을 찾는 데 이용
  • 문서 분류/필터링: 대량의 텍스트 데이터를 자동 분류하거나, 유해 콘텐츠 필터링

3. T5 (Text-to-Text Transfer Transformer)

  • 구조: 인코더(Encoder)-디코더(Decoder)를 모두 사용하는 시퀀스-투-시퀀스(Seq2Seq) 모델
  • 목적: 입력 텍스트 → 출력 텍스트 형태의 다양한 언어 처리 작업을 통합적으로 수행
    • 예: 번역, 요약, 질의응답, 문법 교정 등
  • 작동 방식:
    • 모든 작업을 **“문장을 넣으면 문장을 출력”**하는 방식으로 통일
    • 예: 번역이라면 translate English to German: Hello → Hallo 형태
    • 요약이라면 summarize: (긴 문단) → (짧은 요약문)

3.2 실제 예시

  1. 번역 (Translation)
    • Prompt 예시:
      translate Korean to English: 
      "이 모델은 텍스트 요약, 번역 등 다양한 작업에 활용됩니다."
    • 출력 예시:
      "This model can be used for various tasks such as text summarization and translation."
  2. 요약 (Summarization)
    • Prompt 예시:
      summarize: "오늘은 날씨가 맑고, 전국적으로 기온이 약간 하락했습니다. 서울은 최고기온 23도, 부산은 25도..."
    • 출력 예시:
      "오늘 날씨는 맑고 기온이 약간 떨어졌다."
  3. 질문→답변 생성 (Question Answering)
    • Prompt 예시:
      question: "Who wrote the Harry Potter series?" 
      context: "Harry Potter is a series of seven fantasy novels written by British author J. K. Rowling."
    • 출력 예시:
      "J. K. Rowling"

3.3 어떻게 활용될 수 있나?

  • 멀티태스킹: 번역, 요약, 질의응답, 문장 생성 등 여러 가지 언어 작업을 하나의 모델로 처리
  • 문서 자동화: 대량의 텍스트를 받아서 특정 형태로 변환(양식화, 정리 등)
  • 개발 편의성: “Text-to-Text”라는 일관된 형식을 가지므로, 파인 튜닝(데이터 준비) 과정이 단순화

4. 모델별 비교 요약

모델 구조 주된 역할 활용 예시
GPT 디코더(Decoder)-Only 텍스트 생성 챗봇, 글쓰기 보조, 스토리 생성
BERT 인코더(Encoder)-Only 텍스트 이해, 분류 감정 분석, 문서 분류, 질의응답
T5 인코더-디코더(Seq2Seq) 텍스트 입력 → 텍스트 출력 번역, 요약, 질의응답 등 멀티태스킹

5. 간단한 코드 예시 (Python, Hugging Face Transformers)

 5.1 GPT 계열 모델로 텍스트 생성 예시

from transformers import pipeline

# GPT-2를 예시로 사용 (간단한 모델)
generator = pipeline("text-generation", model="gpt2")

prompt = "Once upon a time"
generated_text = generator(prompt, max_length=50, num_return_sequences=1)
print(generated_text[0]["generated_text"])
  • 결과: “Once upon a time…” 이후에 이어지는 문장을 자동으로 생성

5.2 BERT 계열 모델로 감정 분석 예시

from transformers import pipeline

classifier = pipeline("sentiment-analysis", model="nlptown/bert-base-multilingual-uncased-sentiment")
result = classifier("이 영화 정말 재미있었어요!")
print(result)
  • 결과:
    [{'label': '5 stars', 'score': 0.85...}]
    같은 식으로 감정(별점) 정보를 반환

5.3 T5 모델로 요약 예시

from transformers import pipeline

summarizer = pipeline("summarization", model="t5-small")
text = """
T5는 구글에서 공개한 텍스트-투-텍스트 모델이며, 번역, 요약, 질의응답 등 여러 가지 NLP 작업을
하나의 모델로 처리할 수 있도록 만든 강력한 언어 모델이다. ...
"""
summary = summarizer(text, max_length=50, min_length=10, do_sample=False)
print(summary[0]['summary_text'])
  • 결과:
    • 주어진 긴 텍스트를 짧고 요약된 형태로 출력

  • GPT: 디코더 구조로 텍스트 생성에 최적화
    • 장점: 자연스럽고 창의적인 문장 생성
    • 예시: ChatGPT, 글쓰기 도우미, 스토리 자동 작성 등
  • BERT: 인코더 구조로 텍스트 이해에 특화
    • 장점: 문맥을 깊게 이해 → 높은 정확도의 분류·질의응답
    • 예시: 감정 분석, 스팸 필터링, 검색 엔진 QA
  • T5: 인코더-디코더(Seq2Seq) 구조로 멀티태스킹 지원
    • 장점: 번역, 요약, 질의응답 등 “모든 NLP 작업을 텍스트-투-텍스트 방식으로 통일”
    • 예시: 다언어 번역 서비스, 문서 요약, 질문→답변 자동 생성
  1.  

1.4 트랜스포머로 할 수 있는 대표 작업

  1. 텍스트 분류
    • 뉴스 기사, 리뷰, SNS 글을 긍정/부정/주제별로 분류
  2. 문장(텍스트) 생성
    • 글쓰기 보조, 자동 요약, 소설/시 쓰기 등
  3. 질의응답
    • 사용자가 질문을 하면, 모델이 맥락(컨텍스트)을 읽고 답을 제공
  4. 기계 번역
    • 한국어 → 영어, 영어 → 중국어 등 다국어 간 번역

1.5 트랜스포머의 작동 원리: Self-Attention 메커니즘

  • Self-Attention
    • 문장 내 각 단어가 다른 단어들과 **얼마나 관련이 있는지(가중치)**를 계산하여, 정보를 종합하는 방식
    • 이런 ‘주의(attention)’ 매트릭스는 벡터와 벡터 사이의 내적(dot product) 연산 등을 통해 구해집니다.
  • 장점
    • 순차 처리가 아닌 병렬 처리가 가능 → 학습 속도↑
    • 문장 내 단어가 서로 ‘먼 위치’에 있어도 상관관계를 놓치지 않음

1.6 인코더 모델 (Encoder-Only)

  • BERT와 같이 문장 이해가 중요한 작업에 최적화된 구조
  • 인코더(Encoder)
    • 입력 시퀀스(문장)의 각 단어(토큰)를 벡터로 변환
    • Self-Attention으로 문맥적 정보를 이해
    • 최종적으로 문장 전체 또는 각 토큰에 대한 의미 벡터를 추출

1.7 디코더 모델 (Decoder-Only)

  • GPT처럼 텍스트 생성이 주요 목표인 구조
  • 디코더(Decoder)
    • 입력으로 이전 단어(또는 토큰) 정보를 받아서 다음 단어를 예측
    • 문장을 차례대로 생성
    • 예측된 단어(토큰)를 연결해 최종 문장을 완성

1.8 Sequence-to-Sequence Models (인코더-디코더)

  • T5처럼 인코더-디코더를 모두 사용하는 모델
  • 원리
    1. 인코더: 입력 텍스트를 이해(벡터화)
    2. 디코더: 해당 벡터 정보를 바탕으로 새로운 텍스트 생성
  • 대표 응용: 번역, 요약, 질의응답 등

1.9 Bias and Limitations (한계)

  • 편향성(Bias)
    • 모델이 학습한 데이터가 특정 편향(예: 인종, 성차별 등)을 담고 있을 수 있음
  • 대규모 데이터/리소스 필요
    • 모델이 크고 복잡해질수록, GPU/TPU 등 고성능 하드웨어가 필요
  • 정교한 평가
    • 모델이 생성한 텍스트(또는 답변)가 항상 정확하거나 윤리적이지는 않을 수 있음

2. Using Transformers (트랜스포머 사용하기)

2.1 Hugging Face 파이프라인(Pipeline)의 이해

  • Hugging Face
    • 사전 학습된 모델(GPT, BERT, T5 등)을 쉽게 가져와서 사용할 수 있는 오픈소스 플랫폼
    • Transformers 라이브러리가 대표적
  • Pipeline
    • 감정 분석, 텍스트 요약, 번역 등 특정 작업에 맞춰 미리 설정된 간단한 인터페이스
    • 몇 줄의 코드만으로 바로 예측(추론)을 수행
from transformers import pipeline

# 예: 감정 분석
classifier = pipeline("sentiment-analysis")
result = classifier("이 영화 진짜 재밌네요!")
print(result)  # [{'label': 'POSITIVE', 'score': 0.999...}]
 

2.2 사전 학습 모델(Pretrained Model) 활용

  • 장점
    • 이미 대규모 데이터로 학습된 모델을 바로 활용 가능
    • 예: bert-base-uncased, gpt2, t5-small 등
  • 다운로드 & 로드
from transformers import AutoModelForSequenceClassification, AutoTokenizer

model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
  • 벡터화 과정
    • tokenizer가 텍스트를 토큰으로 분리 → 토큰 ID(벡터)에 매핑 → 모델 입력으로 전달
    • 모델은 내부적으로 수많은 매트릭스 연산(벡터 연산)을 통해 결과(확률, 클래스 등)를 산출

2.3 토크나이저(Tokenizers)

  • 개념: 단어(문자열)를 ‘토큰’이라 부르는 최소 단위로 쪼개고, 이를 정수 ID로 바꾸는 과정
  • 왜 필요한가?
    • 컴퓨터가 텍스트를 처리할 때 직접 단어를 이해하지 못하므로, 수치(숫자)로 변환해야 함
  • 예시:
tokens = tokenizer("안녕하세요, Hugging Face!", return_tensors="pt")
print(tokens)
# {
#   'input_ids': tensor([[  2, 1xxx, 1xxx,   3]]),
#   'attention_mask': tensor([[1, 1, 1, 1]])
# }
  • input_ids: 토큰화된 단어를 ID로 치환한 결과(벡터)
  • attention_mask: 실제 단어인지(1), 패딩(0)인지 구분

2.4 여러 입력 시퀀스 처리 (배치 처리)

  • Batch 처리
    • 모델은 동시에 여러 문장을 입력받아 추론을 수행할 수 있음 → 속도 향상
  • 예시:
texts = ["영화가 재미있었어요!", "드라마가 별로였어요."]
results = classifier(texts)
print(results)
# [
#   {'label': 'POSITIVE', 'score': 0.998...},
#   {'label': 'NEGATIVE', 'score': 0.997...}
# ]

2.5 전체 과정 정리

  1. 모델 및 토크나이저 불러오기
  2. 텍스트(문장) → 토큰(벡터) 변환
  3. Transformer 모델에 입력(벡터) 전달
  4. 모델 출력 해석 (분류 결과, 생성된 텍스트 등)

 

3. Using Transformers (트랜스포머 사용하기)

3.1 Hugging Face 파이프라인(Pipeline) 이해하기

Hugging Face는 pipeline 인터페이스를 제공해, 사전 학습된 모델을 간단한 코드로 불러와 사용할 수 있게 합니다.

from transformers import pipeline

# 감정 분석 파이프라인
sentiment_analysis = pipeline("sentiment-analysis")

text = "이 영화 정말 재미있었어요!"
result = sentiment_analysis(text)
print(result)  # 예: [{'label': 'POSITIVE', 'score': 0.9998}]
 
  • 감정 분석: 텍스트의 긍정/부정 분류
  • 텍스트 요약: 긴 문장을 자동으로 축약
  • 번역: 영어 ↔ 한국어 등

3.2 사전 학습 모델 활용

  • 장점: 이미 대규모 데이터로 학습된 모델을 그대로 사용 가능
  • 모델 다운로드: from_pretrained 메서드 사용으로 쉽고 빠름

3.3 토크나이저(Tokenizers)

Transformers 모델은 텍스트를 숫자로 변환해야 합니다. 이를 토크나이저가 담당합니다.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokens = tokenizer("Hello Hugging Face!", return_tensors="pt")
print(tokens)
  • 기능: 텍스트를 토큰 단위로 분할하고, 해당 토큰에 고유 ID를 할당

3.4 여러 입력 시퀀스 처리

  • Transformer는 한 번에 여러 문장을 처리할 수 있어 배치(batch) 단위로 빠른 예측이 가능합니다.
texts = ["이 영화 최고야!", "이 드라마는 별로였어."]
results = sentiment_analysis(texts)
print(results)
# 예: [{'label': 'POSITIVE', 'score': 0.999...}, {'label': 'NEGATIVE', 'score': 0.998...}]

3.5 전체 과정 통합

Hugging Face 생태계에서는
모델 불러오기 → 토크나이저 설정 → 데이터 전처리 → 예측 또는 미세조정 과정을 파이프라인 또는 개별 함수 조합으로 손쉽게 진행할 수 있습니다.


4. Fine-tuning a Pretrained Model (사전 학습 모델 미세조정)

4.1 데이터 전처리(Processing the Data)

  • 목적: 모델에 맞게 입력 데이터를 토크나이징하고 라벨을 정리
  • 예시: 감정 분석용 데이터셋(긍정/부정 라벨)
from datasets import load_dataset

dataset = load_dataset("imdb")
train_texts = dataset["train"]["text"]
train_labels = dataset["train"]["label"]

4.2 미세조정(Fine-tuning) 절차

Hugging Face의 TrainerPytorch Lightning 등 다양한 도구를 이용하면 간단히 진행할 수 있습니다.

from transformers import AutoModelForSequenceClassification, Trainer, TrainingArguments

model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    num_train_epochs=3,
    per_device_train_batch_size=8
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=...,  # 전처리된 훈련 데이터
    eval_dataset=...    # 전처리된 검증 데이터
)

trainer.train()
  • 사전 학습 모델 + 새로운 데이터 → 특정 작업(감정 분석, 분류 등)에 최적화된 최종 모델 생성
  • 장점: 큰 데이터셋으로 이미 학습된 모델을 재활용하므로 적은 데이터로도 비교적 높은 성능을 낼 수 있음

4.3 결과 활용

  • 평가: 검증 데이터(Validation Set)로 성능을 측정
  • 배포: REST API, 웹 서비스, Docker 등을 사용해 실제 서비스에 적용

5. 결론: Hugging Face로 AI를 쉽게 시작하세요!

Hugging Face는 강력한 Transformer 모델과 직관적인 사용법, 풍부한 사전 학습 모델을 제공해 NLP딥러닝 관련 프로젝트를 빠르게 시작할 수 있도록 도와줍니다.

  • 핵심 요약
    • 파이프라인으로 손쉬운 예측
    • Fine-tuning으로 다양한 업무 적용 가능
    • 광범위한 모델 지원 (GPT, BERT, T5 등)

누구나 간단한 코드 몇 줄만으로 강력한 AI 모델을 사용할 수 있으니, 지금 바로 Hugging Face를 활용해보세요! 🚀

728x90