Setelah beberapa waktu yang lalu kita sudah mencoba untuk mengimplementasikan Naive Bayes untuk data numerik (structured), atau mungkin beberapa orang menyebutnya sebagai tabular, sekarang akan kita coba implementasi dari algoritma ini untuk data unstructured, dalam hal ini adalah data text.
Penelitian di bidang text mining saat ini sedang sangat intens dilakukan oleh banyak peneliti dan perusahaan-perusahaan besar. Dengan berbagai implementasi seperti search engine, topic summarization, sentiment analysis, dan speech recognition (speech to text, dengan implementasi signal processing tentunya).
Banyak teori dan algoritma yang diterapkan di sini. Jika membahas tentang sistem, terutama di bidang data analysis, dan machine learning, tentunya ide dasar nya adalah sebagai berikut:
input --> preprocess --> train --> evaluate --> train (again) --> test
Di mana machine learning berperan sangat penting untuk tahap train dan test. Lalu bagaimana dengan preprocess nya?
Preprocess dalam Text Mining, di mana yang diproses adalah unstructured data, sebenarnya mirip dengan preprocess structured data. Proses seperti cleansing, attribute/feature selection kerap dilakukan pada Text Mining.
Pada post kali ini akan saya coba jelaskan, dengan disertai contoh bagaimana (mudahnya) melakukan preprocess pada text.
Pada post kali ini akan saya coba jelaskan, dengan disertai contoh bagaimana (mudahnya) melakukan preprocess pada text.
Abstraksi Teks/Kata-kata dengan Ruang Vektor
Vektor memegang peranan penting pada Text Mining. Kerap kali saya ditanya oleh teman yang mau belajar Text Mining, bagaimana caranya agar bahasa, kata, kaliman, dan teks dapat dimengerti oleh komputer. Jawabannya adalah dengan mengabstraksi/menerjemahkan teks tersebut ke dalam bentuk vektor.

Gambar 1 Representasi vektor dari kumpulan kata-kata (Sumber: TensorFlow)
Bagaimana cara kerja translasinya? Cara yang paling mudah adalah dengan melakukan proses perhitungan kemunculan kata dari dokumen, percakapan yang akan kita analisa. Sebenarnya cara ini tidak begitu akurat, namun menurut saya, ini adalah cara yang paling mudah untuk memulai belajar Text Mining.
Pada Gambar 1 ditunjukkan Representasi beberapa kata seperti man, woman, king, queen, dilihat dari jumlah kemunculannya (occurance) pada tiga aksis, yang merupakan reprsentasi dari jumlah dokumen. Pada contoh di atas, terdapat tiga aksis (x, y, z), representasi dari tiga dokumen, atau tiga percakapan yang dikumpulkan. Tentu contoh tersebut masih tergolong sederhana, karena untuk melakukan Text Mining bisa melibatkan ribuan, ratusan ribu, bahkan jutaan dokumen yang akan dijadikan aksis, sehingga dataset yang digunakan bisa disebut multi-dimensional dataset.
Tokenization
Abstraksi ke ruang vektor untuk memudahkan kita sebagai manusia untuk bisa memahami bagaimana komputer bisa membaca teks. Selanjutnya kita perlu melakukan kodifikasi agar benar-benar bisa dibaca mesin. Yaitu dengan membangun sebuah matriks korpus (pustaka dokumen) berukuran m x n, di mana m adalah jumlah kata-kata (fitur) yang ada dalam korpus, dan n adalah jumlah dokumen.
Jika menggunakan contoh di atas, maka matriks korpus yang dibangun adalah sebagai berikut:
| d1 | d2 | d3 | |
| king | 5 | 4 | 1 |
| queen | 4 | 3 | 3 |
| man | 5 | 1 | 1 |
| woman | 1 | 2 | 3 |
Matriks yang berisikan jumlah kemunculan kata pada tiap-tiap dokumen dalam korpus ini juga lazim disebut sebagai bag of words.
Di mana nilai dari masing-masing vektor d1, d2, d3 yang menentukan bobot dan arah dari vektor tersebut, di ambil dari jumlah kemunculan tiap-tiap kata pada dokumen di dalam korpus:
d1 = ["king king king king king queen queen queen queen man man man man man woman"]
d2 = ["king king king king queen queen queen man woman woman"]
d3 = ["king queen queen queen man woman"]
Implementasi di Python
Berikut di bawah ini adalah implementasi di Python. Python sangat powerfull dalam hal array dan string manipulation, that's why I love it!
d1 = "king king king king king queen queen queen queen man man man man man woman"
d1 = "king king king king king queen queen queen queen man man man man man woman"
d2 = "king king king king queen queen queen man woman woman"
d3 = "king queen queen queen man woman"
def wordount():
D = [d1, d2, d3]
V = []
bagofwords = []
for d in D:
for t in d.split(" "):
if t not in V:
V.append(t)
for v in V:
occurance_in_doc = []
for d in D:
num_occurance = 0
terms_in_d = d.split(" ")
num_occurance = terms_in_d.count(v)
occurance_in_doc.append(num_occurance)
bagofwords.append(occurance_in_doc)
print(bagofwords)
wordcount()
Sekian, post berikutnya akan dibahas algoritme classifier untuk Text Mining. Stay tuned!
wordcount()
Sekian, post berikutnya akan dibahas algoritme classifier untuk Text Mining. Stay tuned!
Komentar
Posting Komentar