當前位置:
首頁 > 知識 > 用Python對用戶評論典型意見進行數據挖掘

用Python對用戶評論典型意見進行數據挖掘

點擊上方

Python開發

」,選擇「置頂公眾號」



關鍵時刻,第一時間送達!



用戶體驗的工作可以說是用戶需求和用戶認知的分析。而消費者的聲音是其中很重要的一環,它包含了用戶對產品的評論,不管是好的壞的,都將對我們產品的改進和迭代有幫助。另外任何事情都要考慮金錢成本和人力成本,因此我希望能通過機器學習的演算法來輔助分析,對用戶的評論數據進行提煉和洞察。


一、數據獲取和清洗

現在爬蟲泛濫,網路公開數據的獲取並不再是一個難題。簡單點可以利用一些互聯網的爬蟲服務(如神箭手、八爪魚等),複雜點也可以自己寫爬蟲。這裡我們用爬蟲來獲取京東的評論數據。相對於亞馬遜而言,京東比較坑。第一個坑是京東的反爬蟲還不錯,通過正常產品網址進去的那個評論列表是幾乎爬不出數據來的,所有大部分網路爬蟲服務都止步於此。第二個坑是一款產品的評論數只要超過一萬條,那麼京東就只會顯示前一千條,沒有公開的數據,那你爬蟲技術再厲害也沒辦法,除非開著爬蟲定時增量更新數據。

自己寫爬蟲的好處就是可以避免掉進第一個坑,但是第二個坑沒辦法。這裡我爬取了 小米MIX 和 小米MIX2 的評論數據(最新的幾款手機我都爬取了,需要的請戳後台),其中 小米MIX 共1578條,小米MIX2 共3292條。

本文通過分析這些數據預期完成如下幾個目標

1、數據清洗後的好評率

2、好/中/差評的概覽

3、典型意見分析

首先來看看MIX2的大致情況:



一共有3497條評論,其中有些評論內容還是完全相同的。用戶大概在購買9天後後評論(可能與到貨日期有關),平均打分為4.87分,評論裡面有些完全相同的,小米MIX2隻有一種顏色等等。

接下來我們先做第一件事情


京東採用的是5分制,其中4-5分為好評,2-4分為中評,1分為差評。MIX2的好評率為96.63%,與京東官網的一致。

粗略的瀏覽以下評論,我們發現有這麼幾種無效評論。

第一種全是標點符號或者就一兩個字:


這種情況可以利用正則表達式來去除,第二種比較麻煩,如:


這種評論中它純屬湊字數和灌水,不含任何產品的特徵。一種想法是看看評論中涉及的名詞是否是手機領域中的詞語,但是實際情況會非常複雜,比如

「用的很不錯」、「太差了」...

它並沒有主語,並不知道它評價的是啥。這裡我們反過來,假設每一類無效評論都有類似的關鍵詞,一個評論中的詞語只要有一些垃圾評論關鍵詞,我們就把它判定為無效評論。當然並也不需要給定所有的無效評論詞,利用tfidf可以通過一個詞語順藤摸瓜找到其他類似的詞語。(還可以利用文本相似性演算法尋找)


另外還有一種情況,雖然不屬於無效評論,但是影響好評佔比。


這種情況在追評中出現的較多,還有就是京東默認的好評。雖然內容是差評,但是標記的分值是5分。理論上也可以通過演算法找出大部分。在NLP領域中,有一個課題叫做情感分析(sentiment analysis), 它可以判斷一句話的情感方向是正面的還是負面的(以概率大小給出,數值在0-1之間)。如果一段評論的情感方向與對應的評分差異過大,則我們有理由相信它的評分是有誤的。當然這裡有一個條件,那就是這個情感分析演算法是非常準確的。

有大神專門用電商評論訓練了一個開源的情感分析包snownlp, 我們來看看這個包效果怎樣。


嗯嗯,準確率為92.63%,看上去很高,但。。。因為我把所有評論都判定為好評,那正確率也有96.54%。再看上圖中的ROC曲線,嗯,慘不忍睹。曲線跟x軸之間的面積(記作AUC)越大,說明模型的判別能力越好。一般情況曲線會在對角線之上(對角線相當於隨機預測的結果),可以此時AUC=0.157,比隨機結果差多啦。

更好的情感分析估計需要利用大量手機領域的語料重新訓練才行,本文就暫不討論這個啦。

二、好/中/差評的語義理解

語義理解是一個非常難的課題,本文不追求絕對精準,僅希望能對產品的評論有一個快速的理解。本文將從三個方面來闡述同類型評論語料的語義:

1、詞雲。它會統計一段文本中各個詞語出現的次數(頻數),頻數越大,在詞雲中對應的字體也越大。通過觀察詞雲,可以知道一段文本主要在講哪些東西

