王衛紅,李 樊,金凌劍
(浙江工業大學 計算機科學與技術學院,浙江 杭州 310023)
文本聚類[1-2]是指將一組文章或文本信息進行相似性比較,將相似度高的文章或文本信息歸為同一組的技術。隨著社會的發展和項目需求的變化,傳統的單視圖聚類方法已經不能滿足人們對于數據信息量和聚類準確性的需求,越來越多的國內外學者將目光投向了多視圖聚類算法的研究,以期從多視角對各種類型的聚類情況實現改進。Pedrycz[3]提出了一種基于單視角FCM(Fuzzy c-means)算法的Co-FC算法,將數據從各個角度進行FCM聚類后,通過不同視角之間的信息互補確定協同信息的聚類準則,并采用協同訓練的方式將各個視角的FCM聚類結果生成一種多視角的FCM聚類結果。Cleuziou等[4]在文獻[3]的基礎上進一步將Co-FC算法與雙視角的隸屬度懲罰項進行融合,提出了Co-FKM(Co-fuzzy K-means)算法。Demiriz等[5]提出了使用半監督算法,將未標記的數據進行聚類后,使用已標記的數據去訓練該聚類來預測該樣本的實際類別的算法。Chen等[6]提出了一種半監督線索融合模型,該模型通過對數據不同視圖的線索進行識別,使用線性加權函數并以半監督的方式利用標記樣本對未標記樣本進行識別。Bettoumi等[7]提出了一種基于K-means聚類算法的Co-K-means算法,意圖在最小化雙視角樣本與聚類中心的歐式距離來減少不同視角見的差異性。Zhang等[8]在Bettoumi雙視角歐氏距離的基礎上,通過加入一致性權重的方式,提出了一種基于模糊劃分的TW-Co-K-means(Two-level-variable weighting K-means)算法。Rai等[9]采用了基于NMF(Nonnegative matrix factorization)的正則信息融合策略進行多視圖聚類,以強化視圖的局部結構的方式保持單視圖的特性。在聚類過程中,對每個視角引入了圖正則信息以強化節點的局部結構保持其結構特性。Yang等[10]提出了一種基于分裂乘法多視圖子空間聚類算法,通過乘法分解方案有效保證了所提取成分的結構一致性,并且提出了一種交替優化算法來優化非凸約束優化問題,使得該算法能夠很好地通過分裂乘法的方式獲得最優的多視圖子空間,使得聚類效果有了極大的提升。以上研究在多視圖視角的情況下,對多視圖聚類有了較好的改進,在聚類的精度上有了較大的提升,但由于其是半監督算法,仍需對部分數據進行一定的人工處理,形成一個已標記集合,另外,其相較于無監督的多視圖聚類效率仍有一定的差距,很多的多視圖改進算法并不是用于文本聚類方面,因此文本聚類的多視圖視角算法仍具極大的研究和使用價值。
在上述背景下,筆者提出了一種基于分歧和譜聚類算法的半監督算法Co-training,結合隱性狄利克雷分布(Latent dirichlet allocation,簡稱LDA)和TF-IDF的改進型無監督(TF-weight IDF,以下簡稱TF-WIDF)算法來進行文本聚類分析,在半監督的基礎上不僅降低人工成本,而且對于文本可能產生的高維稀疏性有較好的控制,同時有相對較好的計算效率。
文本處理流程圖如圖1所示。首先通過遍歷的方式刪除非中文字符和數字等非法字符,然后采用目前國內中文分詞系統中較為優秀的Jieba分詞技術對文本進行分詞,篩除停用詞及除名詞、動詞、形容詞和副詞外的詞語后,使用近義詞詞表替換文本中的剩余詞匯,進而使用LDA和TF-WIDF兩種算法生成特征向量組并輸出。

