Menganalisis data teks dengan NLP modern: preprocessing teks, konsep embeddings, dan arsitektur Transformers via Hugging Face — dilengkapi praktik analisis sentimen lengkap dari teks mentah hingga prediksi

Setelah di episode 13 kita menguasai deep learning dasar, pada episode ini kita menerapkannya pada data yang berbeda total: teks. Ulasan pelanggan, tiket support, deskripsi produk, dan komentar media sosial adalah data yang paling banyak tersedia — dan paling sedikit dimanfaatkan karena "susah diproses".
Mengapa NLP penting di 2026? Karena sebagian besar sinyal bisnis tersembunyi di teks: sentimen pelanggan, topik komplain, tren produk. Dan dengan Transformers, analisis teks yang dulu butuh riset bertahun-tahun kini bisa dilakukan dengan beberapa baris kode. Episode ini membangun alurnya: preprocessing, representasi (embeddings), lalu modeling dengan arsitektur modern.
Sebelum model, teks harus dibersihkan dan dinormalisasi:
import re
def clean_text(text: str) -> str:
text = text.lower()
text = re.sub(r"http\S+|www\.\S+", "", text) # hapus URL
text = re.sub(r"@\w+|#\w+", "", text) # hapus mention/hashtag
text = re.sub(r"[^\w\s]", "", text) # hapus tanda baca
text = re.sub(r"\s+", " ", text).strip()
return text
review = "Layanan LAMBAT banget!!! cek @cs #internet 😠"
print(clean_text(review))Preprocessing tradisional (stopword removal, stemming/lemmatization) kini lebih jarang dipakai — model Transformer sudah belajar konteks bahasa secara penuh. Yang tetap wajib: membersihkan noise (URL, mention, tanda baca berlebihan) dan tokenisasi yang konsisten.
Model tidak memahami kata; ia memahami angka. Evolusinya:
| Pendekatan | Cara Kerja | Kelemahan |
|---|---|---|
| Bag-of-Words / TF-IDF | Hitung frekuensi kata | Tak tahu urutan & konteks |
| Word2Vec / GloVe | Vektor statis per kata | Satu kata punya satu makna |
| Transformers (2020+) | Vektor kontekstual | Makna bergantung konteks kalimat |
Perbedaan paling penting: di embedding kontekstual, kata "bank" dalam "bank sungai" dan "bank tabungan" punya representasi berbeda. Inilah kemampuan yang membuat Transformers menguasai NLP modern.
Hugging Face menyediakan ribuan model pretrained yang siap dipakai. Alur klasik: muat model → tokenisasi → prediksi → decode.
pip install transformersfrom transformers import pipeline
classifier = pipeline("sentiment-analysis", model="w11wo/indonesian-roberta-base-sentiment-classifier")
reviews = [
"Pelayanannya sangat cepat dan ramah, terima kasih!",
"internetnya lemot sekali, tidak bisa dipakai meeting",
"biasa saja, sesuai ekspektasi",
]
for r in reviews:
print(r, "→", classifier(r)[0])pipeline merangkum tokenisasi + model + decoding dalam satu panggilan. Perhatikan penggunaan model spesifik bahasa Indonesia — untuk teks bahasa Indonesia, model multibahasa/regional jauh lebih akurat daripada model bahasa Inggris.
from transformers import AutoTokenizer, AutoModelForSequenceClassification
model_name = "indolem/indobert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
tokens = tokenizer("layanan sangat memuaskan", return_tensors="pt")
print(tokenizer.convert_ids_to_tokens(tokens["input_ids"][0]))AutoTokenizer + AutoModel memilih arsitektur yang benar secara otomatis berdasarkan nama model — prinsip yang sama berlaku untuk jutaan model di Hugging Face Hub.
Tip
Saat pertama menjalankan, Hugging Face mengunduh model (ratusan MB) dari hub. Untuk efisiensi, unduh sekali lalu gunakan cache. Di lingkungan tanpa internet, ekspor model lokal dengan save_pretrained dan muat ulang dari direktori.
Dua cara memakai model bahasa:
| Pendekatan | Data Butuh | Biaya | Akurasi |
|---|---|---|---|
| Zero-shot / pretrained langsung | Tidak ada | Rendah | Baik untuk tugas umum |
| Fine-tuning | Ratusan-ratusan contoh berlabel | Sedang | Terbaik untuk domain spesifik |
| Training dari nol | Jutaan contoh | Sangat tinggi | Jarang perlu (episode 22) |
Untuk analisis sentimen produk, fine-tuning dengan beberapa ratus contoh berlabel biasanya cukup — episode 22 akan membangun ini untuk domain kalian.
Alur lengkap analisis teks untuk keputusan bisnis:
import pandas as pd
from transformers import pipeline
classifier = pipeline("sentiment-analysis",
model="w11wo/indonesian-roberta-base-sentiment-classifier")
reviews = pd.read_csv("ulasan_produk.csv")
def sentiment(text):
result = classifier(text[:500])[0] # batasi panjang input
return result["label"], result["score"]
reviews[["label", "score"]] = reviews["text"].apply(sentiment).tolist()
summary = reviews.groupby("label").size().sort_values(ascending=False)
print(summary)
negative = reviews[reviews["label"] == "negative"]
print("ulasan negatif:", len(negative))
print(negative["text"].head(5).to_string())reviews[["label", "score"]] memecah tuple hasil menjadi dua kolom; [:500] memotong teks panjang agar sesuai konteks model. Outputnya adalah tabel sentimen per produk — bahan untuk dashboard dan keputusan (episode 17).
| Pitfall | Dampak | Solusi |
|---|---|---|
| Model bahasa Inggris untuk teks Indonesia | Akurasi rendah | Model multibahasa/regional |
| Preprocessing berlebihan (stopword dll) | Merusak konteks Transformer | Cukup bersihkan noise |
| Memakai model bahasa untuk selain teks | Tidak relevan | Pilih model per modalitas |
| Mengabaikan batas panjang input | Truncate / error | Potong atau chunk teks |
| Langsung fine-tuning tanpa mencoba zero-shot | Biaya tak perlu | Baseline dulu dengan pretrained |
Inti yang harus dibawa pulang:
pipeline untuk cepat, AutoTokenizer + AutoModel untuk kontrol.Di episode 15 selanjutnya kita akan membahas time series analysis — menangkap tren & musiman dan meramalkan penjualan dengan Prophet/ARIMA. Sampai jumpa di episode 15!