Raúl Garreta大神教你5步搭建機器學習文本分類器:MonkeyLearn
更多深度文章,請關注雲計算頻道:https://yq.aliyun.com/cloud
用機器學習構建一個好的文本分類器是一項很有挑戰性的工作。你需要構造訓練集、調參、校正模型及其他事情。本文將會描述如何使用MonkeyLearn訓練一個文本分類器,具體分為如下5步:
1.定義類別樹
1. 娛樂
2. 飲食
3. 醫藥保健&美妝
4. 零售
5. 旅遊&度假
6. 其他
1. 積極
2. 消極‘’
3. 中立
1. 配送問題
2. 支付問題
3. 產品問題
4. 折扣、優惠碼和禮品卡
這個過程核心部分就是為你的類別創建一個合適的結構。當你想更加準確並且使用子類時,你需要定義一個層次樹結構。在上麵的例子中,你可以這樣組織你的類別:
音樂會
電影
夜總會
2.飲食:
餐館
酒吧
外賣
3.健康&美容:
頭發&皮膚
水療&按摩
化妝品
4.零售:
服裝
電子產品:
電腦
智能手機
平板
電視機&錄像機
5.旅遊&度假:
酒店
機票
6.其他
1.結構。根據類別的語義關係組織類別結構。例如,“籃球”和“棒球”都應該是“運動”的子類。形成一個結構良好的類別樹對分類器做出準確預測有很大幫助。
2.避免重疊。使用互斥且完備的類,並且避免定義歧義的和重疊的類:一段文本的所屬類別應該是明確的,毫無疑問的。類別之間的重疊將會引起混淆,並且影響分類器的正確性。
3.不要混合分類標準。每個模型使用單一的分類標準。假設你要根據公司的描述對公司進行分類,你的類別可能包括B2B、B2C、企事業單位、金融、新聞傳媒、建築等。這時你可以構建兩個模型:a)一個根據公司的客戶進行分類(B2C、B2B、企事業單位);b)另一個根據公司經營的行業(金融、新聞傳媒、建築)。每個模型都應該有自己的標準。
4.由小及大。第一次訓練模型時,建議從簡單模型開始。複雜模型得付出更多精力才能達到足夠好的預測效果。從少量類開始(少於10個類),類別樹最多2層。
Zendesk、Intercom、Desk
Salesforce、Hubspot CRM、Pipedrive
Slack、Hipchat、Messenger、
Delighted、Promoter.io、Satismenter
數據庫:Postgres、MySQL、MongoDB、Redis
數據分析平台:Segment、Mixpanel
爬蟲框架
Python:Scrapy、Pyspider、Cola、Beautiful Soup
AngelList、Ebay、Facebook、Foursquare、GitHub、Instagram、New York Times、The Guardian、Tumblr、Twitter、Wikipedia、Yelp
可以從一些開放數據網站獲取如Kaggle, Quandl 和 Data.gov.
如果你沒有任何編程經驗,Zapier、IFTTT這些協作工具通過API授權,自動幫你將常用工具軟件互聯,將有助於你獲取訓練數據。
3.數據標記
拿到訓練數據後,你要給這些數據打上對應的標簽,才能形成完整的訓練集。這可能需要你手動完成,但是對訓練模型至關重要。通過打標簽這種行為,你告訴機器學習算法對於一個特定的文本輸入,你期望輸出的類別是什麼。分類器的準確度取決於初始標簽的正確性。
1.創建和上傳數據後,使用MobkeyLearn GUI(下一節會詳細解釋)
有時你也可以在眾包平台上外包你的數據標記工作,如Mechanical Turk,或者是外包給一些Upwork或者Freelancer上的自由職業者。
訓練樣本的數量取決於問題的複雜度以及模型中類別的數量。例如,訓練一個用於對tweets進行語義分析的模型和訓練一個識別商品評論主題的模型就不一樣。語義分析問題更難解決,所以需要更多的訓練數據。訓練數據越多越好。我們建議每個類從最少20個樣本開始。根據分類器取得的效果,逐漸增加訓練數據。對於話題檢測問題,使用200到500個訓練樣本會得到準確的模型。語義分析通常至少需要3000條訓練樣本才能得到勉強能接受的結果。
從少量樣本開始訓練模型更好,不過要百分百確定這些樣本能夠代表每一個類別,並且最開始手動標記的標簽正確,而不是說增加存在大量錯誤的數據。海量的訓練樣本對機器學習算法固然重要,但是大量錯誤標記的樣本,不關注數據本身,隻會事倍功半。就好像用一本存在大量錯誤的曆史書去教一個小孩,雖然他非常用功,可學到的知識終究還是錯誤的,又有什麼用呢。因此訓練開始階段,使用標記正確的、高質量的訓練數據。然後再通過增加更多高質量的數據提升分類器的準確度。
為了在MonkeyLearn中能夠使用這些訓練樣本,數據最好保存為2列的CSV或者Excel文件:1列表示輸入的文本,1列表示期望輸出的類別。最後,把這個CSV/Execl文件上傳到MonkeyLearn,就可以開始訓練模型了。有編程功底的話可以直接使用MonkeyLearn的API上傳數據。
1. 使用MonkeyLearn創建一個分類器,創建過程中需要完成一些相關信息;
2. 上傳CSV、Execl數據文件;
3. 訓練分類器,根據類別樹的複雜度以及數據量,可能需要幾秒到幾分鍾不等的訓練時間。
訓練好模型後,可以用一係列統計學上的指標來衡量分類器對新數據的預測能力。這些指標對理解模型、提升模型效果至關重要。這裏有個例子可以看下。
正確率(Accuracy)是類別被正確預測的樣本的比例,是對分類器整體上的評價。這個指標用來衡量父類對子類的區分度。在前麵的例子中,當根類有6個子類(娛樂、飲食、健康、零售、旅遊&度假、其他)時,“根類”準確率為80%。
1.增加更多子類的訓練數據;
2.對可能標記錯誤的樣本重新標記(如下麵混淆矩陣小節所示);
3.有時一些兄弟類存在歧義,盡可能合並這些類;
1. 使用混肴矩陣,查看模型的假正和假負;
2. 如果一個樣本初始被標記為類X,但卻正確地預測為類Y(真正類別就是Y),將這個樣本移到類Y下;
3. 如果這個樣本被錯誤預測為類Y,嚐試讓分類器更關注這種分類錯誤錯誤,增加更多X類和Y類的樣本;
4. 檢查類X和類Y的關鍵詞是否正確(見關鍵字雲小節)。
2. 收集數據
3. 給數據打標簽
5. 測試和提升:
指標(正確率,準確率和召回率)
假正和假負
混淆矩陣
關鍵詞雲和關鍵詞列表
參數
1.手動給數據加標簽;
最後要強調的是,訓練數據在整個過程中至關重要。使用糟糕的訓練樣本訓練模型,最終會導致大量錯誤;如果使用高質量的數據集,你的模型會變的準確,能使文本分析的過程自動化。
作者簡介:
Raúl Garreta,MonkeyLearn 共同創辦人兼 CEO,機器學習和自然語言處理專家,《Learning scikit-learn: Machine Learning in Python》一書作者。
本文由阿裏雲雲棲社區組織翻譯。
文章原標題《How to create text classifiers with Machine Learning》
作者:Raúl Garreta譯者:東東邪,審閱:
文章為簡譯,更為詳細的內容,請查看原文
最後更新:2017-10-30 22:33:44