
Octis(トピックモデルの最適化と比較は簡単です)は、トピックモデルのトレーニング、分析、比較を目的としています。トピックモデルの最適なハイパーパラメーターは、ベイジアン最適化アプローチによって推定されます。この作業は、EACL2021のデモトラックに受け入れられています。クリックして論文を読んでください!
目次
次のコマンドでOctisをインストールできます。
ピップインストールオクティス
要件を要件を見つけることができます。txtファイル。
Octisの使用方法を簡単に理解するために、チュートリアルを試してみてください:)
| 名前 | リンク |
|---|---|
| トピックモデルを構築して結果を評価する方法(20NewsGroupsのLDA) | |
| 神経トピックモデルのハイパーパラメーターを最適化する方法(M10のCTM) |
実用的な例でOCTIを使用する方法に関する2つのガイド:
歌の歌詞のトピックモデリングに関するチュートリアル:
次のように、すでに前処理されたデータセットの1つをロードするには:
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . fetch_dataset ( "20NewsGroup" )以下にリストされているデータセット名のいずれかを使用してください。注:ケースセンシティブです!
| Octisの名前 | ソース | #docs | #単語 | #ラベル | 言語 |
|---|---|---|---|---|---|
| 20NewsGroup | 20NewsGroup | 16309 | 1612 | 20 | 英語 |
| BBC_NEWS | BBC-NEWS | 2225 | 2949 | 5 | 英語 |
| DBLP | DBLP | 54595 | 1513 | 4 | 英語 |
| M10 | M10 | 8355 | 1696 | 10 | 英語 |
| dbpedia_it | dbpedia_it | 4251 | 2047 | 5 | イタリア語 |
| Europarl_it | Europarl_it | 3613 | 2000 | Na | イタリア語 |
それ以外の場合は、次の方法でカスタム前処理されたデータセットをロードできます。
from octis . dataset . dataset import Dataset
dataset = Dataset ()
dataset . load_custom_dataset_from_folder ( "../path/to/the/dataset/folder" )パーティションは、トレーニングパーティションの「トレーニング」、パーティションのテストのテスト「テスト」、または検証パーティションの「VAL」にすることができます。データセットの例は、sample_datasetにあります。
TensorflowデータセットとHuggingfaceのNLPライブラリと同様に、パブリックデータセットをダウンロードして準備しました。これらのデータセットをホストまたは配布したり、品質や公平性を保証したり、データセットを使用するライセンスがあると主張したりしません。データセットのライセンスに基づいてデータセットを使用する許可があるかどうかを判断し、データセットの適切な所有者を引用するのはあなたの責任です。
あなたがデータセットの所有者であり、その一部を更新したい場合、またはこのライブラリにデータセットを含めることを望まない場合は、GitHubの問題をご連絡ください。
あなたがデータセットの所有者であり、このライブラリにデータセットを含めることを希望する場合は、githubの問題を介して連絡してください。
データセットを事前に処理するには、プリプロセシングクラスをインポートし、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' )前処理の詳細については、例フォルダーのプリプロセシングデモの例を参照してください。
モデルを構築するには、プリプロセッシングされたデータセットをロードし、モデルのハイパーパラメーターを設定し、 train_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 modelデータセットが分割されている場合、次のことができます。
| 名前 | 実装 |
|---|---|
| CTM(Bianchi etal。2021) | https://github.com/milanlproc/contextualized-topic-models |
| ETM(Dieng etal。2020) | https://github.com/adjidieng/etm |
| HDP(Blei etal。2004) | https://radimrehurek.com/gensim/ |
| LDA(Blei etal。2003) | https://radimrehurek.com/gensim/ |
| LSI(Landauer etal。1998) | https://radimrehurek.com/gensim/ |
| NMF(Lee and Seung2000) | https://radimrehurek.com/gensim/ |
| Neurallda(Srivastava and Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
| Prodlda(Srivastava and Sutton 2017) | https://github.com/estebandito22/pytorchavitm |
これらの実装のいずれかを使用する場合は、必ず適切な論文を引用してください。
モデルを実装して、その一部を更新したい場合、またはモデルをこのライブラリに含めることを望まない場合は、GitHubの問題をご連絡ください。
モデルを実装し、このライブラリにモデルを含めることを希望する場合は、GitHubの問題を介してご連絡ください。それ以外の場合は、自分でモデルを含めたい場合は、次のセクションを参照してください。
モデルを評価するには、メトリックを選択し、メトリッククラスのscore()メソッドを使用します。
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 metric分類メトリック:
- F1スコア:
F1Score(dataset)- 精度:
PrecisionScore(dataset)- リコール:
RecallScore(dataset)- 精度:
AccuracyScore(dataset)
コヒーレンスメトリック:
- umassコヒーレンス:
Coherence(measure='u_mass')- C_Vコヒーレンス:
Coherence(measure='c_v')- UCIコヒーレンス:
Coherence(measure='c_uci')- npmiコヒーレンス:
Coherence(measure='c_npmi')- 単語埋め込みベースのコヒーレンスペアワイズ:
WECoherencePairwise()- 単語埋め込みベースのコヒーレンス重心:
WECoherenceCentroid()
多様性メトリック:
- トピックの多様性:
TopicDiversity()- invertedrbo:
InvertedRBO()- 単語埋め込みベースのinvertedrboマッチ:
WordEmbeddingsInvertedRBO()- 単語埋め込みベースのInvertedrbo Centroid:
WordEmbeddingsInvertedRBOCentroid()- ログオッズ比:
LogOddsRatio()- Kullback-Liebler Divergence:
KLDivergence()
類似性メトリック:
- ランク付けされたバイアスオーバーラップ:
RBO()- Word EmbeddingベースのRBOマッチ:
WordEmbeddingsRBOMatch()- Word EmbeddingベースのRBO Centroid:
WordEmbeddingsRBOCentroid()- 単語埋め込みベースのペアワイズの類似性:
WordEmbeddingsPairwiseSimilarity()- 単語埋め込みベースの重心の類似性:
WordEmbeddingsCentroidSimilarity()- Word Embeddingsベースの加重合計類似性:
WordEmbeddingsWeightedSumSimilarity()- ペアワイズジャッカードの類似性:
PairwiseJaccardSimilarity()
トピックの重要性メトリック:
- Klユニフォーム:
KL_uniform()- kl虚偽:
KL_vacuous()- klの背景:
KL_background()
モデルは、Octis/models/model.pyで定義されているクラスAbstractModelから継承します。独自のモデルを構築するには、クラスがtrain_model(self、dataset、hyperparameters)メソッドをオーバーライドする必要があります。これらのメソッドは、少なくともデータセットオブジェクトとハイパーパラメーターの辞書を入力として必要とし、モデルの出力を出力として辞書を返す必要があります。
モデルがどのように機能するかをよりよく理解するには、LDAの実装を見てみましょう。カスタムモデルを開発する最初のステップは、デフォルトのハイパーパラメーター値の辞書を定義することです。
hyperparameters = { 'corpus' : None , 'num_topics' : 100 , 'id2word' : None , 'alpha' : 'symmetric' ,
'eta' : None , # ...
'callbacks' : None }デフォルトのハイパーパラメーター値を定義することで、ユーザーは各パラメーターに値を割り当てることなく、それらのサブセットで作業することができます。
次のステップは、train_model()オーバーライドです。
def train_model ( self , dataset , hyperparameters = {}, top_words = 10 ):LDAメソッドには、データセット、HyperParameters Dictionary、および各トピックの最も重要な単語トラックの数を選択するために使用される追加(オプションの)引数が必要です。
ハイパーパラメーターのデフォルトを使用すると、入力のデフォルトとデータセットがあります。独自のコードを書き込み、少なくとも3つのエントリを持つ辞書の出力として返すことができます。
モデルがトレーニング/テストパーティションをサポートしている場合、それも返す必要があります。
モデルを最適化するには、データセット、メトリック、および最適化するハイパーパラメーターの検索スペースを選択する必要があります。ハイパーパラメーターのタイプには、 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" )結果は、対応するハイパーパラメーター構成と、最適化の各反復のハイパーパラメーターとメトリック値を使用して、メトリックの最適な値を提供します。この情報を視覚化するには、Bayesian_optimizationの「プロット」属性をTrueに設定する必要があります。
詳細については、Optimizer ReadMeをご覧ください
Octisには、実験を作成、監視、表示するためのユーザーフレンドリーなグラフィカルインターフェイスが含まれています。データセット、モデル、メトリックの実装標準に従って、ダッシュボードは自動的に更新され、独自のカスタム実装を使用できます。
ダッシュボードを実行するには、リポジトリをクローンする必要があります。プロジェクトディレクトリで次のコマンドを実行しています。
python OCTIS/dashboard/server.pyブラウザが開き、ダッシュボードにリダイレクトされます。ダッシュボードでは:
この作業は、EACL 2021のデモトラックで受け入れられています!クリックして論文を読んでください!このリソースを使用することにした場合は、引用してください。
@inproceedings {terragni2020octis、
title = {{Octis}:トピックモデルの比較と最適化は簡単です!}、
著者= {Terragni、Silvia and Fersini、Elisabetta and Galuzzi、Bruno GiovanniとTropeano、Pietro and Candelieri、Antonio}、
年= {2021}、
BookTitle = {計算言語学会協会の欧州支部の第16回会議の議事録:システムデモンストレーション}、
月= APR、
year = "2021"、
Publisher = "Computational Linguisticsの協会"、
url = "https://www.aclweb.org/anthology/2021.eacl-demos.31"、
pages = "263--270"、
}
@inproceedings {dblp:conf/clic-it/terragnif21、
著者= {Silvia TerragniとElisabetta Fersini}、
編集者= {Elisabetta FersiniとMarco PassarottiとViviana Patti}
title = {{octis 2.0:イタリア語のトピックモデルの最適化と比較
よりシンプル!}}、
booktitle = {計算言語学に関する第8回イタリア会議の議事録、
Clic-it 2021、ミラノ、イタリア、1月26〜28日、2022年}、
シリーズ= {{ceur}ワークショップの議事録}、
volume = {3033}、
Publisher = {ceur-ws.org}、
年= {2021}、
url = {http://ceur-ws.org/vol-3033/paper55.pdf}、
}
このパッケージは、cookeiecutterとaudreyr/cookeiecutter-packageプロジェクトテンプレートで作成されました。トピックモデルの実装をリリースしたすべての開発者に感謝します。初期のオクティスリリースで多くのバグを見つけるのを手伝ってくれたTenggaardと、Octisの使用方法について2つのガイドを書いたEmil Rijckenに感謝します:)