2、TextRank。 TextRank 演算法是一種用於文本的基於圖的排序演算法,可以給出一段文本的關鍵詞。其基本思想來源於谷歌的PageRank演算法, 通過把文本分割成若干組成單元(單詞、句子)並建立圖模型, 利用投票機制對文本中的重要成分進行排序, 僅利用單篇文檔本身的信息即可實現關鍵詞提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先對多篇文檔進行學習訓練, 因其簡潔有效而得到廣泛應用。

3、主題分解。 假設每一段文本都是有主題的,比如新聞里的體育類、時事類、八卦類等。通過對一系列的語料庫進行主題分解(本文採用的是LDA),可以了解語料庫涉及了哪些主題。(本文用的LDA實際效果不怎麼好,暫且僅供娛樂。更好的方法後續或許會更新)








分析詞雲、關鍵詞和主題容易發現

1、好評集中在:屏幕、驚訝、手感、全面屏、邊框,大致就是講小米手機不錯;手感很好;全面屏很驚艷之類的;

2、中評集中在:屏幕、還好、失望、邊框等

3、差評集中在:客服、失靈、售後、失望、模式、微信等,大致就是手機失靈;微信電話時的屏幕?因為版本等出現了一些售後客服問題?

只能說還湊合,模模糊糊、斷斷續續能理解一些。因為它只給出了詞語,並沒有配套的情感。

三、典型意見抽取和挖掘

電商評論不同於一般的網路文本,它主要的特點在於語料都是在針對產品的某些特徵作出評價。這一節我們希望能通過演算法找到這些特徵。

細想下,語料主要在對特徵做出評價,而特徵一般是名詞,評價一般是形容詞。相對來講產品的形容詞不會很多,如「不錯」、「流暢」、「很好」之類的,所以可以通過關聯分析來發現初始的特徵-形容詞對,如("手機"-"不錯")、("手機"-"流暢")等。

通過關聯分析找打的特徵-形容詞對需要篩選,主要表現在兩點。

1、裡面不只名詞-形容詞對,兩個名詞,形容詞-動詞等都有可能;

2、沒有考慮兩個詞語在文本之間的距離。比如名詞是第一句話中的,形容詞則是最後一句話中的;

篩選好後其實還不夠,關聯分析只會挖掘支持度大於一定數值的特徵,我們稱這種特徵為 "常見特徵"。那不常見特徵怎麼辦?怎麼才能挖出來?注意到上面已經挖掘出很多形容詞啦,這些就是產品的最常用評價詞語啦,我們可以通過它們反向挖掘出 "不常見特徵"。


可以看到與手機有關的大部分特徵都找出來啦,另外有一些是關於京東的,如"速度"、"京東"、"快遞"。還一些不是特徵的,比如:"有點","想像"

在語料中搜索與"外觀"有關的語句,先看看大家在講"外觀"時,都在聊些啥?


看來小米MIX2的外觀還是很不錯的,有很多人都是沖著外觀買的。接下來我們來量化各個特徵的好評佔比和差評佔比。

本來這裡是想利用snownlp情感分析包來完成的,因為它能給出評價是否是正面的具體概率大小。考慮到情感分析目前的準確率,這裡我們還是用原始的評分來量化。以剛剛的關鍵詞 "外觀|質感" 為例,我們有


利用這種方法,擴大到上述所有的特徵可以得到:




可以看到提及最多的特徵依次為:感覺、屏幕、速度、手感、系統、邊框、攝像頭、全面屏、拍照、體驗、256g、外觀、質量、性價比

其中比較好的依次為:性價比、質量、手感、速度、外觀、感覺

其中稍差些的依次為:256g、屏幕、邊框、拍照、攝像頭、系統、體驗、全面屏

最後的最後我們來看下這些特徵對應的語料。


總結一下差評主要表現在:

No1. 256g版本發貨問題

No2. 窄邊框問題

No3. 拍照問題,MIX2的拍照效果有待提升

No4. 前置攝像頭在下面不方便

No5. 系統,MIUI廣告多

四、報告輸出

這裡安利一個自己造的輪子:reportgen ,結合DataFrame 格式可以自動化生成PPTX報告。目前Github關注量已經有20+啦。

在reportgen中,每一頁幻燈片被簡化成四部分:標題、副標題、主體(數據圖、表格、文本框或圖片)、腳註。只要給定每一頁的這些數據,reportgen就能幫您自動生成pptx,一般四行代碼就完成啦。如:


當然本文的pptx要複雜一些,相應的代碼和生成的報告如下:












  • 作者:JSong



  • 來自:python中文社區



  • 原文鏈接:www.cnblogs.com/xybaby/p/7183854.html



  • Python開發整理髮布,轉載請聯繫作者獲得授權


【點擊成為Android大神】

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發 的精彩文章:

多線程,理想和現實的差距!
剛從 C 轉到 Python 時, 經常忍不住就寫了分號

TAG:Python開發 |