Kursus
Menemukan topik bermanfaat untuk berbagai tujuan seperti pengelompokan dokumen, mengorganisasi konten yang tersedia online untuk temu kembali informasi dan rekomendasi. Banyak penyedia konten dan kantor berita menggunakan model topik untuk merekomendasikan artikel kepada pembaca. Demikian pula, perusahaan rekrutmen menggunakannya untuk mengekstrak deskripsi pekerjaan dan memetakannya dengan keterampilan kandidat. Jika Anda melihat pekerjaan data scientist, yang intinya adalah mengekstrak ‘pengetahuan’ dari sejumlah besar data yang dikumpulkan. Biasanya, data yang dikumpulkan tidak terstruktur. Anda memerlukan alat dan teknik yang kuat untuk menganalisis dan memahami sejumlah besar data tidak terstruktur.
Topic modeling adalah teknik penambangan teks yang menyediakan metode untuk mengidentifikasi kata kunci yang sering muncul bersama guna meringkas koleksi besar informasi tekstual. Teknik ini membantu menemukan topik tersembunyi dalam dokumen, memberi anotasi dokumen dengan topik-topik tersebut, dan mengorganisasi sejumlah besar data tidak terstruktur.
Topic Modeling
Topic Modeling secara otomatis menemukan tema tersembunyi dari dokumen yang diberikan. Ini adalah algoritma analitik teks tanpa pengawasan yang digunakan untuk menemukan kelompok kata dari dokumen yang diberikan. Kelompok kata ini merepresentasikan suatu topik. Ada kemungkinan satu dokumen dapat terkait dengan beberapa tema. Misalnya, sekelompok kata seperti 'patient', 'doctor', 'disease', 'cancer', dan 'health' akan merepresentasikan topik 'healthcare'. Topic Modeling berbeda dibanding pencarian teks berbasis aturan yang menggunakan regular expression.

Perbandingan antara Klasifikasi Teks dan Topic Modeling
Klasifikasi teks adalah masalah pembelajaran mesin terawasi, di mana sebuah dokumen atau artikel teks diklasifikasikan ke dalam sekumpulan kelas yang telah ditentukan. Topic modeling adalah proses menemukan kelompok kata yang sering muncul bersama dalam dokumen teks. Kelompok kata terkait yang sering muncul bersama ini membentuk "topik". Ini merupakan bentuk pembelajaran tanpa pengawasan, sehingga himpunan topik yang mungkin tidak diketahui. Topic modeling dapat digunakan untuk menyelesaikan masalah klasifikasi teks. Topic modeling akan mengidentifikasi topik yang ada dalam sebuah dokumen, sementara klasifikasi teks mengklasifikasikan teks ke dalam satu kelas.

Latent Semantic Analysis
LSA (Latent Semantic Analysis) juga dikenal sebagai LSI (Latent Semantic Index). LSA menggunakan model bag of words (BoW), yang menghasilkan matriks term-dokumen (kemunculan istilah dalam dokumen). Baris merepresentasikan istilah dan kolom merepresentasikan dokumen. LSA mempelajari topik laten dengan melakukan dekomposisi matriks pada matriks dokumen-istilah menggunakan Singular Value Decomposition. LSA biasanya digunakan sebagai teknik reduksi dimensi atau pereduksi noise.

Singular Value Decomposition (SVD)
SVD adalah metode faktorisasi matriks yang merepresentasikan sebuah matriks sebagai hasil kali dua matriks. Ini menawarkan berbagai aplikasi bermanfaat dalam pemrosesan sinyal, psikologi, sosiologi, ilmu iklim dan atmosfer, statistik, dan astronomi.

