比賽已通過去一段時間,如今纔來寫總結彷佛有點兒晚,可是擋不住心裏發出的強烈呼喚的聲音,因此決定靜下心來梳理一遍,查缺補漏。git
參賽契機:github
2017年9月偶然在學校的官方微信推送中看到2017年CCF大數據與計算智能大賽正式啓動的信息,仔細閱讀了參加規則後就決定找隊友一塊兒參賽,試一試本身的能力。算法
有想法就當即行動,及時把比賽信息分享出去。通過不斷宣傳、溝通,最終與2位同門成功組隊,開啓咱們的首次競賽之旅。編程
成績/排名:微信
136/796機器學習
以網上電商購物評論爲例,原始的主題模型主要針對篇幅較大的文檔或者評論句子的集合,學習到的主題主要針對整個產品品牌;而現實情形是,用戶評論大多針圍繞產品的某些特徵或內容主題展開(如口味、服務、環境、性價比、交通、快遞、內存、電池續航能力、原料、保質期等等,這說明相比於對產品的總體評分, 用戶每每更關心產品特徵),並且評論文本每每較短。工具
本次大賽提供脫敏後的電商評論數據。參賽隊伍須要經過數據挖掘的技術和機器學習的算法,根據語句中的主題特徵和情感信息來分析用戶對這些主題的偏好,並以<主題,情感詞>序對做爲輸出。學習
本賽題採用F1-score進行評價。大數據
注意:優化
1. 若是某些row_id樣本中有多個主題,您只識別出其中幾個,那麼會被當作漏判識別。若識別出的主題多於答案,則會被當作多判識別。
2. 在最終評測時,咱們按照「主題詞-情感詞-情感值」爲最小粒度逐條與標註數據進行比對,若三者均與答案相符,則判爲情感匹配正確,不然爲錯誤。評分計算以下:
a) 情感匹配正確數量:tp
b) 情感匹配錯誤數量:fp
c) 情感匹配漏判數量:fn1
d) 情感匹配多判數量:fn2
3. 最終根據以上值計算選手的準確率(P)與召回率(R),按照含有度量參數β的Fβ公式進行計算:
準確率:P=tp/(tp+fp+fn2)
召回率:R=tp/( tp+fp+fn1)
Fβ的數學定義以下:Fβ=(1+β2)∗P∗R/(β2∗P+R)
β=1
環境和工具:
Ubuntu16.04 + Pycharm
原始數據部分截圖
這個階段主要完成缺失值填充、重複值去除。
初步使用EXCEL 2013篩選查看了一遍數據,沒有發現重複值,因此重點放在了缺失值的填充上。
2位隊友和我一塊兒篩選出包含缺失值的行,發現只要情感詞缺失的,情感值和主題也缺失,再看評論內容也沒有價值,因此咱們討論決定將這類數據剔除。
繼續使用Python編程查看數據,發現情感關鍵詞關聯情感值和主題,決定利用情感詞去填充主題。咱們用最簡單的思想,就是找到距離情感關鍵詞最近的名詞,把它定爲主題。
對於情感值的缺失,也是依據情感關鍵詞去作分類,最終肯定對應的值。
至此,基本完成缺失值填充。
這一步主要是針對評論內容的處理。首先就是分詞,咱們使用了jieba分詞工具,外加它提供的自定義詞典,完成分詞。以後利用開源工具word2vec將分好的詞轉換成向量,以備後續使用。
比賽進行到這個階段,咱們就開始普遍地查找資料。一位隊友提出可使用深度學習模型RNN來作分類,因爲我徹底沒接觸過,這部分就交給他繼續跟進嘗試。我和另外一位隊友選擇使用情感詞典+自定義規則構建模型,我主要負責構造情感詞典,提供思路,隊友則負責完善規則和優化代碼。咱們三人按照各自的分工分頭行動,遇到問題就集中討論。
這裏附上咱們比賽的代碼,細節就不在贅述。
請移步個人GitHub(https://github.com/digfound/CCFCompetition)查看,謝謝。
因爲沒有找到比較合適的優化方法,因此這個步驟沒有起到特別明顯的做用。咱們沒有時間換用其餘模型嘗試,只是繼續改進情感詞典,但做用不大。
使用官網的提交系統,直接提交最後的結果文件,保存成CSV格式。
最終結果的部分截圖以下:
至此,本身可以想到的點已經寫下來了,其中涉及到的理論知識點(好比數據預處理、特徵提取、分詞、word2vec、分類、情感分析等),之因此沒有在此記錄是由於本人以爲不適合將它們放在總結裏,因此所有略去了,喜歡研究理論依據的博友們請自行學習。
最後,感謝各位的耐心閱讀,歡迎你們給我留言,期待與大家討論交流。