圖1 文本數據處理架構圖
近義詞詞表需要使用訓練建模后的Word2Vec算法來生成[11],在詞與詞相關的基礎上,通過進一步提升詞匯數量的方式加強其在TF-WIDF和LDA中的詞權重,便于詞匯能夠在特征向量組中具有更加突出的代表性,使得在后續處理和實驗中有明顯的效果提升。
非法字符主要包括非中文字符和數字字符。通過正則表達式遍歷文章的方式,保留文章中的中文字符,并通過Jieba分詞,將文章以單詞為作為一篇文章的基本單元進行分詞,并再次進行遍歷,去除分詞長度為1的單詞。
無影響詞匯主要包括目前在中文中停用的詞匯和一些對文章表達無影響、無意義的詞匯,例如虛詞、嘆詞和擬聲詞等詞匯。其中停用詞來自于哈工大停用詞表、百度停用詞表等生成的混合停用詞詞表,共1 274 個詞匯。根據現代漢語定義,對文章主要意義有較大影響的詞為:體詞(主要以名詞為主)、謂詞(動詞和形容詞)和加詞(副詞),因此在停用詞去除后,需要進一步使用Jieba分詞對上述4 類詞進行提取和保留。
考慮到中文文章近義詞很多,為盡可能減少每篇文章中僅出現一次的詞匯數量,將詞匯特征集中,需要將屬于同一種近義詞的詞匯盡可能替換成同一個詞匯,通過降低特征維度的大小,來減少矩陣空間的稀疏性,同時盡可能增加TF-WIDF中的詞頻和LDA中指向統一主題的可能性。因此需要通過word2vec來生成相應文章的近義詞詞表,并采用正則的形式,替換文章中的近義詞為同一詞匯。
筆者采用的特征向量組由LDA和TF-WIDF兩種算法生成,代表包含了文本詞意和詞頻兩個視圖的向量組。
LDA是一種無監督機器學習技術[12],通過詞袋(Bag of words)模型生成一種包含了詞、主題和文檔3 層結構的主題模型,可以用來識別大規模文檔集或語料庫中潛藏的主題信息,該方法認為每篇文章可能包含了多個不同概率的主題,同時不同主題是由不同詞匯所表現的,同一主題下出現同一詞語的概率也不盡相同。因此,可以將文章具體視為一篇由多種主題以不同概率構成,多個同類詞語以不同概率構成主題的文章,只考慮文章和主題、主題和詞匯的相關性,從而忽略掉詞語的結構順序和在文章上下文的出現順序。
LDA的建模過程如圖2 所示。圖2中:M為文檔集的文檔總數;K為可能所包含的主題總數;N為文章中所含的詞語集合;文章-主題的分布θ和主題-詞語的分布φ均服從多項分布[13-14]。

圖2 LDA建模流程圖
生成第m篇文章的過程,實質上是一個通過概率的方式隨機生成文章中每一個詞的過程,該過程可以用聯合公式表示為

p(Zm,n|θm)p(θm|α)p(φ|β)
(1)
式中:α為主題分布的超參數;β為詞匯分布的超參數;θ為某篇文章的主題分布概率;φ為某個主題下的詞分布概率;Z為某篇文章中某個詞語的可能符合的主題;W為Z所生成的詞語。
生成某篇文章第n個詞語的算法具體步驟為
步驟1以α為超參數,可以通過狄利克雷分布來獲取文檔-主題概率分布θm。
步驟2通過對文檔-主題概率分布θm進行多項式分布計算,獲得詞語n所屬主題Zm,n。
步驟3以β為超參數,結合詞語n所屬主題Zm,n,通過狄利克雷分布來獲取主題-詞匯概率分布φZm,n。
步驟4通過對文檔-主題概率分布φZm,n進行多項式分布計算,最終生成詞語n。
重復以上步驟即可生成一篇完整文章。超參數α和β可以采用經驗貝葉斯以及EM算法的方式進行估算,或是在使用中采取經驗值的形式設置超參數α和β,一般這兩個經驗值分別被設置為α=50/k+1和β=200/w。除上述2 個超參數外,Zm,n參數需要通過Gibbs采樣[12,15]的方式進行獲取,在對詞語進行隨機初始化主題Z0后,對當前詞語在各個主題下的概率靜心重新分配估計,直到Gibbs采樣收斂為止,該過程可以用公式表示為
(2)

