
OCTIS (mengoptimalkan dan membandingkan model topik sederhana) bertujuan untuk melatih, menganalisis dan membandingkan model topik, yang hiperparameter optimalnya diperkirakan dengan menggunakan pendekatan optimasi Bayesian. Pekerjaan ini telah diterima di trek demo EACL2021. Klik untuk membaca kertas!
Daftar isi
Anda dapat menginstal Octis dengan perintah berikut:
Pip Instal Octis
Anda dapat menemukan persyaratan dalam file persyaratan.txt.
Untuk dengan mudah memahami cara menggunakan octis, kami mengundang Anda untuk mencoba tutorial kami :)
| Nama | Link |
|---|---|
| Cara Membangun Model Topik dan Mengevaluasi Hasil (LDA di 20NewSgroups) | |
| Cara Mengoptimalkan Hyperparameter Model Topik Saraf (CTM pada M10) |
Dua panduan tentang cara menggunakan octis dengan contoh praktis:
Tutorial tentang pemodelan topik pada lirik lagu:
Untuk memuat salah satu dataset yang sudah diproses sebagai berikut:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . fetch_dataset ( "20NewsGroup" )Cukup gunakan salah satu nama dataset yang tercantum di bawah ini. CATATAN: Ini peka terhadap kasus!
| Nama dalam Octis | Sumber | # Docs | # Kata-kata | # Label | Bahasa |
|---|---|---|---|---|---|
| 20NewSgroup | 20NewSgroup | 16309 | 1612 | 20 | Bahasa inggris |
| BBC_News | BBC-News | 2225 | 2949 | 5 | Bahasa inggris |
| Dblp | Dblp | 54595 | 1513 | 4 | Bahasa inggris |
| M10 | M10 | 8355 | 1696 | 10 | Bahasa inggris |
| Dbpedia_it | Dbpedia_it | 4251 | 2047 | 5 | Italia |
| Europarl_it | Europarl_it | 3613 | 2000 | Na | Italia |
Jika tidak, Anda dapat memuat dataset preproses preproses khusus dengan cara berikut:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "../path/to/the/dataset/folder" )Partisi dapat "melatih" untuk partisi pelatihan, "tes" untuk pengujian partisi, atau "val" untuk partisi validasi. Contoh dataset dapat ditemukan di sini: sample_dataset.
Demikian pula dengan dataset TensorFlow dan perpustakaan NLP HuggingFace, kami baru saja mengunduh dan menyiapkan kumpulan data publik. Kami tidak meng -host atau mendistribusikan set data ini, menjamin kualitas atau keadilannya, atau mengklaim bahwa Anda memiliki lisensi untuk menggunakan dataset. Adalah tanggung jawab Anda untuk menentukan apakah Anda memiliki izin untuk menggunakan dataset di bawah lisensi dataset dan mengutip pemilik dataset yang tepat.
Jika Anda seorang pemilik dataset dan ingin memperbarui bagian mana pun dari itu, atau tidak ingin dataset Anda dimasukkan dalam perpustakaan ini, silakan menghubungi melalui masalah GitHub.
Jika Anda seorang pemilik dataset dan ingin memasukkan dataset Anda di perpustakaan ini, silakan hubungi melalui masalah GitHub.
Untuk preprocess dataset, impor kelas preprocessing dan gunakan metode preprocess_dataset.
import os
import string
from octis . preprocessing . preprocessing import Preprocessing
os . chdir ( os . path . pardir )
# Initialize preprocessing
preprocessor = Preprocessing ( vocabulary = None , max_features = None ,
remove_punctuation = True , punctuation = string . punctuation ,
lemmatize = True , stopword_list = 'english' ,
min_chars = 1 , min_words_docs = 0 )
# preprocess
dataset = preprocessor . preprocess_dataset ( documents_path = r'..corpus.txt' , labels_path = r'..labels.txt' )
# save the preprocessed dataset
dataset . save ( 'hello_dataset' )Untuk detail lebih lanjut tentang preprocessing, lihat contoh demo preprocessing di folder contoh.
Untuk membangun model, memuat dataset yang diproses sebelumnya, mengatur model hyperparameters dan menggunakan train_model() untuk melatih model.
from octis . dataset . dataset import Dataset
from octis . models . LDA import LDA
# Load a dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "dataset_folder" )
model = LDA ( num_topics = 25 ) # Create model
model_output = model . train_model ( dataset ) # Train the modelJika dataset dipartisi, Anda dapat:
| Nama | Pelaksanaan |
|---|---|
| CTM (Bianchi et al. 2021) | https://github.com/milanlproc/contextualized-topic-odels |
| ETM (Dieng et al. 2020) | https://github.com/adjidieng/etm |
| HDP (Blei et al. 2004) | https://radimrehurek.com/gensim/ |
| LDA (Blei et al. 2003) | https://radimrehurek.com/gensim/ |
| LSI (Landauer et al. 1998) | https://radimrehurek.com/gensim/ |
| NMF (Lee dan Seung 2000) | https://radimrehurek.com/gensim/ |
| Neurallda (Srivastava dan Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
| Prodlda (Srivastava dan Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
Jika Anda menggunakan salah satu implementasi ini, pastikan untuk mengutip kertas yang tepat.
Jika Anda menerapkan model dan ingin memperbarui bagian mana pun, atau tidak ingin model Anda dimasukkan dalam perpustakaan ini, silakan hubungi masalah Github.
Jika Anda menerapkan model dan ingin memasukkan model Anda di perpustakaan ini, silakan hubungi melalui masalah GitHub. Jika tidak, jika Anda ingin memasukkan model sendiri, lihat bagian berikut.
Untuk mengevaluasi model, pilih metrik dan gunakan metode score() dari kelas metrik.
from octis . evaluation_metrics . diversity_metrics import TopicDiversity
metric = TopicDiversity ( topk = 10 ) # Initialize metric
topic_diversity_score = metric . score ( model_output ) # Compute score of the metricMetrik Klasifikasi :
- F1-Score:
F1Score(dataset)- Precision:
PrecisionScore(dataset)- Recall:
RecallScore(dataset)- Akurasi:
AccuracyScore(dataset)
Metrik koherensi :
- Koherensi UMass:
Coherence(measure='u_mass')- Koherensi C_V:
Coherence(measure='c_v')- Koherensi UCI:
Coherence(measure='c_uci')- Koherensi NPMI:
Coherence(measure='c_npmi')- Koherensi berbasis penyematan kata berpasangan:
WECoherencePairwise()- Centroid Koherensi Berbasis Tanah Kata:
WECoherenceCentroid()
Metrik Keanekaragaman :
- Keragaman Topik:
TopicDiversity()- InvertedRBO:
InvertedRBO()- Pencocokan InvertedRBO Berbasis Tanah Kata:
WordEmbeddingsInvertedRBO()- Centroid InvertedRBO Berbasis Tanah:
WordEmbeddingsInvertedRBOCentroid()- Rasio Log Odds:
LogOddsRatio()- Divergence Kullback-Liebler:
KLDivergence()
Metrik Kesamaan :
- Tumpang tindih bias-peringkat:
RBO()- Pencocokan RBO berbasis penyematan Word:
WordEmbeddingsRBOMatch()- Centroid RBO berbasis penyematan Word:
WordEmbeddingsRBOCentroid()- Kesamaan berpasangan berbasis kata embeddings:
WordEmbeddingsPairwiseSimilarity()- Kesamaan Centroid Berbasis Word Embeddings:
WordEmbeddingsCentroidSimilarity()- Kesamaan Jumlah Tertimbang Berbasis Tanah:
WordEmbeddingsWeightedSumSimilarity()- Kesamaan Jaccard berpasangan:
PairwiseJaccardSimilarity()
Metrik Signifikansi Topik :
- KL Seragam:
KL_uniform()- Kl Vacuous:
KL_vacuous()- Latar belakang KL:
KL_background()
Model mewarisi dari kelas AbstractModel yang didefinisikan dalam octis/model/model.py. Untuk membangun model Anda sendiri, kelas Anda harus mengganti metode train_model (diri, dataset, hyperparameters) yang selalu membutuhkan setidaknya objek dataset dan kamus hyperparameters sebagai input dan harus mengembalikan kamus dengan output model sebagai output.
Untuk lebih memahami cara kerja model, mari kita lihat implementasi LDA. Langkah pertama dalam mengembangkan model kustom adalah untuk menentukan kamus nilai hyperparameters default:
hyperparameters = { 'corpus' : None , 'num_topics' : 100 , 'id2word' : None , 'alpha' : 'symmetric' ,
'eta' : None , # ...
'callbacks' : None }Mendefinisikan nilai hyperparameters default memungkinkan pengguna untuk bekerja pada subset dari mereka tanpa harus menetapkan nilai untuk setiap parameter.
Langkah berikut adalah override train_model ():
def train_model ( self , dataset , hyperparameters = {}, top_words = 10 ):Metode LDA membutuhkan dataset, kamus hyperparameters dan argumen tambahan (opsional) yang digunakan untuk memilih berapa banyak kata yang paling signifikan untuk setiap topik.
Dengan default HyperParameters, yang dalam input dan dataset Anda harus dapat menulis kode Anda sendiri dan mengembalikan sebagai output kamus dengan setidaknya 3 entri:
Jika model Anda mendukung partisi pelatihan/tes itu juga harus kembali:
Untuk mengoptimalkan model, Anda perlu memilih dataset, metrik dan ruang pencarian hyperparameters untuk dioptimalkan. Untuk jenis hyperparameter, kami menggunakan tipe scikit-optimize (https://scikit-optimize.github.io/stable/modules/space.html)
from octis . optimization . optimizer import Optimizer
from skopt . space . space import Real
# Define the search space. To see which hyperparameters to optimize, see the topic model's initialization signature
search_space = { "alpha" : Real ( low = 0.001 , high = 5.0 ), "eta" : Real ( low = 0.001 , high = 5.0 )}
# Initialize an optimizer object and start the optimization.
optimizer = Optimizer ()
optResult = optimizer . optimize ( model , dataset , eval_metric , search_space , save_path = "../results" # path to store the results
number_of_call = 30 , # number of optimization iterations
model_runs = 5 ) # number of runs of the topic model
#save the results of th optimization in a csv file
optResult . save_to_csv ( "results.csv" )Hasilnya akan memberikan nilai metrik yang paling terlihat dengan konfigurasi hyperparameter yang sesuai, dan hyperparameters dan nilai metrik untuk setiap iterasi optimasi. Untuk memvisualisasikan informasi ini, Anda harus mengatur atribut 'plot' dari Bayesian_optimization ke True.
Anda dapat menemukan lebih banyak di sini: pengoptimal readme
OCTIS mencakup antarmuka grafis yang ramah pengguna untuk membuat, memantau, dan melihat eksperimen. Mengikuti standar implementasi dataset, model dan metrik Dasbor akan secara otomatis memperbarui dan memungkinkan Anda untuk menggunakan implementasi khusus Anda sendiri.
Untuk menjalankan dasbor, Anda perlu mengkloning repo. Saat berada di direktori proyek menjalankan perintah berikut:
python OCTIS/dashboard/server.pyBrowser akan terbuka dan Anda akan diarahkan ke dasbor. Di dasbor Anda bisa:
Pekerjaan ini telah diterima di trek demo EACL 2021! Klik untuk membaca kertas! Jika Anda memutuskan untuk menggunakan sumber ini, silakan kutip:
@Inproeding {Terragni2020OCTIS,
title = {{octis}: Membandingkan dan mengoptimalkan model topik sederhana!},
Penulis = {Terragni, Silvia dan Fersini, Elisabetta dan Galuzzi, Bruno Giovanni dan Tropeano, Pietro dan Candelieri, Antonio},
tahun = {2021},
booktitle = {Prosiding Konferensi ke -16 Bab Eropa Asosiasi Linguistik Komputasi: Demonstrasi Sistem},
Bulan = APR,
tahun = "2021",
Penerbit = "Asosiasi Linguistik Komputasi",
url = "https://www.aclweb.org/anthology/2021.eAcl-demos.31",
halaman = "263--270",
}
@InprOcedings {dblp: conf/clic-it/terragnif21,
penulis = {Silvia Terragni dan Elisabetta Fersini},
Editor = {Elisabetta Fersini dan Marco Passarotti dan Viviana Patti},
title = {{octis 2.0: mengoptimalkan dan membandingkan model topik dalam bahasa Italia bahkan
Lebih sederhana!}},
booktitle = {Prosiding konferensi Italia kedelapan tentang linguistik komputasi,
CLIC-IT 2021, Milan, Italia, 26-28 Januari, 2022},
Series = {{Ceur} Proses lokakarya},
volume = {3033},
publisher = {ceur-ws.org},
tahun = {2021},
url = {http://ceur-ws.org/vol-3033/paper55.pdf},
}
Paket ini dibuat dengan cookiecutter dan templat proyek Audreyr/Cookiecutter-Pypackage. Terima kasih kepada semua pengembang yang merilis implementasi model topik mereka. Terima kasih khusus kepada Tenggaard yang membantu kami menemukan banyak bug di rilis Octis awal dan kepada Emil Rijcken yang dengan ramah menulis dua panduan tentang cara menggunakan octis :)