顧亦然,陳禹洲
(南京郵電大學自動化學院、人工智能學院,江蘇南京 210046)
人們平時通過電商平臺購物,看到愿意購買的商品時,通常會想要查看這件商品的具體信息,如顏色種類、尺寸大小及商品評論等。而很多商品的評論信息數量實在太大,并且會有各種虛假信息,查看及篩選頗為費時耗力。一些電商平臺很貼心地給出了評價標簽,將所有的評論信息聚類成幾個評價標簽,讓用戶查看時一目了然,并且對這件商品有一個直觀的印象。消費者也可以單獨查看某個評論標簽下的所有評論信息,再決定是否購買商品,而這也是商家看重評論的重要原因。
評論信息中的有用詞匯,一般都為情感詞,因而需要對情感詞進行提取,然后聚類,從而形成評價標簽。因此,選擇合適的聚類方法十分重要。
常用的文本聚類算法包括K-means 聚類算法、層次聚類算法、密度聚類算法,以及神經網絡模型聚類算法等。K-means 是情感詞聚類的經典算法,在聚類分析中經常被使用的一種迭代求解的無監督學習算法。該算法具有結構簡單、運行速度快等特點,對大數據分析的效率較高、可伸縮性較強,因此常被用于數據挖掘任務中。但缺點也較為明顯,K-means 算法在訓練過程中容易陷入局部最優解,其聚類個數需要人為確定,并且聚類個數和初始聚類中心對整個K-means 算法的結果影響較大。
SOM 是自組織映射算法,是一種無導師學習網絡,它通過自動尋找文本中的內在規律和本質屬性,自組織、自適應地改變網絡結構和參數。其目標是用低維空間的點表示高維空間中的所有點,并且盡可能地保持點與點之間的距離關系。
關于SOM 算法和K-means 算法的研究較多,并取得系列成果。Xu 等[1]提出一種面向混合屬性的動態SOM 模糊聚類算法,并將其用于移動用戶分類,驗證了該算法的有效性;Yanik 等[2]使用SOM 算法生成客戶集群,利用信用卡交易所得的消費模式進行客戶聚類,得到了較好的聚類效果;尹積棟等[3]通過句法結構分析方法,在降低文本復雜度的基礎上,通過K-means 算法挖掘信息,解決了K-means 算法容易陷入局部最優的問題;張素榮[4]在智能客服問答系統中采用K-means 算法和樸素貝葉斯分類算法,提高了系統效率和準確率;任春華等[5]提出基于LRFAT 模型選取K值,以改進K-means 算法,對汽車客戶進行細分,并通過實驗驗證了其有效性;周本金[6]提出一種最大化減少當前誤差平方和的K-means 初始聚類中心優化方法,實驗結果表明,改進后K-means 算法的準確率和召回率等都得到了顯著提高;Shi 等[7]使用K-means++算法,先對文本進行預處理聚類,再將聚類結果進行LDA 模型算法的聚類訓練,從而得到更準確的主題詞匯。
將SOM 算法與K-means 算法相結合,也取得良好應用效果。Mahjoub 等[8]運用SOM 算法與K-means 算法建立客戶信用評分混合模型;趙凱等[9]提出基于SOM 和K-means聚類的風電場多機等值建模方法;趙文均[10]對基于SOM 網絡改進的K 均值算法效果進行分析,為后續算法的進一步改進提供了基礎;周歡等[11]應用SOM+K-means 算法對某地區電信家庭客戶數據進行分析,具有較好的聚類結果;張石[12]將SOM 算法和K-means 算法用于銀行客戶細分,并通過實驗驗證了該算法能為不同客戶群體提供個性化營銷策略;李昌華等[13]為了解決非精確圖匹配算法在應用上的局限性,采用SOM 算法和K-means 算法,結果表明這種方法可以有效提升準確率;周冰鈺等[14]結合SOM 算法和K-means 算法對用戶互動用電行為進行分析,實驗表明,該算法可以更加精確識別和快速聚類互動用電行為;王育軍[15]根據合作學習者的個性化特征,提出SOM 算法與Kmeans 算法進行分組,提高了合作學習者的學習效果;任云等[16]提出基于K-means 聚類的三維SOM 初始化模式庫算法,實驗結果表明,該算法減少了搜索時間,增加了信源的匹配度,提高了整體性能;趙翠翠等[17]利用K-means 和SOM 兩種算法對商品評論分別進行聚類分析,通過實驗得出了小規模樣本中,SOM 聚類比K-means 聚類分布得更加均勻;趙莉華等[18]提出采用K-means 與SOM 神經網絡相結合的混合算法,對斷路器操作機構進行狀態評估,混合算法模型在計算速度和聚類準確率上都優于其本身的兩種模型;汪海濤等[19]提出一種分布式自組織映射(DSOM)結合K-均值聚類的網絡流量攻擊檢測方法,實驗表明,該方法能有效監測異常流量,提高了系統對攻擊流量的反應速度,節省了系統開銷;鄭恒杰等[20]使用isolation forest 算法和SOM 算法對交通數據進行預處理,再通過K-mesns 聚類算法歸類并添加標簽,最后通過BP 神經網絡構建分類器,實現了對駕駛員駕駛行為的分類和評價,實驗表明,該算法能客觀、有效地評價駕駛員的駕駛行為。
綜上所述,基于SOM 算法改進的K-means 算法一般用于客戶分類、尋找機械故障、防止網絡入侵等方面,應用于商品評論的則很少。市場上普遍的聚類算法是LDA 算法,這種算法精度高,但運行時間很慢。針對該問題,本文采用SOM-K-means 模型對收集到的商品評論信息作情感詞聚類,并對其結果進行可視化分析。
SOM 算法是一種無監督學習的神經網絡算法,具有良好的自組織性和可視化等特征,由輸入層和競爭層(輸出層)組成。輸入層主要負責接受外界信息,將輸入的數據向競爭層傳遞,競爭層主要對數據進行整理訓練,并根據訓練次數和鄰域的選擇將數據劃分為不同的類。SOM 神經網絡的典型拓撲結構如圖1 所示(彩圖掃OSID 碼可見,下同)。

