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


0 序言

比賽已經過去一段時間,現在才來寫總結似乎有點兒晚,但是擋不住內心發出的強烈呼喚的聲音,所以決定靜下心來梳理一遍,查缺補漏。

參賽契機:

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、分類、情感分析等),之所以沒有在此記錄是因為本人覺得不適合將它們放在總結里,所以全部略去了,喜歡研究理論依據的博友們請自行學習。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM