목차
자연어 처리(NLP)는 인간의 언어를 기계가 이해하고 생성하는 기술로, Transformer(트랜스포머) 모델의 등장은 이런 자연어 처리 기술을 매우 고도화할 수 있게 만들었어요.이번 글에서는 Transformer의 이론적 배경, 핵심 구성 요소, Hugging Face 플랫폼과의 연계, 그리고 실제 구현 방법에 대해 정리해 보려합니다.
파이썬 Transformer(트랜스포머) #1
과거 인공지능은 문장을 읽을 때 책을 한 페이지씩 넘기듯 단어를 하나씩 처리했습니다. RNN이나 LSTM이라는 기술이 대표적이었죠. 하지만 이 방식에는 몇 가지 문제가 있었는데요,
- 느린 속도: 단어를 하나씩 순차적으로 처리해 병렬 처리가 불가능했습니다.
- 짧은 기억력: 문장이 길어질수록 앞 내용을 잊기 쉬웠습니다.
- 장거리 의존성 실패: “민수는 병원에 갔다. 거기서…”에서 “거기서”가 “병원”을 가리킨다는 연결을 잘 파악하지 못했습니다.
Transformer는 문장 전체를 한 번에 보고, 단어 간 관계를 수학적으로 계산해 이런 문제들을 해결합니다. 마치 사람들이 대화할 때 중심이 되는 내용이 무엇인지 인지하는 것처럼, 인공지능 모델이 문맥에서 중요한 단어에 집중하게 해주는 기술이죠.
Transformer의 핵심 Attention
트랜스포머는 Attention, 특히 Self-Attention(자기-어텐션)이라는 메커니즘을 중심으로 작동합니다. 이 메커니즘은 문장 안의 모든 단어가 서로 어떤 관련이 있는지를 계산하여 각 단어에 가중치를 부여합니다.
예를 들어 “그녀는 유물이 전시된 박물관을 방문했다.”라는 문자을 보면, “유물이 전시된”은 “박물관”을 꾸며주는 문장으로 구성됩니다.
Self-Attention은 문장 안 단어들이 서로 얼마나 관련 있는지를 알아내기 위해, 각 단어를 Query, Key, Value라는 세 가지 정보(벡터화)로 바꾸고, 단어들 사이의 중요도를 숫자(Softmax 함수)로 계산합니다. 이 계산은 숫자들을 조합하고 정리하는 방식으로 이루어지며, 최종적으로 중요도를 비율로 나눠주는 도구를 사용해 결과를 깔끔하게 만듭니다.
트랜스포머의 네 가지 핵심 구성 요소
1) Self-Attention
- 각 단어가 문장 내 다른 단어들과 얼마나 관련이 있는지를 수치화하여 계산합니다.
2) Multi-Head Attention
- Attention을 하나만 적용하는 대신 여러 개의 “시선(Head)”으로 동시에 문맥을 분석합니다. 예를 들어, 한 Head는 문법적 관계에 집중하고, 다른 Head는 의미 유사성에 집중합니다.
3) Position Encoding (위치 인코딩)
- 트랜스포머는 모든 단어를 동시에 보기 때문에 순서 정보를 직접 알 수 없습니다. 따라서 각 단어의 위치를 수학적 벡터(정현파 혹은 학습형 벡터)로 만들어 모델이 순서 개념을 학습할 수 있도록 돕습니다.
4) Feed Forward Neural Network (FFN)
- 각 Attention Layer의 결과를 개별 단어 단위로 더욱 복잡하게 가공하는 신경망 계층입니다.
이러한 블록들이 Encoder와 Decoder에 각각 반복적으로 쌓여 모델 전체를 구성하게 됩니다.
Hugging Face
트랜스포머 구조를 직접 구현하려면 수많은 수학과 복잡한 코드를 다뤄야 하지만, Hugging Face는 이런 복잡한 작업을 간단한 명령어로 쉽게 사용할 수 있게 정리해줘서, 누구나 편하게 AI를 써볼 수 있어요.
- 사전 훈련된 모델 제공: BERT, GPT-2, T5, Mistral-7B 등 다양한 모델을 무료로 사용할 수 있습니다.
- transformers 라이브러리: 파이썬 몇 줄로 모델을 불러오고 예측할 수 있게 해줍니다.
- 모델 허브: 전 세계 개발자가 공유한 모델을 다운로드해서 바로 사용할 수 있습니다.
- 도구 모음: Tokenizer(문장 → 숫자 변환), Trainer(모델 미세조정) 등 다양한 기능을 제공합니다.
Hugging Face로 트랜스포머 실습하기
1단계: 설치
pip install transformers torch
2단계: 감정 분석 (BERT 기반)
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("이 영화 진짜 최고예요!")
print(result)
위 코드를 실행해 볼게요. 다음과 같이 출력됩니다.

