Mengenal Bag of Words pada Model NLP

Rina
6 min readJan 22, 2024

--

Pada artikel ini, kita sudah belajar melakukan pre-processing data teks menggunakan Python. Namun, proses yang digunakan hanya sampai pada tahap stemming. Sekarang, kita akan belajar satu langkah lebih jauh dalam mengolah data teks yaitu tahap featur extraction atau ekstrasi fitur. Terdapat berbagai metode yang dapat digunakan untuk melakukan ekstrasi fitur seperti Bag of Words, Term Frequency-Inverse Document Frequency (TF-IDF), Word Embeddings, dan lain sebagainya. Namun, artikel ini, hanya fokus pada penjelasan Bag of Words dan contoh implementasinya menggunakan Python.

1. Apa itu Bag of Words?

Bag of Words atau biasa disingkat BoW merupakan salah satu teknik ekstraksi fitur yang paling mudah digunakan dalam pemrosesan bahasa alami atau NLP. Teknik ini akan mengubah data teks yang kita miliki menjadi vektor yang dapat dipahami oleh komputer. Istilah bag of words bisa kita analogikan layaknya sebuah tas yang berisi kata-kata dari suatu dokumen teks. Dalam tas tersebut, kita tidak akan peduli dengan urutan atau konteks di mana kata-kata tersebut muncul. Yang terpenting adalah kata apa saja yang ada dan berapa kali masing-masing kata tersebut muncul. Oleh karena itu, metode ini disebut “Bag of Words”, karena sama seperti kita melihat isi tas, kita hanya peduli tentang apa yang ada di dalamnya, bukan urutan objek tersebut masuk ke dalam tas.

Sumber: dudeperf3ct.github.io

BoW digunakan untuk menghasilkan fitur dari dokumen teks, sehingga dapat diaplikasikan pada algoritma machine learning. Dalam metode ini, setiap kata pada dokumen dianggap sebagai fitur dan dihitung frekuensi kemunculannya. Kemudian, setiap dokumen direpresentasikan sebagai vector dan setiap elemen vektor menunjukkan frekuensi munculnya kata tersebut dalam dokumen. Metode BoW sering digunakan dalam klasifikasi teks dengan algoritma machine learning seperti Naïve Bayes, Support Vector Machine, dan Decision Tree.

Agar lebih mudah dipahami, kita akan menggunakan contoh kasus yang lebih nyata. Misal, kita adalah pemilik sebuah kedai durian. Setiap pengunjung yang datang membeli durian di kedai tersebut, diminta untuk menuliskan review dari segi apapun sebagai bahan evaluasi kedai. Data review tersebut akan kita gunakan sebagai bahan evaluasi setiap rapat akhir bulan. Berikut contoh review yang dihasilkan:

Dataset oleh Penulis

Sebagai pemilik kedai yang selalu mengikuti kemajuan teknologi, kita ingin seluruh data review tersebut diolah menggunakan komputer. Namun, komputer hanya menerima data dalam format bilangan biner, yaitu 0 dan 1. Sehingga kita perlu melakukan transformasi terhadap data review yang kita miliki menjadi sekumpulan angka yang biasa disebut vektor agar dapat diproses oleh komputer.

Untuk mengadopsi metode bag of words, langkah pertama yang harus dilakukan adalah menyusun kosakata dari semua kata unik yang muncul pada data review di atas. Mengapa disebut kata unik? Karena setiap kata yang muncul lebih dari satu kali hanya akan dihitung satu. Sehingga kosakata unik yang dihasilkan data review di atas adalah 11 kata yaitu “durian”, “di”, “kedai”, “ini”, “enak”, “montong”, “tapi”, “mahal”, “saya”, “ga”, dan “suka”. Selanjutnya, kita akan menghitung frekuensi kemunculan korpus dengan cara memberikan nilai 1 untuk setiap kata yang muncul dalam sebuah review, dan nilai 0 untuk kata yang tidak muncul. Misalnya, dalam review pertama, kata “durian” dan “enak” masing-masing muncul satu kali, sehingga kita memberikan nilai 1. Sedangkan kata “tapi” dan “mahal” diberi nilai 0 pada review pertama dan ketiga karena hanya muncul pada review kedua. Agar lebih mudah dalam memahaminya, perhatikan tabel berikut ini:

Berdasarkan tabel di atas, vektor yang dihasilkan dari data review kedai durian seperti berikut:

Vektor review 1: [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]

Vektor review 2: [1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0]

