2017年CCF大數據與計算智能大賽,梳理總結新鮮出爐啦~~~

0 序言

比賽已通過去一段時間,如今纔來寫總結彷佛有點兒晚,可是擋不住心裏發出的強烈呼喚的聲音,因此決定靜下心來梳理一遍,查缺補漏。git

參賽契機:github

2017年9月偶然在學校的官方微信推送中看到2017年CCF大數據與計算智能大賽正式啓動的信息,仔細閱讀了參加規則後就決定找隊友一塊兒參賽,試一試本身的能力。算法

有想法就當即行動,及時把比賽信息分享出去。通過不斷宣傳、溝通,最終與2位同門成功組隊,開啓咱們的首次競賽之旅。編程

成績/排名:微信

136/796機器學習

1 賽題(引自大賽官網)

基於主題的文本情感分析

以網上電商購物評論爲例,原始的主題模型主要針對篇幅較大的文檔或者評論句子的集合,學習到的主題主要針對整個產品品牌;而現實情形是,用戶評論大多針圍繞產品的某些特徵或內容主題展開(如口味、服務、環境、性價比、交通、快遞、內存、電池續航能力、原料、保質期等等,這說明相比於對產品的總體評分, 用戶每每更關心產品特徵),並且評論文本每每較短。工具

2 任務描述(引自大賽官網)

本次大賽提供脫敏後的電商評論數據。參賽隊伍須要經過數據挖掘的技術和機器學習的算法,根據語句中的主題特徵和情感信息來分析用戶對這些主題的偏好,並以<主題,情感詞>序對做爲輸出。學習

3 評分規則(引自大賽官網)

本賽題採用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

4 比勝過程

環境和工具:

Ubuntu16.04 + Pycharm

4.1 原始數據分析

原始數據部分截圖

  • 包含空白的行(評論內容基本無價值,視爲無效)
  • 情感關鍵詞與情感值聯繫密切,迅速斷定從情感分析這個點入手。想到以前見過2分類的模型,如今是3分類,須要調整模型才能適用或者從新設計算法。
  • 注意到情感詞幾乎是形容詞,而主題幾乎是名詞,這也比較符合評論用語的習慣。考慮使用規則匹配,找到<名詞,形容詞>對。
  • 情感值至關於標籤,能夠看作分類問題來處理。經常使用的分類模型能夠嘗試一下。
  • 主題暫時不考慮(分任務進行)
  • 評論文本須要分詞,考慮使用jieba分詞工具,再用word2vec轉換成向量,以備後續處理。

4.2 數據預處理

這個階段主要完成缺失值填充、重複值去除。

初步使用EXCEL 2013篩選查看了一遍數據,沒有發現重複值,因此重點放在了缺失值的填充上。

2位隊友和我一塊兒篩選出包含缺失值的行,發現只要情感詞缺失的,情感值和主題也缺失,再看評論內容也沒有價值,因此咱們討論決定將這類數據剔除。

繼續使用Python編程查看數據,發現情感關鍵詞關聯情感值和主題,決定利用情感詞去填充主題。咱們用最簡單的思想,就是找到距離情感關鍵詞最近的名詞,把它定爲主題。

對於情感值的缺失,也是依據情感關鍵詞去作分類,最終肯定對應的值。

至此,基本完成缺失值填充。

4.3 特徵提取

這一步主要是針對評論內容的處理。首先就是分詞,咱們使用了jieba分詞工具,外加它提供的自定義詞典,完成分詞。以後利用開源工具word2vec將分好的詞轉換成向量,以備後續使用。

4.4 選擇模型

比賽進行到這個階段,咱們就開始普遍地查找資料。一位隊友提出可使用深度學習模型RNN來作分類,因爲我徹底沒接觸過,這部分就交給他繼續跟進嘗試。我和另外一位隊友選擇使用情感詞典+自定義規則構建模型,我主要負責構造情感詞典,提供思路,隊友則負責完善規則和優化代碼。咱們三人按照各自的分工分頭行動,遇到問題就集中討論。

4.5 代碼實現

這裏附上咱們比賽的代碼,細節就不在贅述。

請移步個人GitHub(https://github.com/digfound/CCFCompetition)查看,謝謝。

4.6 模型優化

因爲沒有找到比較合適的優化方法,因此這個步驟沒有起到特別明顯的做用。咱們沒有時間換用其餘模型嘗試,只是繼續改進情感詞典,但做用不大。

4.7 提交結果

使用官網的提交系統,直接提交最後的結果文件,保存成CSV格式。

最終結果的部分截圖以下:

5 致謝

  • 感謝學校的微信推送,讓我有碰見此次大賽的機會;
  • 感謝2位同門的努力與陪伴,讓咱們在不斷分析、討論、研究中順利完成比賽;
  • 感謝本身的付出,讓本身在專業實踐方面、團隊協做方面、表達溝通方面都獲得不一樣程度的鍛鍊;
  • 感謝其餘的參賽隊伍,有競爭纔有進步!

6 總結反思

收穫:

  • 選擇了與本身研究方向比較相關的賽題,加深了對平時所學理論知識的認知,特別是分詞的處理和情感詞典的構建;
  • 在將近1個月的比勝過程中和2位隊友相處比較融洽。隊友們和本身的想法都獲得比較充分的表達,有分歧的時候也可以理性地說服對方,鍛鍊了本身的思惟表達能力;
  • 比賽主要考察算法設計、數據處理方式等技術點,本身經過查找各類資料作參考,嘗試分析解決實際問題,學習如何遷移別人的優秀經驗來適應本身的需求,培養了本身的快速學習與實踐能力。

不足:

  • 存在第一次參賽容易出現的問題。好比磨合時間長、反饋不及時、任務分工不夠清晰,致使作了一些重複的工做;
  • 選擇的模型比較簡單,只是使用情感詞典+自定義規則處理數據,致使最終的成績不理想,與排名靠前的隊伍成績差距有點大;
  • 沒有找到合適的優化方法,致使調優的階段幾乎沒有明顯提高,因此最後無緣複賽。

7 寫在最後

至此,本身可以想到的點已經寫下來了,其中涉及到的理論知識點(好比數據預處理、特徵提取、分詞、word2vec、分類、情感分析等),之因此沒有在此記錄是由於本人以爲不適合將它們放在總結裏,因此所有略去了,喜歡研究理論依據的博友們請自行學習。

最後,感謝各位的耐心閱讀,歡迎你們給我留言,期待與大家討論交流。

相關文章
相關標籤/搜索