S6
IF1402 Praktikum
Sesi 6 - Word Embedding
Sesi 6 dari 16

Word Embedding

Sampai sesi 5, mahasiswa sudah memakai BoW dan TF-IDF. Kedua cara itu sangat penting sebagai fondasi, tetapi masih punya keterbatasan. BoW dan TF-IDF belum benar-benar memahami makna kata. Kata “bagus” dan “baik” bisa dianggap jauh hanya karena bentuk katanya berbeda. Di sinilah word embedding menjadi langkah maju.

Word embedding mengubah kata menjadi vektor angka yang bukan hanya menghitung frekuensi, tetapi juga mencoba menangkap kedekatan makna. Ibaratnya, kalau BoW adalah daftar hadir kata, maka embedding adalah peta posisi kata di ruang makna. Kata yang mirip akan berada lebih dekat.

Tujuan: memahami makna kata Fokus: representasi semantik Output: eksperimen embedding kata
Pertanyaan utama sesi ini Bagaimana komputer mulai menangkap bahwa dua kata bisa mirip makna walaupun tidak sama persis?
Jawaban singkatnya Dengan embedding, tiap kata dipetakan ke vektor yang dipelajari dari konteks. Kata yang sering muncul pada konteks mirip akan punya posisi yang berdekatan.
Hasil belajar Mahasiswa memahami ide embedding, membandingkannya dengan TF-IDF, dan mencoba menghitung kemiripan kata atau dokumen dengan pendekatan yang lebih semantik.

Kelemahan BoW dan TF-IDF yang perlu diingat

BoW dan TF-IDF memperlakukan kata sebagai token yang terpisah. Artinya, kata “murah” dan “terjangkau” bisa dianggap berbeda total, padahal maknanya dekat. Selain itu, pendekatan klasik cenderung kurang peka terhadap hubungan makna antar kata.

Perumpamaan mudah

Bayangkan ada daftar mahasiswa yang hanya mencatat nama tanpa informasi jurusan, minat, atau kelas. Daftar itu berguna, tetapi tidak memberi gambaran siapa yang mirip dengan siapa. Embedding seperti menambahkan informasi posisi sosial atau minat, sehingga mahasiswa yang serupa tampak berdekatan di peta.

Ini bukan berarti BoW dan TF-IDF jelek. Justru keduanya tetap penting sebagai fondasi. Embedding hadir sebagai langkah lanjutan agar mesin lebih peka terhadap makna dan konteks.

Ide dasar word embedding

1

Kata menjadi vektor padat

Bukan lagi vektor sangat jarang seperti BoW, tetapi vektor pendek berisi angka yang lebih padat.

2

Vektor dipelajari dari konteks

Kata yang sering muncul di konteks mirip akan punya representasi yang dekat.

3

Kemiripan bisa dihitung

Kita dapat memakai cosine similarity untuk melihat kedekatan antarkata.

4

Makna menjadi lebih terasa

Kata seperti “dosen”, “pengajar”, dan “guru” cenderung lebih dekat daripada kata yang tidak berhubungan.

Perbandingan cepat BoW, TF-IDF, dan Embedding

Pendekatan Kelebihan Keterbatasan
BoW Sederhana, cepat, dan mudah dipahami. Tidak menangkap makna dan hubungan kata.
TF-IDF Lebih informatif daripada hitungan mentah. Masih sulit memahami sinonim dan konteks.
Word Embedding Lebih peka terhadap makna dan konteks kemunculan kata. Butuh data atau model pretrained, serta interpretasi lebih abstrak.

Word2Vec, FastText, dan GloVe secara sederhana

Word2Vec adalah salah satu teknik embedding paling terkenal. Ia belajar dari konteks kata di dalam kalimat. FastText mirip, tetapi juga memperhatikan bagian sub-kata sehingga lebih kuat menghadapi kata baru atau kata yang belum lengkap. GloVe belajar dari statistik kemunculan bersama secara global pada korpus.

Word2Vec

Cocok untuk memahami konsep embedding dasar dan banyak dipakai dalam pengajaran awal.

FastText

Baik untuk bahasa yang kaya variasi bentuk kata karena memerhatikan subword.

GloVe

Menekankan statistik global ko-kemunculan kata di korpus.

OOV atau out-of-vocabulary

OOV adalah kondisi saat model tidak mengenali sebuah kata karena kata itu tidak ada di kosakata yang dipelajari. Ini sering terjadi pada nama baru, singkatan, salah ketik, atau kata gaul yang belum masuk model.

