2017-10-24 5 views
1

Ich benutze gensim 3.0.1.Doc2Vec Modell teilt Dokumente Tags in Symbolen

Ich habe eine Liste von TaggedDocument mit einzigartigen Etiketten der Form "label_17", aber wenn ich Doc2Vec Modell trainieren, spaltet es irgendwie die Etiketten Symbole, so dass der Ausgang für model.docvecs.doctags ist die folgende:

{'0': Doctag(offset=5, word_count=378, doc_count=40), 
'1': Doctag(offset=6, word_count=1330, doc_count=141), 
'2': Doctag(offset=7, word_count=413, doc_count=50), 
'3': Doctag(offset=8, word_count=365, doc_count=41), 
'4': Doctag(offset=9, word_count=395, doc_count=41), 
'5': Doctag(offset=10, word_count=420, doc_count=41), 
'6': Doctag(offset=11, word_count=408, doc_count=41), 
'7': Doctag(offset=12, word_count=426, doc_count=41), 
'8': Doctag(offset=13, word_count=385, doc_count=41), 
'9': Doctag(offset=14, word_count=376, doc_count=40), 
'_': Doctag(offset=4, word_count=2009, doc_count=209), 
'a': Doctag(offset=1, word_count=2009, doc_count=209), 
'b': Doctag(offset=2, word_count=2009, doc_count=209), 
'e': Doctag(offset=3, word_count=2009, doc_count=209), 
'l': Doctag(offset=0, word_count=4018, doc_count=418)} 

aber in der anfänglichen Liste des markierten Dokuments hat jedes Dokument seine eigene eindeutige Bezeichnung.

Der Code für Modelltraining ist die folgende:

model = Doc2Vec(size=300, sample=1e-4, workers=2) 
print('Building Vocabulary') 
model.build_vocab(data) 
print('Training...') 
model.train(data, total_words=total_words_count, epochs=20) 

Daher meine Dokumente wie model.docvecs['label_17'] und ich kann KeyError nicht Index erhalten.

Die gleiche Sache, wenn ich Daten an den Konstruktor übergebe, anstatt das Vokabular aufzubauen.

Warum passiert das? Vielen Dank.

Antwort

1

Doc2Vec erwartet, dass die Textbeispiele, Aufgaben der Form TaggedDocument, eine tags Eigenschaft haben, die ein list-of-Tags ist.

Wenn Sie stattdessen einen String liefern, wie 'label_17', es ist eigentlich ein *list-of-characters*, so it's essentially saying that TaggedDocument` Tags hat:

['l', 'a', 'b', 'e', 'l', '_', '1', '7'] 

Stellen Sie sicher, Sie machen tags ein list-of-one-Tag, zum Beispiel tags=['label_17'] und Sie sollten die Ergebnisse in Form von geschulten Tags eher wie erwartet sehen.

Getrennt: Es scheint, Sie haben etwa 200 Dokumente, von etwa 10 Worten. Hinweis Word2Vec/Doc2Vec benötigen große, vielfältige Datensätze, um gute Ergebnisse zu erzielen. Insbesondere mit nur 200 Texten, aber 300 Vektor-Dimensionen kann das Training ziemlich gut bei der Trainingsaufgabe (interne Wortvorhersage) sein, mit wenig mehr als dem Auswendiglernen der Idiosynkrasien des Trainingssatzes, der im Wesentlichen "überanpassend" ist und nicht resultiert Vektoren, deren Abstände/Anordnung verallgemeinerbares Wissen darstellen, das auf andere Beispiele übertragen würde.

+0

Ja, das hat mein Problem gelöst, danke! – rvnbrg

+0

Wie für die Datenmenge, weiß ich, dass es nicht genug ist, aber es sind alle verfügbaren Daten für das Problem im Moment. Danke für deinen Kommentar trotzdem! – rvnbrg

Verwandte Themen