歡迎你們前往騰訊雲技術社區,獲取更多騰訊海量技術實踐乾貨哦~html
做者:林浩威 python
隨着人工智能的大熱,愈來愈多的小夥伴們開始投身到機器學習的大潮中。做爲其中的一員,我對此也是極有興趣的。固然我更感興趣的,是怎麼利用這些有趣的算法,來實現腦海裏各類奇奇怪怪的點子。寫這篇文章的契機,是我在某天看完騰訊指數的推送後,突發奇想,想本身實現相似這樣的一個東西,感受蠻好玩的。而後就在上週末,利用了一些空餘時間,寫了一個簡單的輿情監控系統。git
基於機器學習的輿情監控,這樣的一個想法,其實能夠有很大的想象空間,能夠作不少有意思的事情。好比能夠關注你喜歡的明星或電影的口碑狀況,或者瞭解你所關注股票的輿論變化,甚至預測其將來的走向等等。但我決定先從最簡單的例子入手:就是重新浪微博中,識別出關於騰訊的正面或負面的新聞。本文的論述也將圍繞這個場景展開,不會涉及太多複雜難懂的東西,能夠說是很簡單的一個東西,請放心閱讀。github
技術上的實現,主要是用sklearn對採集到的微博文本作分類訓練,關於sklearn就不須要介紹了,頗有名的一個python機器學習工具,若是想詳細地瞭解能夠移步它的官網:http://scikit-learn.org 。算法
下面是咱們接下來須要作的全部工做:機器學習
機器:mac分佈式
語言:python工具
第三方庫:sklearn、jieba、pyquery 等學習
數據採集是對我來講是最好作的一步,其實就是寫爬蟲從各大網站收集大量的信息,存起來,以便咱們後續分析處理。以下圖:測試
由於這只是一個試驗性的興趣項目,沒辦法花太多時間投入,因此我此次只打算從微博的搜索結果中,取1000條數據來分析。固然若是有可能的話,數據越多越好,訓練出來的模型就越準確。
採集的頁面是百度的微博搜索結果頁:https://www.baidu.com/s?wd=騰訊&pn=0&tn=baiduwb&ie=utf-8&rtt=2
用python對該頁面逐頁抓取,而後用pyquery模塊對抓取到的頁面進行解析,獲得一條條的微博文本。下面貼下這個頁面的解析代碼:
這一步是最苦逼也是最花時間的一步,咱們須要把採集到的數據,一條條精確地人工分類整理好,才能給後續的算法訓練使用。若是你的場景在網上能找到現成的訓練數據集,那麼恭喜你已經節省了大把時間,但大多數狀況還得本身來,全部髒活累活都在這了。並且人工分類的準確性,也決定了訓練出來的模型的準確性,因此這一步的工做也是相當重要的。
咱們的目標是把消息分爲「正面」、「負面」和「中性」三個類別。首先咱們要先給這三個類別下一個明確的定義,這樣在分類的時候纔不會迷茫。我我的給它們下的定義是:
正面:有利的新聞、積極正面的用戶言論;
負面:不利的新聞、消極反面的用戶言論;
中性:客觀說起的新聞、不帶感情色彩的用戶言論。
按照上面的標準,咱們把採集到的1000條微博一一分類標記好。
採集過來的微博文本,帶有不少無效的信息,在開始訓練以前,咱們須要對這些文本作預處理,並保存爲sklearn能接收的數據,主要工做包括:
一、去雜質,包括表情符號、特殊符號、短連接等無效信息,這裏用正則過濾掉便可,再也不詳細描述;
二、保存爲文本文件,由於sklearn要求訓練數據以特定的格式存放在本地目錄,因此咱們須要用腳本對原數據進行處理,目錄格式以下:
train:存放待訓練的數據,子目錄名稱爲分類名,子目錄下存放訓練文本文件,文件名隨意,內容爲單條微博文本;
test:存放帶測試的數據,子目錄名稱隨意,在子目錄下存放測試文本文件。
建議訓練集和測試集按8:2的比例劃分,用python自動生成以上的本地文件。
三、分詞,由於微博的數據大部分都是中文,因此推薦用jieba分詞,對中文的支持比較給力,效果也很好。支持自定義詞典,支持返回指定詞性的分詞結果,能夠去除一些停用詞和語氣助詞等。使用起來也很簡單,這裏不詳細介紹,有須要能夠訪問它的github地址:https://github.com/fxsjy/jieba
準備好訓練數據以後,咱們就能夠開始訓練了,爲此咱們須要選擇一個合適的分類算法。但機器學習算法那麼多,若是一個個去測試對比,將花費咱們很多精力。幸虧sklearn已經考慮到了這個問題,並提供了一個算法選擇方案。經過把多個算法的運行結果進行圖形化對比,能夠很直觀的看到哪一個算法比較合適。
這個是官方提供的測試代碼:http://scikit-learn.org/stable/auto_examples/text/document_classification_20newsgroups.html#example-text-document-classification-20newsgroups-py
把這個官方案例的數據輸入部分替換成本身的便可。結果以下圖:
綜合運算效率和得分狀況,我選擇了LinearSVC算法(SVM)來做爲個人訓練算法。
文本分類的訓練主要有如下4個步驟:
這4個步驟 sklearn都已封裝了相應的方法,因此使用起來極其方便。參考以下代碼:
注:以上代碼爲了方便展現,把模塊引入也放到方法內部了,僅做參考
最後就是對訓練好的模型進行測試和應用。
經過已有的模型,對新的數據進行預測,代碼以下:
注:本代碼只是展現用,僅做參考
打印出來的部分結果見下圖:
經統計,預測的準確率爲95%,該模型算出的當天騰訊相關的輿情以下:
本文只是記錄下我這兩天的一些想法和試驗過程,沒有涉及太多代碼實現或者其餘高深的算法,相信不難看懂。若是有人感興趣的話,後面我能夠把源碼整理完髮布出來。
感謝閱讀!
更快更準的異常檢測?交給分佈式的 Isolation Forest 吧
此文已由做者受權騰訊雲技術社區發佈,轉載請註明文章出處 原文連接:https://cloud.tencent.com/community/article/515228