FastText relatif lebih tahan terhadap masalah OOV karena ia melihat pecahan kata, bukan hanya kata utuh. Ini seperti menebak arti kata baru dari potongan-potongan bentuk katanya.

Praktikum 1: Word2Vec sederhana dengan gensim

Contoh ini menggunakan kalimat-kalimat kecil agar mahasiswa memahami alurnya lebih dulu. Setelah paham, datanya bisa diperbesar.

from gensim.models import Word2Vec

kalimat = [
    ["aplikasi", "kampus", "sangat", "membantu"],
    ["fitur", "krs", "mudah", "digunakan"],
    ["server", "sering", "lambat"],
    ["login", "gagal", "saat", "sibuk"],
    ["mahasiswa", "senang", "dengan", "fitur", "baru"],
    ["dosen", "mudah", "mengakses", "materi"],
    ["sistem", "sering", "error"],
    ["menu", "akademik", "sangat", "praktis"]
]

model_w2v = Word2Vec(
    sentences=kalimat,
    vector_size=50,
    window=3,
    min_count=1,
    workers=1,
    sg=1,
    epochs=200
)

print("Ukuran vektor kata 'aplikasi':", len(model_w2v.wv["aplikasi"]))
print("5 nilai awal vektor 'aplikasi':", model_w2v.wv["aplikasi"][:5])

Parameter sg=1 berarti menggunakan skip-gram. Untuk pengajaran awal, mahasiswa cukup tahu bahwa model sedang belajar dari konteks kata.

Praktikum 2: mencari kata yang paling mirip

Bagian ini biasanya menarik bagi mahasiswa karena mereka bisa melihat model mulai menangkap hubungan antarkata secara intuitif.

print(model_w2v.wv.most_similar("fitur", topn=5))
print(model_w2v.wv.most_similar("mahasiswa", topn=5))

Jika data cukup baik, kata-kata yang muncul sebagai tetangga dekat akan terasa masuk akal berdasarkan konteks korpus.

Praktikum 3: menghitung cosine similarity antar kata

Cosine similarity yang sebelumnya dipakai untuk dokumen juga bisa dipakai untuk kata. Ini membantu mahasiswa melihat embedding sebagai vektor yang bisa dihitung jaraknya.

from sklearn.metrics.pairwise import cosine_similarity

kata1 = model_w2v.wv["fitur"].reshape(1, -1)
kata2 = model_w2v.wv["menu"].reshape(1, -1)
kata3 = model_w2v.wv["error"].reshape(1, -1)

sim_fitur_menu = cosine_similarity(kata1, kata2)[0][0]
sim_fitur_error = cosine_similarity(kata1, kata3)[0][0]

print("Kemiripan fitur vs menu:", sim_fitur_menu)
print("Kemiripan fitur vs error:", sim_fitur_error)

Praktikum 4: rata-rata embedding untuk merepresentasikan dokumen

Salah satu cara sederhana membuat representasi dokumen dari embedding kata adalah mengambil rata-rata vektornya. Cara ini belum secanggih model modern, tetapi sangat baik untuk pengajaran awal.

import numpy as np

# fungsi rata-rata embedding dokumen

def dokumen_ke_vektor(tokens, model, size):
    vektor = []
    for token in tokens:
        if token in model.wv:
            vektor.append(model.wv[token])
    if len(vektor) == 0:
        return np.zeros(size)
    return np.mean(vektor, axis=0)

ulasan_token = [
    ["aplikasi", "kampus", "membantu"],
    ["login", "sering", "gagal"],
    ["fitur", "baru", "sangat", "praktis"],
    ["server", "lambat", "dan", "error"]
]

matriks_doc = np.array([
    dokumen_ke_vektor(doc, model_w2v, 50)
    for doc in ulasan_token
])

print("Bentuk matriks dokumen:", matriks_doc.shape)
print(matriks_doc[:2, :5])

Praktikum 5: klasifikasi sederhana memakai rata-rata embedding

Di sini mahasiswa bisa membandingkan pendekatan embedding dengan model klasik berbasis TF-IDF. Hasilnya mungkin belum selalu lebih baik pada data kecil, tetapi tujuannya adalah memahami konsep.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

teks_token = [
    ["aplikasi", "kampus", "sangat", "membantu"],
    ["fitur", "baru", "mudah", "dipakai"],
    ["server", "sering", "lambat"],
    ["login", "gagal", "terus"],
    ["menu", "akademik", "praktis"],
    ["sistem", "error", "lagi"],
    ["materi", "mudah", "diakses"],
    ["aplikasi", "keluar", "sendiri"]
]

label = ["positif", "positif", "negatif", "negatif", "positif", "negatif", "positif", "negatif"]

