2016-07-07 14 views
1

ディレクトリ内のすべてのファイルから文を抽出するのにMySentencesクラスを使用し、この文を列車word2vecモデルに使用しました。 私のデータセットのラベルがありません。Gensim Doc2Vec - Doc2Vec関数にコーパス文を渡す

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) 

は今、私はdoc2vecモデルを作るために、そのクラスを使用します。私はDoc2Vecのリファレンスページを読んでいます。 Doc2Vec()関数は、パラメータとして文章を取得しますが、それは、変数文章の上に受け入れて、エラーを返しません。問題は

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

は何ですか?そのパラメータの正しいタイプは何ですか?

更新:

は、私が思うに、非標識のデータが問題です。 doc2vecはラベル付きデータが必要です。

+0

コード上記のモデルを訓練は私のために見つける実行されます! python 2.7とgensim 0.12 – kampta

+0

あなたは正しいです。私はそのクラスを使ってdoc2vecモデルを作りたいと思います。 –

答えて

1

問題を解決するために余分なクラスを使用する理由はありません。ライブラリの新しい更新では、文をベクトルに変換するために新しい関数TaggedLineDocumentが追加されました。その後、

sentences = TaggedLineDocument(INPUT_FILE) 

と、

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 
関連する問題