Kontextualisierte Themenmodelle (CTM) sind eine Familie von Themenmodellen, die vorgeschriebene Darstellungen der Sprache (z. B. Bert) verwenden, um die Themenmodellierung zu unterstützen. Einzelheiten finden Sie in den Papieren:
Unsere neue Themenmodellierungsfamilie unterstützt viele verschiedene Sprachen (dh derjenige, der durch Umarmungsface -Modelle unterstützt wird) und wird in zwei Versionen erhältlich: CombinedTM kombiniert kontextbezogene Einbettungen mit der guten alten Wörterbeutel, um kohärentere Themen zu machen. Zeroshottm ist das perfekte Themenmodell für die Aufgabe, bei der Sie möglicherweise Wörter in den Testdaten haben und, wenn Sie mit mehrsprachigen Einbettungen trainiert werden, die Eigenschaft, ein mehrsprachiges Themenmodell zu sein, erbt!
Der große Vorteil ist, dass Sie verschiedene Einbettungen für CTMs verwenden können. Wenn eine neue Einbettungsmethode herauskommt, können Sie sie im Code verwenden und Ihre Ergebnisse verbessern. Wir sind nicht mehr durch den Bogen eingeschränkt.
Wir haben auch Kitty! Ein neues Submodul, mit dem ein Klassifizierer des Menschen in den Schleifen erstellt werden kann, um Ihre Dokumente schnell zu klassifizieren und benannte Cluster zu erstellen.
Sie können sich unseren mittleren Blog -Beitrag ansehen oder aus einem unserer Colab -Tutorials beginnen:
| Name | Link |
|---|---|
| Kombinierte TM auf Wikipedia -Daten (Preproc+Saving+VIZ) (stabiler v2.3.0 ) | |
| Zero-Shot Cross-Lingual Topic Modeling (Preproc+Viz) (stabiler v2.3.0 ) | |
| Kitty: Mensch im Schleifenklassifizierer (Nutzung auf hoher Ebene) (stabiler v2.2.0 ) | |
| Superctm und β-CTM (Nutzung auf hoher Ebene) (stabiler v2.2.0 ) |
Wichtig : Wenn Sie CUDA verwenden möchten, müssen Sie die richtige Version der CUDA -Systeme installieren, die Ihrer Verteilung entsprechen. Siehe Pytorch.
Installieren Sie das Paket mit PIP
pip install -U contextualized_topic_modelsEin wichtiger Aspekt ist zu berücksichtigen, welches Netzwerk Sie verwenden möchten: denjenige, der kontextualisierte Einbettungen und den Bogen (kombiniert) kombiniert oder der nur kontextualisierte Einbettungen (Zeroshottm) verwendet
Denken Sie jedoch daran, dass Sie mit dem Zeroshottm-Modell nur mit dem Zeroshottm-Modell auf Zero-Shot-Thema modellieren können.
Kontextualisierte Themenmodelle unterstützen auch die Überwachung (SuperCTM). Weitere Informationen zu der Dokumentation finden Sie in der Dokumentation.
Wir haben auch Kitty: ein Dienstprogramm, mit dem Sie einen einfacheren Menschen in der Schleifenklassifizierung Ihrer Dokumente durchführen können. Dies kann sehr nützlich sein, um eine Dokumentfilterung durchzuführen. Es funktioniert auch in der lingenden Umgebung und Sie können daher möglicherweise Dokumente in einer Sprache filtern, die Sie nicht kennen!
Wenn Sie dies nützlich finden, können Sie die folgenden Papiere zitieren :)
Zeroshottm
@InProceedings {Bianchi-Detal-2021-Cross, Cross, Cross, Cross, Cross,
title = "Cross-lingual kontextualisierte Themenmodelle mit Null-Shot-Lernen",
Autor = "Bianchi, Federico und Terragni, Silvia und Hovy, Dirk und
Nozza, Debora und Fersini, Elisabetta ",
boottitle = "Proceedings der 16. Konferenz des Europäischen Kapitels des Verbandes für Computerlinguistik: Hauptvolumen",
Monat = APR,
Jahr = "2021",
Adresse = "Online",
Publisher = "Assoziation für Computer -Linguistik",
url = "https://www.aclweb.org/anthology/2021.eaccl-main.143",
Seiten = "1676-1683",
}
Kombiniert
@Inproceedings {Bianchi-Detal-2021-Pre,
title = "Pre-Training ist ein heißes Thema: Kontextualisierte Dokumenteinbettungen verbessern die Thema Kohärenz",
Autor = "Bianchi, Federico und
Terragni, Silvia und
Hovy, Dirk ",
boottitle = "Proceedings der 59. Jahrestagung des Vereins für Computerlinguistik und der 11. Internationalen gemeinsamen Konferenz zur Verarbeitung natürlicher Sprache (Band 2: Short Papers)", ",", ",", ",", ",", "
Monat = Aug,,
Jahr = "2021",
Adresse = "Online",
Publisher = "Assoziation für Computer -Linguistik",
url = "https://aclanthology.org/2021.acl-short.96",
doi = "10.18653/v1/2021.acl-Short.96",
Seiten = "759-766",
}
Einige der folgenden Beispiele verwenden ein mehrsprachiges Einbettungsmodell paraphrase-multilingual-mpnet-base-v2 . Dies bedeutet, dass die Darstellungen, die Sie verwenden werden, verstümmelt sind. Möglicherweise benötigen Sie jedoch eine breitere Berichterstattung über Sprachen oder nur eine bestimmte Sprache. Weitere Informationen finden Sie in der Seite in der Dokumentation, wie Sie ein Modell für eine andere Sprache auswählen. In diesem Fall können Sie Sbert überprüfen, um das perfekte Modell zu finden.
Hier können Sie mehr über sprachspezifische und mulitlinguale Lesen lesen.
Sie sollten sich auf jeden Fall die Dokumentation ansehen, um besser zu verstehen, wie diese Themenmodelle funktionieren.
So können Sie das kombinierte Tile verwenden. Dies ist ein Standard -Themenmodell, das auch kontextualisierte Einbettungen verwendet. Das Gute an CombinedTM ist, dass es Ihr Thema viel kohärenter macht (siehe Papier https://arxiv.org/abs/2004.03974). n_components = 50 Gibt die Anzahl der Themen an.
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 )Erweiterte Anmerkungen: Kombinierter TM kombiniert den Bogen mit Sbert, ein Prozess, der die Kohärenz der vorhergesagten Themen zu erhöhen scheint (https://arxiv.org/pdf/2004.03974.pdf).
Unser Zeroshottm kann zur Modellierung von Null-Shot-Thema verwendet werden. Es kann mit Wörtern umgehen, die während der Trainingsphase nicht verwendet werden. Interessanterweise kann dieses Modell für die modellübergreifende modellübergreifende Thema verwendet werden (siehe nächste Abschnitte)! Siehe das Papier (https://www.aclweb.org/anthology/2021.eaccl-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 )Wie Sie sehen können, ist die hochrangige API für den Text ziemlich einfach zu bedienen. text_for_bert sollte verwendet werden, um an das Modell eine Liste von Dokumenten weiterzugeben, die nicht vorverarbeitet werden. Stattdessen sollten Sie zu text_for_bow den vorverarbeiteten Text übergeben, der zum Erstellen des Bogens verwendet wird.
Erweiterte Notizen: Auf diese Weise kann Sbert alle Informationen im Text verwenden, um die Darstellungen zu generieren.
Sobald das Modell trainiert ist, ist es sehr einfach, die Themen zu bekommen!
ctm . get_topics ()Die Transformationsmethode kümmert sich um die meisten Dinge für Sie, zum Beispiel die Erzeugung eines entsprechenden Bogens, indem Sie nur die Wörter betrachten, die das Modell im Training gesehen hat. Dies kommt jedoch mit einigen Unebenheiten im Umgang mit dem Zeroshottm, wie wir es im nächsten Abschnitt sehen werden.
Sie können jedoch die Einbettungen manuell laden, wenn Sie möchten (siehe den erweiterten Teil dieser Dokumentation).
Wenn Sie CombinedTM verwenden, müssen Sie den Testtext für den Bogen einfügen:
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 documentWenn Sie Zeroshottm verwenden, müssen Sie nicht das testing_text_for_bow verwenden, da Sie, wenn Sie einen anderen Satz von Testdokumenten verwenden, einen Bug einer anderen Größe erzeugt. Der beste Weg, dies zu tun, besteht darin, nur den Text zu übergeben, der in der Eingabe an das kontexuelle Modell angegeben wird:
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 )Sobald Sie das Zeroshottm-Modell mit mehrsprachigen Einbettungen trainiert haben, können Sie diese einfache Pipeline verwenden, um die Themen für Dokumente in einer anderen Sprache vorherzusagen (solange diese Sprache durch Paraphrase-Multivingual-MPNET-Base-V2 abgedeckt wird).
# 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 documentErweiterte Notizen: Wir müssen nicht die spanische Tüte mit Wort bestehen: Die Sack mit den Worten der beiden Sprachen wird nicht vergleichbar sein! Wir geben es aus Kompatibilitätsgründen an das Modell weiter, aber Sie können die Ausgabe des Modells (dh den vorhergesagten Bogen der geschulten Sprache) nicht erhalten und es mit der Testsprache vergleichen.
Benötigen Sie ein kurzes Skript, um die Vorverarbeitungspipeline auszuführen? Wir haben dich bedeckt! Laden Sie Ihre Dokumente und verwenden Sie dann unsere SimpleProcessing -Klasse. Es wird automatisch seltene Wörter filtern und Dokumente entfernen, die nach dem Training leer sind. Die Vorverarbeitungsmethode gibt die vorverarbeiteten und die nichtverarbeiteten Dokumente zurück. Wir verwenden im Allgemeinen die für Bert und die Vorverarbeitung für die Sack of Word.
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 ()Haben Sie benutzerdefinierte Einbettungen und möchten sie für schnellere Ergebnisse verwenden? Gib sie einfach Kitty!
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 ())HINWEIS: Benutzerdefinierte Einbettungen müssen numpy.Arrays sein.
Dieses Paket wurde mit CookieCutter und der Project-Vorlage von Audreyr/CookieCutter-Pypackage erstellt. Um die Verwendung der Bibliothek zu erleichtern, haben wir auch das RBO -Paket aufgenommen, alle Rechte, die dem Autor dieses Pakets vorbehalten sind.
Denken Sie daran, dass dies ein Forschungsinstrument ist :)