Skip to content Skip to sidebar Skip to footer

Topic Modeling dengan BERT

Daftar Isi

Topic Modeling dengan BERT
Topic Modeling dengan BERT


Memanfaatkan BERT dan TF-IDF untuk membuat topik yang mudah ditafsirkan. Seringkali ketika saya didekati oleh pemilik produk untuk melakukan beberapa analisis berbasis NLP, saya biasanya ditanyai pertanyaan berikut:

'Topik mana yang sering ditemukan dalam dokumen-dokumen ini?'

Batal dari kategori atau label apa pun saya terpaksa melihat teknik tanpa pengawasan untuk mengekstrak topik ini, yaitu Pemodelan Topik.

Meskipun model topik seperti LDA dan NMF telah terbukti menjadi titik awal yang baik, saya selalu merasa butuh upaya yang cukup melalui penyetelan hiperparameter untuk membuat topik yang bermakna.

Selain itu, saya ingin menggunakan model berbasis transformator seperti BERT karena mereka telah menunjukkan hasil yang luar biasa dalam berbagai tugas NLP selama beberapa tahun terakhir. Model pra-terlatih sangat membantu karena seharusnya berisi representasi kata dan kalimat yang lebih akurat.

Beberapa minggu yang lalu saya melihat proyek hebat bernama Top2Vec* ini yang memanfaatkan penyematan dokumen dan kata untuk membuat topik yang mudah ditafsirkan. Saya mulai melihat kode untuk menggeneralisasi Top2Vec sedemikian rupa sehingga dapat digunakan dengan model transformator yang telah dilatih sebelumnya.

Keuntungan besar dari Doc2Vec adalah bahwa penyematan dokumen dan kata yang dihasilkan bersama-sama disematkan dalam ruang yang sama yang memungkinkan penyematan dokumen diwakili oleh penyematan kata terdekat. Sayangnya, ini terbukti sulit karena penyematan BERT berbasis token dan tidak selalu menempati ruang yang sama**.

Sebagai gantinya, saya memutuskan untuk membuat algoritma berbeda yang dapat menggunakan penyematan BERT dan 🤗 transformator. Hasilnya adalah BERTopic, algoritma untuk menghasilkan topik menggunakan penyematan canggih.

Topik utama artikel ini bukanlah penggunaan BERTopic tetapi tutorial tentang cara menggunakan BERT untuk membuat model topik Anda sendiri.

PAPER*: Angelov, D. (2020). Top2Vec: Representasi Topik yang Didistribusikan. arXiv pracetak arXiv:2008.09470.

CATATAN**: Meskipun Anda dapat membuatnya menempati ruang yang sama, ukuran yang dihasilkan dari penyematan kata cukup besar karena sifat kontekstual BERT. Selain itu, ada kemungkinan bahwa penyematan kalimat atau dokumen yang dihasilkan akan menurun kualitasnya.

1. Data & Packages

Untuk contoh ini, kami menggunakan himpunan data 20 Newsgroups yang terkenal yang berisi sekitar 18000 posting newsgroup tentang 20 topik. Menggunakan Scikit-Learn, kita dapat dengan cepat mengunduh dan menyiapkan data:

Jika Anda ingin mempercepat pelatihan, Anda dapat memilih kereta subset karena akan mengurangi jumlah posting yang Anda ekstrak.

CATATAN: Jika Anda ingin menerapkan pemodelan topik bukan pada seluruh dokumen tetapi pada tingkat paragraf, saya sarankan untuk memisahkan data Anda sebelum membuat penyematan.

2. Embeddings

Langkah pertama yang harus kita lakukan adalah mengonversi dokumen menjadi data numerik. Kami menggunakan BERT untuk tujuan ini karena mengekstrak penyematan yang berbeda berdasarkan konteks kata. Tidak hanya itu, ada banyak model pra-pelatihan yang tersedia siap digunakan.

Bagaimana Anda membuat penyematan BERT untuk dokumen terserah Anda. Namun, saya lebih suka menggunakan paket transformator kalimat karena penyematan yang dihasilkan telah terbukti berkualitas tinggi dan biasanya bekerja cukup baik untuk penyematan tingkat dokumen.

Instal paket dengan pip install sentence-transformers sebelum menghasilkan penyematan dokumen. Jika Anda mengalami masalah saat menginstal paket ini, maka ada baiknya menginstal Pytorch terlebih dahulu.

