Pengenalan Pemodelan Topik dalam NLP


Pemodelan topik adalah sebuah teknik dalam Pemrosesan Bahasa Alami (NLP) yang membantu kita secara otomatis menemukan tema atau topik tersembunyi dalam kumpulan besar dokumen teks. Alih-alih membaca ribuan atau bahkan jutaan dokumen secara manual, pemodelan topik memungkinkan komputer untuk memindai teks dan mengidentifikasi pola tersembunyi dalam cara kata-kata muncul bersama. Pola-pola ini kemudian dikelompokkan menjadi topik, di mana setiap topik mewakili tema umum yang dibahas di beberapa dokumen.

Ide utama di balik pemodelan topik adalah bahwa dokumen biasanya membahas lebih dari satu subjek, dan kata-kata cenderung muncul berulang dengan cara yang bermakna tergantung pada topik yang dibahas. Misalnya, dokumen tentang olahraga sering kali mencakup kata-kata seperti "pertandingan," "tim," dan "skor," sementara dokumen tentang keuangan mungkin mencakup kata-kata seperti "investasi," "pasar," dan "keuntungan." Pemodelan topik menangkap pola kemunculan kata-kata ini dan menggunakannya untuk menemukan topik laten (tersembunyi).

Pemodelan topik banyak digunakan di bidang-bidang seperti pengelompokan dokumen, rekomendasi konten, mesin pencari, analisis umpan balik pelanggan, analisis makalah penelitian, dan pemantauan media sosial. Teknik ini dianggap sebagai teknik pembelajaran tanpa pengawasan karena tidak memerlukan data berlabel. Model ini mempelajari topik secara langsung dari teks mentah.

Intisari Penting

  • Pemodelan topik adalah studi tentang pola kemunculan kata secara bersamaan di berbagai dokumen untuk mengungkap struktur tematik yang mendasari yang tidak diberi label atau didefinisikan secara eksplisit. Hal ini membuatnya sangat berguna untuk mengeksplorasi korpora besar yang tidak terstruktur seperti artikel berita, makalah penelitian, ulasan pelanggan, atau data media sosial.
  • Berbeda dengan model klasifikasi, pemodelan topik tidak bergantung pada dataset yang telah diberi anotasi/label sebelumnya. Sebaliknya, metode ini belajar langsung dari teks mentah, sehingga menjadi pilihan yang praktis ketika data berlabel tidak cukup, mahal untuk dibuat, atau tidak tersedia.
  • Pemodelan topik mencerminkan teks dunia nyata dengan lebih akurat dengan memungkinkan setiap dokumen direpresentasikan sebagai campuran topik daripada dipaksa masuk ke dalam satu kategori saja. Misalnya, sebuah artikel dapat membahas baik "pembelajaran mesin" maupun "kesehatan," dengan proporsi yang berbeda yang diberikan untuk setiap topik.
  • Setiap topik didefinisikan oleh sekumpulan kata yang saling terkait, di mana setiap kata diberi probabilitas yang menunjukkan pentingnya dalam topik tersebut. Representasi probabilistik ini membantu menafsirkan topik dan memahami istilah mana yang memberikan kontribusi paling kuat terhadap suatu tema tertentu.
  • LDA memodelkan dokumen sebagai campuran topik dan topik sebagai campuran kata menggunakan kerangka probabilistik yang jelas. Kemampuannya untuk diinterpretasikan, dasar matematisnya, dan dukungan pustaka yang luas telah menjadikannya standar dasar untuk tugas pemodelan topik di berbagai penelitian dan industri.

Mengapa Pemodelan Topik Diperlukan

Aplikasi modern menghasilkan jumlah besar data teks yang tidak terstruktur, seperti email, ulasan, artikel, log obrolan, dan makalah penelitian. Mengatur dan memahami data ini secara manual tidaklah praktis. Pemodelan topik membantu menyusun teks yang tidak terorganisir ini dengan mengidentifikasi tema-tema yang muncul berulang kali di berbagai dokumen.

