NLP klasik adalah kumpulan teknik yang membuat bahasa dapat dihitung sebelum era model bahasa besar. Topik ini mendefinisikan lingkup NLP klasik, memetakan komponen utamanya, dan menjelaskan alasan komponen tersebut masih menjalankan banyak sistem production, yaitu sistem yang berjalan dan melayani pengguna secara nyata. Pembahasan ditutup dengan demo penghitungan frekuensi kata yang dapat dijalankan langsung dari terminal.
Definisi dan lingkup#
Pemrosesan bahasa alami (Natural Language Processing, NLP) adalah bidang yang membuat teks dapat diproses oleh komputer. NLP klasik menamai seluruh teknik NLP yang dikembangkan sebelum model bahasa besar (large language model, LLM) mengubah bidang ini pada rentang tahun 2017 sampai 2018, yaitu sejak arsitektur transformer diperkenalkan dan diterapkan secara luas. Kata klasik pada istilah ini bukan berarti usang, melainkan menandai garis waktu teknologinya.
Inti kerjanya adalah mengubah teks menjadi angka. Sebuah kalimat dapat dihitung jumlah katanya, dilabeli kelas katanya, atau dipetakan menjadi vektor yang menyimpan kedekatan maknanya dengan kalimat lain. Setelah teks berubah menjadi angka, peralatan statistik dan aturan logika dapat bekerja di atasnya, misalnya mengurutkan dokumen berdasarkan kemiripan atau memilih kategori untuk sebuah pesan.
Ciri khas NLP klasik terletak pada ukuran model dan cara fitur dibuat. Modelnya kecil, fiturnya dirancang secara eksplisit oleh manusia, dan pelatihannya membutuhkan data yang terbatas. Bagian berbasis aturan, seperti pencocokan pola, berperilaku deterministik, yaitu masukan yang sama selalu menghasilkan keluaran yang sama.
Komponen utama NLP klasik#
Enam komponen membentuk hampir seluruh sistem NLP klasik. Komponen-komponen tersebut bekerja berlapis seperti pipeline, yaitu rangkaian komponen pemrosesan yang dijalankan berurutan, mulai dari persiapan teks mentah, pembentukan representasi angka, sampai tugas akhir yang hasilnya terukur. Diagram berikut memetakan keenam komponen pada empat lapisan kerja tersebut.
- Tokenisasi memotong teks menjadi satuan kecil yang disebut token, misalnya kata atau tanda baca.
- Regular expression (regex) menemukan dan mengambil potongan teks yang cocok dengan pola tertentu, misalnya tanggal atau harga.
- Klasifikasi teks memilih satu kategori untuk sebuah dokumen, misalnya memisahkan pesan keluhan dari pesan saran.
- Embedding kata memetakan setiap kata menjadi vektor angka yang menyimpan kedekatan maknanya dengan kata lain.
- Pelabelan barisan (sequence labeling) memberikan satu label untuk setiap token dalam sebuah barisan, misalnya menandai nama orang pada sebuah kalimat.
- Pemodelan topik (topic modeling) menemukan tema yang berlapis pada kumpulan dokumen tanpa memerlukan label.
Lapisan representasi menggunakan hitungan kata seperti bag of words, yaitu representasi dokumen sebagai hitungan kata tanpa memperhatikan urutan, beserta turunannya seperti TF-IDF, yaitu pembobotan hitungan berdasarkan kelangkaan kata di seluruh korpus. Korpus sendiri berarti kumpulan teks yang menjadi bahan kerja. Pilihan representasi menentukan tugas apa yang dapat dikerjakan pada lapisan terakhirnya.
Alasan NLP klasik tetap dipakai#
Empat sifat menjelaskan mengapa NLP klasik masih dipilih untuk banyak pekerjaan. Model klasik cepat karena ukurannya kecil dan dapat berjalan pada CPU biasa tanpa kartu grafis. Biaya operasinya murah karena kebutuhan memori dan energinya rendah. Perilakunya deterministik, sehingga masukan yang sama dapat diharapkan menghasilkan keluaran yang sama pada setiap pemanggilan.
Sifat keempat adalah kemudahan debug, yaitu penelusuran penyebab keluaran yang salah. Apabila hasil sebuah komponen klasik keliru, penyebabnya dapat dilacak ke aturan regex yang tidak tepat, daftar kata yang kurang, atau koefisien model yang dapat dibaca. Pada LLM, penyebab keluaran yang salah tidak selalu dapat ditunjuk dengan presisi seperti itu.
Karena alasan tersebut, banyak sistem production memadukan keduanya. Komponen klasik menangani praproses, penyaringan, dan langkah berulang yang volumenya tinggi, sedangkan LLM digunakan hanya untuk langkah yang benar-benar membutuhkan pemahaman makna yang luas. Pembagian kerja ini menjaga latensi tetap rendah sekaligus menekan biaya. Pengujian pun menjadi lebih murah, karena keluaran yang diharapkan dapat dicatat dan dibandingkan secara otomatis.
Contoh sistem sehari-hari#
Penghitung kata pada pengolah teks adalah contoh paling sederhana. Fitur ini menghitung jumlah kata dan frekuensi kemunculan setiap kata, pekerjaan yang selesai dalam hitungan milidetik tanpa model besar. Aplikasi catatan menggunakan teknik serupa untuk pencarian kata kunci dan untuk pengelompokan catatan menurut topiknya.
Routing pesan internal organisasi memberi contoh klasifikasi teks. Pesan yang masuk dipisahkan menurut kategorinya, misalnya keluhan fasilitas, permintaan data, atau laporan gangguan, lalu diteruskan ke kotak kerja yang tepat. Komponen klasifikasi klasik cocok untuk pekerjaan ini karena kategorinya tetap, volumenya tinggi, dan setiap kesalahan klasifikasi mudah ditelusuri melalui fitur kata yang mendorong keputusannya.
Pola yang sama berlaku pada arsip cadangan berkas yang perlu dicari berdasarkan isinya, catatan log sensor yang perlu diringkas, dan daftar belanja yang perlu dikelompokkan. Semuanya menuntut jawaban yang cepat, murah, dan dapat diprediksi. Setiap kategori baru juga cukup ditambahkan dengan contoh pesan dan pelatihan ulang yang singkat.
Demo penghitungan frekuensi kata#
Demo berikut memperlihatkan bentuk paling kecil dari NLP klasik, yaitu penghitungan frekuensi kata. Perangkat yang dibutuhkan hanya pustaka standar Python. Simpan berkasnya di direktori kerja, jalankan dengan perintah python3 hitung-frekuensi.py, lalu bandingkan keluarannya dengan pembahasan di bawahnya. Teks contohnya sengaja memuat kata yang berulang agar lima kata teratas terlihat sekaligus.
from collections import Counter
teks = ("penghitung kata membaca teks dari aplikasi catatan "
"teks itu dipotong menjadi kata kata "
"lalu frekuensi kata dihitung")
frekuensi = Counter(teks.split())
print("jumlah kata unik:", len(frekuensi))
for kata, jumlah in frekuensi.most_common(5):
print(kata, jumlah)jumlah kata unik: 13
kata 4
teks 2
penghitung 1
membaca 1
dari 1Baris teks.split() memotong isi variabel teks pada setiap spasi dan mengembalikan daftar kata. Counter kemudian menghitung kemunculan setiap kata, sedangkan most_common(5) mengembalikan lima kata dengan kemunculan terbanyak. Teks contoh memuat 17 kata yang hanya terdiri atas 13 kata unik, sehingga beberapa kata muncul lebih dari sekali. Kata kata muncul empat kali karena teks contohnya memang bertema penghitungan kata.
Pemotongan berbasis spasi ini adalah bentuk tokenisasi paling sederhana. Bentuk lengkapnya menangani tanda baca dan variasi bentuk kata, sedangkan penyeragaman huruf besar-kecilnya masuk ke pekerjaan normalisasi teks. Meskipun sederhana, demo di atas sudah memperlihatkan alur dasar seluruh NLP klasik, yaitu teks diubah menjadi angka sebelum diproses lebih lanjut.
Frekuensi kata juga menjadi bahan bagi komponen yang lebih besar. Hitungan sederhana seperti di atas menjadi isi bag of words, fitur bagi klasifikasi teks, dan titik awal pembobotan TF-IDF. Demo terkecil pun sudah menunjukkan karakter NLP klasik, yaitu cepat, deterministik, dan mudah diperiksa.
Kesalahan umum#
Tiga kesalahan berikut paling sering muncul ketika penghitungan frekuensi pertama dipraktikkan. Dua kesalahan pertama bersifat teknis, yaitu hitungan yang tidak akurat dan menyesatkan tanpa memunculkan pesan error. Kesalahan ketiganya muncul pada tahap penafsiran, yaitu saat frekuensi mentah dibaca tanpa konteks. Masing-masing disertai penyebab dan perbaikannya.
- Tanda baca menempel pada kata. Hasil
teks.split()masih membawa tanda baca, sehingga pada kalimat berakhiran titik,dihitung.dandihitungdihitung sebagai dua kata berbeda. Penyebabnya adalah pemotongan yang hanya mengenali spasi. Perbaikannya, bersihkan tanda baca sebelum menghitung, atau gunakan tokenizer dari pustaka NLP yang memisahkan tanda baca sebagai token tersendiri. - Huruf besar-kecil belum diseragamkan. Kata
Teksdanteksmenempati dua entri berbeda pada frekuensi. Penyebabnya adalah penghitungan yang dilakukan sebelum normalisasi. Perbaikannya, seragamkan seluruh kata menjadi huruf kecil denganteks.lower()apabila pembedaan huruf besar-kecil tidak penting bagi analisisnya. Tanpa normalisasi ini, hitungan kata yang sama terbagi ke beberapa entri sehingga urutan kata teratasnya menyesatkan. - Kata berfrekuensi tinggi langsung dianggap penting. Kata umum seperti
yang,dan, dandenganhampir selalu menduduki puncak frekuensi tanpa membawa makna khusus. Penyebabnya adalah frekuensi mentah yang belum mempertimbangkan kelaziman kata di seluruh korpus. Perbaikannya, bandingkan frekuensinya dengan kata umum lainnya, atau gunakan daftar stop word, yaitu daftar kata umum yang sengaja diabaikan, sebelum menilai kata yang penting.
Ringkasan#
- NLP klasik mencakup seluruh teknik yang membuat bahasa dapat dihitung sebelum era LLM, dengan model kecil, fitur yang dirancang eksplisit, dan data pelatihan terbatas.
- Enam komponen utamanya adalah tokenisasi, regex, klasifikasi teks, embedding kata, pelabelan barisan, dan pemodelan topik, yang bekerja berlapis dari teks mentah hingga tugas terukur.
- Sifat cepat, murah, deterministik, dan mudah di-debug menjadikan NLP klasik tetap menjalankan banyak sistem production bersama LLM.
- Penghitungan frekuensi kata dengan
Counteradalah contoh terkecil dari alur dasar tersebut, yaitu teks diubah menjadi angka sebelum diproses.
Referensi#
- Speech and Language Processing, draf edisi ke-3 — Jurafsky & Martin, Stanford — Buku ini menjabarkan tokenisasi, klasifikasi teks, dan pelabelan barisan sebagai fondasi NLP klasik.
- Natural Language Processing with Python — Bird, Klein & Loper, O’Reilly/NLTK — Buku pendamping NLTK dengan contoh penghitungan frekuensi kata dan tokenisasi.
- spaCy 101 — Explosion — Ringkasan konsep pipeline spaCy, mulai dari token, kelas kata, sampai entitas bernama.