2017-08-02 8 views
0

の限られた数を生成します。ここで私が使用していたコードは(私は私の問題は、コードにあるものを説明している)されています。私はミスをやっている場合、私はちょうど疑問に思ってか、他のパラメータがある場合、私は設定しなければならないことGensim Doc2Vecモデルは、私だけが私の特徴ベクトルを生成するgensim <strong>Doc2Vec</strong>モデルを使用していますベクトル

cores = multiprocessing.cpu_count() 

# creating a list of tagged documents 
training_docs = [] 

# all_docs: a list of 53 strings which are my documents and are very long (not just a couple of sentences) 
for index, doc in enumerate(all_docs): 
    # 'doc' is in unicode format and I have already preprocessed it 
    training_docs.append(TaggedDocument(doc.split(), str(index+1))) 

# at this point, I have 53 strings in my 'training_docs' list 

model = Doc2Vec(training_docs, size=400, window=8, min_count=1, workers=cores) 

# now that I print the vectors, I only have 10 vectors while I should have 53 vectors for the 53 documents that I have in my training_docs list. 
print(len(model.docvecs)) 
# output: 10 

UPDATE:私はTaggedDocumentタグパラメータで遊んでいた、と私は、テキストなどの数字の混合物にそれを変更する場合:いるDoc1、Doc2の、...生成されたベクトルの数には異なる数が表示されますが、予測されるものと同じ数の特徴ベクトルはありません。

答えて

1

それはあなたのコーパス中で発見した実際のタグを見てみましょう。

print(model.docvecs.offset2doctag) 

あなたはパターンを参照していますか?

各ドキュメントのtagsプロパティは、タグのリストである必要があります。単一のタグではありません。単純な文字列を指定すると、それは数字のリストとして表示されるので、タグ'0','1'、...、'9'を学ぶだけです。

あなたは[str(index+1)]str(index+1)を交換し、あなたが期待していた動作を得ることができます。

しかし、あなたの文書IDがちょうど整数値を昇順されているので、あなたも自分のdoctagsとしてプレーンなPythonのint型を使用することができます。これにより、メモリを節約し、string-tagからarray-slot(int)へのルックアップ辞書の作成を避けることができます。これを行うには、str(index+1)[index]に置き換えます。 (これは、0からDOC-IDを開始 - teensyもう少しPython的であり、また、訓練されたベクターを保持する生アレイ内の未使用0位置を無駄に回避する。)

関連する問題