Kemudian, jalankan kode berikut untuk mengubah dokumen Anda dalam vektor 512 dimensi:

Kami menggunakan Distilbert karena memberikan keseimbangan yang bagus antara kecepatan dan kinerja. Paket ini memiliki beberapa model multibahasa yang tersedia untuk Anda gunakan.

CATATAN: Karena model transformator memiliki batas token, Anda mungkin mengalami beberapa kesalahan saat memasukkan dokumen besar. Dalam hal ini, Anda dapat mempertimbangkan untuk membagi dokumen menjadi paragraf.

3. Clustering

Kami ingin memastikan bahwa dokumen dengan topik serupa dikelompokkan bersama sehingga kami dapat menemukan topik dalam kluster ini. Sebelum melakukannya, pertama-tama kita perlu menurunkan dimensi penyematan karena banyak algoritma pengelompokan menangani dimensi tinggi dengan buruk.

UMAP

Dari beberapa algoritma pengurangan dimensi, UMAP bisa dibilang berkinerja terbaik karena menyimpan sebagian besar struktur lokal dimensi tinggi dalam dimensi yang lebih rendah.

Instal paket dengan pip install umap-learn sebelum kita menurunkan dimensi penyematan dokumen. Kami mengurangi dimensi menjadi 5 sambil menjaga ukuran lingkungan lokal di 15. Anda dapat bermain-main dengan nilai-nilai ini untuk mengoptimalkan pembuatan topik Anda. Perhatikan bahwa dimensi yang terlalu rendah mengakibatkan hilangnya informasi sementara dimensi yang terlalu tinggi menghasilkan hasil pengelompokan yang lebih buruk.

HDBSAN

Setelah mengurangi dimensi penyematan dokumen menjadi 5, kita dapat mengelompokkan dokumen dengan HDBSCAN. HDBSCAN adalah algoritma berbasis kepadatan yang bekerja cukup baik dengan UMAP karena UMAP mempertahankan banyak struktur lokal bahkan dalam ruang dimensi yang lebih rendah. Selain itu, HDBSCAN tidak memaksa titik data ke cluster karena menganggapnya outlier.

Instal paket dengan pip install hdbscan lalu buat kluster:

Hebat! Kami sekarang telah mengelompokkan dokumen serupa bersama-sama yang seharusnya mewakili topik yang terdiri dari mereka. Untuk memvisualisasikan cluster yang dihasilkan, kita dapat mengurangi dimensi menjadi 2 dan memvisualisasikan outlier sebagai titik abu-abu:

Sulit untuk memvisualisasikan masing-masing cluster karena jumlah topik yang dihasilkan (~55). Namun, kita dapat melihat bahwa bahkan dalam ruang 2 dimensi beberapa struktur lokal disimpan.

CATATAN: Anda dapat melewati langkah pengurangan dimensi jika Anda menggunakan algoritma pengelompokan yang dapat menangani dimensi tinggi seperti k-Means berbasis kosinus.

4. Pembuatan Topik

Apa yang ingin kita ketahui dari cluster yang kita hasilkan, adalah apa yang membuat satu cluster, berdasarkan kontennya, berbeda dari yang lain?

Bagaimana kita bisa mendapatkan topik dari dokumen yang dikelompokkan?

Untuk mengatasi ini, saya datang dengan varian berbasis kelas TF-IDF (c-TF-IDF), yang akan memungkinkan saya untuk mengekstrak apa yang membuat setiap set dokumen unik dibandingkan dengan yang lain.

Intuisi di balik metode ini adalah sebagai berikut. Ketika Anda menerapkan TF-IDF seperti biasa pada sekumpulan dokumen, yang pada dasarnya Anda lakukan adalah membandingkan pentingnya kata-kata antar dokumen.

Bagaimana jika, kita memperlakukan semua dokumen dalam satu kategori (misalnya, cluster) sebagai satu dokumen dan kemudian menerapkan TF-IDF? Hasilnya akan menjadi dokumen yang sangat panjang per kategori dan skor TF-IDF yang dihasilkan akan menunjukkan kata-kata penting dalam suatu topik.

c-TF-IDF
Untuk membuat skor TF-IDF berbasis kelas ini, pertama-tama kita perlu membuat satu dokumen untuk setiap kluster dokumen:

Post a Comment for "Topic Modeling dengan BERT"