2016-07-07 10 views
1

ich zum Extrahieren von Sätzen aus allen Dateien in einem Verzeichnis die MySentences Klasse verwendet und verwenden diese Sätze für Zug ein word2vec Modell. Mein Datensatz ist nicht markiert.GENSIM Doc2Vec - Pass corpus Sätze Doc2Vec Funktion

class MySentences(object): 
    def __init__(self, dirname): 
     self.dirname = dirname 

    def __iter__(self): 
     for fname in os.listdir(self.dirname): 
      for line in open(os.path.join(self.dirname, fname)): 
       yield line.split() 

sentences = MySentences('sentences') 
model = gensim.models.Word2Vec(sentences) 

Jetzt möchte ich diese Klasse verwenden, um ein doc2vec Modell zu machen. Ich lese Doc2Vec Referenzseite. Doc2Vec() Funktion erhält Sätze als Parameter, aber es nimmt nicht über Sätze variabel und Return-Fehler:

AttributeError: 'list' object has no attribute 'words' 

Was ist das Problem? Was ist der korrekte Typ dieses Parameters?

Update:

denke ich, sind unmarkierte Daten das Problem. Es scheint, dass doc2vec beschriftete Daten benötigt.

+0

Above-Code für mich läuft finden! Python 2.7 und Gensim 0.12 – kampta

+0

Sie haben Recht. Ich möchte diese Klasse verwenden, um ein doc2vec-Modell zu erstellen. –

Antwort

1

Es gibt keinen Grund, zusätzliche Klassen zu verwenden, um das Problem zu lösen. In neuen Aktualisierungen der Bibliothek wurde eine neue Funktion TaggedLineDocument hinzugefügt, um Satz in Vektor zu transformieren.

sentences = TaggedLineDocument(INPUT_FILE) 

und dann trainieren das Modell

model = Doc2Vec(alpha=0.025, min_alpha=0.025) 
model.build_vocab(sentences) 

for epoch in range(10): 
    model.train(sentences) 
    model.alpha -= 0.002 
    model.min_alpha = model.alpha 
    print epoch 
Verwandte Themen