Non-Negative Matrix Factorization (NMF) untuk Topic Modeling

Apa itu NMF? Penjelasan Sederhana

Non-Negative Matrix Factorization (NMF) adalah teknik matematika yang sering dipakai untuk topic modeling dalam teks.

Bayangkan begini: Kita punya kumpulan dokumen (misalnya artikel berita). Dokumen itu bisa diubah menjadi tabel angka:

Setiap baris = dokumen
Setiap kolom = kata
Setiap angka = seberapa sering kata itu muncul di dokumen tersebut

NMF

NMF membantu dengan memecah tabel besar itu menjadi dua tabel yang lebih kecil, sehingga:

Matriks W = menunjukkan dokumen berhubungan dengan topik apa
Matriks H = menunjukkan kata berhubungan dengan topik apa

\[\underbrace{V}_{1000 \times 500} \approx \underbrace{W}_{1000 \times 10} \times \underbrace{H}_{10 \times 500}\]

Apa itu NMF? Penjelasan Sederhana

Bayangkan Anda memiliki buku resep dengan 1000 resep dan 500 bahan-bahan.

  • Matrix V = Tabel resep × bahan (1000 × 500)
  • NMF memecah tabel ini menjadi 2 tabel kecil:
    • Matrix W = Resep × Kategori masakan (1000 × 10)
    • Matrix H = Kategori masakan × Bahan (10 × 500)

\[\underbrace{V}_{1000 \times 500} \approx \underbrace{W}_{1000 \times 10} \times \underbrace{H}_{10 \times 500}\]

Mengapa Persamaan V ≈ W × H?

Mari kita lihat dengan contoh kecil: Misalnya kita punya 3 dokumen dan 4 kata:

\[V = \begin{bmatrix} 2 & 3 & 0 & 1 \\ 1 & 1 & 4 & 2 \\ 3 & 2 & 1 & 0 \end{bmatrix}\]

NMF mencari: \[W = \begin{bmatrix} 0.8 & 0.1 \\ 0.2 & 0.9 \\ 0.7 & 0.2 \end{bmatrix}, \quad H = \begin{bmatrix} 3 & 4 & 0 & 1 \\ 0 & 0 & 4 & 2 \end{bmatrix}\]

Mengapa Persamaan V ≈ W × H?

\[V = \begin{bmatrix} 2 & 3 & 0 & 1 \\ 1 & 1 & 4 & 2 \\ 3 & 2 & 1 & 0 \end{bmatrix}\] V = Document–Term Matrix (DTM)

Baris = dokumen (3 dokumen)
Kolom = kata (4 kata)
Angka = frekuensi kata dalam dokumen

#Contoh:
Dokumen 1 punya 2 kali kata1, 3 kali kata2, 0 kata3, 1 kata4
Dokumen 2 punya 1 kata1, 1 kata2, 4 kata3, 2 kata4
Dokumen 3 punya 3 kata1, 2 kata2, 1 kata3, 0 kata4

Mengapa Persamaan V ≈ W × H?

NMF mencari: \[W = \begin{bmatrix} 0.8 & 0.1 \\ 0.2 & 0.9 \\ 0.7 & 0.2 \end{bmatrix}, \quad H = \begin{bmatrix} 3 & 4 & 0 & 1 \\ 0 & 0 & 4 & 2 \end{bmatrix}\]

W = Document–Topic Matrix
Baris = dokumen
Kolom = topik (di sini dipilih 2 topik)
Angka = seberapa besar dokumen tersebut terkait dengan topik

#Contoh interpretasi:
Dokumen 1 = [0.8, 0.1] → lebih dekat dengan Topik 1
Dokumen 2 = [0.2, 0.9] → lebih dekat dengan Topik 2
Dokumen 3 = [0.7, 0.2] → campuran, tapi lebih mirip Topik 1

Mengapa Persamaan V ≈ W × H?

NMF mencari: \[W = \begin{bmatrix} 0.8 & 0.1 \\ 0.2 & 0.9 \\ 0.7 & 0.2 \end{bmatrix}, \quad H = \begin{bmatrix} 3 & 4 & 0 & 1 \\ 0 & 0 & 4 & 2 \end{bmatrix}\]

#H = Topic–Term Matrix
Baris = topik
Kolom = kata
Angka = seberapa penting kata itu bagi topik tertentu

Contoh interpretasi:
Topik 1 → kata1 (3), kata2 (4), kata4 (1) → lebih condong ke kata1 & kata2
Topik 2 → kata3 (4), kata4 (2) → lebih condong ke kata3