Alasan penting lainnya mengapa pemodelan topik berguna adalah karena pencarian kata kunci tradisional sering kali terbatas. Dua dokumen mungkin membahas ide yang sama menggunakan kata-kata yang berbeda, dan metode berbasis kata kunci mungkin gagal menghubungkan keduanya. Pemodelan topik melampaui pencocokan kata secara tepat dan fokus pada pola semantik, sehingga lebih efektif untuk memahami teks dalam skala besar.

Konsep Dasar di Balik Pemodelan Topik

Untuk memahami pemodelan topik, penting untuk memahami bagaimana teks direpresentasikan secara matematis. Data teks pertama-tama diubah menjadi bentuk numerik, biasanya menggunakan representasi bag-of-words. Dalam representasi ini, sebuah dokumen dianggap sebagai kumpulan kata di mana urutan kata diabaikan, tetapi frekuensi kata dipertahankan.

Setiap dokumen diwakili sebagai vektor dari jumlah kata. Di seluruh kumpulan dokumen, ini membentuk matriks dokumen-kata, di mana baris mewakili dokumen dan kolom mewakili kata. Algoritme pemodelan topik menganalisis matriks ini untuk menemukan kelompok kata yang sering muncul bersama.

Sebuah topik dalam pemodelan topik bukanlah sebuah label tunggal melainkan distribusi probabilitas atas kata-kata. Demikian pula, setiap dokumen direpresentasikan sebagai distribusi probabilitas atas topik-topik. Ini berarti sebuah dokumen dapat membahas beberapa topik dengan proporsi yang berbeda-beda.

Latent Dirichlet Allocation (LDA)

Latent Dirichlet Allocation, yang biasa dikenal sebagai LDA, adalah algoritma pemodelan topik yang paling populer. LDA adalah model generatif probabilistik yang mengasumsikan dokumen dibuat melalui proses tersembunyi yang melibatkan topik-topik.

LDA mengasumsikan bahwa setiap dokumen memiliki campuran topik, dan setiap topik memiliki campuran kata. Saat menghasilkan dokumen, model pertama-tama memilih topik berdasarkan distribusi topik dokumen tersebut dan kemudian memilih kata berdasarkan distribusi kata topik tersebut. Proses ini diulang untuk setiap kata dalam dokumen.

Bagian “latent” dari LDA merujuk pada fakta bahwa topik-topik tersembunyi dan tidak langsung terlihat. Model ini mencoba menafsirkan topik tersembunyi tersebut dari kata-kata yang terlihat. Bagian “Dirichlet” merujuk pada distribusi Dirichlet, yang digunakan sebagai prior untuk mengontrol bagaimana topik didistribusikan di seluruh dokumen dan bagaimana kata-kata didistribusikan di seluruh topik.

Membuat korpus kecil

Asumsikan kosakata yang sangat kecil dengan empat kata:

w₁="ai " w₂="data " w₃="pizza " w₄="pasta "

Sekarang, anggap kita memiliki tiga dokumen:

Dokumen 1: “ai data ai” Dokumen 2: “ai data data” Dokumen 3: “pizza pasta pizza”

Kami mengubah korpus ini menjadi matriks dokumen–term X menggunakan jumlah kata mentah.

Setiap baris adalah dokumen, setiap kolom adalah kata, dan setiap entri menunjukkan berapa kali kata itu muncul dalam dokumen tersebut.

Memilih jumlah topik

Asumsikan K=2 topik.

Topik 1 kira-kira sesuai dengan "teknologi". Topik 2 kira-kira sesuai dengan "makanan".

LDA tidak mengetahui ini sebelumnya. Kita hanya mengasumsikannya di sini untuk menggambarkan matriks yang dipelajari.

Matriks topik–kata Φ (K × V)

Φ berisi probabilitas kata untuk setiap topik. Setiap baris dijumlahkan menjadi 1.

Interpretasi:

Untuk Topik 1 (teknologi): P(ai)=0,45, P(data)=0,45, P(pizza)=0,05, P(pasta)=0,05

