Gensimライブラリを使用してdoc2vecを使用していくつかのデータファイルをトレーニングしていますが、メソッドを使用してファイルの1つの類似性をテストしようとするとmodel.docvecs.most_similar("file")
、常に91%を超えるすべての結果が得られ、それらの間にほとんど違いはありません(ロジックではありません) 、ファイル間に類似性がないためです。そのため、結果は不正確です。
モデルをトレーニングするためのコードは次のとおりです
model = gensim.models.Doc2Vec(vector_size=300, min_count=0, alpha=0.025, min_alpha=0.00025,dm=1)
model.build_vocab(it)
for epoch in range(100):
model.train(it,epochs=model.iter, total_examples=model.corpus_count)
model.alpha -= 0.0002
model.min_alpha = model.alpha
model.save('doc2vecs.model')
model_d2v = gensim.models.doc2vec.Doc2Vec.load('doc2vecs.model')
sim = model_d2v.docvecs.most_similar('file1.txt')
print sim
これが出力結果です
[( 'file2.txt'、0.9279470443725586)、( 'file6.txt'、0.9258157014846802)、( 'file3.txt'、0.92499840259552)、( 'file5.txt'、0.9209873676300049)、( 'file4.txt'、0.9180108308792114) 、( 'file7.txt'、0.9141069650650024)]
私は何が間違っているのですか?結果の精度をどのように改善できますか?
あなたのit
データは何ですか、そしてそれはどのように準備されていますか?(たとえばprint(iter(it).next())
、特に2回続けて呼び出す場合はどうなりますか?)
train()
100回呼び出し、デフォルトmodel.iter
の5を保持することで、実際にはデータに対して500回のパスを作成しています。そして、最初の5つのパスはtrain()
、内部の効果的なalpha
管理を使用して、学習率を宣言されたmin_alpha
値まで徐々に下げます。次に、次の495パスは、不器用に管理された独自のアルファレートになります。最初に近くに戻り0.025
、次に、に達するまで5の各バッチを下げます0.005
。
それはどれも良い考えではありません。train()
一度呼び出すだけで、希望の番号を渡すことができますepochs
。出版された作品の典型的なエポック数は10〜20です。(小さなデータセットではもう少し役立つかもしれませんが、数百が必要だと思われる場合は、データまたはセットアップに何か問題がある可能性があります。)
それは少量のデータだ場合、あなたは非常に興味深い取得することはできませんWord2Vec
/Doc2Vec
これらのアルゴリズムを変える例の多くに依存して、結果を。公開された結果は、数万から数百万のドキュメントを含むトレーニングセットを使用する傾向があり、各ドキュメントは少なくとも数十、できれば数百の単語の長さです。より小さなデータセットを使用すると、より多くのトレーニングパスとより小さなベクトルを使用して、適切な結果を絞り出すことができる場合があります。また、より単純なPV-DBOWモード(dm=0
)を使用すると、より小さなコーパス/ドキュメントに役立つ場合があります。
によって報告さmost_similar()
れる値は、類似性の「パーセンテージ」ではありません。これらは-1.0から1.0までのコサイン類似度の値であり、それらの絶対値は、さまざまな結果の相対ランクよりも重要ではありません。したがって、類似度が0.9を超える結果が多数あるかどうかは問題ではありません。ただし、それらのドキュメントがランキングの低いドキュメントよりもクエリドキュメントに似ている場合に限ります。
したがって、最も類似していると提案された個々のドキュメントを見ることが、実際のテストです。意味がないように思われる場合は、データやその準備、またはトレーニングパラメータに問題がある可能性があります。
十分な実際の自然言語テキストを含むデータセットの場合、min_count
値が大きいほど良い結果が得られるのが一般的です。実際のテキストには、多くの例がなければ強いことを意味しない低頻度の単語がたくさん含まれる傾向があるため、トレーニング中にそれらを保持すると、モデルの強度が低下します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加