위 코드에서 원하는 결과부터 보면 아래와 같죠. 감정 분석 결과는 긍정적(POSITIVE)이고 신뢰도는 약 98.9%라는 거에요.
[{‘label’: ‘POSITIVE’, ‘score’: 0.9896730184555054}]
그런데, 앞의 그림에서 출력 내용을 보면 위 내용만 있는게 아니죠?
No model was supplied, defaulted to distilbert/distilbert-base-uncased-finetuned-sst-2-english …
Using a pipeline without specifying a model name and revision in production is not recommended.
위 내용은 별도로 모델을 지정하지 않았기 때문에, 기본값인 영어 감성 분석 모델로 “distilbert-base-uncased-finetuned-sst-2-english” 모델이 적용됐다고 합니다.
또, 모델 이름과 버전까지 정확하게 입력하라고 하네요.
이뿐만 아니라 사실 아래 내용이 더 중요합니다. 바로 현재 실행하고 있는 장치와 관련된 것으로, CUDA(=GPU)를 사용하고 있다는 뜻이에요. 빠르게 잘 실행되고 있다는 의미입니다.
Device set to use cuda:0
transformers 구성 요소
pipeline은 다양한 기능을 포함하고 있는 중요한 함수입니다. 앞의 예시 이외에도 번역이나 대화 등 다양한 기능을 수행할 수 있습니다. 트랜스포머에는 다양한 구성 요소들이 있습니다. 본 글에서 전부를 다 소개할 수는 없으나, 중요한 몇 가지를 아래와 같이 간략히 정리합니다.
구성 요소 | 구분 | 설명 |
pipeline() | 함수 | 모델 로딩, 토크나이징, 추론을 한 번에 처리하는 편의 API |
AutoTokenizer | 클래스 | 텍스트를 모델이 이해할 수 있는 숫자 토큰으로 변환 |
AutoModel, AutoModelForXxx | 클래스 | 사전 학습된 모델 구조 및 가중치 로딩 (분류, 생성 등 목적별) |
Trainer, TrainingArguments | 클래스 | 모델 학습 및 평가를 PyTorch 기반으로 자동 관리 |
datasets | 외부 패키지 | JSON, CSV, Hugging Face 허브에서 데이터셋을 로딩하고 전처리 |
model.generate() | 메서드 | 텍스트 생성 전용 모델에서 문장을 생성할 때 사용 |
이 구성 요소들을 직접 조합하면, pipeline
보다 훨씬 유연하고 강력한 트랜스포머 사용이 가능해집니다.
- 파이썬 Transformer(트랜스포머) #1 – 감정 분석부터 Self-Attention
- AI 글쓰기의 한계 #1 – 왜 GPT는 사람처럼 글을 못 쓸까?
- OpenAI API 요금은 어떻게 계산될까? 토큰 개념과 tiktoken 활용 #1
- 챗지피티 프롬프트로 지브리 스타일, 픽사 스타일 이미지 생성 방법
- 생성형 AI 소유권, 챗지피티 지브리 스타일 이미지 사례 #1