Untuk Topik 2 (makanan): P(ai)=0,05, P(data)=0,05, P(pizza)=0,45, P(pasta)=0,45

Matriks ini menjawab pertanyaan: diberikan sebuah topik, seberapa besar kemungkinan tiap kata?

Matriks topik–dokumen Θ (D × K)

Θ berisi proporsi topik untuk setiap dokumen. Setiap baris jumlahnya menjadi 1.

Interpretasi:

Dokumen 1 adalah 90% topik 1 dan 10% topik 2. Dokumen 2 adalah 85% topik 1 dan 15% topik 2. Dokumen 3 adalah 10% topik 1 dan 90% topik 2.

Matriks ini menjawab pertanyaan: diberikan sebuah dokumen, seberapa besar tiap topik berkontribusi?

Perkalian matriks: merekonstruksi korpus

LDA mengasumsikan distribusi kata yang diharapkan per dokumen berasal dari:

Mari kita hitung ini secara eksplisit.

Perkalian baris demi baris

Untuk Dokumen 1:

=[0,9(0,45)+0,1(0,05),0,9(0,45)+0,1(0,05),0,9(0,05)+0,1(0,45),0,9(0,05)+0,1(0,45)] =[0,41,0,41,0,09,0,09]= [0,41, 0,41, 0,09, 0,09]=[0,41,0,41,0,09,0,09]

Ini berarti dokumen 1 diperkirakan akan sangat mendukung "ai" dan "data".

Untuk Dokumen 2:

Sekali lagi, sinyal teknologi yang kuat dengan komponen makanan yang kecil.

Untuk Dokumen 3:

Jelas didominasi oleh kata-kata yang terkait dengan makanan.

Matriks rekonstruksi akhir

Matriks ini adalah perkiraan probabilistik dari matriks hitung asli X. LDA secara efektif melakukan faktorisasi matriks dengan batasan di mana semua entri bernilai non-negatif, dan baris-baris dari Θ dan Φ adalah distribusi probabilitas.

Selama pelatihan, LDA tidak langsung menghitung Θ × Φ sekaligus. Sebaliknya, LDA secara berulang memperbarui penugasan topik untuk setiap kejadian kata agar Θ dan Φ yang diimplikasikan membuat X menjadi lebih mungkin di bawah model generatif. Inferensi variansional memperbarui Θ dan Φ secara langsung menggunakan optimasi.

Kedua metode bertujuan untuk menemukan Θ dan Φ sehingga ΘΦ dapat menjelaskan X dengan baik.

Demo Python dengan matriks yang dicetak

Berikut adalah contoh Python yang secara eksplisit mencetak Θ dan Φ sehingga Anda dapat memeriksanya.

import numpy as np
from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import CountVectorizer

docs = [
    "ai data ai",
    "ai data data",
    "pizza pasta pizza"
]

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(docs)

lda = LatentDirichletAllocation(
    n_components=2,
    random_state=0,
    max_iter=50
)

lda.fit(X)

# Document-topic matrix Θ
Theta = lda.transform(X)

# Topic-word matrix Φ (normalize rows)
Phi = lda.components_ / lda.components_.sum(axis=1)[:, None]

print("Vocabulary:", vectorizer.get_feature_names_out())
print("\nDocument-Term Matrix X:")
print(X.toarray())

print("\nDocument-Topic Matrix Θ:")
print(Theta)

print("\nTopic-Word Matrix Φ:")
print(Phi)

print("\nReconstructed X (Θ × Φ):")
print(np.dot(Theta, Phi))

Anda akan melihat bahwa Θ × Φ sangat mirip dengan struktur X, meskipun nilainya adalah probabilitas, bukan jumlah mentah.

Analisis Semantik Laten Probabilistik (PLSA)

Analisis Semantik Laten Probabilistik (PLSA) memperluas gagasan struktur semantik laten dengan memperkenalkan model variabel laten probabilistik yang eksplisit atas dokumen dan kata-kata. Diberikan sebuah dokumen ddd dan sebuah kata w, PLSA mengasumsikan kemunculan bersama mereka dihasilkan melalui variabel topik laten z. Probabilitas gabungan didefinisikan sebagai:

