2016-08-16 3 views
0

Ich möchte Sätze in doc2vec haben und ich gensim.phrases verwenden. In doc2vec benötigen wir ein getaggtes Dokument, um das Modell zu trainieren, und ich kann die Phrasen nicht markieren. Wie kann ich das machen?Wie verwende ich doc2vec mit Phrasen?

hier ist mein Code

text = phrases.Phrases(text) 
for i in range(len(text)): 
    string1 = "SENT_" + str(i) 

    sentence = doc2vec.LabeledSentence(tags=string1, words=text[i]) 
    text[i]=sentence 

print "Training model..." 
model = Doc2Vec(text, workers=num_workers, \ 
      size=num_features, min_count = min_word_count, \ 
      window = context, sample = downsampling) 

Antwort

0

Der Aufruf von Phrases() bildet einen Satz schöpf-Modell. Später verwenden Sie dieses Modell für Text, um Text in Phrasenkombination zurückzuholen.

Ersetzen Sie nicht Ihre ursprüngliche text mit dem ausgebildeten Modell, wie in der ersten Zeile Ihres Codes. Versuchen Sie auch nicht, das Phrases-Modell zuzuweisen, wie es in Ihrer aktuellen Schleife der Fall ist, und greifen Sie nicht auf das Phrases-Modell über Ganzzahlen zu.

Die hat Beispiele für die ordnungsgemäße Verwendung der Phrases Klasse; Wenn Sie diesem Muster folgen, werden Sie es gut machen.

Beachten Sie außerdem, dass LabeledSentence durch TaggedDocument ersetzt wurde, und sein tags Argument sollte eine Liste von Tags sein. Wenn Sie eine Zeichenfolge angeben, sieht sie dies als Tag-aus-einem-Zeichen-Tags (anstelle des einen gewünschten Tags).

+0

danke für Ihre Antwort. In diesem Fall macht die Verwendung von "LabeledSentence" anstelle von TaggedDocument keinen Unterschied. Mein Problem ist wo und wie verwende ich Phrasen mit doc2vec? –

+0

Es ist nichts Besonderes, Phrasen mit Doc2Vec zu verwenden; es ist nur ein Vorverarbeitungsschritt, um einige Wortpaare in kombinierte Wortpaare zu ändern. Daher empfehle ich, den Doc2Vec-Aspekt zu ignorieren, die spezifischen Fehler zu vermeiden, auf die ich in Ihrem vorhandenen Code hingewiesen habe, und die Vorgehensweise in den Beispielen in der Gensim-Dokumentation anzupassen. – gojomo

+0

Ich löse den Fehler, den Sie sagten, aber das Hauptproblem ist die Ausgabe von 'LabeledSententces', die nicht mit der Eingabe von' Phrases' funktionieren. also kann ich keine Phrase mit 'LabeledSentenses' konstruieren. Umgekehrt kann dieser Prozess nicht ausgeführt werden, da 'LabeledSentences' keine Phrasen markieren können! –