Tutorial Lengkap Hugging Face Transformers: NLP Modern dengan Python

# 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 mo...

By Ruby Abdullah · · tutorial
Hugging FaceTransformersNLPBERTPythonDeep Learning

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

Use Cases:
  • 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.pushtohub("my-username/my-model")

tokenizer.pushtohub("my-username/my-model")

Atau dengan trainer

trainer.pushtohub("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:

  • Easy pipelines: Quick inference dengan satu baris
  • Ribuan model: Akses ke state-of-the-art
  • Fine-tuning: Trainer API untuk custom tasks
  • Multi-modal: Text, vision, audio models
  • Production ready**: Optimization dan deployment
  • 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

    Artikel Terkait

    Tutorial PyTorch Geometric: Graph Neural Network dengan PyTorch

    Memulai dengan PyTorch Geometric: Graph Neural Network di PyTorch Sebagian besar machine learning bekerja pada grid (gam...

    Tutorial BERTopic: Topic Modeling Modern dengan Embeddings

    BERTopic: Pemodelan Topik Modern dengan Embedding BERTopic adalah library pemodelan topik yang menggabungkan embedding t...

    Tutorial Sentence Transformers: Embeddings, Similarity, dan Reranker

    Sentence Transformers: Embedding, Kemiripan Semantik, dan Reranker Sentence Transformers (sering disebut SBERT) adalah p...

    Tutorial spaCy: NLP Berskala Industri dengan Python

    spaCy: NLP Kelas Industri di Python spaCy adalah pustaka open-source untuk pemrosesan bahasa alami (NLP) yang dirancang ...