yang juga dapat ditulis dalam bentuk kondisional sebagai:

Di sini, P(w∣z) mewakili distribusi topik–kata dan P(z∣d) mewakili seberapa besar sebuah topik berkontribusi pada sebuah dokumen. Parameter model dipelajari dengan memaksimalkan log-likelihood dari jumlah kata–dokumen yang diamati n(d,w):

Karena variabel topik z tidak teramati, PLSA menggunakan algoritma Expectation–Maximization (EM). Pada langkah E, penugasan topik posterior dihitung sebagai:

Pada langkah M, distribusi topik–kata dan dokumen–topik diperbarui menggunakan posterior ini, misalnya:

PLSA juga dapat dilihat sebagai faktorisasi matriks probabilistik dari matriks distribusi dokumen–kata P(d,w) menjadi faktor-faktor dengan peringkat lebih rendah yang sesuai dengan topik, mirip dengan LSA tetapi didasarkan pada maksimisasi kemungkinan daripada SVD.

Model Topik Sederhana dengan BERT

Model topik tradisional seperti LDA bergantung pada jumlah kata dan asumsi probabilistik. Pemodelan topik berbasis BERT bekerja dengan cara yang sangat berbeda.

Alih-alih memodelkan dokumen sebagai kumpulan kata, kami pertama-tama menggunakan model BERT yang telah dilatih sebelumnya untuk mengubah setiap dokumen menjadi vektor semantik padat (embedding). Dokumen dengan makna yang mirip akan berada berdekatan dalam ruang vektor. Setelah kami memiliki embedding ini, kami mengelompokkannya untuk menemukan kelompok dokumen yang secara semantik mirip. Akhirnya, kami mengekstrak kata-kata representatif untuk setiap klaster guna menggambarkan topiknya.

BERTopic menggabungkan empat konsep:

Embedding BERT untuk menangkap semantik UMAP untuk mengurangi dimensi HDBSCAN untuk mengelompokkan dokumen TF-IDF berbasis kelas (c-TF-IDF) untuk mengekstrak kata topik

Memasang perpustakaan yang dibutuhkan

Pastikan Anda telah menginstal ini terlebih dahulu.

pip install bertopic sentence-transformers scikit-learn datasets umap-learn hdbscan

Dataset: 20 Newsgroups (teks dunia nyata)

Kami akan menggunakan sebagian dari dataset 20 Newsgroups, yang biasanya digunakan untuk pemodelan topik dan klasifikasi teks.

from bertopic import BERTopic
from sentence_transformers import SentenceTransformer
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd

Langkah 1: Muat dataset nyata

docs = fetch_20newsgroups(
    subset="train",
    remove=("headers", "footers", "quotes")
).data
docs[0]

Pada titik ini, docs adalah daftar dokumen teks mentah. Setiap dokumen dapat membahas teknologi, olahraga, agama, politik, atau sains.

Saya penasaran apakah ada yang bisa memberitahu saya tentang mobil yang saya lihat beberapa hari yang lalu. Itu adalah mobil sport 2 pintu, tampak seperti dari akhir 60-an/hampir 70-an. Mobil itu disebut Bricklin. Pintu-pintunya sangat kecil. Selain itu, bumper depan terpisah dari badan mobil yang lainnya. Itu saja yang saya tahu. Jika ada yang bisa memberi tahu saya nama model, spesifikasi mesin, tahun produksi, tempat mobil ini dibuat, sejarah, atau informasi apa pun yang Anda miliki tentang mobil yang tampak unik ini, silakan kirim email.

Langkah 2: Muat model embedding BERT

embedding_model = SentenceTransformer("all-MiniLM-L6-v2")

Model ini mengubah setiap dokumen menjadi vektor padat berdimensi 384. Embedding ini menangkap makna semantik, bukan hanya tumpang tindih kata.

Langkah 3: Inisialisasi BERTopic

