2017-07-15 87 views
2

我有一個包含數千個屬於某個主題的句子的數據集。我想知道什麼是最好創建一個分類器,根據他們是否談論該主題,將預測文本爲「真」或「假」。機器學習 - 巨大隻有正面文本數據集

我一直在使用的解決方案與Weka的(基本分類)和Tensorflow(神經網絡方法)。

我用字符串向量來預處理數據。

由於沒有負樣本,我處理一個類。我試過一類分類器(Weka中的libSVM),但是誤報的數量非常高,我不能使用它。

我也嘗試添加陰性樣品但當文本來預測負空間不倒,我已經試過(NB,CNN,...)的分類傾向於預測它爲假陽性。我想這是因爲陽性樣品

巨量的

我願意放棄ML作爲預測新進入數據的工具,如果有必要

感謝所有幫助

+0

回答你的問題之前,我需要更多的信息: 1. \t是否使用Doc2Vec,Word2Vec或其他一些算法來表示文本矢量? 2. \t您是如何創建負樣本的?你有沒有檢查他們是否定的或他們是隨機生成的?負樣本的數量是多少? –

+0

1.我正在使用word2vec 2.原問題中沒有負樣本。我添加了一些嘗試構建具有傾斜數據的分類器。這些負面樣本,當我使用它們時,來自完全不同的主題。謝謝,斯捷潘! – JAC

+0

感謝您的澄清,我認爲您的案例中分類ML算法效率低下的關鍵原因是訓練數據集中每個類別的樣本數量存在很大差異。根據我的經驗,每個班級的樣本數量相等時可以達到最佳的準確度。你能創造1000個負面樣本嗎? –

回答

0

我的答案是基於假設爲作者的數據集添加至少100個否定樣本並且有1000個正樣本對於該問題的作者是可接受的,因爲我還沒有回答我對作者的問題

由於這種情況下有檢測具體話題看起來就像話題分類的特例我會建議使用兩種簡單的課程分類方法1類 - 你的主題和另一個 - 開始的所有其他主題

我成功地採用了同樣的方法進行人臉識別任務 - 在開始時我用一個輸出神經元面部檢測的輸出水平較高,如果沒有檢測到臉部,則輸出較低

儘管如此,這種方法給我的準確性太低 - 小於80%但是,當我嘗試使用2個輸出神經元 - 一個類用於圖像上的臉部存在,在圖像上沒有檢測到臉部,那麼即使不使用CNN,它也可以爲MLP提供超過90%的準確性,即使不使用CNN

這裏的關鍵是將SoftMax函數用於輸出層。它顯着提高了準確性。從我的經驗,它增加了MNIST數據集的精度甚至MLP從92%到97%的同型號

關於數據集。至少從我的經驗來看,大多數使用培訓師的分類算法對於訓練數據集中每個類的等量樣本更有效。事實上,如果我有一個班的平均數量少於其他班的10%,那麼這個模型幾乎沒有用來檢測這個班。因此,如果您的主題有1000個樣本,那麼我建議創建1000個樣本,儘可能多的不同主題

或者,如果您不想爲數據集創建如此大的負樣本集,可以爲您的數據集創建一組較小的負樣本,並使用批量大小的批量訓練= 2倍負樣本數量。爲了做到這一點,在正塊與每個塊的大小分割你正樣本〜陰性樣品量,並且當由N個批次訓練過程的每次迭代與陽性樣品和所有的陰性樣本的[I]塊訓練你NN爲每批。請注意,較低的準確性將是此折衷的價格

此外,您可以考慮創建更通用的主題檢測器 - 找出可能出現在您的模型應分析的文本中的所有可能的主題,例如 - 10個主題,並創建一個訓練數據集,每個主題有1000個樣本。它也可以提供更高的準確性 關於數據集還有一點。最佳實踐是僅使用數據集的一部分來訓練模型,例如 - 80%,其餘20%用於交叉驗證。未知的這種交叉驗證之前爲模型數據會給你模型精確度的良好估計在現實生活中,而不是訓練數據集,並允許以避免過度擬合問題

關於模型的構建。我喜歡通過「從簡單到複雜」的方式來完成它。所以我建議從簡單MLP開始,使用SoftMax輸出和1000個正數和1000個負數樣本的數據集。在達到80%-90%的準確率後,您可以考慮爲您的模型使用CNN,而且我會建議增加訓練數據集數量,因爲深度學習算法對於更大的數據集更高效

0

我最終爲否定類添加了數據並構建一個多線性樸素貝葉斯分類器,並按預期完成這項工作。

(添加的數據的大小是大約一萬個樣本:))

+0

那麼,我的答案中的關鍵點是關於負樣本數量的增加和分類器的使用是否正確? 我想知道關於你的數據集的更多細節。正面和負面樣本的確切數量是多少? BTW,以提高準確性,我會建議嘗試xgboost或神經網絡,我建議在我的答案 –

+0

這是一個樸素貝葉斯分類器所給出最佳結果的例子。不奇怪。我確實增加了負數的樣本,與正數大致相同,並且產生了差異(如上所述)。 – JAC

+0

我想知道您提到的樸素貝葉斯分類器的交叉驗證準確性。另外,我覺得,與其他ML算法比較可以是有趣的,不僅給我 我聽說有一個樸素貝葉斯分類器可以有效的進行文本分類,但我不知道是不是真的比更有效,例如,xgboost 我將非常感謝您能否給我們一些關於您檢查過的算法的交叉驗證準確性的數字 –