コンテキスト化されたトピックモデル(CTM)は、トピックモデリングをサポートするために言語の事前訓練を受けた表現(例えば、BERT)を使用するトピックモデルのファミリーです。詳細については、論文を参照してください。
私たちの新しいトピックモデリングファミリーは、多くの異なる言語(つまり、ハグFaceモデルでサポートされているもの)をサポートし、 2つのバージョンがあります。 Zeroshottmは、テストデータに単語が欠落している可能性のあるタスクの完璧なトピックモデルであり、多言語の埋め込みで訓練されている場合、多言語トピックモデルであるという特性を継承します。
大きな利点は、CTMに異なる埋め込みを使用できることです。したがって、新しい埋め込み方法が発表されたら、コードで使用して結果を改善できます。私たちはもう弓に制限されていません。
キティもあります!ループインザループ分類器を作成してドキュメントをすばやく分類し、名前付きクラスターを作成できる新しいサブモジュール。
中程度のブログ投稿を見たり、Colabチュートリアルの1つから始めたりできます。
| 名前 | リンク |
|---|---|
| WikipediaデータのTMを組み合わせた(PrepRoc+Saving+Viz)(Stable V2.3.0 ) | |
| ゼロショット横断的トピックモデリング(PREPROC+VIZ)(安定したV2.3.0 ) | |
| キティ:ループ分類器の人間(高レベルの使用)(安定したv2.2.0 ) | |
| SuperCTMおよびβ-CTM(高レベルの使用)(安定したV2.2.0 ) |
重要:CUDAを使用する場合は、分布に一致するCUDAシステムの正しいバージョンをインストールする必要があります。Pytorchを参照してください。
PIPを使用してパッケージをインストールします
pip install -U contextualized_topic_models考慮すべき重要な側面は、使用したいネットワークです。コンテキスト化された埋め込みと弓(組み合わせたもの)を組み合わせたネットワーク、または文脈化された埋め込み(Zeroshottm)を使用するものです。
ただし、ZeroshottMモデルでのみゼロショットクロスリングラのトピックモデリングを行うことができることを忘れないでください。
コンテキスト化されたトピックモデルは、監督(SuperCTM)もサポートしています。これについては、ドキュメントで詳細を読むことができます。
また、キティ:ドキュメントのループ分類でよりシンプルな人間を行うために使用できるユーティリティもあります。これは、ドキュメントフィルタリングを行うのに非常に便利です。また、横断的な設定で動作するため、知らない言語でドキュメントをフィルタリングできる場合があります。
これが便利だと思うなら、次の論文を引用することができます:)
Zeroshottm
@inproceedings {bianchi-etal-2021-cross、
title = "ゼロショット学習を備えたクロスリリングコンテキスト化されたトピックモデル"、
著者= "Bianchi、Federico and Terragni、Silvia and Hovy、Dirk and
ノッツァ、デボラ、フェルシーニ、エリザベッタ」
BookTitle = "計算言語学会協会の欧州支部の第16回会議の議事録:メインボリューム」、
月= APR、
year = "2021"、
address = "オンライン"、
Publisher = "Computational Linguisticsの協会"、
url = "https://www.aclweb.org/anthology/2021.eacl-main.143"、
pages = "1676--1683"、
}
combinedtm
@inproceedings {bianchi-etal-2021-pre、
title = "事前トレーニングはホットトピックです:コンテキスト化されたドキュメントの埋め込みはトピックの一貫性を改善します"、
著者= "bianchi、federico and
Terragni、Silvia、および
ホビー、ダーク」、
booktitle = "計算言語学会協会の第59回年次総会と第11回自然言語加工に関する共同合同会議(第2巻:ショートペーパー)の議事録」
月= 8月、
year = "2021"、
address = "オンライン"、
Publisher = "Computational Linguisticsの協会"、
url = "https://aclanthology.org/2021.acl-short.96"、
doi = "10.18653/v1/2021.acl-short.96"、
pages = "759--766"、
}
以下の例のいくつかは、多言語の埋め込みモデルのparaphrase-multilingual-mpnet-base-v2を使用しています。これは、使用する表現が誤ったものであることを意味します。ただし、言語のより広いカバレッジまたは1つの特定の言語が必要になる場合があります。ドキュメントのページを参照して、別の言語のモデルを選択する方法を確認してください。その場合、使用する完璧なモデルを見つけるためにSbertを確認できます。
ここでは、言語固有とムリンガルの詳細を読むことができます。
これらのトピックモデルがどのように機能するかをよりよく理解するには、絶対にドキュメントを見てください。
combinedtmを使用する方法は次のとおりです。これは、コンテキスト化された埋め込みも使用する標準的なトピックモデルです。 combinedtmの良いところは、トピックをより一貫性のあるものにすることです(論文https://arxiv.org/abs/2004.03974を参照)。 n_components = 50トピックの数を指定します。
from contextualized_topic_models . models . ctm import CombinedTM
from contextualized_topic_models . utils . data_preparation import TopicModelDataPreparation
from contextualized_topic_models . utils . data_preparation import bert_embeddings_from_file
qt = TopicModelDataPreparation ( "all-mpnet-base-v2" )
training_dataset = qt . fit ( text_for_contextual = list_of_unpreprocessed_documents , text_for_bow = list_of_preprocessed_documents )
ctm = CombinedTM ( bow_size = len ( qt . vocab ), contextual_size = 768 , n_components = 50 ) # 50 topics
ctm . fit ( training_dataset ) # run the model
ctm . get_topics ( 2 )高度なメモ: TMの組み合わせは、弓をStbertと組み合わせます。これは、予測されるトピックの一貫性を高めるプロセス(https://arxiv.org/pdf/2004.03974.pdf)です。
当社のZeroshottmは、ゼロショットトピックモデリングに使用できます。トレーニング段階では使用されない単語を処理できます。さらに興味深いことに、このモデルは、言語間トピックモデリングに使用できます(次のセクションを参照)!論文(https://www.aclweb.org/anthology/2021.eacl-main.143を参照してください)
from contextualized_topic_models . models . ctm import ZeroShotTM
from contextualized_topic_models . utils . data_preparation import TopicModelDataPreparation
from contextualized_topic_models . utils . data_preparation import bert_embeddings_from_file
text_for_contextual = [
"hello, this is unpreprocessed text you can give to the model" ,
"have fun with our topic model" ,
]
text_for_bow = [
"hello unpreprocessed give model" ,
"fun topic model" ,
]
qt = TopicModelDataPreparation ( "paraphrase-multilingual-mpnet-base-v2" )
training_dataset = qt . fit ( text_for_contextual = text_for_contextual , text_for_bow = text_for_bow )
ctm = ZeroShotTM ( bow_size = len ( qt . vocab ), contextual_size = 768 , n_components = 50 )
ctm . fit ( training_dataset ) # run the model
ctm . get_topics ( 2 )ご覧のとおり、テキストを処理する高レベルのAPIは非常に使いやすいです。 text_for_bertを使用して、モデルに渡されて、前処理されていないドキュメントのリストを渡す必要があります。代わりに、 text_for_bowには、弓の構築に使用される前処理されたテキストを渡す必要があります。
高度なメモ:このように、Stbertはテキスト内のすべての情報を使用して表現を生成できます。
モデルがトレーニングされたら、トピックを取得するのは非常に簡単です!
ctm . get_topics ()Transformメソッドは、モデルがトレーニングで見た単語のみを考慮することにより、対応する弓の生成など、ほとんどのことをあなたのために処理します。ただし、次のセクションでSEを使用するように、これにはゼロショットを扱うときにいくつかのバンプが付属しています。
ただし、必要に応じて埋め込みを手動でロードできます(このドキュメントの詳細な部分を参照)。
combinedtmを使用する場合は、弓のテストテキストを含める必要があります。
testing_dataset = qt . transform ( text_for_contextual = testing_text_for_contextual , text_for_bow = testing_text_for_bow )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 ) # returns a (n_documents, n_topics) matrix with the topic distribution of each documentZeroshottmを使用している場合、Testing_text_for_bowを使用する必要はありません。これは、テストドキュメントの異なるセットを使用している場合、これにより異なるサイズの弓が作成されるためです。したがって、これを行う最良の方法は、Contexualモデルへの入力で指定されるテキストのみを渡すことです。
testing_dataset = qt . transform ( text_for_contextual = testing_text_for_contextual )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 )Zeroshottmモデルを多言語の埋め込みでトレーニングしたら、この単純なパイプラインを使用して、異なる言語のドキュメントのトピックを予測できます(この言語がParaphrase-Multilingual-Mpnet-Base-V2でカバーされている限り)。
# here we have a Spanish document
testing_text_for_contextual = [
"hola, bienvenido" ,
]
# since we are doing multilingual topic modeling, we do not need the BoW in
# ZeroShotTM when doing cross-lingual experiments (it does not make sense, since we trained with an english Bow
# to use the spanish BoW)
testing_dataset = qt . transform ( testing_text_for_contextual )
# n_sample how many times to sample the distribution (see the doc)
ctm . get_doc_topic_distribution ( testing_dataset , n_samples = 20 ) # returns a (n_documents, n_topics) matrix with the topic distribution of each document高度なメモ:スペイン語の袋を渡す必要はありません:2つの言語の言葉の袋は匹敵しません!互換性の理由でそれをモデルに渡していますが、モデルの出力(つまり、訓練された言語の予測弓)を取得し、テスト言語の出力と比較することはできません。
プリプロセシングパイプラインを実行するには、簡単なスクリプトが必要ですか?私たちはあなたをカバーしました!ドキュメントをロードしてから、SimplePreprocessingクラスを使用します。まれな単語を自動的にフィルタリングし、トレーニング後に空のドキュメントを削除します。プリプロースメソッドは、前処理されたドキュメントと未処理のドキュメントを返します。私たちは一般に、バートのために未処理の未処理と、単語の袋のために前処理されたものを使用します。
from contextualized_topic_models . utils . preprocessing import WhiteSpacePreprocessing
documents = [ line . strip () for line in open ( "unpreprocessed_documents.txt" ). readlines ()]
sp = WhiteSpacePreprocessing ( documents , "english" )
preprocessed_documents , unpreprocessed_corpus , vocab , retained_indices = sp . preprocess ()カスタム埋め込みがあり、それらをより速い結果のために使用したいですか?キティに渡してください!
from contextualized_topic_models . models . kitty_classifier import Kitty
import numpy as np
# read the training data
training_data = list ( map ( lambda x : x . strip (), open ( "train_data" ). readlines ()))
custom_embeddings = np . load ( 'custom_embeddings.npy' )
kt = Kitty ()
kt . train ( training_data , custom_embeddings = custom_embeddings , stopwords_list = [ "stopwords" ])
print ( kt . pretty_print_word_classes ())注:カスタム埋め込みはnumpy.arraysである必要があります。
このパッケージは、cookeiecutterとaudreyr/cookeiecutter-packageプロジェクトテンプレートで作成されました。ライブラリの使用を容易にするために、RBOパッケージも含まれています。すべての権利は、そのパッケージの著者に予約されています。
これは研究ツールであることを忘れないでください:)