(3)
詞頻-逆向文本頻率算法(TF-IDF)是一種基于統計方法的文本關鍵詞挖掘算法[16-17],主要由詞頻(TF)和逆向文本頻率(IDF)兩部分組成,它可以體現詞語在整個文章庫中的重要情況。TF通常是將一篇文章中某個字詞出現的情況進行統計,將高頻率的詞作為該文章的代表詞;IDF則認為在實際語料庫中如果出現大量該字詞,會降低模型概率,使得該詞匯無法用于區分文章之間的不同。因此TF-IDF算法認為,如果該詞語在全局語料文章中出現的次數較少,在某一篇文章中以較高頻率出現,則說明該詞語對于區別該文章和其他文章具有較好的區分能力。其中TF,IDF可以分別表示為
(4)
(5)

但是,如果某一個詞在某一類文章中頻繁出現,則在人工分類的立場上可以認為這個詞能夠較好代表該文章,因此在TF值中該詞的表現也較好。但是假設該詞大量出現在某類情況下的同時,還少量且平均地出現在其他類別的文章中,根據IDF的計算方式,無論是在其他每一篇文章中出現了多少,只要出現的文章數越多,就會使得最終生成的IDF值越低。這樣會導致最終通過計算生成的TF-IDF值越低,無法較好地通過該詞和其他類的文章進行區分。這種算法在現實中是不合理的,筆者認為這樣的詞可以通過加權的方式改變IDF的計算方式,以提升其部分高頻詞作為該類特征詞的可能性,其表達式為
(6)
式中:max(Ci,ni,j)為在某一類中,出現詞語ti文章數量的最大值;Ci為某一分類,能明顯看到當包含詞語ti的文檔的個數確定時,包含該分類的文章數量max(Ci,ni,j)越大,則最終的WIDFi值也越大,能夠較好的將該類高頻詞轉化為特征詞進行計算。
綜上,筆者提出了對特征向量組的構建方法,從詞義、詞頻兩方面對文章進行解析,同時通過近義詞、修改公式等方式增加文本詞向量的權重,有利于后續算法的進行,對聚類結果的提升有較為明顯的幫助。
基于分歧的半監督算法Co-training[18],是一種針對多視圖數據設計的訓練標記算法。在實際應用中,一組數據往往是具有多種屬性的。雖然單屬性數據的使用對于普通的聚類研究具有較大幫助,但從現實角度來說,單視圖數據帶來的聚類結果對于整個數據集來說是不全面的,無法說明整個數據都指向單視圖聚類的結果。因此,在實際使用時,需要綜合考慮多個角度的數據,而傳統的聚類算法無法很好滿足具有不同屬性數據的聚類,在這種要求下的數據聚類需要使用多視圖算法綜合考慮數據。Co-training算法利用了數據集每個屬性間可能會產生的“相容互補性”,將每個可以獨立生成該屬性下最優聚類的屬性作為一個視圖,以這些最優視圖作為多視圖聚類的基礎,進行互相學習。通過每個視圖的學習器對已標記樣本進行學習,生成一個分類器,讓每個分類器對未標記樣本進行挑選,將挑選出的最有把握的樣本賦予偽標記后,使用該偽標記樣本提供給其他學習器進行學習,并對分類器進行更新,然后再一次對未標記樣本進行偽標記賦予,直到分類器不再變化或者到達迭代輪數上限為止。根據原生的協同訓練算法的要求,此方法只需要選出合適的基學習器,就可以相對較少地受到模型假設、損失函數非凸性和數據規模等因素的影響,獲得較優的多視圖聚類結果。基于分歧的半監督協同訓練算法具體步驟為
步驟1初始化樣本集U,標記樣本集L,設置每輪挑選的正例數p和反例數n,并設置大小為(2p+2n)的緩沖池U1。
步驟2從初始樣本集U中隨機選取(2p+2n)個示例放入緩沖池U1中。
步驟3開始循環;獲取標記樣本集L中被分為不同類別的數據,分布為數據集x1和數據集x2;使用數據集x1訓練獲得分類器h1,數據集x2訓練獲得分類器h2;分類器h1在U1中挑選p個置信度高的正例和n個置信度高的反例,并為其賦予偽標記,將這些數據給分類器h2進行學習,同樣分類器h2在U1中挑選p個置信度高的正例和n個置信度高的反例,并為其賦予偽標記,給分類器h1進行學習;如果分類器h1和h2沒有發生改變,則break;否則,將這(2p+2n)個標記好的樣本加入L;從U中取出(2p+2n)個未標記樣本放入緩沖池U1。
步驟4重復步驟3中所有內容,直到獲得所有數據的標記為止。輸出迭代次數k,分類器h1和h2的2 個F1-measure的平均值,2 個準確率的平均值,2 個召回率的平均值,2 個精度的平均值。
考慮到文本數據在收集后可能產生的數據集的情況,雖然半監督算法對于已標記樣本的數量要求較少,但如果要達到更好的效果,仍需花費一定的人力。因此,筆者提出了一種改進型的Co-training譜算法用于進行文章聚類。
Co-training的相容互補性[19],可以理解為每個視圖都具有一定的相似狀態。假設每一個單獨的視圖的選擇都是最優的,則它們所產生的聚類情況必定也是最優的,因此不需要通過已標記的樣本來對未標記樣本進行偽標記計算,只需要從各個視圖聚類所產生的結果中選出它們之間被歸為同一類別的數據,將這些數據作為已標記樣本來對其他樣本進行標記,我們把這樣的數據稱為“視圖一致樣本”。如果2 個樣本在最終的任一視圖中不屬于同一類別,則它們在其他視圖中也不屬于同一類別。這種方式因為不需要采用有監督的人工分類數據,所以筆者稱其為UCo-training(Unsupervised Co-training)算法,具體流程如圖3所示。

