Belajar dasar LLM
Pada materi ini kita akan merujuk pada Roadmap LLM Engineer yang tlah ada. Berikut ini rencana pembelajaran kita.
Table of Content
- Mengenal Language Model
- Probabilistik Language Model
- N-Grams
- RNN dan LM
- Kompleksitas Bahasa
Mengenal Language Model
Mengenal Language Model (LM) sebagai awal bahasan bagi saya amatlah penting sebagai pengantar untuk memahami konsep-konsep yang lebih kompleks dalam pengembangan LLM (Large Language Models). LM adalah inti dari bagaimana komputer memahami dan menghasilkan teks. Dengan mengenal LM, kita dapat memahami bahwa:
- Komputer memprediksi kata-kata berdasarkan konteks.
- Teks bukan hanya sekumpulan kata, tetapi memiliki struktur probabilistik.
- Tradisional AI seperti RNN dan CNN menggunakan language model
Memulai dari sini membantu membangun fondasi kita sebelum membahas model yang lebih kompleks seperti Transformer atau LLM.
Probabilistik Language Model
Probabilistic Language Model adalah metode statistik untuk memprediksi probabilitas urutan kata dalam sebuah kalimat. Salah satu yang pendekatan yang digunakan adalah N-Grams.
N-Grams
N-Gram adalah pendekatan spesifik untuk PLM yang memprediksi kata berikutnya berdasarkan N−1N-1N−1 kata sebelumnya. Di sini, NNN adalah panjang “jendela konteks” yang digunakan untuk membuat prediksi.
Misalnya, jika kita memiliki kalimat:
“Saya suka belajar bahasa.”
- 1-Gram (Unigram): Memperlakukan setiap kata secara independen:
Saya
,suka
,belajar
,bahasa
. - 2-Gram (Bigram): Melihat pasangan kata:
Saya suka
,suka belajar
,belajar bahasa
. - 3-Gram (Trigram): Melihat tiga kata sekaligus:
Saya suka belajar
,suka belajar bahasa
.
Keuntungan dan Kelemahan N-Grams
- Keuntungan:
- Implementasi sederhana.
- Efektif untuk teks pendek atau dengan sedikit variasi.
- Kelemahan:
- Rentan terhadap sparsity: Data pelatihan harus mencakup semua kombinasi kata yang relevan.
- Tidak dapat menangkap dependensi jangka panjang dalam teks.
Implementasi
from nltk import word_tokenize, FreqDist
from nltk.util import ngrams
# Corpus sederhana
corpus = "waktuku kecil, ku tak tahu yang benar. waktuku kecil, ku suka yang baik. waktuku kecil, ku suka ice-cream"
tokens = word_tokenize(corpus.lower())
# Buat bigram
bigrams = list(ngrams(tokens, 2))
# Hitung frekuensi bigram
bigram_freq = FreqDist(bigrams)
# Kata terakhir
last_word = "ku"
# Cari kandidat kata berikutnya
candidates = {bigram[1]: freq for bigram, freq in bigram_freq.items() if bigram[0] == last_word}
# Pilih kata dengan probabilitas tertinggi
if candidates:
next_word = max(candidates, key=candidates.get)
print(f"Kata berikutnya setelah '{last_word}' adalah: '{next_word}'")
else:
print(f"Tidak ditemukan kata setelah '{last_word}' dalam corpus.")
Kata berikutnya setelah 'ku' adalah: 'suka'
Mengapa bisa demikian? Berikut penjelasannya
- Corpus Sederhana:
- Kita menggunakan teks sebagai contoh:
"waktuku kecil, ku tak tahu yang benar. waktuku kecil, ku suka yang baik. waktuku kecil, ku suka ice-cream"
- Corpus adalah kumpulan teks yang digunakan untuk melatih model.
- Kita menggunakan teks sebagai contoh:
- Tokenisasi:
- Corpus dipecah menjadi kata-kata kecil menggunakan
word_tokenize
. - Hasil token:
['waktuku', 'kecil', ',', 'ku', 'tak', 'tahu', 'yang', 'benar', '.', 'waktuku', 'kecil', ',', 'ku', 'suka', 'yang', 'baik', '.', 'waktuku', 'kecil', ',', 'ku', 'suka', 'ice-cream']
- Corpus dipecah menjadi kata-kata kecil menggunakan
- Bigram:
- Membuat pasangan kata berurutan (2-gram).
- Contoh bigram:
[('waktuku', 'kecil'), ('kecil', ','), ('ku', 'tak'), ('tak', 'tahu'), ('yang', 'benar')]
- Frekuensi Bigram:
- Menghitung seberapa sering setiap pasangan bigram muncul dalam corpus menggunakan
FreqDist
.
- Menghitung seberapa sering setiap pasangan bigram muncul dalam corpus menggunakan
- Prediksi Kata Berikutnya:
- Filter bigram yang diawali dengan kata tertentu, dalam hal ini, kata
ku
. - Pilih kata berikutnya dengan probabilitas tertinggi berdasarkan frekuensi.
- Filter bigram yang diawali dengan kata tertentu, dalam hal ini, kata
Visualisasi Keterhubungan
import networkx as nx
import matplotlib.pyplot as plt
# Buat Graph
G = nx.DiGraph()
# Tambahkan edge dari bigram
for bigram, freq in bigram_freq.items():
G.add_edge(bigram[0], bigram[1], weight=freq)
# Visualisasi Graph
plt.figure(figsize=(10, 6))
pos = nx.spring_layout(G, seed=42) # Posisi node
nx.draw_networkx_nodes(G, pos, node_size=700, node_color='lightblue')
nx.draw_networkx_edges(G, pos, width=1, alpha=0.7, edge_color="gray")
nx.draw_networkx_labels(G, pos, font_size=10, font_color="black")
# Tambahkan bobot pada edge
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.title("Visualisasi Keterhubungan Antar Kata (Bigram)")
plt.show()

