2017-03-21 12 views
0

私はLDAモデルの作成が確率論的であり、同じコーパス上で同じパラメータで訓練された2つのモデルが必ずしも同一ではないことを知っています。しかし、私は、LDAモデルにフィードされた文書のトピック分布も確率的であるかどうか疑問に思っています。LDA空間における文書のトピック分布は確率的か?

ここで紹介するように私は、LDAモデルを持っている:

lda = models.LdaMulticore(corpus=corpus, id2word=dictionary, num_topics=numTopics,passes=10) 

だけでなく、二つの文書、いるDoc1とDoc2の。私は気づい問題は、私は複数の反復を介してこれを実行すると、コサイン類似度は必ずしも同一ではないということです

x = cossim(lda[Doc1], lda[Doc2]). 

:私はそのようにLDA空間で二つの文書のコサイン類似度を見つけたいです。 (私が同じ保存されたLDAモデルを使用している場合でも)。類似点は非常に似ていますが、いつも少しずつずれています。私の実際のコードでは、私は、文書の数百を持っているので、私は密ベクトルにトピック分布を変換し、行列で計算を行うためにnumpyのを使用しています:

documentsList = np.array(documentsList) 
calcMatrix=1-cdist(documentsList, documentsList, metric=self.metric) 

私は(numpyので丸めエラーに実行していますまたは私のコードの別のバグ)、またはドキュメントのトピックの分布を見つけるためにldaを使うときに期待するべきこの動作ですか?

編集:ldaモデルを使用して、2つの異なるドキュメントでシンプルなコサイン類似度を実行し、結果の広がりをプロットします。私は私が見つけたものを報告します。

ここでは、同じLDAモデルを使用して2つのドキュメントに対してコッシンの類似性を実行した結果を示します。ここで

私のコードです:ここでは

def testSpacesTwoDocs(doc1, doc2, dictionary): 
    simList = [] 
    lda = gensim.models.ldamodel.LdaModel.load('LDA_Models/lda_bow_behavior_allFields_t385_p10') 
    for i in range(50): 
     doc1bow = dictionary.doc2bow(doc1) 
     doc2bow = dictionary.doc2bow(doc2) 

     vec1 = lda[doc1bow] 
     vec2 = lda[doc2bow] 

     S = matutils.cossim(vec1, vec2) 
     simList.append(S) 


    for entry in simList: 
     print entry 

    sns.set_style("darkgrid") 
    plt.plot(simList, 'bs--') 
    plt.show() 


    return 

は私の結果です:0.00817138247141 、 0.0082616863035、 0.00828413767524、 0.00826550453411、 0.00816756826185、 0.00829832701338、 0.00828970584276、 0.00828578705814、 0.00817109902484、 0.00825297374028 、 0.008269435921, 0.00826470121538, 0.00818282042634、 0.00824660449673、 0.00818087532906、 0.0081770261766、 0.00817128310123、 0.00817643202588、 0.00827404791376、 0.00832439428054、 0.00816643128216、 0.00828540881955、 0.00825746652101、 0.00816793513824、 0.00828471827526、 0.00827161219003、 0.00817773114553、 0.00826166001503、 0.00828048713541 、 0.00817435544365, 0.0082956702812, 0.0082616747028 8、 0.00829873425476、 0.00825744872634、 0.00826802120149、 0.00829604894909、 0.0081776752236、 0.00817613482849、 0.00825839326441、 0.00817530362838、 0.0081747561999、 0.0082597447174、 0。00828958180101、 0.00827157760835、 0.00826939127657、 0.00826138381094、 0.00817755590806、 0.00827135780051、 0.00827314260067、 0.00817035250043

Iは、LDAモデルは、各反復で両方のドキュメントのトピック分布をinfering、したがってことであると仮定する修正アムコサインの類似点は、決定的ではなく確率的であるか?これは、私のモデルを十分に長く訓練していないという兆候でしょうか?あるいは、ベクターを正しく正規化していないのですか?あなたはLDAモデルを訓練する際のおかげ

おかげ

+0

あなたは* extermely類似していますが、同じではない部分をさらに詳しく記述できますか?彼らはどれくらい変わるのですか? –

+0

私はテストを実行しました。私は、numpyを使って.0887、.0901、および.0879の平均類似度を得ました。私の元の反復的アプローチを使って.0894と.0884です。私は元の投稿の「平均」という意味を説明するつもりです。 –

答えて

0

は同じ状態にrandom_stateを設定してみてください。

lda = models.LdaMulticore(corpus=corpus, id2word=dictionary, num_topics=numTopics, passes=10, random_state=0) 

LDAを初期化し、推論時、それはモデルにノイズを導入するランダム化行列を使用します。このノイズは小さく、通常は十分なデータが提供され、最終結果にはほとんど影響しません。

関連する問題