Fig.1 Typical topology structure of SOM neural network圖1 SOM 神經網絡的典型拓撲結構
算法步驟為:
(1)網絡初始化,對輸出層每個節點權重Wj隨機賦予較小初值,定義訓練結束條件。
(2)從輸入樣本中隨機選取一個輸入向量Xi,求Xi中與Wj距離最小的連接權重向量,如式(1)所示。

式中,‖ ‖為距離函數,這里采用的是歐式距離。
(3)定義g 為獲勝單元,Ng(t)為獲勝單元的鄰近區域。對于鄰近區域內的單元,按照式(2)調整權重使其向Xi靠攏。

式中,t 為學習次數,α(t)為第t 次學習率,hgj(t)為g 的鄰域函數。
(4)隨著學習次數t 的增加,重復步驟(2)及步驟(3),當達到訓練結束條件時停止訓練。
(5)輸出具體聚類數與聚類中心。
K-means 算法基本原理是用距離函數作為相似度指標,將距離相近的樣本對象劃分為同一類別(稱為“簇”),缺點是需要給定指定的聚類數和聚類中心,否則容易導致算法不收斂或者局部最優化。
算法步驟為:①隨機選取K 個點作為初始聚類中心;②將其余樣本數據根據他們與初始聚類中心的歐式距離劃分給距離最小的初始聚類中心,形成新的簇;③重新計算每個簇的均值,作為新的聚類中心;④循環步驟②和步驟③,直至達到某個終止條件;⑤輸出樣本具體聚類信息。
SOM 算法與K-means 算法比較如表1 所示。

Table 1 Comparison of the two algorithms表1 兩種算法比較
SOM 算法不同于K-means 算法,它不需要提前確定聚類數,并且可以自動對輸入數據進行聚類,但在訓練數據時可能出現有些神經元始終不能勝出,導致分類結果不準確。K-means 算法優點較多,缺點是初始聚類數和聚類中心很難提前確定。本文提出SOM-K-means 算法,將SOM與K-means 算法結合,既解決了K-means 算法需要提前設定聚類數和聚類中心的問題,又克服了SOM 算法中分類結果不準確的缺陷。
SOM-K-means 算法步驟如下:
(1)賦予輸出層每個節點的初始權值,定義訓練終止條件;
(2)計算訓練數據集中每個樣本與每個輸出節點之間的相似度,通常取歐式距離,找出距離最近的樣本節點;
(3)根據鄰域函數判斷獲勝單元,然后調整它的權值;
(4)重復訓練,直到達到其最大訓練長度,并滿足訓練終止條件,得出聚類數及聚類中心;
(5)將得到的聚類數作為k值,得到的聚類中心作為初始聚類中心;
(6)將樣本數據根據他們與初始聚類中心的歐式距離,劃分給距離最小的初始聚類中心,形成新的簇;
(7)重新計算每個簇的均值,作為新的聚類中心;
(8)循環步驟(6)和步驟(7),直至每個聚類不再發生變化;
(9)輸出具體的聚類信息。
該算法在保持SOM 網絡自組織特性的同時,將SOM 算法和K-means 算法相結合,在分類結果的準確度和運算效率上都有了較大提高。
為了驗證SOM-K-means 算法是否達到預期效果,所采用的實驗步驟為:①選定一個電商平臺中的某個商品,運用軟件八爪魚采集該商品評論信息,并以文本格式保存;②針對采集到的數據,建立一個自定義詞表,詞表里存放一些網絡詞匯和網絡用語;③在網上下載一個較為權威的停用詞表,然后對文本里的數據進行切詞,去除停用詞,保留自定義詞句,以及對詞句的向量化表示;④將得到的數據進行聚類,并將聚類結果進行可視化分析。
實驗流程如圖2 所示。