- M adalah matriks m×m
- U adalah matriks singular kiri m×n
- Σ adalah matriks diagonal n×n dengan bilangan riil non-negatif.
- V adalah matriks singular kanan m×n
- V* adalah matriks n×m, yaitu transpose dari V.
Matriks identitas: Matriks bujursangkar di mana semua elemen pada diagonal utama bernilai satu, dan semua elemen lainnya nol.
Matriks diagonal: Matriks di mana semua entri selain diagonal utama bernilai nol.
Matriks singular: Suatu matriks bersifat singular jika determinannya 0 atau matriks bujursangkar yang tidak memiliki invers matriks.
Menentukan Jumlah Topik Optimal
Bagaimana cara terbaik menentukan k (jumlah topik) dalam topic modeling? Mengidentifikasi jumlah topik optimal pada korpus teks yang diberikan adalah tugas yang menantang. Kita dapat menggunakan opsi berikut untuk menentukan jumlah topik optimal:
- Salah satu cara menentukan jumlah topik optimal adalah mempertimbangkan setiap topik sebagai sebuah klaster dan mencari efektivitas klaster menggunakan koefisien Silhouette.
- Ukuran koherensi topik adalah ukuran yang realistis untuk mengidentifikasi jumlah topik.
Topic Coherence adalah metrik yang banyak digunakan untuk mengevaluasi model topik. Ini menggunakan model variabel laten. Setiap topik yang dihasilkan memiliki daftar kata. Dalam ukuran koherensi topik, Anda akan mencari nilai rata-rata/median dari skor kemiripan berpasangan antar kata dalam satu topik. Nilai koherensi yang tinggi akan dianggap sebagai model topik yang baik.
Mengimplementasikan LSA menggunakan Gensim
Impor pustaka yang diperlukan
#import modules
import os.path
from gensim import corpora
from gensim.models import LsiModel
from nltk.tokenize import RegexpTokenizer
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from gensim.models.coherencemodel import CoherenceModel
import matplotlib.pyplot as plt
Memuat Data
Mari terlebih dahulu membuat fungsi pemuatan data untuk memuat articles.csv. Anda dapat mengunduh datanya di sini.
def load_data(path,file_name):
"""
Input : path and file_name
Purpose: loading text file
Output : list of paragraphs/documents and
title(initial 100 words considred as title of document)
"""
documents_list = []
titles=[]
with open( os.path.join(path, file_name) ,"r") as fin:
for line in fin.readlines():
text = line.strip()
documents_list.append(text)
print("Total Number of Documents:",len(documents_list))
titles.append( text[0:min(len(text),100)] )
return documents_list,titles
Prapemrosesan Data
Setelah fungsi pemuatan data, Anda perlu melakukan prapemrosesan teks. Langkah-langkah berikut dilakukan untuk memproses teks:
- Tokenisasi artikel teks
- Menghapus stop word
- Melakukan stemming pada artikel teks
def preprocess_data(doc_set):
"""
Input : docuemnt list
Purpose: preprocess text (tokenize, removing stopwords, and stemming)
Output : preprocessed text
"""
# initialize regex tokenizer
tokenizer = RegexpTokenizer(r'\w+')
# create English stop words list
en_stop = set(stopwords.words('english'))
# Create p_stemmer of class PorterStemmer
p_stemmer = PorterStemmer()
# list for tokenized documents in loop
texts = []
# loop through document list
for i in doc_set:
# clean and tokenize document string
raw = i.lower()
tokens = tokenizer.tokenize(raw)
# remove stop words from tokens
stopped_tokens = [i for i in tokens if not i in en_stop]
# stem tokens
stemmed_tokens = [p_stemmer.stem(i) for i in stopped_tokens]
# add tokens to list
texts.append(stemmed_tokens)
return texts
Menyiapkan Korpus
Langkah berikutnya adalah menyiapkan korpus. Di sini, Anda perlu membuat matriks dokumen-istilah dan kamus istilah.
def prepare_corpus(doc_clean):
"""
Input : clean document
Purpose: create term dictionary of our courpus and Converting list of documents (corpus) into Document Term Matrix
Output : term dictionary and Document Term Matrix
"""
# Creating the term dictionary of our courpus, where every unique term is assigned an index. dictionary = corpora.Dictionary(doc_clean)
dictionary = corpora.Dictionary(doc_clean)
# Converting list of documents (corpus) into Document Term Matrix using dictionary prepared above.
doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]
# generate LDA model
return dictionary,doc_term_matrix
Membuat model LSA menggunakan Gensim
Setelah pembuatan korpus, Anda dapat menghasilkan model menggunakan LSA.
def create_gensim_lsa_model(doc_clean,number_of_topics,words):
"""
Input : clean document, number of topics and number of words associated with each topic
Purpose: create LSA model using gensim
Output : return LSA model
"""
dictionary,doc_term_matrix=prepare_corpus(doc_clean)
# generate LSA model
lsamodel = LsiModel(doc_term_matrix, num_topics=number_of_topics, id2word = dictionary) # train model
print(lsamodel.print_topics(num_topics=number_of_topics, num_words=words))
return lsamodel
Menentukan jumlah topik
Langkah tambahan lain perlu dilakukan untuk mengoptimalkan hasil dengan mengidentifikasi jumlah topik yang optimal. Di sini, Anda akan menghasilkan skor koherensi untuk menentukan jumlah topik yang optimal.
def compute_coherence_values(dictionary, doc_term_matrix, doc_clean, stop, start=2, step=3):
"""
Input : dictionary : Gensim dictionary
corpus : Gensim corpus
texts : List of input texts
stop : Max num of topics
purpose : Compute c_v coherence for various number of topics
Output : model_list : List of LSA topic models
coherence_values : Coherence values corresponding to the LDA model with respective number of topics
"""
coherence_values = []
model_list = []
for num_topics in range(start, stop, step):
# generate LSA model
model = LsiModel(doc_term_matrix, num_topics=number_of_topics, id2word = dictionary) # train model
model_list.append(model)
coherencemodel = CoherenceModel(model=model, texts=doc_clean, dictionary=dictionary, coherence='c_v')
coherence_values.append(coherencemodel.get_coherence())
return model_list, coherence_values
Mari plot nilai skor koherensi.
def plot_graph(doc_clean,start, stop, step):
dictionary,doc_term_matrix=prepare_corpus(doc_clean)
model_list, coherence_values = compute_coherence_values(dictionary, doc_term_matrix,doc_clean,
stop, start, step)
# Show graph
x = range(start, stop, step)
plt.plot(x, coherence_values)
plt.xlabel("Number of Topics")
plt.ylabel("Coherence score")
plt.legend(("coherence_values"), loc='best')
plt.show()
start,stop,step=2,12,1
plot_graph(clean_text,start,stop,step)

