본문 바로가기
제품/AI

Hugging Face Transformers

by 헬로웬디 2025. 12. 8.

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이 내부적으로 다음 과정을 자동으로 처리합니다.

  1. 토크나이저를 이용한 전처리(Tokenization)
  2. 모델을 이용한 추론(Inference)
  3. 사람이 읽기 쉬운 형태로 결과 변환(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