特定のドキュメントに類似した上位n個のドキュメントを表示できるアルゴリズムを作成しようとしています。 私はgensim doc2vecを使っています。コードはベローズである:Gensim docvecs.most_similarは、存在しないIdを返します。
model = gensim.models.doc2vec.Doc2Vec(size=400, window=8, min_count=5, workers = 11,
dm=0,alpha = 0.025, min_alpha = 0.025, dbow_words = 1)
model.build_vocab(train_corpus)
for x in xrange(10):
model.train(train_corpus)
model.alpha -= 0.002
model.min_alpha = model.alpha
model.train(train_corpus)
model.save('model_EN_BigTrain')
sims = model.docvecs.most_similar([408], topn=10)
シムのVaRは、最初の要素のドキュメントID及び第二のスコアである、私は10個のタプルを与えるべきです。 問題は、一部のIDがトレーニングデータのドキュメントに対応していないことです。
私は訓練データに含まれていないIDの意味を理解しようとしていますが、ロジックはありません。
Psが:これは私が私のtrain_corpus
def readData(train_corpus, jData):
print("The response contains {0} properties".format(len(jData)))
print("\n")
for i in xrange(len(jData)):
print "> Reading offers from Aux array"
if i % 10 == 0:
print ">>", i, "offers processed..."
train_corpus.append(gensim.models.doc2vec.TaggedDocument(gensim.utils.simple_preprocess(jData[i][1]), tags=[jData[i][0]]))
print "> Finished processing offers"
(私はIDになりたいという)の位置0はint型である魔女でAUX配列1つの配列の各位置ビーイングを作成するために使用するコードです位置1の説明
ありがとうございます。
こんにちはgojomo、高速応答のための まず感謝。 ここで説明していたことに気付きました。最初のIDが408の場合、ベクターには409のポジションがありました。それを解決するために、私はデータベースから文字列として得たIDを使用し、問題は解決されました。 doc2vecのモデルに関しては、iterを1に指定しましたが、このコードではiterを変更するのを忘れました。 このサイクルはdoc2vecのチュートリアルで見ましたが、そこではより良い結果が得られたと言われました。それについて意見はありますか? iterを10または0としてモデルを使ってサイクルまたは電車を行うことは有益でしょうか? – JoaoSilva
緩やかな学習率低下で、自分でループを繰り返すだけで、より良い結果が得られる可能性は低いです。間違って10回しかやっていないと思ったときに100回反復してしまうと、誤ってiter = 10と比較して(そして余分な時間を無視して)改善が見られるかもしれません。明示的なalpha/min_alphaの微調整で 'train()'を複数回呼び出すのは、通常、エラーを起こしやすい複雑さです。いずれの場合も、1回の繰り返しにつき2つの 'train()'は迷った誤編集のようです。だから私はそのパターンを避けるだろう。 – gojomo
明示的な 'iter = 10'を指定すると、デフォルトの' alpha'/'min_alpha'をそのまま残すことができます。 – gojomo