Hugging Face의 Transformers 라이브러리는 사전 학습된(pre-trained) 다양한 딥러닝 모델을 손쉽게 활용할 수 있도록 만들어진 오픈소스 라이브러리입니다. 이 라이브러리는 사용 목적에 따라 두 가지 수준(Level)의 API를 제공합니다.
- High Level API: 빠르고 간단하게 추론(Inference)을 수행하는 pipeline
- Low Level API: Model, Tokenizer를 직접 제어하는 방식
먼저 Pipeline에 대해서 알아볼께요.
Pipeline이란?
pipeline은 Hugging Face에서 제공하는 사전 정의된 추론용 API입니다. 모델 로딩, 토크나이징(Tokenization), 추론(Inference), 후처리(Post-processing)까지의 전 과정을 한 번에 묶어서 제공하는 구조입니다. 사용자는 복잡한 모델 구조를 몰라도, “어떤 작업(Task)을 할 것인지”만 지정하면 바로 추론 결과를 얻을 수 있습니다.
Pipeline은 공식적으로 다음과 같은 대표적인 추론 작업(Task)을 지원합니다.
- 감정 분석 (sentiment-analysis)
- 텍스트 분류 (text-classification)
- 개체명 인식 (ner, Named Entity Recognition)
- 질의응답 (question-answering)
- 문서 요약 (summarization)
- 번역 (translation)
- 이미지 분류, 음성 인식 등 일부 멀티모달 작업
이 작업들은 모두 Hugging Face에서 사전 학습된 공개 모델(open-source models)을 기반으로 동작합니다.
Pipeline의 기본 사용 구조
Pipeline의 기본 사용 흐름은 다음 Pipeline 객체 생성, 입력값 전달 후 결과 받기의 두 단계로 구성됩니다.
Pipeline 객체 생성
from transformers import pipeline
my_pipeline = pipeline("the_task_I_want_to_do")
여기서 "the_task_I_want_to_do" 자리에 실제 작업 이름을 넣으면 됩니다.
예시:
- "sentiment-analysis"
- "ner"
- "question-answering"
- "summarization"
- "translation"
이 시점에서 Hugging Face는 해당 작업에 맞는 **기본 모델(Default Model)**을 자동으로 다운로드하고 로딩합니다.
입력값 전달 후 결과 받기
result = my_pipeline(my_input)
텍스트, 질문, 문서 등을 입력하면, Pipeline이 내부적으로 다음 과정을 자동으로 처리합니다.
- 토크나이저를 이용한 전처리(Tokenization)
- 모델을 이용한 추론(Inference)
- 사람이 읽기 쉬운 형태로 결과 변환(Post-processing)
그 결과를 리스트 또는 딕셔너리 형태로 반환합니다.
Tokenizer + Model
Hugging Face의 pipeline은 매우 편리한 고수준 API이지만, 보다 세밀한 제어가 필요할 경우 Tokenizer + Model 기반의 Low Level API로 확장하는 구조를 취하게 됩니다. 예를 들면 다음과 같은 경우일 수 있습니다.
- 토큰 단위로 직접 제어하고 싶을 때
- Embedding 벡터를 직접 다루고 싶을 때
- 커스텀 전처리/후처리를 적용할 때
- 속도 최적화, 메모리 관리를 세밀하게 하고 싶을 때
그럼 Tokenizer란 무엇일까요?
Tokenizer는 자연어를 숫자로 바꾸는 변환기입니다. 딥러닝 모델은 문장을 그대로 이해하지 못하고, 반드시 숫자로 변환된 입력값만 처리할 수 있습니다. 이때 그 변환 작업을 담당하는 것이 바로 Tokenizer이며, Tokenizer의 작업은 두 단계로 나뉩니다.
- 1단계: 문장을 Token(조각)으로 분해
Tokenizer는 문장을 단어 또는 subword(부분 단어) 단위로 쪼깨며, 이 때 만들어진 각 조각이 바로 토큰입니다. - 2단계: 각 Token을 숫자(Token ID)로 변환
Tokenizer는 내부에 모든 토큰과 이에 대응하는 숫자(Token ID)로 구성된 사전을 가지고 있으며, 각 토큰을 해당 숫자에 매핑합니다.
import requests
from google.colab import userdata
from huggingface_hub import login
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B", trust_remote_code=True, token=hf_token)
text = "I’m about to unleash the magic of tokenizers on my LLM engineers."
tokens = tokenizer.tokenize(text)
tokens_ids = tokenizer.encode(text)
print(f"Tokens: {tokens}")
print(f"Tokens IDs: {tokens_ids}")
#############################################
character_count = len(text)
word_count = len(text.split())
token_count = len(tokens)
print(f"Character Count: {character_count}")
print(f"Token Count: {token_count}")
#############################################
tokenizer.decode(tokens_ids)

# 나중에 추가한 토큰들을 확인할 수 있고, special token을 추가했다면 그것도 함께 확인 가능
tokenizer.get_added_vocab()
# tokenizer의 vocabulary 딕셔너리에 들어 있는 전체 토큰 개수를 반환,
# 즉 tokenizer가 가지고 있는 전체 토큰 수
len(tokenizer.vocab)
기본 모델, Instruct 모델 및 apply_chat_template 완전 정리
위에서 보여준 모델은 기본 모델입니다. 기본 모델은 대규모 텍스트 데이터만으로 사전 학습(pretraining) 된 순수한 언어 모델로 단순한 문장 이어쓰기(텍스트 생성)에 최적화되어 있습니다.
Instruct 모델은 기본 모델을 기반으로, 사람의 지시(instruction)를 잘 따르도록 추가 미세조정(Fine-tuning)된 모델입니다. 이 모델들은 처음부터 채팅 환경을 전제로 학습됩니다. Instruct 모델은 :
- system, user, assistant 구조의 입력을 기대하도록 학습됨
- 질의응답(QA), 챗봇, 요약, 번역 같은 서비스용 작업에 최적화
- 모델 이름 끝에 보통 -Instruct 가 붙음 (예: Llama-3-8B-Instruct, Qwen2.5-7B-Instruct )
Instruct 모델은 입력 형식이 중요합니다. Instruct 모델은 학습될 때부터 다음과 같은 구조의 데이터를 기반으로 훈련됩니다.
- system → AI의 역할과 성격
- user → 사용자의 질문
- assistant → 모델의 응답
Instruct 변형 모델들은 바로 이 “일련의 프롬프트 구조(system → user → assistant)”를 기대하도록 특별히 파인튜닝된 모델이며, 대화 형식의 프롬프트가 반드시 필요합니다.
apply_chat_template
그래서 Hugging Face에서는 이 문제를 해결하기 위해 apply_chat_template이라는 전용 유틸리티 함수를 제공하고 있습니다.
apply_chat_template는 우리가 OpenAI API에서 익숙하게 사용하는 “메시지 리스트(List of Dictionaries) 형식”을 받아서,
이를 각 Instruct 모델에 맞는 특수 토큰 + 프롬프트 텍스트 형태로 자동 변환해 줍니다.
우리가 익숙한 입력 형식 예시:
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain what an LLM is."}
]
이걸 그대로 Instruct 모델에 넣으면 안 되고, 각 모델이 기대하는 특수 토큰 구조로 변환해야 합니다. 이 작업을 apply_chat_template가 자동으로 처리해 줍니다.
'제품 > AI' 카테고리의 다른 글
| Transformer 모델 (0) | 2025.12.18 |
|---|---|
| Ollama 설치부터 구글 Gemma 모델 실행까지 (0) | 2025.12.07 |
| AI 에이전트의 종류와 특징 (1) | 2025.05.11 |