圖3 UCo-training算法詳細過程
考慮到一篇文章可能具有多個主題且通篇文章字詞較多,在經過部分算法獲得結果時,可能會出現“維數災難”的現象。因此,通過近義詞處理等方式將文章字詞統一是一種較好的處理方式,可以將文字處理算法產生的特征向量維度進行壓縮,但經過算法壓縮的向量維度仍然較高,同時傳統的文章聚類算法在高維數據中也表現出聚類精度不足的局限。而譜聚類算法[20]在該情況下的準確率遠遠超過另外2 種傳統算法,因此筆者選擇該算法進行聚類運算,具體實驗結果如表1所示。

表1 UCo-training算法中采用不同聚類算法的結果
根據上述的假設條件,多個視圖對于同一點進行聚類時,如果聚類均將某一點分入同樣的類別中,確定其是某一類的權重值也就越大。但是在實際運用中則與半監督算法不同,該點仍需要被放入學習器中不斷地學習,直到迭代結束或迭代結果不變為止。相對純粹的半監督算法來說,假設的算法效率會相對較低,因此可以通過譜聚類算法所生成的特征值組來保留聚類所需信息,并去除可能讓聚類產生困惑的信息。基于譜聚類的多視圖聚類算法具體步驟為
步驟1獲取由LDA和TF-WIDF算法生成的視圖特征M1和M2。

步驟3當達到設定的迭代次數后,輸出最終的列向量矩陣U1和U2。
步驟4將U1和U2中的每一次迭代情況中的每一行數據進行標準化生成標準化特征。