Grafik ini mudah dievaluasi. Di sini, Anda memiliki jumlah topik pada sumbu X dan skor koherensi pada sumbu Y. Dari jumlah topik yang ada, 7 memiliki skor koherensi tertinggi, sehingga jumlah topik optimal adalah 7.
Jalankan semua fungsi di atas
# LSA Model
number_of_topics=7
words=10
document_list,titles=load_data("","articles.txt")
clean_text=preprocess_data(document_list)
model=create_gensim_lsa_model(clean_text,number_of_topics,words)
Total Number of Documents: 4551
[(0, '0.361*"trump" + 0.272*"say" + 0.233*"said" + 0.166*"would" + 0.160*"clinton" + 0.140*"peopl" + 0.136*"one" + 0.126*"campaign" + 0.123*"year" + 0.110*"time"'), (1, '-0.389*"citi" + -0.370*"v" + -0.356*"h" + -0.355*"2016" + -0.354*"2017" + -0.164*"unit" + -0.159*"west" + -0.157*"manchest" + -0.116*"apr" + -0.112*"dec"'), (2, '0.612*"trump" + 0.264*"clinton" + -0.261*"eu" + -0.148*"say" + -0.137*"would" + 0.135*"donald" + -0.134*"leav" + -0.134*"uk" + 0.119*"republican" + -0.110*"cameron"'), (3, '-0.400*"min" + 0.261*"eu" + -0.183*"goal" + -0.152*"ball" + -0.132*"play" + 0.128*"said" + 0.128*"say" + -0.126*"leagu" + 0.122*"leav" + -0.122*"game"'), (4, '0.404*"bank" + -0.305*"eu" + -0.290*"min" + 0.189*"year" + -0.164*"leav" + -0.153*"cameron" + 0.143*"market" + 0.140*"rate" + -0.139*"vote" + -0.133*"say"'), (5, '0.310*"bank" + -0.307*"say" + -0.221*"peopl" + 0.203*"trump" + 0.166*"1" + 0.164*"min" + 0.163*"0" + 0.152*"eu" + 0.152*"market" + -0.138*"like"'), (6, '0.570*"say" + 0.237*"min" + -0.170*"vote" + 0.158*"govern" + -0.154*"poll" + 0.122*"tax" + 0.115*"statement" + 0.115*"bank" + 0.112*"budget" + -0.108*"one"')]
- Topik-1: "trump", "say", "said", "would", "clinton", "peopl", "one", "campaign","year","time" (Pemilu Presiden AS)
- Topik-2: "citi", "v", "h", "2016", "2017","unit", "west", "manchest","apr" ,"dec" (Liga Premier Inggris)
- Topik-3: "trump","clinton", "eu","say","would","donald","leav","uk" ,"republican" ,"cameron" (Pemilu Presiden AS, Brexit)
- Topik-4: "min","eu","goal","ball","play","said","say","leagu","leav","game" (Liga Premier Inggris)
- Topik-5: "bank","eu","min","year","leav","cameron","market","rate","vote","say" (Brexit dan Kondisi Pasar)
- Topik-6: "bank","say","peopl","trump","1" ,"min" ,"eu","market" ,"like" (Situasi politik dan kondisi pasar)
- Topik-7: "say","min","vote","govern","poll","tax","statement","bank","budget","one" (Pemilu Presiden AS dan Perencanaan Keuangan)
Di sini, 7 topik ditemukan menggunakan Latent Semantic Analysis. Beberapa di antaranya saling tumpang tindih. Untuk menangkap makna ganda dengan akurasi lebih tinggi kita perlu mencoba LDA (latent Dirichlet allocation). Saya akan membiarkan ini sebagai latihan untuk Anda, coba gunakan Gensim dan bagikan pandangan Anda.
Kelebihan dan Kekurangan LSA
Algoritma LSA adalah metode tersederhana yang mudah dipahami dan diimplementasikan. Ini juga menawarkan hasil yang lebih baik dibanding model ruang vektor. LSA lebih cepat dibanding algoritma lain yang tersedia karena hanya melibatkan dekomposisi matriks dokumen-istilah.
Dimensi topik laten bergantung pada rank matriks sehingga kita tidak bisa melampaui batas itu. Matriks hasil dekomposisi LSA sangat padat, sehingga sulit untuk melakukan pengindeksan pada dimensi individual. LSA tidak mampu menangkap makna ganda suatu kata. Ini tidak lebih mudah diimplementasikan dibanding LDA (latent Dirichlet allocation). Akurasinya lebih rendah daripada LDA.
Use Case Topic Modeling
Aplikasi sederhana yang menggunakan teknik ini antara lain pengelompokan dokumen dalam analisis teks, sistem rekomendasi, dan temu kembali informasi. Use case topic modeling yang lebih rinci antara lain:
- Ringkasan CV: Dapat membantu perekrut mengevaluasi CV secara cepat. Mereka dapat mengurangi upaya dalam menyaring tumpukan CV.
- Pengoptimalan Mesin Pencari: artikel online, blog, dan dokumen dapat diberi tag dengan mudah dengan mengidentifikasi topik dan kata kunci terkait, yang dapat meningkatkan hasil pencarian.
- Pengoptimalan Sistem Rekomendasi: sistem rekomendasi bertindak sebagai penyaring informasi dan penasihat sesuai profil pengguna dan riwayat sebelumnya. Ini dapat membantu kita menemukan konten relevan yang belum dikunjungi berdasarkan kunjungan sebelumnya.
- Meningkatkan Layanan Pelanggan: Menemukan topik relevan dan kata kunci terkait dalam keluhan dan umpan balik pelanggan misalnya spesifikasi produk dan layanan, detail departemen, dan cabang. Informasi seperti ini membantu perusahaan langsung meneruskan keluhan ke departemen terkait.
- Dalam industri kesehatan, topic modeling dapat membantu kita mengekstrak informasi yang berguna dan berharga dari laporan medis tidak terstruktur. Informasi ini dapat digunakan untuk perawatan pasien dan tujuan riset ilmu kedokteran.
Kesimpulan
Dalam tutorial ini, Anda mempelajari banyak detail tentang Topic Modeling. Anda telah mempelajari apa itu Topic Modeling, apa itu Latent Semantic Analysis, cara membangun model terkait, bagaimana topik dihasilkan menggunakan LSA. Selain itu, Anda juga membahas beberapa konsep dasar seperti Singular Value Decomposition dan skor koherensi topik.
Semoga sekarang Anda dapat memanfaatkan topic modeling untuk menganalisis dataset Anda sendiri. Terima kasih telah membaca tutorial ini!
Jika Anda ingin mempelajari lebih lanjut tentang Python, ikuti kursus Case Studies in Statistical Thinking dari DataCamp.
