閱讀427 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Raúl Garreta大神教你5步搭建機器學習文本分類器:MonkeyLearn

更多深度文章,請關注雲計算頻道:https://yq.aliyun.com/cloud


ecde75adfaeeb871783793dd4c811681e813ddfa

      用機器學習構建一個好的文本分類器是一項很有挑戰性的工作。你需要構造訓練集、調參、校正模型及其他事情。本文將會描述如何使用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:ScrapyPyspiderColaBeautiful Soup

UptonWombat

Node CrawlerSimplecrawler

Goutte

PortiaParseHubImport.io

AngelListEbayFacebookFoursquareGitHubInstagramNew York TimesThe GuardianTumblrTwitterWikipediaYelp

可以從一些開放數據網站獲取如KaggleQuandl 和 Data.gov.

如果你沒有任何編程經驗,ZapierIFTTT這些協作工具通過API授權,自動幫你將常用工具軟件互聯,將有助於你獲取訓練數據。

3.數據標記

拿到訓練數據後,你要給這些數據打上對應的標簽,才能形成完整的訓練集。這可能需要你手動完成,但是對訓練模型至關重要。通過打標簽這種行為,你告訴機器學習算法對於一個特定的文本輸入,你期望輸出的類別是什麼。分類器的準確度取決於初始標簽的正確性

1.創建和上傳數據後,使用MobkeyLearn GUI(下一節會詳細解釋)

3.Open Refine

有時你也可以在眾包平台上外包你的數據標記工作,如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%。

e345ab6706d60db0889142e85b7ec5affc71438f

1.增加更多子類的訓練數據;

2.對可能標記錯誤的樣本重新標記(如下麵混淆矩陣小節所示);

3.有時一些兄弟類存在歧義,盡可能合並這些類;

4311f037b6c2a81e934c9843bb68cf59fa80ee93

1. 使用混肴矩陣,查看模型的假正和假負;

2. 如果一個樣本初始被標記為類X,但卻正確地預測為類Y(真正類別就是Y),將這個樣本移到類Y下;

3. 如果這個樣本被錯誤預測為類Y,嚐試讓分類器更關注這種分類錯誤錯誤,增加更多X類和Y類的樣本;

4. 檢查類X和類Y的關鍵詞是否正確(見關鍵字雲小節)。

9c1e9061e3b63cdbb821ecc3c78e0db87f6f073a

87a3720b34e75d0f8d8ed083a137bd059e6cf235

548f2c2f25269bb6114638e1c1817cd82d1da67e

3f3fbbaa806557d7be0d0f4cb42af567c2e6e64b

2. 收集數據

3. 給數據打標簽

5. 測試和提升:

指標(正確率,準確率和召回率)

假正和假負

混淆矩陣

關鍵詞雲和關鍵詞列表

參數

1.手動給數據加標簽;

最後要強調的是,訓練數據在整個過程中至關重要。使用糟糕的訓練樣本訓練模型,最終會導致大量錯誤;如果使用高質量的數據集,你的模型會變的準確,能使文本分析的過程自動化。

 

作者簡介:


943d68d92b69d7dbf1c30ba2db41471140260381

Raúl GarretaMonkeyLearn 共同創辦人兼 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

  上一篇:go  概率圖模型
  下一篇:go  Mysql innodb存儲引擎體係架構