步驟6如果在層次聚類中將矩陣V中的第i行分配給了X類,則代表將第i篇文章分配給X類。
步驟7輸出k個集群簇類。
與傳統的半監督算法不同,此算法需要將原始特征矩陣通過聚類的方式,獲得在不同視圖下被歸于同一類別的點作為已標記樣本。其中,迭代部分作為傳統的人工分類后進行迭代的改進。如步驟2所示,采用疊加計算的形式作為每一次特征矩陣改變的方式,可以認為每一次通過計算改變后的特征矩陣都包含了當前迭代情況下最優的置信度,同時將所有迭代次數生成的特征矩陣值保存在UV中,直到迭代結束。在進行步驟5前,需要對每一次迭代生成的特征矩陣進行譜聚類,獲得每一次迭代后最終的聚類情況,直到聚類情況不改變為止,那么該次迭代所獲得的特征矩陣組,是筆者認為的保留了最豐富聚類特征的視圖。最終將該保留了最豐富聚類特征的矩陣組,通過譜聚類算法生成最終的聚類結果輸出,獲得多視圖的最優聚類結果。
考慮到傳統的譜聚類使用的是K-means算法,而K-means算法對于初始聚類中心的選擇較為敏感,導致基于K-means的譜聚類算法相對不穩定,因此需要通過其他穩定的傳統聚類算法替代該算法。經過實驗比較,層次聚類算法對于聚類效果的提升最大,穩定型最好,因此筆者選擇該算法作為譜聚類中的底層聚類算法。
綜上,UCo-training算法通過對矩陣組聚類,獲得在不同視圖中分別被分到同一類別下的樣本數據。以該類樣本數據作為傳統意義上的已標記樣本來對視圖進行半監督聚類,避免了需要人工對數據進行標記的情況,減少了人力資源浪費。該算法通過改進,將半監督算法轉變為無監督算法,且較好地保留了原始Co-training算法的多特征性、在最優基學習器下較少地受到模型假設以及損失函數非凸性和數據規模等因素影響等優點。
采用Python和Matlab環境來進行實驗,實驗中使用的軟件版本和環境配置如表2所示。

表2 實驗環境
筆者數據采用中文維基百科和百度百科中的中文百科語料,隨機選取了語料庫中500 000 條文本作為訓練數據,并且隨機抽取了人物、地理、生物、科技、建筑等5大類1 000 條文本作為測試數據。最終測試數據包含2 個部分,分別為人工標記的實際類別編號和測試文章的主題內容。
因為UCo-training的基礎算法Co-training需要額外對數據進行人工標記,不屬于無監督的算法,因此本實驗采取UCo-training算法和無監督聚類算法進行比較。
根據已有的數據源,筆者對改進算法和傳統的無監督算法LDA、TF-WIDF、多視圖算法MvNMF[8](Multi-view non-negative matrix factorization)和SM2SC[9](Split multiplicative multi-view subspace clustering)進行了準確性實驗。筆者將以聚類算法中經常使用的4 個評價標準對實驗結果進行評判,這種評價標準分別為P值(Precision精確率)、R值(Recall召回率)、F值(F1-Measure)和NMI(Normalized mutual information 標準化互信息)。因為F值是由P值和R值綜合而成的一個評價數據,同時NMI值是一種用于衡量聚類算法結果和實際結果相似情況的標準,因此,筆者以F值和NMI值作為主要因子對文本聚類結果進行評價。其中LDA算法設置為文本聚類結果準確度最高的850 個主題,其他多視圖聚類算法沿用了TF-WIDF和LDA在850 個主題下生成的特征向量數據進行聚類。UCo-training算法在計算中設置的迭代次數為15 次,譜聚類算法迭代次數為10 次,獲得實際聚類情況數據如表3所示。

