Sessi 1 — Pengantar AI3 & Fokus NLP
Tujuan sesi: memahami posisi NLP dalam AI, meninjau matematik dasar (vektor & probabilitas kata), dan melihat alur proyek NLP dari data mentah hingga keluaran model.
1) Definisi & Gambaran Umum
Artificial Intelligence (AI) adalah studi dan rekayasa sistem yang mampu melakukan tugas yang biasanya membutuhkan kecerdasan manusia. Natural Language Processing (NLP) adalah cabang AI yang berfokus pada pemrosesan dan pemahaman teks/bahasa manusia. Dalam kursus ini, kita menekankan pendekatan statistical & vector space untuk merepresentasikan teks, sehingga dapat diolah oleh algoritma pembelajaran mesin.
Pemodelan Teks sebagai Vektor
Kalimat/dokumen diubah menjadi vektor fitur (mis. frekuensi kata). Setiap dimensi mewakili istilah tertentu; besarnya nilai menunjukkan pentingnya istilah dalam dokumen. Hal ini memungkinkan perhitungan jarak atau kesamaan antar dokumen.
2) Studi Kasus Nyata — Eksplorasi Korpus Campuran (ID+EN)
Kita mulai dari korpus multi-topik tanpa label untuk eksplorasi awal. Target: memahami distribusi kata, menemukan istilah dominan, dan menyiapkan data untuk sesi-sesi berikutnya (TF–IDF, similarity, klasifikasi).
Contoh Korpus (≥ 30 Dokumen)
Korpus ini mencakup ulasan produk, berita singkat, opini singkat, dan deskripsi layanan (campuran Indonesia/Inggris). Anda dapat memperluas atau mengganti dengan data kelas Anda.
corpus = [
"Pengiriman cepat, kualitas barang sangat baik dan sesuai deskripsi.",
"Battery life is impressive; however, the screen glare is noticeable outdoors.",
"Layanan pelanggan responsif, tetapi proses retur memakan waktu.",
"The movie had stunning visuals but a weak storyline.",
"Harga terjangkau, performa mantap untuk kebutuhan harian.",
"Network latency spikes during peak hours affected our dashboard.",
"Rasa kopi kuat dan aromanya enak, kemasan juga rapi.",
"App update fixed the crash but introduced login delays.",
"Fitur kamera malam bagus, namun stabilisasi video kurang.",
"Documentation is thorough, examples help onboarding.",
"Pengalaman belanja menyenangkan, voucher potongan harga membantu sekali.",
"Server downtime last night impacted API integrations.",
"Tekstur kue lembut, rasa tidak terlalu manis sesuai selera keluarga.",
"Delivery was late; packaging was dented but item worked fine.",
"Antarmuka aplikasi intuitif, navigasi mudah dipahami pemula.",
"Customer support promised a callback but never followed up.",
"Kualitas kain adem, ukuran sesuai chart, jahitan rapi.",
"Dataset imbalance requires stratified sampling for evaluation.",
"Suara speaker jernih, bass cukup, volume maksimal tidak pecah.",
"Checkout process failed at payment gateway intermittently.",
"Konektivitas Bluetooth stabil; jarak efektif sekitar 8 meter.",
"The hotel staff were friendly, but the room smelled of smoke.",
"Keyboard travel nyaman, backlight konsisten, keycaps anti-slip.",
"Performa menurun setelah update; cache clear membantu sementara.",
"Shipping fee too high for small accessories.",
"Resep mudah diikuti, waktu memasak sesuai estimasi.",
"Price-to-performance is excellent for students.",
"Layar AMOLED tajam, warna hidup, tingkat kecerahan tinggi.",
"Refund diproses cepat setelah komplain diajukan.",
"Weather data ingestion requires timezone normalization."
]
Korpus di atas bersifat unlabeled (tanpa label). Pada sesi berikutnya Anda akan menambahkan pipeline praproses, representasi TF–IDF/embedding, dan model.
3) Praktik di Google Colab — Eksplorasi Awal
Salin blok kode berikut ke Google Colab. Setiap sel mandiri dan berurutan agar mudah diikuti mahasiswa.
A. Setup & Data
!pip -q install pandas numpy scikit-learn nltk matplotlib Sastrawi
import re, math, collections
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# ----- DATASET (≥30 dokumen campuran ID+EN) -----
corpus = [
# (gunakan daftar dari blok sebelumnya atau gabungkan di sini)
]
# Jika ingin menambah dokumen sendiri:
# corpus.extend(["tambah kalimat di sini", ...])
print(f"Total dokumen: {len(corpus)}")
# Simpan ke CSV untuk dokumentasi eksperimen
pd.DataFrame({"text": corpus}).to_csv("corpus_sessi1.csv", index=False)
print("Tersimpan: corpus_sessi1.csv")
B. Tokenisasi & Normalisasi Sederhana
import nltk
nltk.download('punkt', quiet=True)
# Tokenizer sederhana (huruf, angka, tanda hubung)
TOKEN_RE = re.compile(r"[A-Za-zÀ-ÖØ-öø-ÿ0-9_\-']+")
def tokenize(text):
return [t.lower() for t in TOKEN_RE.findall(text)]
TOKENS = [tokenize(doc) for doc in corpus]
TOKENS[:2]
C. Frekuensi Kata & Visualisasi Top Terms
# Hitung frekuensi global
from collections import Counter
freq = Counter([tok for doc in TOKENS for tok in doc])
# 25 istilah teratas (tanpa stopword formal dulu)
TOP = pd.DataFrame(freq.most_common(25), columns=["term","freq"])
print(TOP)
plt.figure(figsize=(10,5))
plt.bar(TOP["term"], TOP["freq"])
plt.xticks(rotation=60, ha='right')
plt.title('Top 25 Frekuensi Istilah (pra-stopword)')
plt.tight_layout(); plt.show()
D. TF, DF, dan Skor TF–IDF Manual (Intuisi)
# Document Frequency (DF)
from math import log
DF = Counter()
for doc in TOKENS:
for t in set(doc):
DF[t] += 1
N = len(TOKENS)
def tf(doc):
c = Counter(doc)
L = len(doc) if len(doc)>0 else 1
return {t: c[t]/L for t in c}
# Hitung TF-IDF sederhana
VOCAB = sorted(DF.keys())
IDX = {t:i for i,t in enumerate(VOCAB)}
import numpy as np
X = np.zeros((N, len(VOCAB)), dtype=float)
for i,doc in enumerate(TOKENS):
tfd = tf(doc)
for t,v in tfd.items():
idf = math.log((N+1)/(DF[t]+1)) + 1 # smoothed IDF
X[i, IDX[t]] = v * idf
print("Matriks TF-IDF:", X.shape)
E. Cosine Similarity Dokumen vs Query
from numpy.linalg import norm
def cosine(a,b):
na, nb = norm(a)+1e-12, norm(b)+1e-12
return float(np.dot(a,b)/(na*nb))
# Query: ketik apa pun yang relevan
query = "pengiriman cepat dan kualitas bagus"
q_tokens = tokenize(query)
q_vec = np.zeros((len(VOCAB),), float)
qt = Counter(q_tokens)
L = sum(qt.values()) or 1
for t,cnt in qt.items():
if t in IDX:
idf = math.log((N+1)/(DF[t]+1)) + 1
q_vec[IDX[t]] = (cnt/L) * idf
sims = [cosine(X[i], q_vec) for i in range(N)]
rank = np.argsort(sims)[::-1][:5]
print("Query:", query)
for r in rank:
print(f"sim={sims[r]:.3f}", corpus[r])
F. Catatan Lanjut
- Di Sessi 2–3, kita tambahkan stopword, stemming, dan lemmatization.
- Di Sessi 4–5, kita gunakan TF–IDF dari
scikit-learndan membangun search sederhana. - Di Sessi 6–11, kita masuk ke model klasifikasi (KNN, Regresi, SVM) dan sentiment analysis.
- Embedding seperti word2vec dan pendekatan tanpa label awal akan diperkenalkan menjelang Sessi 10 & 15.
4) Rangkuman & Checklist
- Paham posisi NLP dalam AI dan gambaran pipeline end‑to‑end.
- Mampu memuat (≥30) dokumen teks mentah untuk eksplorasi.
- Menghitung frekuensi kata dan membuat visualisasi sederhana.
- Mengerti intuisi TF, DF, dan skor TF–IDF serta penggunaan cosine similarity untuk pencarian.