RNN dan LM
Recurrent Neural Network (RNN) adalah jenis jaringan neural yang dirancang untuk menangani data berurutan, seperti teks, audio, atau data time series. RNN disebut juga Tradisional AI karena memfasilitas fitur Text Generation yang dimiliki oleh LLM saat ini.
Lalu, apakah RNN menerapkan konsep Language Model?
Ya, Recurrent Neural Networks (RNN) sering digunakan dalam konteks Language Models (LM), terutama dalam pembelajaran berbasis sekuensial. RNN cocok untuk menangani data yang berurutan, seperti teks atau ucapan, karena kemampuannya untuk mempertahankan informasi dalam state tersembunyi dan memproses input yang memiliki ketergantungan temporal atau urutan.
Kompleksitas Bahasa
Kompleksitas Bahasa adalah materi penutup dalam tulisan ini karena ada baiknya memahami dahulu apa saja tantangan yang ada dalam memahami sebuah kalimat maupun paragraf. Adapun kompleksitas yang ditemui adalah:
1. Ambiguitas
- Kalimat: “Guru mengajar siswa dengan buku”
- Makna 1: Guru mengajar siswa menggunakan buku dari guru
- Makna 2: Guru mengajar siswa menggunakan bukunya sendiri
2. Homonim
- Kalimat: “Tolong ambil kunci di meja.”
- Makna 1: Kunci sebagai alat untuk membuka pintu.
- Makna 2: Kunci sebagai nada dalam musik.
3. Pengenalan Entitas
- Kalimat: “Andi akan pergi ke Bandung untuk bertemu dengan Bapak Ridwan.”
- Entitas yang perlu dikenali:
- Andi: Nama orang.
- Pergi: Kata Kerja
- Bandung: Nama tempat.
- Bapak Ridwan: Nama orang lain yang spesifik.
- Entitas yang perlu dikenali:
Comments
Leave a Comment