[PYTHON] [gensim] Verwendung von Doc2Vec

Es wird normalerweise offiziell von Gensim geschrieben, aber es gibt nicht viele japanische Materialien, deshalb fasse ich die grundlegenden zusammen, die ich oft für Anfänger verwende.

Vorbereitung (Installation)

pip install gensim

Bildung von Trainingsdaten

Der Schreibstil ist je nach Standort unterschiedlich, aber ich persönlich bin mit diesem Schreibstil ruhig

#coding: UTF-8
from gensim.models.doc2vec import Doc2Vec
from gensim.models.doc2vec import TaggedDocument

f = open('Trainingsdaten.txt','r')#Textdaten, die Wörter durch Leerzeichen und Dokumente mit Zeilenumbrüchen trennen

#Teilen Sie jedes Dokument in Wörter und fügen Sie sie in die Liste ein[([Wort 1,Wort 2,Wort 3],Dokument Identifikation),...]Ein solches Bild
#Wörter: Liste der im Dokument enthaltenen Wörter (mit doppelten Wörtern)
#Tags: Dokumentkennung (in einer Liste angegeben. Einem Dokument können mehrere Tags hinzugefügt werden.)
trainings = [TaggedDocument(words = data.split(),tags = [i]) for i,data in enumerate(f)]

Übrigens habe ich diesmal die Daten von 12 Millionen Bewertungen von Reading Meter gelernt. Gesammelt durch Schleichen und Schaben. Da es 1 GB überschreitet, ist es je nach PC ziemlich schwierig, auf den Speicher zuzugreifen

Modelllernen

#Training (später Parameter)
m = Doc2Vec(documents= trainings, dm = 1, size=300, window=8, min_count=10, workers=4)

#Modell speichern
m.save("model/doc2vec.model")

#Modell laden(Wenn Sie ein Modell haben, können Sie hier beginnen)
m = Doc2Vec.load('model/doc2vec2.model')

Beachten Sie, dass es je nach Größe der Trainingsdaten lange dauern kann.

Häufig verwendete Funktionen

Überprüfen Sie die Lerndokumente, die einen hohen Grad an Ähnlichkeit mit dem Dokument mit der angegebenen ID aufweisen.

#Das Argument ist die Dokument-ID
print m.docvecs.most_similar(0)

#Gibt eine Reihe von Top-10-Dokument-IDs und Ähnlichkeiten zurück, die Dokument 0 ähneln
>> [(55893, 0.6868613362312317), (85550, 0.6866280436515808), (80831, 0.6864551305770874), (61463, 0.6863148212432861), (72602, 0.6847503185272217), (56876, 0.6835699081420898), (80847, 0.6832736134529114), (92838, 0.6829516291618347), (24495, 0.6820268630981445), (45589, 0.679581880569458)]

Untersuchen Sie die Ähnlichkeit zwischen beliebigen Dokumenten

print m.docvecs.similarity(1,307)
#Ähnlichkeit zwischen Dokument 1 und Dokument 307
>> 0.279532733106

Verwenden Sie das trainierte Modell, um die Ähnlichkeit zwischen neu erteilten Dokumenten herauszufinden

#Versuchen Sie beispielsweise, die Ähnlichkeit einiger Kombinationen der folgenden vier neuen Dokumente zu berechnen.
doc_words1 = ["letzte", "Einsatz" ,"früh" ,"andere" ,"die Arbeit", "Einschlag", "erhalten" ,"Hinter dem Rücken" ,"Tsukuri", "Trick" ,"Jedes Mal" ,"Ding", "Nimm deine Mütze ab", "Machen", "Lesen", "Billig" ,"Mich" ,"Geheimnis"]
doc_words2 = [ "Initiationsliebe", "Ähnlich" ,"letzte", "Ein paar Zeilen", "Komm nicht zurück", "Gehen", "Zeit", "Zeit", "verschiedene", "Szene", "Machen" ,"Sein", "Versteckte Linie" ,"Streuen", "らSein" ,"Ist", "Ding", "beachten"]
doc_words3 = ["letzte", "Einsatz" ,"früh" ,"andere" ,"die Arbeit", "Einschlag", "erhalten" ,"Hinter dem Rücken" ,"Tsukuri","Geheimnis"]
doc_words4 = ["Einzigartig", "Sicht der Welt", "Jeden Tag" ,"Verlassen","Beruhigen","Zeit","Lesen","Buch"]

print "1-2 sim"
sim_value = m.docvecs.similarity_unseen_docs(m, doc_words1, doc_words2, alpha=1, min_alpha=0.0001, steps=5)
print sim_value

print "1-3 sim"
print m.docvecs.similarity_unseen_docs(m, doc_words1, doc_words3, alpha=1, min_alpha=0.0001, steps=5)

print "1-4 sim"
print m.docvecs.similarity_unseen_docs(m, doc_words1, doc_words4, alpha=1, min_alpha=0.0001, steps=5)

print "2-3 sim"
print m.docvecs.similarity_unseen_docs(m, doc_words2, doc_words3, alpha=1, min_alpha=0.0001, steps=5)

>> 1-2 sim
   0.10429317017
   1-3 sim
   0.472984922936
   1-4 sim
   -0.02320307339
   2-3 sim
   0.228117846023

Selbst wenn die Leute es betrachten, ist es klar, dass die Dokumente 1-3 und 2-3 ähnlich sind, und im Gegenteil, die Dokumente 1-4 sind nicht ähnlich, so dass die Ähnlichkeit ziemlich gut ist.

Geben Sie den Komprimierungsvektor des neuen Dokuments aus (Ausgabe als Vektor der Anzahl der Dimensionen, die beim Lernen durch die Größe angegeben werden).

newvec = m.infer_vector(doc_words1)

print newvec

>> [  1.19107231e-01  -4.06390838e-02  -2.55129002e-02   1.16982162e-01
  -1.47758834e-02   1.07912444e-01  -4.76960577e-02  -9.73785818e-02
   #...(Unterlassung)
  -1.61364377e-02  -9.76370368e-03   4.98018935e-02  -8.88026431e-02
   1.34409174e-01  -1.01136886e-01  -4.24979888e-02   7.16169327e-02]

Was ich in Zukunft hinzufügen möchte

Auch in Bezug auf den doc2vec-Algorithmus selbst Ich fand einen Artikel im Blog des Kitayama Lab of Engineering University [Algorithmus von doc2vec (Paragraph Vector)](https://kitayamalab.wordpress.com/2016/12/10/algorithm of doc2vecparagraph-vector- /)

Recommended Posts

[gensim] Verwendung von Doc2Vec
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Verwendung von Pandas 2
Verwendung von Virtualenv
Verwendung von numpy.vectorize
Verwendung von pytest_report_header
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Verwendung von Qt Designer
Verwendung der Suche sortiert
python3: Verwendung der Flasche (2)
Verstehen Sie, wie man Django-Filter verwendet
Verwendung des Generators
[Python] Verwendung von Liste 1
Verwendung von FastAPI ③ OpenAPI
Wie benutzt man Python Argparse?
Verwendung von IPython Notebook
Wie man Pandas Rolling benutzt
[Hinweis] Verwendung von virtualenv
Verwendung von Redispy-Wörterbüchern
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Go] Verwendung von "... (3 Perioden)"
So bedienen Sie GeoIp2 von Django
[Python] Verwendung von input ()
Wie benutzt man den Dekorateur?
[Einführung] Verwendung von open3d
Wie benutzt man Python Lambda?
So verwenden Sie Jupyter Notebook
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
So verwenden Sie Google Colaboratory
Verwendung von Python-Bytes