Code Praktik Memahami NMF

Matriks V (dokumen x kata):
[[0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0]
 [1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0]
 [1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0]
 [0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0]
 [0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0]
 [0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1]
 [0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0]]
Daftar kata: ['ayam' 'basket' 'bola' 'dimakan' 'dunia' 'enak' 'gawang' 'gol' 'goreng'
 'kemarin' 'makan' 'menang' 'mencetak' 'menjual' 'nasi' 'olahraga' 'pakai'
 'pemain' 'pertandingan' 'populer' 'restoran' 'sambal' 'sate' 'sepak'
 'suka' 'tim' 'voli']

Matriks W (dokumen-topik):
[[0.68290912 0.        ]
 [0.68290912 0.        ]
 [0.82852082 0.        ]
 [0.59455403 0.        ]
 [0.         0.87494919]
 [0.         0.82819475]
 [0.         0.52463035]
 [0.         0.87494919]]

Matriks H (topik-kata):
[[1.06757994 0.         0.         0.34618501 0.         0.34618501
  0.         0.         1.41376495 0.         0.64758044 0.
  0.         0.4199995  1.11236952 0.         0.30139544 0.
  0.         0.         0.4199995  0.30139544 0.76618451 0.
  0.34618501 0.         0.        ]
 [0.         0.2105076  1.24496586 0.         0.33231262 0.
  0.35107282 0.35107282 0.         0.35107282 0.         0.35107282
  0.35107282 0.         0.         0.54282023 0.         0.35107282
  0.35107282 0.33231262 0.         0.         0.         1.03445826
  0.         0.35107282 0.2105076 ]]

Topik 1:
['goreng', 'nasi', 'ayam', 'sate', 'makan']

Topik 2:
['bola', 'sepak', 'olahraga', 'pemain', 'gol']

Matriks V (dokumen × kata)

Contoh baris:

[0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0]

Artinya:
Baris ini = sebuah dokumen
Kolom = kata tertentu (dari daftar kata)
Angka = jumlah kemunculan kata

Misalnya daftar kata = ['ayam', 'basket', 'bola', 'dimakan', ..., 'voli']
Kolom ke-8 = "goreng" → nilainya 1 → kata goreng muncul sekali di dokumen ini
Kolom ke-10 = "makan" → nilainya 1 → kata makan muncul sekali
Kolom ke-14 = "nasi" → nilainya 1 → kata nasi muncul sekali
Kolom ke-22 = "sate" → nilainya 1 → kata sate muncul sekali

Jadi dokumen ini kira-kira berisi "makan nasi goreng sate" 
→ cocok dengan tema makanan.

Matriks W (dokumen–topik)

[[0.6829 0.    ]
 [0.6829 0.    ]
 [0.8285 0.    ]
 [0.5946 0.    ]
 [0.     0.8749]
 [0.     0.8282]
 [0.     0.5246]
 [0.     0.8749]]

Interpretasi:
Baris = dokumen
Kolom = topik
Angka = seberapa kuat dokumen itu terkait dengan topik tertentu

Contoh:
Dokumen 1–4 hanya punya angka di kolom 1 (Topik 1) → 
ini adalah dokumen tentang makanan.
Dokumen 5–8 hanya punya angka di kolom 2 (Topik 2) → 
ini dokumen tentang olahraga.

NMF berhasil memisahkan dokumen makanan vs olahraga dengan cukup jelas.

Matriks H (topik–kata)

Topik 1 (baris pertama H):
['goreng', 'nasi', 'ayam', 'sate', 'makan']

Topik 2 (baris kedua H):
['bola', 'sepak', 'olahraga', 'mencetak', 'gol']

Interpretasi:
Baris = topik
Kolom = kata
Angka = bobot pentingnya kata di topik tersebut
Hasilnya:

Topik 1 → kata-kata pentingnya: "goreng", "nasi", "ayam", "sate", "makan"
→ ini jelas menggambarkan topik makanan
Topik 2 → kata-kata pentingnya: "bola", "sepak", "olahraga", "mencetak", "gol"
→ ini jelas menggambarkan topik olahraga

Kesimpulan dari Output

Matriks V = data mentah (dokumen ke kata)
Matriks W = peta dokumen ke topik
Dokumen 1–4 → makanan
Dokumen 5–8 → olahraga
Matriks H = peta topik ke kata
Topik 1 = makanan
Topik 2 = olahraga

Jadi NMF berhasil memecah dokumen campuran menjadi 2 kelompok
topik yang bisa kita pahami secara manusiawi.