Vektor review 3: [1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

Jadi, itulah penjelasan dari konsep metode bag of words yang cukup sederhana dan mudah dipahami. Namun, metode ini memiliki beberapa kelemahan yaitu:

  • Pertama, BoW tidak mempertimbangkan urutan kata dalam suatu kalimat atau dokumen. Misalkan ada dua kalimat, “Ilham mengejar Rina” dan “Rina mengejar Ilham”. Dalam konteks bahasa manusia, kedua kalimat ini memiliki arti yang sangat berbeda, tetapi bagi BoW, kedua kalimat ini sama karena mengandung kata-kata yang sama. Jadi, BoW tidak bisa menangkap makna yang berasal dari susunan kata.
  • Kedua, BoW menjadi tidak efisien dalam hal memori dan komputasi jika kita memiliki banyak kata unik. Jika kita punya ribuan atau bahkan jutaan kata unik, setiap dokumen atau kalimat akan direpresentasikan sebagai vektor dengan panjang ribuan atau jutaan, di mana sebagian besar elemennya adalah nol — Disebut sparse matrix.
  • Ketiga, BoW tidak membedakan antara kata-kata yang sering muncul tapi kurang informatif (seperti “dan”, “di”, “yang”) dengan kata-kata yang jarang muncul namun lebih informatif — Metode yang bisa digunakan untuk menangani masalah ini contohnya TF-IDF yang akan dibahas pada bagian berikutnya.

2. Implementasi BoW dengan Python

Pada bagian sebelumnya, kita sudah belajar konsep dan cara melakukan perhitungan manual menggunakan metode Bag of Words. Agar kemampuan kita semakin baik, pada bagian ini akan disajikan contoh implementasi metode BoW menggunakan bahasa pemrograman Python. Berikut kode yang digunakan:

from sklearn.feature_extraction.text import CountVectorizer
reviews = [
"Durian di kedai ini enak",
"Durian montong enak tapi mahal",
"Saya ga suka durian"
]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(reviews)
import pandas as pd
df = pd.DataFrame(X.toarray(),
columns=vectorizer.get_feature_names_out())
print(df)

Keterangan kode:

  • from sklearn.feature_extraction.text import CountVectorizer: Kode ini mengimpor CountVectorizer dari modul sklearn.feature_extraction.text. CountVectorizer adalah kelas dalam library sklearn yang menyediakan fungsi untuk mengubah teks menjadi representasi Bag of Words.
  • reviews = […]: mendefinisikan variabel reviews yang berisi list dari tiga string. Setiap string mewakili satu review.
  • vectorizer = CountVectorizer(): membuat instance dari kelas CountVectorizer, yang disimpan dalam variabel vectorizer. Instance ini akan digunakan untuk mengubah teks dalam reviews menjadi representasi Bag of Words.
  • X = vectorizer.fit_transform(reviews): Fungsi fit_transform melakukan dua hal. Pertama, fungsi fit ‘mempelajari’ vocabulari dari teks dalam reviews. Kedua, fungsi transform mengubah teks menjadi representasi Bag of Words berdasarkan vocabulari yang telah dipelajari. Hasilnya adalah matriks di mana setiap baris mewakili satu review dan setiap kolom mewakili satu kata dari vocabulari. Nilai dalam matriks adalah jumlah kemunculan kata tersebut dalam review.
  • import pandas as pd: mengimpor modul pandas dan memberikan alias pd untuk modul tersebut.
  • df=pd.DataFrame(X.toarray(),columns=vectorizer.get_feature _names_out()): untuk membuat DataFrame dari matriks Bag of Words. Metode toarray digunakan untuk mengubah matriks sparse menjadi matriks biasa. Parameter columns digunakan untuk menamai kolom DataFrame dengan nama kata dari vocabulari yang dipelajari oleh vectorizer.
  • print(df): perintah untuk mencetak DataFrame df. Hasilnya adalah tabel yang menunjukkan representasi Bag of Words dari setiap review dalam format yang mudah dibaca seperti berikut:
  • Jika kita perhatikan, urutan kata-kata dalam vector yang dihasilakan melalui proses perhitungan manual dan python, terdapat sedikit perbedaan. Hal ini disebabkan karena penggunaan fungsi CountVectorizer dari library sklearn akan mengurutkan kata-kata dalam vector fitur secara alfabetis, bukan berdasarkan urutan kemunculan dalam review.

Sampai di sini apakah kamu merasa mual dalam memahami penjelasan di atas? Jika iya, tahan dulu. Karena masih banyak hal yang harus kita pelajari dan penderitaan hidup lainnya sudah setia menunggu :)

Sebagai pengingat untuk diri sendiri, jangan pernah lelah dan bosan untuk belajar. Orang yang kita sayangi memiliki potensi untuk meninggalkan dan mengecewakan, namun pengetahuan, akan menjadi teman hidup yang paling setia. Dalam dunia yang dinamis ini, di mana tren baru selalu muncul dan teknologi terus berkembang, pengetahuan adalah aset yang tidak hanya memberi kita kekuatan, tetapi juga keamanan dan kemandirian. Setiap informasi baru yang kita serap, setiap keterampilan yang kita kembangkan, menyumbang pada pertumbuhan pribadi dan profesional kita.

--

--

No responses yet