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.
pip install gensim
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
#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.
#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)]
print m.docvecs.similarity(1,307)
#Ähnlichkeit zwischen Dokument 1 und Dokument 307
>> 0.279532733106
#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.
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]
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