Lewati ke konten utama

Latent Semantic Analysis menggunakan Python

Dalam tutorial ini, Anda akan mempelajari cara menemukan topik tersembunyi dari dokumen yang diberikan menggunakan Latent Semantic Analysis di Python.
Diperbarui 28 Sep 2026  · 11 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

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.

diagram

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.

diagram

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.

Latent Semantic Analysis

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.

factor
  • 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 garis

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.

Topik
Python
Data Science

Kursus Python

Kursus

Pengantar Python

4 jam
7.1M
Kuasai dasar-dasar analisis data dengan Python dalam 4 jam. Kursus online ini memperkenalkan antarmuka Python dan pustaka populer.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya