2017-07-10 58 views
1

我正在使用非負矩陣分解(NMF)主題模型爲客戶反饋構建主題模型。如何在Python中重新訓練機器學習模型,直至獲得理想的結果

它創建話題羣集如下:

[(0, [u'reserved block', u'reserved block available', u'reserved block week', u'need reserved block']), (1, [u'hour block', u'package hour block', u'bring hour block', u'bring hour']), (2, [u'hard block', u'driver hard block', u'driver hard', u'gps horrible']), (3, [u'delivery block', u'hard delivery block', u'hard delivery', u'delivery block available']), (4, [u'block available', u'reserved block available', u'make block', u'make block available']) 

但是,話題0 & 4和話題2 & 3幾乎相同。我想知道如何重新訓練模型,以便它能夠以主題0 & 4;主題2 & 3作爲一個主題在兩個關鍵字的聯合(&設置他們的基礎上,他們的順序&權重也應該給予更多的權重)。

回答

0

一般來說,如果您的NMF或LDA或其他類似算法的輸出爲您提供一組重疊的主題,首先推薦很簡單 - 減少主題的數量。通過這樣做,你自然會迫使算法將類似的主題合併在一起。我會建議嘗試這個並檢查結果。

如果您仍然想手動弄亂算法訓練的結果並手動合併幾個主題,我會嘗試從閱讀關於您正在使用的特定算法(NMF)的文檔開始,並檢查哪些屬性定義特定主題(屬性稱爲components_)和定義主題的單詞。然後你可以更新現有的NMF實例來調整它的組件。雖然這將是一項相當艱鉅的任務。

修訂

另一種方法是取文檔主題和單詞主題矩陣(其在技術上的算法輸出)和手動更新它們。檢查相應的文章:

https://medium.com/towards-data-science/improving-the-interpretation-of-topic-models-87fd2ee3847d

一般而言,NMF的結果,你應該得到一個2點矩陣。其中一個將顯示每個文件對每個主題的成員資格程度。另一個詞 - 對每個主題的權重。

當合並兩個議題要:

1)合併列文檔主題矩陣中的主題。例如,如果在此矩陣中,您有一行顯示的文檔對於主題1擁有50%的會員資格,對於主題2,由於合併可能需要10%的會員資格,因此您可能需要獲得60%合併主題的會員資格

2)將單詞中的主題行合併到主題矩陣。這就是它變得不平凡的地方。據我所知,你不能僅僅總結針對特定主題的詞的權重(所有權重應該總計爲相同的數字),但你可以嘗試這樣做,看看會發生什麼。

+0

我希望用戶應該能夠手動執行此操作。我的意思是,他們認爲哪些主題集羣是無關緊要或重複的,他們應該能夠告訴機器排除這些,機器會逐漸瞭解這些主題集羣無關或重複。這可能嗎? – akrama81

+0

@ akrama81我不這麼認爲,僅僅是因爲話題建模的本質。它根據矩陣分解或基於單詞出現的概率來估計主題,嘗試在給定若干主題的情況下適合最佳模型。如果你「合併」主題,這意味着你正在嘗試創建一個描述該主題的詞的聯合,並且由於分配或分解不會'總計爲1',這將會使整個模型搞砸。 –

+0

@ akrama81我可以想出的唯一方法是嘗試切換到LDA並根據用戶決定手動指定特定主題中單詞的頻率分佈,但這需要一些研究 –

相關問題