Tutorial BERTopic: Topic Modeling Modern dengan Embeddings

# BERTopic: Pemodelan Topik Modern dengan Embedding BERTopic adalah library pemodelan topik yang menggabungkan embedding transformer, reduksi dimensi, clustering berbasis kepadatan, dan representasi...

By Ruby Abdullah · · tutorial
BERTopicTopic ModelingNLPClusteringEmbeddingsPython

BERTopic: Pemodelan Topik Modern dengan Embedding

BERTopic adalah library pemodelan topik yang menggabungkan embedding transformer, reduksi dimensi, clustering berbasis kepadatan, dan representasi class-based TF-IDF untuk menemukan tema dalam kumpulan teks. Alih-alih memperlakukan dokumen sebagai kantong kata seperti metode klasik, BERTopic bekerja pada level makna, sehingga biasanya menghasilkan topik yang lebih koheren dan mudah ditafsirkan. Tutorial ini menelusuri seluruh pipeline BERTopic memakai contoh praktis: mengelompokkan korpus tiket dukungan pelanggan.

Apa Itu Pemodelan Topik dan Mengapa BERTopic Membantu

Pemodelan topik adalah tugas mengelompokkan kumpulan dokumen secara otomatis menjadi tema ("topik") dan menggambarkan tiap tema dengan sekumpulan kata representatif. Ini bersifat unsupervised: Anda tidak memberi label, model menemukan strukturnya sendiri.

Pendekatan tradisional adalah Latent Dirichlet Allocation (LDA). LDA memperlakukan tiap dokumen sebagai campuran topik dan tiap topik sebagai distribusi atas kata. LDA bekerja pada hitungan kata mentah, sehingga mengabaikan urutan dan makna kata. Dalam praktiknya ini menimbulkan beberapa masalah yang berulang:

  • Sulit menangani teks pendek (tweet, tiket, ulasan) di mana ko-okurensi kata jarang.
  • Mengharuskan Anda menetapkan jumlah topik di awal, yang sulit ditebak.
  • Topik yang dihasilkan sering mencampur kata yang tidak berkaitan karena tidak ada konsep kemiripan semantik.

BERTopic menempuh jalur berbeda. Ia merepresentasikan tiap dokumen sebagai embedding padat dari model bahasa, sehingga dokumen yang maknanya mirip berdekatan dalam ruang vektor meski tidak berbagi kata yang persis sama. Kemudian ia mengelompokkan embedding tersebut dan, baru di akhir, menurunkan kata kunci per kelompok. Inti idenya adalah clustering dan ekstraksi kata kunci dipisahkan, sehingga seluruh proses menjadi modular dan mudah disesuaikan.

Pipeline default memiliki lima tahap:

  • Embed dokumen dengan model sentence-transformer.
  • Reduksi dimensi embedding dengan UMAP.
  • Cluster embedding yang sudah direduksi dengan HDBSCAN.
  • Tokenisasi dokumen per kelompok dengan vectorizer (CountVectorizer).
  • Bobot token dengan class-based TF-IDF (c-TF-IDF) untuk menemukan kata kunci topik.
  • Setiap tahap adalah komponen yang bisa ditukar, dan inilah alasan utama BERTopic fleksibel.

    Instalasi

    pip install bertopic
    

    BERTopic otomatis menarik sentence-transformers, UMAP, HDBSCAN, dan scikit-learn. Untuk fitur opsional, pasang ekstra yang Anda butuhkan:

    # Menyimpan model dalam format safetensors
    

    pip install bertopic[safetensors]

    Dukungan visualisasi (plotly sudah termasuk, datamapplot ekstra)

    pip install bertopic[visualization]

    Label topik berbasis LLM via backend OpenAI

    pip install bertopic[openai]

    Jika punya GPU, pasang build CUDA dari PyTorch lebih dulu agar tahap embedding berjalan lebih cepat.

    Model Pertama

    Mari bangun model pada sekumpulan kecil tiket dukungan. Pada proyek nyata Anda akan memuat ribuan dokumen; API-nya identik.

    from bertopic import BERTopic
    
    

    docs = [

    "Tagihan saya menampilkan biaya yang tidak saya setujui bulan ini",

    "Saya ditagih dua kali untuk langganan yang sama, mohon refund",

    "Aplikasi crash setiap kali saya membuka halaman laporan",

    "Tab laporan membeku lalu aplikasi tertutup sendiri",

    "Bagaimana cara reset password? Email reset tidak pernah datang",

    "Saya tidak bisa login, tautan reset password rusak",

    "Bisa jelaskan perbedaan paket Pro dan Team?",

    "Fitur apa saja yang termasuk dalam harga paket Team?",

    # ... ribuan lainnya pada praktiknya

    ]

    topicmodel = BERTopic()

    topics, probs = topicmodel.fittransform(docs)

    fittransform mengembalikan dua array. topics berisi id topik yang diberikan ke tiap dokumen, dan probs berisi probabilitas tiap dokumen termasuk ke topik yang ditetapkan.

    Memeriksa Topik

    gettopicinfo() mengembalikan DataFrame yang merangkum setiap topik: id-nya, berapa dokumen yang dikandung, nama otomatis singkat, dan kata kunci teratas.
    info = topicmodel.gettopicinfo()
    

    print(info[["Topic", "Count", "Name"]])

    Untuk melihat kata kunci dan bobot c-TF-IDF-nya pada satu topik, gunakan gettopic:

    Artikel Terkait

    Tutorial Sentence Transformers: Embeddings, Similarity, dan Reranker

    Sentence Transformers: Embedding, Kemiripan Semantik, dan Reranker Sentence Transformers (sering disebut SBERT) adalah p...

    Tutorial spaCy: NLP Berskala Industri dengan Python

    spaCy: NLP Kelas Industri di Python spaCy adalah pustaka open-source untuk pemrosesan bahasa alami (NLP) yang dirancang ...

    Tutorial FAISS: Pencarian Kemiripan Vektor dalam Skala Besar

    FAISS: Pencarian Kemiripan Vektor yang Efisien dalam Skala Besar FAISS (Facebook AI Similarity Search) adalah library C+...

    Tutorial Lengkap Label Studio: Data Labeling untuk Machine Learning

    Tutorial Lengkap Label Studio: Data Labeling untuk Machine Learning Label Studio adalah platform data labeling open-sour...