Gensim - Transformationen
Dieses Kapitel hilft Ihnen dabei, die verschiedenen Transformationen in Gensim kennenzulernen. Beginnen wir mit dem Verständnis der transformierenden Dokumente.
Dokumente transformieren
Dokumente transformieren bedeutet, das Dokument so darzustellen, dass das Dokument mathematisch bearbeitet werden kann. Neben der Ableitung der latenten Struktur des Korpus dient die Transformation von Dokumenten auch den folgenden Zielen:
Es entdeckt die Beziehung zwischen Wörtern.
Es bringt die verborgene Struktur im Korpus zum Vorschein.
Es beschreibt die Dokumente auf eine neue und semantischere Weise.
Dadurch wird die Darstellung der Dokumente kompakter.
Dies verbessert die Effizienz, da neue Darstellungen weniger Ressourcen verbrauchen.
Dies verbessert die Wirksamkeit, da in neuen Darstellungen Randdatentrends ignoriert werden.
Das Rauschen wird auch bei der Darstellung neuer Dokumente reduziert.
Sehen wir uns die Implementierungsschritte zum Transformieren der Dokumente von einer Vektorraumdarstellung in eine andere an.
Implementierungsschritte
Um Dokumente zu transformieren, müssen wir die folgenden Schritte ausführen:
Schritt 1: Erstellen des Korpus
Der allererste und grundlegende Schritt besteht darin, den Korpus aus den Dokumenten zu erstellen. Wir haben den Korpus bereits in früheren Beispielen erstellt. Lassen Sie uns ein weiteres mit einigen Verbesserungen erstellen (Entfernen allgemeiner Wörter und der Wörter, die nur einmal vorkommen) -
import gensim
import pprint
from collections import defaultdict
from gensim import corpora
Stellen Sie nun die Dokumente zum Erstellen des Korpus bereit -
t_corpus = ["CNTK, früher bekannt als Computational Network Toolkit", "ist ein kostenloses, benutzerfreundliches Open-Source-Toolkit für kommerzielle Zwecke", "mit dem wir Deep-Learning-Algorithmen trainieren können, um wie das menschliche Gehirn zu lernen.", " Das kostenlose Tutorial finden Sie auf tutorialspoint.com "," Tutorialspoint.com bietet auch die besten technischen Tutorials zu Technologien wie AI Deep Learning Machine Learning kostenlos "]
Als nächstes müssen wir Tokenise machen und zusammen damit werden wir auch die gebräuchlichen Wörter entfernen -
stoplist = set('for a of the and to in'.split(' '))
processed_corpus = [
[
word for word in document.lower().split() if word not in stoplist
]
for document in t_corpus
]
Das folgende Skript entfernt nur die Wörter, die angezeigt werden -
frequency = defaultdict(int)
for text in processed_corpus:
for token in text:
frequency[token] += 1
processed_corpus = [
[token for token in text if frequency[token] > 1]
for text in processed_corpus
]
pprint.pprint(processed_corpus)
Ausgabe
[
['toolkit'],
['free', 'toolkit'],
['deep', 'learning', 'like'],
['free', 'on', 'tutorialspoint.com'],
['tutorialspoint.com', 'on', 'like', 'deep', 'learning', 'learning', 'free']
]
Jetzt gib es an die corpora.dictionary() Objekt, um die einzigartigen Objekte in unserem Korpus zu erhalten -
dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)
Ausgabe
Dictionary(7 unique tokens: ['toolkit', 'free', 'deep', 'learning', 'like']...)
Als nächstes erstellt die folgende Codezeile das Bag of Word-Modell für unseren Korpus -
BoW_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(BoW_corpus)
Ausgabe
[
[(0, 1)],
[(0, 1), (1, 1)],
[(2, 1), (3, 1), (4, 1)],
[(1, 1), (5, 1), (6, 1)],
[(1, 1), (2, 1), (3, 2), (4, 1), (5, 1), (6, 1)]
]
Schritt 2: Erstellen einer Transformation
Die Transformationen sind einige Standard-Python-Objekte. Wir können diese Transformationen, dh Python-Objekte, mithilfe eines trainierten Korpus initialisieren. Hier werden wir verwendentf-idf Modell, um eine Transformation unseres trainierten Korpus zu schaffen, dh BoW_corpus.
Zuerst müssen wir das Modellpaket von gensim importieren.
from gensim import models
Jetzt müssen wir das Modell wie folgt initialisieren:
tfidf = models.TfidfModel(BoW_corpus)
Schritt 3: Transformieren von Vektoren
In diesem letzten Schritt werden die Vektoren von der alten Darstellung in die neue Darstellung konvertiert. Da wir das tfidf-Modell im obigen Schritt initialisiert haben, wird das tfidf nun als schreibgeschütztes Objekt behandelt. Hier konvertieren wir mit diesem tfidf-Objekt unseren Vektor von einer Tasche mit Wortdarstellung (alte Darstellung) in Tfidf-Realwertgewichte (neue Darstellung).
doc_BoW = [(1,1),(3,1)]
print(tfidf[doc_BoW]
Ausgabe
[(1, 0.4869354917707381), (3, 0.8734379353188121)]
Wir haben die Transformation auf zwei Korpuswerte angewendet, können sie aber auch wie folgt auf den gesamten Korpus anwenden:
corpus_tfidf = tfidf[BoW_corpus]
for doc in corpus_tfidf:
print(doc)
Ausgabe
[(0, 1.0)]
[(0, 0.8734379353188121), (1, 0.4869354917707381)]
[(2, 0.5773502691896257), (3, 0.5773502691896257), (4, 0.5773502691896257)]
[(1, 0.3667400603126873), (5, 0.657838022678017), (6, 0.657838022678017)]
[
(1, 0.19338287240886842), (2, 0.34687949360312714), (3, 0.6937589872062543),
(4, 0.34687949360312714), (5, 0.34687949360312714), (6, 0.34687949360312714)
]
Vollständiges Implementierungsbeispiel
import gensim
import pprint
from collections import defaultdict
from gensim import corpora
t_corpus = [
"CNTK formerly known as Computational Network Toolkit",
"is a free easy-to-use open-source commercial-grade toolkit",
"that enable us to train deep learning algorithms to learn like the human brain.",
"You can find its free tutorial on tutorialspoint.com",
"Tutorialspoint.com also provide best technical tutorials on
technologies like AI deep learning machine learning for free"
]
stoplist = set('for a of the and to in'.split(' '))
processed_corpus = [
[word for word in document.lower().split() if word not in stoplist]
for document in t_corpus
]
frequency = defaultdict(int)
for text in processed_corpus:
for token in text:
frequency[token] += 1
processed_corpus = [
[token for token in text if frequency[token] > 1]
for text in processed_corpus
]
pprint.pprint(processed_corpus)
dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)
BoW_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(BoW_corpus)
from gensim import models
tfidf = models.TfidfModel(BoW_corpus)
doc_BoW = [(1,1),(3,1)]
print(tfidf[doc_BoW])
corpus_tfidf = tfidf[BoW_corpus]
for doc in corpus_tfidf:
print(doc)
Verschiedene Transformationen in Gensim
Mit Gensim können wir verschiedene gängige Transformationen implementieren, dh Vector Space Model-Algorithmen. Einige von ihnen sind wie folgt -
Tf-Idf (Term Frequenz-Inverse Dokumentfrequenz)
Während der Initialisierung erwartet dieser tf-idf-Modellalgorithmus einen Trainingskorpus mit ganzzahligen Werten (wie das Bag-of-Words-Modell). Danach nimmt es zum Zeitpunkt der Transformation eine Vektordarstellung und gibt eine andere Vektordarstellung zurück.
Der Ausgabevektor hat die gleiche Dimensionalität, aber der Wert der seltenen Merkmale (zum Zeitpunkt des Trainings) wird erhöht. Grundsätzlich werden Vektoren mit ganzzahligen Werten in Vektoren mit reellen Werten konvertiert. Es folgt die Syntax der Tf-idf-Transformation -
Model=models.TfidfModel(corpus, normalize=True)
LSI (Latent Semantic Indexing)
Der LSI-Modellalgorithmus kann Dokumente entweder aus einem ganzzahligen Vektormodell (z. B. einem Bag-of-Words-Modell) oder einem Tf-Idf-gewichteten Raum in einen latenten Raum umwandeln. Der Ausgabevektor hat eine geringere Dimensionalität. Es folgt die Syntax der LSI-Transformation:
Model=models.LsiModel(tfidf_corpus, id2word=dictionary, num_topics=300)
LDA (Latent Dirichlet Allocation)
Der LDA-Modellalgorithmus ist ein weiterer Algorithmus, der Dokumente aus dem Bag-of-Words-Modellraum in einen Themenraum umwandelt. Der Ausgabevektor hat eine geringere Dimensionalität. Es folgt die Syntax der LSI-Transformation:
Model=models.LdaModel(corpus, id2word=dictionary, num_topics=100)
Zufällige Projektionen (RP)
RP, ein sehr effizienter Ansatz, zielt darauf ab, die Dimensionalität des Vektorraums zu reduzieren. Dieser Ansatz entspricht im Wesentlichen den Tf-Idf-Abständen zwischen den Dokumenten. Dies geschieht durch ein wenig Zufälligkeit.
Model=models.RpModel(tfidf_corpus, num_topics=500)
Hierarchischer Dirichlet-Prozess (HDP)
HDP ist eine nicht parametrische Bayes'sche Methode, die neu in Gensim ist. Wir sollten vorsichtig sein müssen, wenn wir es benutzen.
Model=models.HdpModel(corpus, id2word=dictionary