Tutorial Lengkap Hugging Face Transformers: Pretrained Models untuk NLP dan Vision
Hugging Face Transformers adalah library paling populer untuk state-of-the-art pretrained models. Dengan ribuan model tersedia, Anda dapat dengan mudah menggunakan BERT, GPT, T5, dan lainnya untuk klasifikasi teks, generasi, terjemahan, dan tugas computer vision.
Mengapa Hugging Face Transformers?
Keunggulan Transformers:- Ribuan model: Akses ke 200,000+ pretrained models
- Multiple frameworks: Support PyTorch, TensorFlow, JAX
- Mudah digunakan: Simple pipelines API
- Production ready: Optimized inference
- Community aktif: Update regular dan model baru
- Text classification dan NER
- Question answering
- Text generation (GPT, LLaMA)
- Translation
- Image classification dan object detection
Instalasi
pip install transformers
Dengan PyTorch
pip install transformers torch
Dengan TensorFlow
pip install transformers tensorflow
Dengan semua extras
pip install transformers[torch,sentencepiece,tokenizers]
Verify
python -c "import transformers; print(transformers.version)"
Quick Start dengan Pipelines
1. Text Classification
from transformers import pipeline
Sentiment analysis
classifier = pipeline("sentiment-analysis")
result = classifier("Saya suka produk ini! Luar biasa!")
print(result) # [{'label': 'POSITIVE', 'score': 0.9998}]
Multiple texts
results = classifier([
"Ini bagus sekali!",
"Ini sangat buruk!",
"Biasa saja, tidak istimewa."
])
Custom model
classifier = pipeline(
"sentiment-analysis",
model="nlptown/bert-base-multilingual-uncased-sentiment"
)
2. Named Entity Recognition
from transformers import pipeline
ner = pipeline("ner", groupedentities=True)
result = ner("Nama saya Budi dan saya bekerja di Google di Jakarta.")
print(result)
[{'entitygroup': 'PER', 'word': 'Budi', ...},
{'entitygroup': 'ORG', 'word': 'Google', ...},
{'entitygroup': 'LOC', 'word': 'Jakarta', ...}]
3. Question Answering
from transformers import pipeline
qa = pipeline("question-answering")
context = """
Hugging Face adalah perusahaan yang mengembangkan tools untuk machine learning.
Mereka terkenal dengan library Transformers dan Hugging Face Hub.
Perusahaan ini didirikan pada tahun 2016.
"""
result = qa(
question="Kapan Hugging Face didirikan?",
context=context
)
print(result) # {'answer': '2016', 'score': 0.98, ...}
4. Text Generation
from transformers import pipeline
GPT-2
generator = pipeline("text-generation", model="gpt2")
result = generator(
"Masa depan AI adalah",
maxlength=50,
numreturnsequences=3
)
Dengan model lebih baik
generator = pipeline("text-generation", model="meta-llama/Llama-2-7b-hf")
result = generator(
"Jelaskan machine learning:",
maxnewtokens=100,
temperature=0.7
)
5. Translation
from transformers import pipeline
English ke French
translator = pipeline("translationentofr")
result = translator("Hello, how are you?")
print(result) # [{'translationtext': 'Bonjour, comment allez-vous?'}]
Multi-language
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-en-id")
result = translator("Machine learning is fascinating.")
6. Summarization
from transformers import pipeline
summarizer = pipeline("summarization")
article = """
Teks artikel panjang disini...
"""
summary = summarizer(
article,
maxlength=100,
minlength=30,
dosample=False
)
print(summary[0]['summarytext'])
Bekerja dengan Models dan Tokenizers
1. Loading Models
from transformers import AutoModel, AutoTokenizer, AutoModelForSequenceClassification
Auto classes (recommended)
tokenizer = AutoTokenizer.frompretrained("bert-base-uncased")
model = AutoModel.frompretrained("bert-base-uncased")
Task-specific model
model = AutoModelForSequenceClassification.frompretrained(
"bert-base-uncased",
numlabels=2
)
Dari local path
model = AutoModel.frompretrained("./mymodel/")
Dengan specific revision
model = AutoModel.frompretrained(
"bert-base-uncased",
revision="v1.0"
)
2. Tokenization
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.frompretrained("bert-base-uncased")
Basic tokenization
text = "Halo, apa kabar?"
tokens = tokenizer.tokenize(text)
print(tokens)
Encode ke IDs
inputids = tokenizer.encode(text)
print(inputids)
Full encoding
encoding = tokenizer(
text,
padding=True,
truncation=True,
maxlength=512,
returntensors="pt" # PyTorch tensors
)
print(encoding.keys()) # dictkeys(['inputids', 'attentionmask'])
Batch encoding
texts = ["Halo!", "Apa kabar?", "Saya baik."]
encodings = tokenizer(
texts,
padding=True,
truncation=True,
returntensors="pt"
)
3. Inference
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.frompretrained("bert-base-uncased")
model = AutoModelForSequenceClassification.frompretrained(
"bert-base-uncased",
numlabels=2
)
Siapkan input
text = "Film ini bagus sekali!"
inputs = tokenizer(text, returntensors="pt")
Forward pass
with torch.nograd():
outputs = model(inputs)
logits = outputs.logits
predictions = torch.softmax(logits, dim=-1)
print(f"Positive: {predictions[0][1]:.4f}")
print(f"Negative: {predictions[0][0]:.4f}")
Fine-tuning Models
1. Menggunakan Trainer API
from transformers import (
AutoTokenizer,
AutoModelForSequenceClassification,
TrainingArguments,
Trainer
)
from datasets import loaddataset
import numpy as np
from sklearn.metrics import accuracyscore
Load data
dataset = loaddataset("imdb")
Load model dan tokenizer
modelname = "bert-base-uncased"
tokenizer = AutoTokenizer.frompretrained(modelname)
model = AutoModelForSequenceClassification.frompretrained(
modelname,
numlabels=2
)
Tokenize data
def tokenizefunction(examples):
return tokenizer(
examples["text"],
padding="maxlength",
truncation=True,
maxlength=512
)
tokenizeddatasets = dataset.map(tokenizefunction, batched=True)
Training arguments
trainingargs = TrainingArguments(
outputdir="./results",
numtrainepochs=3,
perdevicetrainbatchsize=16,
perdeviceevalbatchsize=64,
warmupsteps=500,
weightdecay=0.01,
loggingdir="./logs",
loggingsteps=100,
evaluationstrategy="epoch",
savestrategy="epoch",
loadbestmodelatend=True,
)
Metrics
def computemetrics(evalpred):
logits, labels = evalpred
predictions = np.argmax(logits, axis=-1)
return {"accuracy": accuracyscore(labels, predictions)}
Trainer
trainer = Trainer(
model=model,
args=trainingargs,
traindataset=tokenizeddatasets["train"],
evaldataset=tokenizeddatasets["test"],
computemetrics=computemetrics,
)
Train
trainer.train()
Save
trainer.savemodel("./finetunedmodel")
2. Custom Training Loop
import torch
from torch.utils.data import DataLoader
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from torch.optim import AdamW
from tqdm import tqdm
Setup
device = torch.device("cuda" if torch.cuda.isavailable() else "cpu")
model = AutoModelForSequenceClassification.frompretrained("bert-base-uncased", numlabels=2)
model.to(device)
optimizer = AdamW(model.parameters(), lr=2e-5)
Training loop
model.train()
for epoch in range(3):
for batch in tqdm(traindataloader):
batch = {k: v.to(device) for k, v in batch.items()}
outputs = model(batch)
loss = outputs.loss
loss.backward()
optimizer.step()
optimizer.zerograd()
print(f"Epoch {epoch + 1} selesai")
Save
model.savepretrained("./mymodel")
tokenizer.savepretrained("./mymodel")
Vision Models
1. Image Classification
from transformers import pipeline, AutoImageProcessor, AutoModelForImageClassification
from PIL import Image
Menggunakan pipeline
classifier = pipeline("image-classification", model="google/vit-base-patch16-224")
image = Image.open("kucing.jpg")
result = classifier(image)
print(result)
Manual inference
processor = AutoImageProcessor.frompretrained("google/vit-base-patch16-224")
model = AutoModelForImageClassification.frompretrained("google/vit-base-patch16-224")
inputs = processor(images=image, returntensors="pt")
outputs = model(inputs)
logits = outputs.logits
predictedclass = logits.argmax(-1).item()
print(model.config.id2label[predictedclass])
2. Object Detection
from transformers import pipeline
from PIL import Image
detector = pipeline("object-detection", model="facebook/detr-resnet-50")
image = Image.open("jalan.jpg")
results = detector(image)
for result in results:
print(f"{result['label']}: {result['score']:.2f}")
print(f" Box: {result['box']}")
3. Image Segmentation
from transformers import pipeline
from PIL import Image
segmenter = pipeline("image-segmentation", model="facebook/mask2former-swin-base-coco-panoptic")
image = Image.open("gambar.jpg")
results = segmenter(image)
for segment in results:
print(f"{segment['label']}: {segment['score']:.2f}")
Menyimpan dan Berbagi Models
1. Simpan Lokal
# Simpan model dan tokenizer
model.savepretrained("./mymodel")
tokenizer.savepretrained("./mymodel")
Load nanti
model = AutoModel.frompretrained("./mymodel")
tokenizer = AutoTokenizer.frompretrained("./mymodel")
2. Push ke Hub
from huggingfacehub import login
Login
login() # atau gunakan token
Push model
model.push
tohub("my-username/my-model")
tokenizer.push
tohub("my-username/my-model")
Atau dengan trainer
trainer.push
tohub("my-username/my-model")
Optimization
1. Mixed Precision Training
from transformers import TrainingArguments
trainingargs = TrainingArguments(
outputdir="./results",
fp16=True, # Enable mixed precision
# bf16=True, # Untuk GPU baru
)
2. Gradient Checkpointing
model.gradientcheckpointingenable()
3. Model Quantization
from transformers import AutoModelForCausalLM
8-bit quantization
model = AutoModelForCausalLM.frompretrained(
"meta-llama/Llama-2-7b-hf",
loadin8bit=True,
devicemap="auto"
)
4-bit quantization
model = AutoModelForCausalLM.frompretrained(
"meta-llama/Llama-2-7b-hf",
loadin4bit=True,
devicemap="auto"
)
Best Practices
1. Gunakan Auto Classes
# Baik
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.frompretrained("bert-base-uncased")
model = AutoModel.frompretrained("bert-base-uncased")
Hindari specific classes kecuali diperlukan
from transformers import BertTokenizer, BertModel
2. Handle Long Texts
# Truncation
tokenizer(text, truncation=True, maxlength=512)
Sliding window
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.frompretrained("bert-base-uncased")
def processlongtext(text, maxlength=512, stride=256):
tokens = tokenizer(
text,
maxlength=maxlength,
truncation=True,
stride=stride,
returnoverflowingtokens=True,
return_tensors="pt"
)
return tokens
Kesimpulan
Hugging Face Transformers adalah essential untuk modern NLP dan CV dengan:
Key takeaways:
- Mulai dengan pipelines untuk prototyping cepat
- Gunakan Auto classes untuk fleksibilitas
- Fine-tune dengan Trainer API
- Optimize dengan quantization untuk deployment
- Share models di Hugging Face Hub