機器學習不神秘!手把手教你用R語言打造文本分類器
簡單安裝幾個R軟體包,你就直接在自己電腦上打造出一個文本分類器,用進行機器來評估人類寫作。
本文是一篇極簡的上手教程,它想用清晰明了的步驟告訴讀者,機器學習不神秘,關鍵是動手!僅需七步,你也一樣能「作詩」,完全無需像曹子建那樣「才高八斗」。
作者 Fedor Karmanov
翻譯 AI科技大本營(rgznai100)
參與 Joe,波波
在本教程中,我們將用到大量的R軟體包,以快速實現一個用於亞馬遜評論數據的分類器演算法。該分類器能以極高的準確度來判斷一個評論是正面的還是負面的。
為了明確地給出分類演算法的工作用例,這裡採用了斯坦福網路分析項目(Stanford Network Analysis Project)的數據,該數據已被解析成小的文本塊,並進行過適當的標註。你可以從它的Github代碼庫獲取到這些數據。
斯坦福網路分析項目
https://snap.stanford.edu/data/web-Amazon.html
Github鏈接
https://github.com/Rogerh91/Springboard-Blog-Tutorials/tree/master/Machine%20Learning%20with%20R%20Tutorial
開始前的數據策管,是整個數據處理過程中至關重要的一環:要確保所用的信息都已被恰當地分類和標註。
在機器學習中,數據的標註和分類的質量往往能決定整個模型的準確度。也就是說,熟悉一下文件內容在被如何組織與標註,會非常有價值:「Train」文件夾包含了400條被標為「Neg」(negative,負面)的1星書評,與400條被標為「Pos」(positive,「正面」)的5星評論。這就是我們的「黃金標準」:我們根據用戶撰寫書評時所給的評分星級來判斷評論內容正面與否。我們使用「Train」文件夾內的數據來訓練分類器,然後它用訓練所得的規律來推測「Test」文件夾內的評論是正面還是負面。
通過這種方式,我們就能打造出一個基於機器學習的文本分類器,它可以準確判斷每條亞馬遜書評正面與否,或任何短文本信息的正面與否,以此來評估給定產品的消費體驗。
從更大的視角看,這一過程所演示的是如何用最簡單的R語言來學習並預測人類寫作。這是一個用R語言進行機器學習的有效用例。
該教程運行在R語言的Jupyter Notebook環境:
http://blog.revolutionanalytics.com/2015/09/using-r-with-jupyter-notebooks.html
你可以在任何能編譯並運行R腳本的平台上來練習。
我們將使用R語言的「caret」、「tm」和「kernlab」包來解析和讀取數據,然後進行模型訓練。如果你沒裝這些包,請用下面的命令安裝。
關於R軟體包如何安裝的更多說明,請參考這裡
https://www.r-bloggers.com/installing-r-packages/。
其中,「dplyr」包和」 splitstackshape」是用來幫我們控制數據的,並把它們組織成模型能夠使用的數據。接著,讓我們激活這些已安裝好的R軟體包,並展開機器學習的實踐操作。
第一步是導入並清洗所有的數據。因此,我們將使用」tm」包,它用 」VCorpus」 函數和 」tm_map」 函數來使數據變得可用。下面將用到大段大段的代碼塊,我們希望其中的注釋能有助於你理解裡面的機制。
1. 導入並清洗數據
2. 為訓練數據創建文本矩陣
3. 重複以上兩步來準備測試數據
上述代碼給出了兩個新的數據矩陣:一個是」data.dtm」,包含了「Training」文件夾內的所有數據,另一個是」test.dtm」,包含了「Test」文件夾內的所有數據。本教程的絕大部分,我們都是在跟」train.dtm」打交道,用於生成、訓練和驗證結果。先不停地使用訓練數據,然後再用測試數據進行模型驗證,這是用R進行機器學習實踐的基本步驟。
以下兩步涉及到數據處理過程中非常重要的兩個方面,從而能確保分類器很好地工作。
第一步:確保數據集在列向量上一致,即我們只採用兩個矩陣在列上重疊的數據。
第二步:確保數據都有標籤列,以註明該文本是「正面」還是「負面」。因為訓練數據的標註值是已知的,我們必須從原始文件中把它們分離出來,並追加到訓練數據的「corpus」列。而測試數據沒有相應這些標籤,我們先用一些空值進行填充。
4. 確保測試矩陣和訓練矩陣的列向量一致(找到交集)
5. 獲取訓練數據的正確標註,並為測試數據設置相應的空值
如果以上步驟的運行都正確無誤,你可以開始訓練分類器了!
注意:本教程將不對模型作交叉驗證(cross-validation),但更高水平的用戶或研究者應當創建多個數據包,並用它們來對模型進行交叉驗證,從而獲得更加可靠的模型準確值。
不管怎樣,這裡的模型只會用下面的混淆矩陣(confusion matrix)來進行一次模型準確度驗證。這將會生成一些指標,以幫助我們計算剛剛建好的預測模型的準確度。
6. 準備好數據集,進行模型訓練並檢驗結果
如上所述,我們用訓練數據來對模型進行訓練和測試。如果一切順利,你應該能看到以下的輸出:
混淆矩陣(confusion matrix)以儘可能簡單的形式給出了最終的輸出結果,以及模型在訓練數據上預測的性能分析。例如「Accuracy」(準確度)表明分類器在訓練數據集上的預測精度:這裡高達92.8%!這就意味著大致有93%的情況,分類器僅根據文本內容就準確地判斷它是正面的還是負面的。
在更嚴謹的場景下,你需要在不同的數據集(通常是隨機從訓練數據集中獲得的子集)上進行同樣的流程,以進行交叉驗證。比如上面的例子,很明顯構建的分類器能非常好地判斷亞馬遜書評是負面的還是正面的。因此,我們進行下一步的測試。我們已經基於使用R進行機器學習的知識,構建了一個非常好的分類器。但是,這個模型還不能用於實踐。幸運的是,在測試數據上運行這個模型,只需修改「df.test」變數即可。
7. 在測試數據上進行最終預測,並標註文件名
以上代碼表示,預測模型在測試數據上運行並輸出結果」results」。然後,我們使用原始數據行名作為預測結果向量行名,並最終生成測試數據的預測結果。
總的來說,以上使用R構建機器學習模型的流程幫助你快速實現一個分類器。它以相當高的準確度區分在線書評的情感種類。當你有大量的用戶評論數據(用來分析某個產品或服務的客戶體驗度),這樣一個分類器非常實用。此外,還能用於幫助研究者構建可以自動清除差評或者好評的演算法。我們希望這個教程能讓你感受到使用R進行機器學習實踐的威力。
https://www.springboard.com/blog/machine-learning-with-r/
課程結合實例介紹使用TensorFlow開發機器學習應用的詳細方法和步驟,著重講解了用於圖像識別的卷積神經網路和用於自然語言處理的循環神經網路的理論知識及其TensorFlow實現方法,並結合實際場景和例子描述了深度學習技術的應用範圍與效果。 所有案例均來自講師團隊工作中的親身實踐,所選案例均是深度學習的經典應用,非常具有代表性。
就差你還沒關注這個號了
※AI與機器學習中的三大「忽悠」,你中招沒?
※機器學習應用日益深化 系統不確定性問題待解
※從業者:信息時代已終結,歡迎來到機器學習時代!
※機器學習優化工作流程的8種途徑
TAG:機器學習 |
※手把手教你學習R語言
※手把手教你用 R 語言分析歌詞
※手把手教你用 R 語言分析歌詞
※3D印表機械手:能把文字語言轉化成手語
※態勢語言的運用技巧
※機器學習分析出語言多樣性成因
※華晨宇再現花式教學!用繩子的語言教唱歌,不料被學員藉機告白!
※人類怎麼學語言?鳥兒學唱揭秘「聽覺編碼」塑造機制
※谷歌助手精通30種語言智商碾壓各大競爭對手 語音助手學習語言有多難?
※地理教學語言的運用
※微軟提出新型通用神經機器翻譯方法,挑戰低資源語言翻譯問題
※微軟翻譯使用AI來打破智能手機上的語言翻譯障礙
※濫用與語言靈魂之殤
※搭訕新技巧用肢體語言表達你 學會泡妞不是夢
※美國研究證實:兒童玩手機傷腦!語言推理能力變差
※C語言常用演算法
※《大數據智能:互聯網時代的機器學習和自然語言處理技術》
※Julia官宣:為機器學習構建一種語言和編譯器
※語言腦機介面——為語言障礙者裝上「語音假肢」
※品茶高手的通用語言,你也得懂