본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 12. 4. · 8 Views
Hugging Face Transformers 입문 가이드
자연어 처리의 혁명을 이끈 Hugging Face Transformers 라이브러리를 처음 접하는 개발자를 위한 실전 가이드입니다. Hub부터 모델 활용, 데이터셋까지 핵심 개념을 이북처럼 술술 읽히는 스타일로 설명합니다.
목차
1. Hugging Face Hub 소개
김개발 씨는 회사에서 고객 리뷰를 자동으로 분석하는 프로젝트를 맡았습니다. "인공지능 모델을 처음부터 만들어야 하나?" 막막한 마음으로 검색을 하던 중, Hugging Face라는 이름을 발견했습니다.
선배 박시니어 씨가 다가와 말합니다. "거기가 바로 AI 모델의 보물창고야."
Hugging Face Hub는 한마디로 AI 모델과 데이터셋이 모여 있는 거대한 도서관입니다. 마치 GitHub가 코드 저장소인 것처럼, Hugging Face Hub는 수십만 개의 사전 학습된 모델을 무료로 제공합니다.
이곳에서 원하는 모델을 검색하고, 바로 다운로드하여 프로젝트에 적용할 수 있습니다.
다음 코드를 살펴봅시다.
# Hugging Face Hub에서 모델 정보 확인하기
from huggingface_hub import HfApi
# Hub API 인스턴스 생성
api = HfApi()
# 인기 있는 한국어 모델 검색
models = api.list_models(
filter="ko", # 한국어 모델 필터
sort="downloads", # 다운로드 수로 정렬
limit=5 # 상위 5개만 조회
)
# 검색 결과 출력
for model in models:
print(f"모델명: {model.modelId}")
print(f"다운로드: {model.downloads}")
김개발 씨는 입사 6개월 차 주니어 개발자입니다. 어느 날 팀장님이 다가와 새로운 프로젝트를 맡겼습니다.
"우리 쇼핑몰에 들어오는 고객 리뷰를 자동으로 분석해서 긍정인지 부정인지 분류해줘." 김개발 씨는 고개를 끄덕였지만, 속으로는 막막했습니다. 인공지능 모델을 만들어본 적이 없었기 때문입니다.
퇴근 후 집에서 열심히 검색을 하던 김개발 씨는 Hugging Face라는 이름을 발견했습니다. 노란색 웃는 얼굴 로고가 인상적인 이 사이트에 들어가 보니, 수많은 AI 모델들이 마치 앱스토어처럼 나열되어 있었습니다.
다음 날 출근한 김개발 씨는 선배 박시니어 씨에게 물었습니다. "선배님, Hugging Face가 뭔가요?" 박시니어 씨는 미소를 지으며 설명을 시작했습니다.
그렇다면 Hugging Face Hub란 정확히 무엇일까요? 쉽게 비유하자면, Hub는 마치 거대한 도서관과 같습니다.
우리가 책을 직접 쓰지 않아도 도서관에서 원하는 책을 빌려 읽을 수 있듯이, AI 모델을 직접 만들지 않아도 Hub에서 다운로드하여 사용할 수 있습니다. 더 놀라운 점은 이 모든 것이 무료라는 것입니다.
Hub가 없던 시절에는 어땠을까요? 개발자들은 AI 모델을 사용하기 위해 논문을 찾아 읽고, 복잡한 수식을 이해하고, 직접 구현해야 했습니다.
엄청난 양의 데이터를 수집하고, 비싼 GPU로 며칠씩 학습을 돌려야 했습니다. 대기업이 아니면 엄두도 내기 힘든 일이었습니다.
바로 이런 문제를 해결하기 위해 Hugging Face Hub가 등장했습니다. Hub를 사용하면 구글, 메타, 마이크로소프트 같은 대기업이 만든 최신 모델을 누구나 사용할 수 있습니다.
코드 몇 줄만 작성하면 수개월이 걸릴 작업을 단 몇 분 만에 끝낼 수 있습니다. 현재 Hub에는 50만 개가 넘는 모델이 등록되어 있습니다.
위의 코드를 살펴보겠습니다. 먼저 HfApi를 임포트합니다.
이것은 Hub와 통신하기 위한 도구입니다. list_models 메서드를 사용하면 원하는 조건으로 모델을 검색할 수 있습니다.
한국어 모델만 필터링하고, 다운로드 수가 많은 순서로 정렬했습니다. 실제 현업에서는 어떻게 활용할까요?
예를 들어 챗봇 서비스를 만든다면, Hub에서 대화 모델을 검색합니다. 감정 분석이 필요하면 sentiment-analysis로 검색합니다.
번역 서비스를 만들고 싶다면 translation 모델을 찾으면 됩니다. 원하는 기능의 모델이 이미 준비되어 있을 가능성이 높습니다.
하지만 주의할 점도 있습니다. Hub에는 누구나 모델을 올릴 수 있기 때문에, 품질이 천차만별입니다.
다운로드 수와 좋아요 수를 확인하고, 모델 카드를 꼼꼼히 읽어보는 습관이 필요합니다. 라이선스도 반드시 확인해야 합니다.
박시니어 씨의 설명을 들은 김개발 씨는 눈이 반짝였습니다. "그럼 저도 이걸로 리뷰 분석 모델을 만들 수 있겠네요!" 박시니어 씨가 고개를 끄덕였습니다.
"그래, 이제 본격적으로 시작해보자."
실전 팁
💡 - Hub에서 모델을 고를 때는 다운로드 수와 모델 카드를 반드시 확인하세요
- 한국어 모델은 "ko" 또는 "korean" 키워드로 검색할 수 있습니다
2. AutoModel과 AutoTokenizer
김개발 씨가 Hub에서 마음에 드는 모델을 찾았습니다. 그런데 모델을 불러오려고 보니 클래스 이름이 너무 복잡합니다.
BertForSequenceClassification, RobertaTokenizerFast... 대체 이 많은 클래스 중에 뭘 써야 할까요?
박시니어 씨가 다가와 말합니다. "Auto 클래스를 쓰면 돼."
AutoModel과 AutoTokenizer는 모델 이름만 알면 알아서 적절한 클래스를 찾아주는 똑똑한 도구입니다. 마치 만능 리모컨처럼, 어떤 모델이든 동일한 방식으로 불러올 수 있게 해줍니다.
덕분에 복잡한 클래스 이름을 외울 필요 없이 간단하게 모델을 사용할 수 있습니다.
다음 코드를 살펴봅시다.
# AutoModel과 AutoTokenizer로 모델 불러오기
from transformers import AutoModel, AutoTokenizer
# 모델 이름만 지정하면 자동으로 적절한 클래스 선택
model_name = "klue/bert-base"
# 토크나이저 불러오기 - 텍스트를 숫자로 변환
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 모델 불러오기 - 실제 AI 두뇌
model = AutoModel.from_pretrained(model_name)
# 텍스트를 토큰화하여 모델에 입력
text = "오늘 날씨가 좋습니다"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
print(f"출력 형태: {outputs.last_hidden_state.shape}")
김개발 씨는 Hub에서 한국어 감정 분석에 좋다는 "klue/bert-base" 모델을 발견했습니다. 그런데 공식 문서를 읽어보니 머리가 복잡해졌습니다.
BertModel, BertForSequenceClassification, BertForTokenClassification... 비슷한 이름의 클래스가 수십 개나 있었기 때문입니다.
"도대체 뭘 써야 하는 거지?" 김개발 씨가 한숨을 쉬자, 박시니어 씨가 다가왔습니다. "뭐가 문제야?" 김개발 씨가 화면을 보여주며 설명했습니다.
"모델을 불러오려는데, 클래스가 너무 많아서 뭘 써야 할지 모르겠어요." 박시니어 씨가 웃으며 말했습니다. "그래서 Auto 클래스가 있는 거야." 그렇다면 Auto 클래스란 정확히 무엇일까요?
쉽게 비유하자면, Auto 클래스는 마치 만능 리모컨과 같습니다. 예전에는 TV 리모컨, 에어컨 리모컨, 오디오 리모컨을 따로 써야 했지만, 만능 리모컨 하나면 모든 기기를 제어할 수 있습니다.
Auto 클래스도 마찬가지입니다. 모델 이름만 알려주면 알아서 적절한 클래스를 찾아 불러옵니다.
토크나이저가 무엇인지도 알아야 합니다. 컴퓨터는 글자를 직접 이해하지 못합니다.
"안녕하세요"라는 문장을 컴퓨터가 처리하려면 숫자로 바꿔야 합니다. 이 변환 작업을 하는 것이 바로 토크나이저입니다.
마치 통역사가 한국어를 영어로 바꿔주듯, 토크나이저는 사람의 언어를 컴퓨터의 언어로 바꿔줍니다. Auto 클래스가 없던 시절에는 어땠을까요?
개발자들은 사용하려는 모델의 정확한 클래스 이름을 알아야 했습니다. BERT 모델을 쓸 때와 GPT 모델을 쓸 때 코드가 달라졌습니다.
모델을 바꾸려면 코드 전체를 수정해야 하는 번거로움이 있었습니다. 위의 코드를 한 줄씩 살펴보겠습니다.
먼저 AutoTokenizer.from_pretrained으로 토크나이저를 불러옵니다. 모델 이름을 넣으면 해당 모델에 맞는 토크나이저가 자동으로 선택됩니다.
다음으로 AutoModel.from_pretrained으로 모델을 불러옵니다. 같은 방식입니다.
마지막으로 토크나이저로 텍스트를 변환하고, 모델에 입력하여 결과를 얻습니다. from_pretrained이라는 메서드 이름도 의미가 있습니다.
"pretrained"는 "사전 학습된"이라는 뜻입니다. 즉, 누군가가 이미 엄청난 양의 데이터로 학습시켜 놓은 모델을 가져온다는 의미입니다.
우리는 이 모델을 그대로 쓰거나, 우리 데이터에 맞게 추가 학습시킬 수 있습니다. 실제 현업에서는 어떻게 활용할까요?
처음에는 BERT로 시작했다가, 나중에 더 좋은 모델이 나와서 바꿔야 할 때가 있습니다. Auto 클래스를 사용했다면 model_name 변수만 바꾸면 됩니다.
코드의 나머지 부분은 그대로 유지할 수 있습니다. 이것이 Auto 클래스의 가장 큰 장점입니다.
하지만 주의할 점도 있습니다. Auto 클래스는 편리하지만, 내부에서 어떤 일이 벌어지는지 모르고 쓰면 문제가 생길 수 있습니다.
특히 AutoModelForSequenceClassification처럼 특정 작업용 클래스를 써야 할 때가 있습니다. 기본 AutoModel은 분류 레이어가 없기 때문입니다.
김개발 씨가 눈을 빛냈습니다. "이거 정말 편하네요!
모델 이름만 바꾸면 다른 모델로 실험해볼 수 있겠어요." 박시니어 씨가 고개를 끄덕였습니다. "맞아, 그래서 연구자들도 Auto 클래스를 많이 써."
실전 팁
💡 - 분류 작업에는 AutoModelForSequenceClassification을 사용하세요
- 토크나이저와 모델은 반드시 같은 model_name으로 불러와야 합니다
3. Pipeline API 활용
김개발 씨가 모델을 불러오는 법을 배웠습니다. 그런데 막상 감정 분석을 하려니 코드가 복잡해집니다.
토큰화하고, 모델에 넣고, 출력을 해석하고... 박시니어 씨가 말합니다.
"그냥 Pipeline 쓰면 한 줄이야."
Pipeline은 복잡한 AI 작업을 단 한 줄의 코드로 처리할 수 있게 해주는 마법 같은 도구입니다. 마치 자판기에 동전을 넣고 버튼만 누르면 음료가 나오듯, 텍스트를 넣으면 바로 결과가 나옵니다.
감정 분석, 번역, 요약, 질문 답변 등 다양한 작업을 지원합니다.
다음 코드를 살펴봅시다.
# Pipeline으로 간단하게 AI 작업 수행하기
from transformers import pipeline
# 감정 분석 파이프라인 생성
classifier = pipeline("sentiment-analysis")
# 한 줄로 감정 분석 완료
result = classifier("이 영화 정말 재미있었어요!")
print(result) # [{'label': 'POSITIVE', 'score': 0.99}]
# 여러 문장 한번에 분석
reviews = [
"배송이 너무 빨라서 좋았습니다",
"제품 품질이 별로예요",
"가격 대비 만족합니다"
]
results = classifier(reviews)
for review, result in zip(reviews, results):
print(f"{review} -> {result['label']}")
김개발 씨는 AutoModel과 AutoTokenizer를 배운 뒤 의욕이 넘쳤습니다. 바로 감정 분석 코드를 작성하기 시작했습니다.
그런데 코드가 점점 길어졌습니다. 토크나이저로 텍스트를 변환하고, 모델에 입력하고, 출력 텐서를 소프트맥스로 처리하고, 레이블을 매핑하고...
"이게 맞나?" 김개발 씨가 20줄이 넘어가는 코드를 보며 한숨을 쉬었습니다. 박시니어 씨가 다가와 화면을 보더니 웃음을 터뜨렸습니다.
"야, 그거 한 줄이면 되는데 왜 이렇게 길게 썼어?" 그렇다면 Pipeline이란 정확히 무엇일까요? 쉽게 비유하자면, Pipeline은 마치 자판기와 같습니다.
커피를 직접 만들려면 원두를 갈고, 물을 끓이고, 필터에 내리는 등 여러 단계가 필요합니다. 하지만 자판기에서는 버튼 하나만 누르면 커피가 나옵니다.
Pipeline도 마찬가지입니다. 복잡한 과정을 모두 숨기고, 입력만 넣으면 결과가 나옵니다.
Pipeline은 내부적으로 여러 단계를 자동 처리합니다. 첫째, 텍스트를 토큰화합니다.
둘째, 토큰을 모델에 입력합니다. 셋째, 모델의 출력을 해석합니다.
넷째, 사람이 이해할 수 있는 형태로 결과를 반환합니다. 이 모든 과정이 한 줄의 코드 뒤에서 일어납니다.
위의 코드를 살펴보겠습니다. **pipeline("sentiment-analysis")**로 감정 분석용 파이프라인을 만듭니다.
이때 기본 모델이 자동으로 다운로드됩니다. 그 다음 classifier에 텍스트를 넣으면 바로 결과가 나옵니다.
리스트로 여러 문장을 한번에 처리할 수도 있습니다. Pipeline이 지원하는 작업은 다양합니다.
sentiment-analysis는 감정 분석입니다. translation은 번역입니다.
summarization은 요약입니다. question-answering은 질문에 답하는 것입니다.
text-generation은 텍스트를 생성합니다. 거의 모든 NLP 작업을 Pipeline으로 처리할 수 있습니다.
특정 모델을 지정할 수도 있습니다. 기본 모델 대신 원하는 모델을 사용하고 싶다면 pipeline("sentiment-analysis", model="모델이름") 형태로 지정합니다.
한국어 분석에는 한국어 모델을 지정하는 것이 좋습니다. 실제 현업에서는 어떻게 활용할까요?
쇼핑몰에서 고객 리뷰를 분석한다고 가정해봅시다. 매일 수천 개의 리뷰가 올라옵니다.
Pipeline을 사용하면 단 몇 줄의 코드로 모든 리뷰의 감정을 분석할 수 있습니다. 부정 리뷰가 급증하면 알림을 보내는 시스템도 쉽게 만들 수 있습니다.
하지만 주의할 점도 있습니다. Pipeline은 편리하지만, 세밀한 제어가 어렵습니다.
모델의 중간 출력을 확인하거나, 커스텀 후처리를 하고 싶다면 직접 모델을 다루는 것이 좋습니다. 또한 기본 모델은 영어에 최적화되어 있어서, 한국어 작업에는 한국어 모델을 명시적으로 지정해야 합니다.
김개발 씨가 감탄했습니다. "와, 진짜 한 줄이네요!
제가 쓴 20줄짜리 코드가 바보 같아요." 박시니어 씨가 웃으며 말했습니다. "처음에 직접 해본 건 좋은 경험이야.
이제 Pipeline이 내부에서 뭘 하는지 이해하잖아."
실전 팁
💡 - 한국어 작업에는 반드시 한국어 모델을 지정하세요
- 대량의 데이터를 처리할 때는 batch_size 파라미터를 조절하면 속도가 빨라집니다
4. 모델 다운로드 및 캐싱
김개발 씨가 Pipeline 코드를 실행하자 터미널에 다운로드 진행률이 표시되었습니다. 몇 백 MB의 파일이 다운로드됩니다.
"이거 실행할 때마다 다운로드하는 건가요?" 박시니어 씨가 답합니다. "아니, 한 번만 받으면 캐싱돼."
Hugging Face는 모델을 처음 사용할 때 자동으로 다운로드하고, 로컬에 캐싱하여 저장합니다. 마치 넷플릭스가 영화를 버퍼링해두는 것처럼, 한 번 받은 모델은 다시 다운로드하지 않습니다.
캐시 위치를 알면 용량 관리도 쉽게 할 수 있습니다.
다음 코드를 살펴봅시다.
# 모델 캐싱 위치 확인 및 관리
import os
from transformers import AutoModel
# 기본 캐시 디렉토리 확인
cache_dir = os.path.expanduser("~/.cache/huggingface/hub")
print(f"캐시 위치: {cache_dir}")
# 특정 위치에 모델 저장하기
custom_path = "./my_models"
model = AutoModel.from_pretrained(
"klue/bert-base",
cache_dir=custom_path # 원하는 위치 지정
)
# 오프라인 모드로 캐시된 모델만 사용
model = AutoModel.from_pretrained(
"klue/bert-base",
local_files_only=True # 인터넷 연결 없이 사용
)
# 모델을 특정 폴더에 저장
model.save_pretrained("./saved_model")
김개발 씨가 Pipeline 코드를 처음 실행했을 때, 터미널에 진행률 바가 나타났습니다. "Downloading model.safetensors: 100%" 몇 백 MB의 파일이 다운로드되는 것을 보며 김개발 씨는 걱정이 되었습니다.
"이거 실행할 때마다 다운로드하면 시간이 너무 오래 걸리겠는데요?" 박시니어 씨가 안심시켜 주었습니다. "걱정 마, 캐싱 시스템이 있어서 한 번만 받으면 돼." 그렇다면 캐싱이란 정확히 무엇일까요?
쉽게 비유하자면, 캐싱은 마치 자주 읽는 책을 책상 위에 올려두는 것과 같습니다. 도서관에서 책을 빌려오면 시간이 걸리지만, 책상 위에 있는 책은 바로 펼쳐볼 수 있습니다.
Hugging Face도 마찬가지입니다. 처음에는 인터넷에서 모델을 다운로드하지만, 그 다음부터는 로컬에 저장된 파일을 사용합니다.
기본 캐시 위치는 어디일까요? 리눅스와 맥에서는 ~/.cache/huggingface/hub 폴더에 저장됩니다.
윈도우에서는 C:\Users\사용자명.cache\huggingface\hub입니다. 이 폴더를 확인해보면 다운로드한 모델들이 저장되어 있는 것을 볼 수 있습니다.
위의 코드를 살펴보겠습니다. cache_dir 파라미터를 사용하면 모델을 원하는 위치에 저장할 수 있습니다.
팀원들과 공유 서버를 사용한다면, 모두가 접근할 수 있는 폴더를 지정하면 좋습니다. local_files_only=True를 설정하면 인터넷 연결 없이 캐시된 모델만 사용합니다.
save_pretrained 메서드도 유용합니다. 모델을 특정 폴더에 깔끔하게 저장하고 싶을 때 사용합니다.
나중에 이 폴더 경로를 from_pretrained에 넣으면 바로 불러올 수 있습니다. 모델을 배포하거나 백업할 때 자주 쓰입니다.
실제 현업에서는 어떻게 활용할까요? 서버에 모델을 배포할 때 캐싱 전략이 중요합니다.
컨테이너를 새로 띄울 때마다 모델을 다운로드하면 시간이 오래 걸립니다. 미리 모델을 다운로드해서 이미지에 포함시키거나, 공유 볼륨에 캐시를 저장해두는 방식을 많이 사용합니다.
디스크 용량 관리도 필요합니다. 모델을 여러 개 실험하다 보면 캐시가 수십 GB로 불어날 수 있습니다.
주기적으로 캐시 폴더를 정리하거나, 환경 변수 HF_HOME을 설정하여 용량이 큰 디스크로 캐시 위치를 변경하는 것이 좋습니다. 하지만 주의할 점도 있습니다.
캐시된 모델은 버전 관리가 안 됩니다. 같은 이름의 모델이 업데이트되어도 캐시된 이전 버전을 계속 사용할 수 있습니다.
최신 버전을 받고 싶다면 force_download=True 옵션을 사용하거나, 캐시를 삭제해야 합니다. 김개발 씨가 캐시 폴더를 확인해보니 이미 1GB가 넘는 파일들이 있었습니다.
"아, 그래서 두 번째 실행부터는 빨랐군요!" 박시니어 씨가 말했습니다. "맞아, 이제 오프라인 환경에서도 개발할 수 있어."
실전 팁
💡 - 환경 변수 HF_HOME으로 전체 캐시 위치를 변경할 수 있습니다
- 프로덕션 배포 시에는 save_pretrained로 모델을 명시적으로 저장해두세요
5. 커스텀 모델 업로드
김개발 씨가 감정 분석 모델을 회사 데이터로 추가 학습시켰습니다. 성능이 많이 좋아졌습니다.
"이거 다른 프로젝트에서도 쓰고 싶은데, 어떻게 공유하죠?" 박시니어 씨가 답합니다. "Hub에 업로드하면 돼.
우리만의 비공개 모델로."
Hugging Face Hub는 모델을 다운로드하는 것뿐만 아니라, 직접 만든 모델을 업로드할 수도 있습니다. 마치 GitHub에 코드를 푸시하듯, 학습시킨 모델을 Hub에 올려서 팀원들과 공유하거나, 전 세계 개발자들에게 공개할 수 있습니다.
다음 코드를 살펴봅시다.
# 커스텀 모델을 Hugging Face Hub에 업로드하기
from transformers import AutoModel, AutoTokenizer
from huggingface_hub import login
# Hugging Face 로그인 (토큰 필요)
login(token="your_token_here")
# 학습된 모델과 토크나이저 불러오기
model = AutoModel.from_pretrained("./my_trained_model")
tokenizer = AutoTokenizer.from_pretrained("./my_trained_model")
# Hub에 업로드 - 공개 모델
model.push_to_hub("my-username/my-sentiment-model")
tokenizer.push_to_hub("my-username/my-sentiment-model")
# 비공개 모델로 업로드
model.push_to_hub(
"my-username/my-private-model",
private=True # 비공개 설정
)
# 이제 어디서든 불러올 수 있음
# model = AutoModel.from_pretrained("my-username/my-sentiment-model")
김개발 씨는 기쁜 마음으로 팀장님께 보고했습니다. "회사 리뷰 데이터로 모델을 추가 학습시켰더니 정확도가 95%가 넘었어요!" 팀장님이 흐뭇하게 웃으며 말했습니다.
"잘했어. 그런데 이 모델, 다른 팀에서도 쓰고 싶다고 하는데 어떻게 공유할까?" 김개발 씨가 고민하자, 박시니어 씨가 다가왔습니다.
"Hub에 업로드하면 돼. 비공개로 올리면 우리 회사 사람들만 쓸 수 있어." 그렇다면 모델 업로드란 정확히 무엇일까요?
쉽게 비유하자면, Hub에 모델을 업로드하는 것은 마치 클라우드 드라이브에 파일을 올리는 것과 같습니다. 내 컴퓨터에만 있던 파일을 클라우드에 올리면, 다른 기기에서도 접근할 수 있고, 다른 사람과 공유할 수도 있습니다.
모델도 마찬가지입니다. 업로드하려면 먼저 계정과 토큰이 필요합니다.
Hugging Face 웹사이트에서 무료로 계정을 만들 수 있습니다. 계정 설정에서 Access Token을 발급받으면 됩니다.
이 토큰은 일종의 비밀번호이므로 코드에 직접 넣지 말고, 환경 변수로 관리하는 것이 좋습니다. 위의 코드를 살펴보겠습니다.
login 함수로 먼저 인증합니다. push_to_hub 메서드를 호출하면 모델이 업로드됩니다.
"my-username/my-sentiment-model" 형식으로 이름을 지정합니다. 사용자명 다음에 슬래시, 그리고 모델 이름입니다.
private=True를 추가하면 비공개 모델이 됩니다. 업로드된 모델은 어떻게 사용할까요?
다른 컴퓨터에서 **from_pretrained("my-username/my-sentiment-model")**만 호출하면 됩니다. Hub에서 자동으로 다운로드됩니다.
비공개 모델이라면 같은 토큰으로 로그인되어 있어야 합니다. 모델 카드도 함께 작성하면 좋습니다.
모델 카드는 모델의 설명서입니다. 어떤 데이터로 학습했는지, 어떤 작업에 적합한지, 제한사항은 무엇인지 등을 기록합니다.
Hub 웹사이트에서 README.md 파일을 수정하면 됩니다. 좋은 모델 카드는 다른 사용자들이 모델을 올바르게 사용하도록 도와줍니다.
실제 현업에서는 어떻게 활용할까요? 회사 내에서 여러 팀이 비슷한 AI 작업을 할 때 유용합니다.
한 팀이 좋은 모델을 만들면 Hub에 비공개로 올려서 다른 팀과 공유합니다. 버전 관리도 되니까, 모델이 업데이트될 때마다 새 버전을 올릴 수 있습니다.
하지만 주의할 점도 있습니다. 회사 데이터로 학습한 모델을 실수로 공개하면 문제가 될 수 있습니다.
업로드 전에 반드시 private=True 옵션을 확인하세요. 또한 토큰이 노출되면 누군가 내 계정으로 모델을 올리거나 삭제할 수 있으니, 토큰 관리에 주의해야 합니다.
김개발 씨가 모델을 비공개로 업로드했습니다. 다른 팀 개발자가 "와, 모델 이름만 넣으면 바로 되네요!"라고 감탄했습니다.
김개발 씨는 뿌듯했습니다. 자신이 만든 모델이 회사 여러 프로젝트에서 사용되고 있었기 때문입니다.
실전 팁
💡 - 토큰은 환경 변수 HF_TOKEN으로 관리하면 코드에 노출되지 않습니다
- 모델 카드를 잘 작성하면 다른 사용자들이 모델을 올바르게 사용할 수 있습니다
6. Datasets 라이브러리
김개발 씨가 새로운 프로젝트를 시작했습니다. 이번에는 질문 답변 모델을 학습시켜야 합니다.
그런데 학습 데이터를 어디서 구하지? 웹에서 크롤링하자니 저작권이 걱정됩니다.
박시니어 씨가 말합니다. "Datasets 라이브러리를 써봐.
깨끗한 데이터셋이 잔뜩 있어."
Datasets 라이브러리는 Hugging Face가 제공하는 데이터셋 관리 도구입니다. 마치 식재료 마트에서 손질된 재료를 사는 것처럼, 전처리가 완료된 고품질 데이터셋을 쉽게 다운로드하여 사용할 수 있습니다.
수만 개의 데이터셋이 무료로 제공되며, 대용량 데이터도 효율적으로 처리합니다.
다음 코드를 살펴봅시다.
# Datasets 라이브러리로 데이터셋 활용하기
from datasets import load_dataset
# 한국어 감정 분석 데이터셋 로드
dataset = load_dataset("nsmc") # 네이버 영화 리뷰
# 데이터셋 구조 확인
print(dataset)
# DatasetDict({
# train: Dataset({features: ['id', 'document', 'label']})
# test: Dataset({features: ['id', 'document', 'label']})
# })
# 첫 번째 샘플 확인
print(dataset["train"][0])
# 데이터 필터링 - 긍정 리뷰만
positive = dataset["train"].filter(lambda x: x["label"] == 1)
# 데이터 변환 - 토큰화 적용
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("klue/bert-base")
def tokenize(examples):
return tokenizer(examples["document"], truncation=True)
tokenized = dataset.map(tokenize, batched=True)
김개발 씨는 팀장님으로부터 새로운 미션을 받았습니다. "이번에는 고객 질문에 자동으로 답변하는 챗봇을 만들어줘." 김개발 씨는 고개를 끄덕였지만, 곧 난관에 부딪혔습니다.
모델을 학습시키려면 질문-답변 쌍으로 된 데이터가 필요한데, 어디서 구해야 할지 막막했습니다. 웹에서 크롤링할까?
하지만 저작권 문제가 걱정됩니다. 직접 만들까?
수만 개의 데이터를 언제 다 만들겠습니까. 고민하던 김개발 씨에게 박시니어 씨가 다가왔습니다.
"Datasets 라이브러리 써봤어?" 그렇다면 Datasets 라이브러리란 정확히 무엇일까요? 쉽게 비유하자면, Datasets는 마치 대형 마트의 손질된 식재료 코너와 같습니다.
요리를 하려면 재료를 사서 씻고, 다듬고, 썰어야 합니다. 하지만 손질된 재료를 사면 바로 요리를 시작할 수 있습니다.
Datasets도 마찬가지입니다. 전처리가 완료된 데이터셋을 바로 가져다 쓸 수 있습니다.
Hub에는 어떤 데이터셋이 있을까요? 현재 10만 개 이상의 데이터셋이 등록되어 있습니다.
감정 분석, 질문 답변, 번역, 요약, 이미지 분류 등 거의 모든 AI 작업을 위한 데이터셋이 있습니다. 한국어 데이터셋도 많습니다.
NSMC(네이버 영화 리뷰), KorQuAD(한국어 질문 답변), KLUE(한국어 이해 평가) 등이 대표적입니다. 위의 코드를 살펴보겠습니다.
load_dataset 함수로 데이터셋을 다운로드합니다. 데이터셋 이름만 넣으면 됩니다.
반환된 객체는 DatasetDict로, train과 test 셋이 나뉘어 있습니다. 인덱스로 개별 샘플에 접근할 수 있습니다.
filter와 map 메서드가 강력합니다. filter는 조건에 맞는 데이터만 골라냅니다.
map은 모든 데이터에 함수를 적용합니다. 토큰화 같은 전처리 작업을 map으로 처리하면 매우 효율적입니다.
batched=True 옵션을 주면 더 빠릅니다. Datasets는 대용량 데이터를 효율적으로 처리합니다.
수백 GB의 데이터셋도 메모리 걱정 없이 다룰 수 있습니다. 내부적으로 Apache Arrow 형식을 사용하여, 필요한 부분만 메모리에 올리기 때문입니다.
디스크에서 직접 읽으면서도 빠른 속도를 유지합니다. 실제 현업에서는 어떻게 활용할까요?
새로운 AI 프로젝트를 시작할 때, 먼저 Hub에서 비슷한 데이터셋을 찾아봅니다. 기존 데이터셋으로 모델을 학습시킨 후, 회사 데이터로 추가 학습(fine-tuning)하는 방식을 많이 사용합니다.
이렇게 하면 적은 데이터로도 좋은 성능을 얻을 수 있습니다. 하지만 주의할 점도 있습니다.
데이터셋마다 라이선스가 다릅니다. 상업적 사용이 가능한지 반드시 확인해야 합니다.
또한 데이터셋의 품질도 천차만별입니다. 샘플을 직접 확인하고, 프로젝트에 적합한지 판단해야 합니다.
김개발 씨가 NSMC 데이터셋을 확인해보니 15만 개의 영화 리뷰가 있었습니다. "와, 이렇게 많은 데이터를 공짜로 쓸 수 있다니!" 박시니어 씨가 말했습니다.
"Hugging Face 생태계의 힘이야. 전 세계 개발자들이 데이터를 공유하거든." 김개발 씨는 감사한 마음으로 데이터셋을 다운로드했습니다.
이제 모델 학습을 시작할 준비가 끝났습니다.
실전 팁
💡 - load_dataset에 split="train[:1000]"을 넣으면 일부 데이터만 로드하여 빠르게 테스트할 수 있습니다
- 데이터셋 라이선스를 꼭 확인하고, 상업적 사용 가능 여부를 체크하세요
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.