表3 同一數據源下不同聚類算法的準確性
由表3可知:改進型的UCo-training算法相對于傳統的聚類算法LDA和改進的TF-WIDF算法在聚類精度上有了相當大的提升。例如在NMI值中,UCo-training算法相對于傳統算法中結果最佳的LDA算法有近10%的準確率提升;在F值中,UCo-training算法相對于LDA算法也有近8%的提升。同時,相對于其他2 種多視圖聚類算法,在同一特征矩陣組作為多視圖數據源的情況下,筆者的UCo-training算法相對2 個多視圖聚類算法中聚類結果最好的SM2SC算法,NMI值提升了近7%,F值提升了近5%。這說明在本數據源下,筆者算法相較于其他2 種多視圖聚類算法具有一定的聚類優勢。
在上述數據源下,為了解譜聚類底層聚類算法對聚類結果的影響,筆者針對譜聚類算法的底層聚類算法進行了修改。從結果數據上看:層次聚類算法相對于基于劃分的K中心值算法,有著更高的準確度,所以筆者認為基于層次的聚類算法可能更適用于文本聚類。
同時,因為在不同主題下,LDA算法生成的特征向量組產生的聚類結果一定出現聚類結果的不同。為確認LDA算法中主題數的改變導致特征向量變化所生成的不同特征向量組對UCo-training算法的影響,筆者選擇了在同等迭代次數下,以10 個主題為間隔,LDA算法的改變對UCo-training算法的影響如圖4所示。

圖4 不同主題下的不同算法的F值、NMI值情況
由圖4可知:在2 種主要的評價標準中,3 種算法的趨勢值幾乎相同,同時根據其評價標準定義,可以認為采用其中一種標準就可以代表另外一種標準的結果。因此筆者以NMI值為例進行說明,仍然以實際半監督迭代次數為15 次,譜聚類算法迭代次數為10 次作為基礎標準,可以明顯看到,與其他傳統聚類算法相比,改進的多視圖譜聚類算法NMI率部分與傳統算法相近,有較小的提升,在部分情況下,其NMI率遠遠超出傳統算法。在850 個主題時,LDA生成了最優主題數量,其生成的聚類結果也是最佳的。此時850 個主題下LDA生成的特征向量組通過UCo-training算法生成的聚類結果的NMI值也是最優的。因此,在最優主題下生成的特征向量組,可以和其他特征最優特征組,生成最優的多視圖聚類結果。
在上述實驗中,筆者采用的迭代方式均為譜聚類迭代10 次,同樣的迭代次數對于改進型算法的最好結果具有一定的影響,對于不同次數譜聚類迭代的實驗情況如圖5所示。

圖5 不同迭代次數下的NMI值改變情況
由圖5可知:以850 個主題為基準,在前6 次迭代中,UCo-training算法的NMI率隨著迭代次數的不斷增加也在增加;當迭代至7 次后,迭代次數的增加并不會導致NMI率繼續上升,說明聚類情況已經收斂。因此可以用較少的迭代次數,例如15 次作為實際迭代的上限,這樣可以用更少的時間實現較好的迭代效果,減少因迭代次數上升而導致的線性時間消耗。
根據以上實驗結果,筆者認為基于層次聚類的多視圖譜聚類算法,雖然在實際使用中相較于傳統的聚類算法可能有更高的時間消耗,但是對于聚類情況來說有著更好的準確性,同時在較低迭代次數中能夠獲得較高準確度的特性,因此在現實項目中可以較好地代替傳統聚類算法對文本進行聚類。
通過對半監督算法的研究,在LDA主題聚類算法、TF-WIDF算法和譜聚類算法的基礎上,筆者提出了一種改進型多視圖譜聚類算法。該算法采用LDA和TF-WIDF算法作為特征向量組提取算法,使用基于譜聚類的改進型半監督算法作為文本聚類算法,同時對于同一數據源下不同算法的準確率、不同主題數下不同算法的聚類準確率和不同迭代次數下UCo-training算法的準確率情況分別進行了實驗。實驗結果表明:UCo-training算法相較于其他2 種傳統文本聚類算法的聚類準確率有了較大的提升;在較少次數的迭代情況下,聚類情況也有相對較高的準確率,但仍然存在聚類算法耗時的問題;從運行速度等情況來看,UCo-training算法還有很大的提升空間。目前,其他多視圖聚類算法在應用中也具有較高的準確性和效率,下一步研究可以利用其他半監督多視圖聚類算法對筆者提出的半監督算法進行改進,以減少該算法的耗時,同時可以繼續改進特征向量組的提取算法,以獲得更準確的向量組,提高聚類準確性。