topic_model = BERTopic(
    embedding_model=embedding_model,
    vectorizer_model=CountVectorizer(stop_words="english"),
    language="english",
    calculate_probabilities=True,
    verbose=True
)

Berikut adalah apa yang terjadi secara konseptual:

Model BERT menghasilkan embedding dokumen UMAP mengurangi dimensi embedding HDBSCAN mengelompokkan dokumen TF-IDF mengekstrak kata topik representatif

Langkah 4: Sesuaikan model topik

topics, probs = topic_model.fit_transform(docs)

Baris tunggal ini melakukan banyak pekerjaan:

Setiap dokumen di-embed menggunakan BERT Dokumen dikelompokkan berdasarkan kesamaan semantik Setiap dokumen diberikan ID topik Probabilitas topik dihitung

topics berisi satu label topik per dokumen.

Langkah 5: Periksa topik yang ditemukan

topic_info = topic_model.get_topic_info()
print(topic_info.head(10))

Ini menunjukkan:

Topik ID Jumlah dokumen dalam topik Kata-kata perwakilan teratas

Topik -1 mewakili outlier (dokumen yang tidak cocok dengan topik manapun).

  Topic  Count                           Name  \
0     -1   3604             -1_god_db_like_don   
1      0   1074       0_team_game_season_games   
2      1    514  1_patients_msg_medical_health   
3      2    394      2_space_launch_nasa_orbit   
4      3    359  3_key_clipper_chip_encryption   
5      4    261       4_card_monitor_video_vga   
6      5    239     5_israel_israeli_arab_jews   
7      6    185             6_jpeg_image_cx_c_   
8      7    167     7_fbi_koresh_batf_compound   
9      8    160    8_motherboard_ram_card_sale   

                                      Representation  \
