MobData技術乾貨| 用深度學習模型提取商品評論中的典型意見

我們在日常消費的決策中,比如選擇去哪家餐廳吃飯、是否購買某一件商品時,除了自身的感覺之外,我們常常會參考別人,尤其是已經消費過、體驗過的人是什麼評價。

現在的電商平台上某件商品的評論數動輒就上千甚至上萬,人工逐條看精力有限,在短暫的決策時間窗口中,最多只能抽樣查看不超過20條評價,這樣的抽樣結果總結出來的結論大概率存在偏差,無法反應整體的真實情況。

那有沒有大數據的方法,可以保證獲得最全面最客觀的評價,而不是管中窺豹呢?

幸運的是打分機制很早就被發明出來了,所有人都可以對某一件商品的整體情況在1-5分的評分體系中,給出一個綜合評價,再按一人一票製取平均值,用得到的平均分來反映商品在所有人群中的整體評價,簡潔民主。

但這樣簡單粗暴的評分方式無法體現出用戶對商品的詳細評價,舉個簡單的例子,同樣是5分的評價餐廳,有的人覺得是因為菜品口味好,對自己的胃口,有的人覺得是因為用餐環境舒適,和女神度過了一個浪漫的夜晚。

所以本文就分享一個深度學習的方法,從評論中提取出用戶的觀點,比如從某火鍋店的評價「環境蠻好,沒有很重的香料味道,上菜快,不用調料也好吃」中提取出「環境好,上菜快」的評價標籤,並和其他有類似標籤的評價聚類。

本文分享一種用word2vec模型,將詞語訓練成詞向量,作用就是將人類使用的自然語言(相對於計算機可理解的編程語言)中的字詞,轉換為計算機可以理解的稠密向量(Dense Vector)。在word2vec出現之前,自然語言處理經常把字詞轉為離散的單獨的符號(One-hot Vector)

比如上圖的例子,在語料庫中,四個城市各對應一個向量,向量中有且只有一個值為1,其他位置都為0。

但是用One-hot Vector會有兩個問題:

第一,城市編碼是隨機的,向量之間相互獨立,看不出城市之間可能存在的關聯關係。

其次,向量維度的大小取決於語料庫中字詞的多少。如果將世界所有城市名稱對應的向量合為一個矩陣的話,那這個矩陣過於稀疏,佔用大量空間。

Word2Vec可以將One-hot Vector轉化為低維度的連續值,也就是稠密向量,並且其中意思相近的詞將被映射到向量空間中相近的位置。

上圖是將訓練好的詞向量降維後映射到二維平面的城市間的關係,可以看出亞洲的城市聚集在右上方而美國的城市聚集在左下方

Word2vec模型訓練好後,每個詞都有與其對應的一個多維向量,向量的維數可以作為參數人工設定,一般情況下維數越高,詞與詞之間的關係就可以被描述的越準確,當然訓練模型所需的硬體和時間成本自然也更高,與其他模型一樣,需要在表現和成本之間人工確定一個平衡點。

以訓練某手機遊戲的評論文本為例,用python genism包提供的Word2vec模塊作為訓練工具,預測「畫面」,「音效」兩個詞的top20近義詞結果如下:

在模型結果的基礎上進行人工篩選後,可以總結出「畫工」,「畫面質量」,「音響效果」,「音樂感」,「節拍」等詞都可以作為近義詞添加到人工建立的近義詞詞典中。

除了近義詞之外,word2vec模型還支持預測與輸入詞出現概率最高的協同詞,下圖顯示的是與「畫面」,「音效」一同出現頻率最高的top20協同詞,可以再模型結果的基礎上篩選出「精美」,「唯美」,「細膩」等形容畫面的評價,和「震撼」,「逼真」等形容音效的評價。

再重複向模型輸入類似「畫面」,「音效」等可以用來評價遊戲的維度後,就可以將構建完整的近義詞詞典作為依據,聚類具有相似觀點的評論文本。

整個流程可以整理為以下這張流程圖:

做過模型的同學都知道,模型只是工具,人工的部分才是區分整套系統質量和表現的關鍵。這套觀點提取系統中需要人工處理的地方包括,數據(語料庫)的選擇,數據預處理,其中預處理又分分詞,去停詞,去除噪音數據等細節,人工提供評價維度的種子詞(上文提到的「畫面」,「音效」等),篩選模型輸出的近義詞和協同詞結果(所有的結果保存在人工構建的詞典中)。

這套系統建立完成後,將新的評論文本經過預處理後作為輸入,匹配文本中是否包含詞典中所有的評價維度的近義詞和協同詞,將匹配結果作為觀點標籤標註在該條評論上。這樣我們就可以用模型批量的為評論文本打上標籤,最後將所有標籤的結果匯總相加,就能得到無偏差的,全量的關於商品的評論,全面參考評論意見,輔助購買決策。

>>更多內容在 MobData:mobdata.mob.com


推薦閱讀:

《與有8年健康醫療服務領域探索經歷的專業人士的討論》沈理然
013【數據分析】利用Python進行數據分析 第二版 (2017) 中文筆記
我的視覺廣告日記——紛繁的世界,聚焦的視界
大概是最全的數據分析平台整理了

TAG:互聯網數據分析 |