Fig.2 Experimental procedure圖2 實驗流程
本文選取淘寶網上銷售的一款耳機作為研究對象,將其2 000 條評論數據下載下來,并將采集到的數據以文本形式保存,構成語料庫;從網上下載停用詞表,再自定義需要用到的情感詞,如表2 所示,以文本形式保存。用Python導入語料庫,使用Jieba 分詞的精確模式,完成去除停用詞表中的詞語、加載自定義詞表、去除特殊字符等操作,得到結果如表3 所示。

Table 2 Partial data of the custom word table表2 自定義詞表部分數據

Table 3 Partial results of emotion vocabulary表3 情感詞表部分結果
運用Python 中開源的第三方工具包gensim構建詞向量模型,然后將切好的詞句放入模型中進行向量化并加以訓練,最后得到基于該模型的情感詞向量,部分情感詞向量如表4 所示。
在SOM 聚類實驗開始時,需要對SOM 模型進行初始化,設置不通鄰節點的半徑為0.3,學習率為0.5,數據集中的特征數量為2。模型建立好以后,輸入gensim 訓練好的情感詞向量,迭代次數為2 000 次,進行訓練。SOM 模型最后將輸入的詞向量自動聚為5 類,得到的聚類數為5,聚類中心為[2.113 350 48,0.794 973 43]、[-0.578 455 51,1.512 801 01]、[0.237 874 86,1.228 131 42]、[0.586 385 88,0.942 294 46],可視化結果如圖3 所示。

Table 4 Emotional word vectors表4 部分情感詞向量

Fig.3 SOM clustering visualization results圖3 SOM 聚類可視化結果
K-means 聚類需要指定的聚類數和聚類中心以得到具體分類信息,而上述SOM 聚類可以得到大致的聚類數和聚類中心,將其作為K-means 算法的初始輸入,最后得到具體情感詞的分類信息。
將聚類數5,聚類中心[2.113 350 48,0.794 973 43]、[-0.578 455 51,1.512 801 01]、[0.237 874 86,1.228 131 42]、[0.586 385 88,0.942 294 46]作為初始值傳入K-means 算法,可視化結果如圖4 所示。

Fig.4 K-means clustering visualization results圖4 K-means 聚類可視化結果
K-means聚類得到的聚類中心為[-0.597 892 767 272 727 2,1.542 160 406 060 606 2],[0.043 389 711 540 358 99,1.267 052 688 717 948 7]、[0.372 023 790 029 325 56,1.127 026 021 642 228]、[0.774 095 899 570 552 6,1.020 623 237 239 263 6]、[1.707 220 908 928 571 3,0.890 265 547 678 571 2],對應的簇也可得出。本文是為了得到商品評論中的用戶評價標簽,取距離聚類中心最近的樣本點,最后得到的結果是:重低音、高端、渾厚、價格便宜、音質不太好。與淘寶網上的評價標簽類似,具體如表5所示。
在大型購物APP 中,商品評論標簽一般都是采用LDA算法聚類得到,LDA 算法是目前市場上的常用算法,但是它在保證自己準確率的同時,運行效率卻很低。
SOM-K-means 算法與LDA 算法運行時間比較如圖5所示。可以看出,隨著數據量的不斷變大,LDA 算法運行時間也明顯變長,而SOM-K-means 算法運行時間基本保持穩定,增長并不明顯,且十分迅速。在數據量為1 000、3 000、5 000、7 000、10 000 時,LDA 算法運行時間分別是SOM-K-means 算法的2、11、12、16、17 倍。

Fig.5 Comparison of running time of SOM-K-means and LDA algorithm圖5 SOM-K-means 與LDA 算法運行時間比較
本文根據SOM-K-means 算法聚類出來的評論標簽,可應用在多種商品評論中,因實驗數據有限,可以得出在數據量較少、自定義詞表比較完善的情況下,使用SOM-Kmeans 算法能得出比較滿意的聚類結果,并且得益于Kmeans 算法本身優點,相較于市場上常用的LDA 聚類算法,SOM-K-means 算法運行時間要快得多。在追求效率的小型購物軟件中,會得到很好的應用。
通過SOM-K-means 算法模型對商品評論信息進行聚類實驗分析,發現該算法有較好的聚類效果。該算法模型結合了兩種算法的優點,聚類過程減少了人工干預,具有較強的自適應性。SOM 算法首先算出聚類數和聚類中心,再將其作為初值傳入給K-means 算法,這樣可加速Kmeans 算法的收斂速度。該混合算法在得出令人比較滿意的聚類結果的同時,運行效率也比市場上主流算法有了很大提高。
雖然SOM-K-means 算法有著較好的聚類效果,但自定義詞表對于本文聚類效果有著重要影響。由于網絡流行詞越來越多,需要人工維持自定義詞表更新,比較耗費人力。本文使用的自定義詞表有限,想要獲得更加精確的聚類結果,需要更多的評論數據并不斷更新自定義詞表。