0  [god, db, like, don, edu, know, just, use, doe...   
1  [team, game, season, games, hockey, play, play...   
2  [patients, msg, medical, health, disease, doct...   
3  [space, launch, nasa, orbit, lunar, satellite,...   
4  [key, clipper, chip, encryption, keys, escrow,...   
5  [card, monitor, video, vga, drivers, diamond, ...   
6  [israel, israeli, arab, jews, arabs, palestini...   
7  [jpeg, image, cx, c_, gif, files, format, file...   
8  [fbi, koresh, batf, compound, gas, children, w...   
9  [motherboard, ram, card, sale, price, offer, m...   

                                 Representative_Docs  
0  [This is a periodic posting intended to answer...  
1  [NHL RESULTS FOR GAMES PLAYED 4/14/93.\n\n----...  
2  [\n\nSo just what was it you wanted to say?\n\...  
3  [Archive-name: space/probe\nLast-modified: $Da...  
4  [Here are some corrections and additions to He...  
5  [ and  A VGA monitor..\ne-mail\n, Does anyone ...  
6  [\nThis a "tried and true" method utilized by ...  
7  [Archive-name: graphics/resources-list/part2\n...  
8  [...\n\n\tIt's amazing how everyone automatica...  
9  [NEW POSTING, LOWER PRICES!!  MAKE OFFERS ON A... 

Langkah 6: Lihat kata-kata yang mendefinisikan topik tertentu

topic_id = 0
print(topic_model.get_topic(topic_id))

Ini mengembalikan daftar pasangan (kata, skor_kepentingan). Kata-kata ini bukan hanya kata yang sering muncul; mereka membedakan topik tersebut dibandingkan dengan semua topik lainnya.

Langkah 7: Menetapkan topik kembali ke dokumen

df = pd.DataFrame({
    "document": docs[:10],
    "topic": topics[:10]
})

print(df)

Anda sekarang dapat melihat topik mana yang dimiliki setiap dokumen.

                                           document  topic  
0  I was wondering if anyone out there could enli...     18  
1  A fair number of brave souls who upgraded thei...     13  
2  well folks, my mac plus finally gave up the gh...     \-1  
3  \\nDo you have Weitek's address/phone number?  ...     \-1  
4  From article \<C5owCB.n3p@world.std.com\>, by to...    105  
5  \\n\\n\\n\\n\\nOf course.  The term must be rigidly...     \-1  
6  There were a few people who responded to my re...     \-1  
7                                                ...     33  
8  I have win 3.0 and downloaded several icons an...      6  
9  \\n\\n\\nI've had the board for over a year, and ...     26

Langkah 8: Kurangi topik (opsional tetapi berguna)

BERTopic dapat secara otomatis menggabungkan topik yang serupa.

topic_model.reduce_topics(docs, nr_topics=10)

Ini membantu menghasilkan hasil yang lebih bersih dan mudah ditafsirkan.

fig = topic_model.visualize_barchart(top_n_topics=8)
fig.show()

fig = topic_model.visualize_documents(docs)
fig.show()

Model LDA memodelkan jumlah kata secara probabilistik dan mengasumsikan dokumen sebagai campuran topik. Pemodelan topik berbasis BERT tidak mengasumsikan proses generatif apapun. Sebaliknya, ia mengandalkan embedding semantik dan pengelompokan. LDA bekerja dengan baik untuk kosakata pendek dan matematika yang mudah diinterpretasikan. Pemodelan topik berbasis BERT unggul dalam menangkap konteks, sinonim, dan kemiripan semantik.

Pertanyaan yang Sering Diajukan

Apa perbedaan antara pemodelan topik dan klasifikasi teks? Pemodelan topik adalah tanpa pengawasan dan secara otomatis menemukan topik tanpa data berlabel, sedangkan klasifikasi teks bersifat pengawasan dan memberikan label yang telah ditentukan pada dokumen berdasarkan contoh pelatihan.

Apakah sebuah dokumen bisa termasuk lebih dari satu topik? Ya, sebagian besar metode pemodelan topik menganggap bahwa dokumen mengandung beberapa topik, masing-masing dengan probabilitas atau proporsi tertentu.

Berapa banyak topik yang harus saya pilih? Tidak ada aturan baku. Jumlah topik tergantung pada ukuran dataset, domain, dan kasus penggunaan. Eksperimen dan evaluasi koherensi biasanya digunakan untuk menemukan jumlah yang sesuai.

Apakah pemodelan topik sama dengan pengelompokan? Pemodelan topik dan pengelompokan saling terkait tetapi tidak identik. Pengelompokan menetapkan setiap dokumen ke satu kelompok, sedangkan pemodelan topik merepresentasikan dokumen sebagai campuran dari beberapa topik.

Apakah pemodelan topik memahami makna? Pemodelan topik tidak benar-benar memahami bahasa seperti manusia. Ia mengidentifikasi pola statistik dalam penggunaan kata, yang seringkali sesuai dengan tema yang dapat dipahami manusia.

Kesimpulan

Pemodelan topik adalah salah satu algoritma penting yang membantu memahami meningkatnya volume data teks yang tidak terstruktur. Memahami pola tersembunyi melalui keterjadian kata memungkinkan kita untuk melampaui analisis kata kunci tingkat permukaan dan memperoleh pemahaman yang lebih holistik tentang koleksi dokumen yang besar. Pendekatan seperti Latent Dirichlet Allocation, Non-negative Matrix Factorization, dan Probabilistic Latent Semantic Analysis semua menangani tantangan ini dari perspektif matematis dan probabilistik yang berbeda, menawarkan fleksibilitas tergantung pada sifat data dan masalah yang dihadapi.

Meskipun tidak ada satu metode yang berhasil untuk semua, memilih model yang tepat dan menyetingnya dengan bijaksana dapat mengungkap wawasan yang kaya dan mudah diinterpretasikan yang sulit diperoleh secara manual. Ketika digunakan dengan pengetahuan domain dan evaluasi yang cermat, pemodelan topik tidak hanya menyederhanakan alur kerja analisis teks tetapi juga berfungsi sebagai dasar yang kuat untuk tugas-tugas lanjutan seperti pengelompokan dokumen, pengambilan informasi, dan analisis data eksploratori.

Terima kasih telah belajar bersama Komunitas Linux-Console.net.