X = np.array([dokumen_ke_vektor(doc, model_w2v, 50) for doc in teks_token])
y = np.array(label)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42, stratify=y
)

clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)
pred = clf.predict(X_test)

print(classification_report(y_test, pred))

Praktikum 6: menggunakan pretrained embedding

Pada praktik nyata, mahasiswa sering tidak melatih embedding dari nol karena korpus kecil. Alternatifnya adalah memakai model pretrained. Contoh berikut menunjukkan pola pemakaiannya. Nama file model dapat disesuaikan dengan embedding yang tersedia.

import gensim.downloader as api

# contoh memuat pretrained embedding bahasa Inggris kecil
# untuk bahasa Indonesia, mahasiswa bisa memakai model pretrained lain yang tersedia
pretrained = api.load("glove-wiki-gigaword-50")

print(pretrained.most_similar("student", topn=5))
print("similarity(teacher, lecturer):", pretrained.similarity("teacher", "lecturer"))

Saat memakai model pretrained, mahasiswa bisa lebih cepat fokus ke eksperimen semantic similarity daripada menghabiskan waktu melatih model besar dari awal.

Praktikum 7: visualisasi embedding dengan PCA

Visualisasi membantu membuat konsep abstrak menjadi lebih terasa. Vektor yang awalnya berdimensi puluhan bisa diproyeksikan ke dua dimensi lalu digambar.

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

kata_pilihan = ["aplikasi", "fitur", "menu", "server", "login", "mahasiswa", "dosen", "materi"]
vektor = np.array([model_w2v.wv[k] for k in kata_pilihan])

pca = PCA(n_components=2)
xy = pca.fit_transform(vektor)

plt.figure(figsize=(8, 6))
for i, kata in enumerate(kata_pilihan):
    plt.scatter(xy[i, 0], xy[i, 1])
    plt.text(xy[i, 0] + 0.01, xy[i, 1] + 0.01, kata)

plt.title("Visualisasi Word Embedding dengan PCA")
plt.xlabel("Komponen 1")
plt.ylabel("Komponen 2")
plt.show()

Studi kasus mini: kata yang mirip makna dalam ulasan mahasiswa

Bayangkan mahasiswa menulis kata “mudah”, “praktis”, “ringan”, dan “nyaman” dalam banyak konteks positif. Embedding cenderung menempatkan kata-kata itu dekat satu sama lain. Dengan begitu, sistem mulai memiliki gambaran bahwa kata-kata ini hidup dalam lingkungan makna yang mirip.

Pendekatan lama

Kata dilihat terpisah sebagai token, sehingga hubungan makna kurang terasa.

Pendekatan embedding

Kata mulai memiliki tetangga makna berdasarkan konteks kemunculannya.

Manfaat praktis

Pencarian, klasifikasi, dan analisis teks bisa menjadi lebih peka terhadap makna.

Kapan embedding belum tentu lebih unggul

Pada dataset kecil, pendekatan TF-IDF dengan model klasik kadang masih sangat kompetitif, bahkan bisa lebih stabil. Karena itu mahasiswa tidak perlu menganggap embedding selalu otomatis lebih baik. Yang penting adalah memahami kelebihan dan konteks pemakaiannya.

Dalam pembelajaran, tujuan utama sesi 6 bukan membuktikan embedding selalu menang, tetapi memahami bahwa ada representasi yang lebih semantik daripada BoW dan TF-IDF.

Kesalahan umum mahasiswa pada sesi 6

Kesalahan pertama adalah mengira vektor embedding bisa dibaca seperti tabel TF-IDF. Padahal embedding lebih abstrak. Kesalahan kedua adalah melatih Word2Vec pada data yang terlalu sedikit lalu berharap hasil tetangga kata sangat sempurna. Kesalahan ketiga adalah lupa menangani OOV. Kesalahan keempat adalah langsung menyimpulkan embedding lebih baik hanya dari satu eksperimen kecil.

Embedding bukan sihir. Ia tetap bergantung pada kualitas data, ukuran korpus, dan cara evaluasinya. Namun embedding adalah jembatan penting menuju model modern seperti transformer.

Diskusi Mahasiswa dengan Sistem LLM

Tanyakan materi yang masih terkait Pembelajaran Mesin untuk Teks dan AI Generatif.

Siap Diskusi
Halo, saya siap membantu memahami materi praktikum, konsep, kode, studi kasus, UTS, UAS, dan mini project pada mata kuliah ini. Silakan tulis pertanyaan Anda.

Pembahasan dibatasi pada topik mata kuliah ini. Pertanyaan di luar tema akan ditolak secara otomatis.