王志凱 於躍成 蔡 瑩 嚴(yán)長(zhǎng)春
(江蘇科技大學(xué)計(jì)算機(jī)學(xué)院 鎮(zhèn)江 212003)
隨著互聯(lián)網(wǎng)時(shí)代的發(fā)展,人們已經(jīng)步入了大數(shù)據(jù)時(shí)代,社交網(wǎng)絡(luò)上的數(shù)據(jù)也是如此。分析微博數(shù)據(jù)和微博用戶(hù)劃分方法已成為網(wǎng)絡(luò)數(shù)據(jù)挖掘的研究重點(diǎn)之一。而這之中涉及的主要方法有文本聚類(lèi)和主題分析等。
值得注意的是,微博上的數(shù)據(jù)普遍存在著文本較短、口語(yǔ)化現(xiàn)象較為嚴(yán)重等問(wèn)題。以新浪微博為例,它限制一篇微博的字?jǐn)?shù)不超過(guò)150 字。同時(shí),由于微博上的言論自由,個(gè)性化的語(yǔ)言通常伴隨著大量的省略和指代。微博博文的這些特點(diǎn),為通過(guò)文本方式處理信息帶來(lái)很大的困難,采用普通方法分析這些數(shù)據(jù)時(shí)難以獲得有效的結(jié)果。
針對(duì)以上問(wèn)題,結(jié)合微博數(shù)據(jù)特點(diǎn)來(lái)改進(jìn)聚類(lèi)過(guò)程的實(shí)現(xiàn)成為近年來(lái)分析微博數(shù)據(jù)的主流技術(shù)之一。劉濤[1]等通過(guò)在不同的聚類(lèi)過(guò)程中使用有監(jiān)督的方式選擇特征,大幅提高了文本聚類(lèi)的性能。彭京[2]等針對(duì)文本數(shù)據(jù)維度高和數(shù)據(jù)稀疏的特點(diǎn),在內(nèi)積空間的基礎(chǔ)上建立了詞和文本的相似度度量方法,獲得了比傳統(tǒng)方法質(zhì)量更好的分析結(jié)果。文獻(xiàn)[3]以Hownet 的情感詞典為基礎(chǔ),構(gòu)建了一個(gè)自動(dòng)機(jī)來(lái)計(jì)算短文本的情感傾向。相比于一般文本分類(lèi)方法,改方法在短文本上優(yōu)勢(shì)明顯。張猛[4]等通過(guò)獲取文本的細(xì)化簇并結(jié)合了曲線(xiàn)的多項(xiàng)式擬合技術(shù),在細(xì)化簇上進(jìn)行聚類(lèi),改進(jìn)了文本聚類(lèi)方法。索紅光[5]等采用了局部搜索優(yōu)化的思想,根據(jù)目標(biāo)函數(shù)值的變化對(duì)聚類(lèi)的結(jié)果作再次劃分,改進(jìn)了K-means在文本聚類(lèi)上的應(yīng)用。
另一方面,從微博上的用戶(hù)發(fā)布微博的行為來(lái)看,其出發(fā)點(diǎn)包括轉(zhuǎn)發(fā)好友的博文、和好友互動(dòng)、遵從個(gè)人的興趣愛(ài)好[6~7]等情況?;谏鲜鎏攸c(diǎn),利用微博用戶(hù)行為信息成為微博數(shù)據(jù)分析的另一類(lèi)主流方法。Griven[8]等在2002 年提出了社交網(wǎng)絡(luò)中社區(qū)的概念。Gao Q[9]等結(jié)合用戶(hù)之間的關(guān)系和文本信息,把用戶(hù)劃分成不同拓?fù)浣Y(jié)構(gòu)上的群體。Java A[10]等通過(guò)對(duì)twitter上用戶(hù)的位置信息的研究發(fā)現(xiàn),互動(dòng)性強(qiáng)或者相關(guān)性高的用戶(hù)會(huì)逐漸形成一個(gè)個(gè)群體。Liu[11]等提出的NAS算法在挖掘社區(qū)信息是考慮了節(jié)點(diǎn)屬性的相似度。由此可見(jiàn),對(duì)微博用戶(hù)進(jìn)行劃分僅僅抓住博文信息是不夠的。
受以上方法的啟發(fā),針對(duì)微博上新用戶(hù)的博文內(nèi)容過(guò)少、朋友圈狹窄,部分用戶(hù)博文內(nèi)容過(guò)短、主題單一等問(wèn)題,以K-means 算法為基礎(chǔ),結(jié)合半監(jiān)督聚類(lèi)的思想,提出了一種基于用戶(hù)關(guān)系和行為的弱約束K-means 聚類(lèi)算法來(lái)對(duì)微博上的用戶(hù)進(jìn)行劃分。以改善標(biāo)準(zhǔn)K-means 進(jìn)行文本聚類(lèi)時(shí)過(guò)于依賴(lài)詞頻的缺陷。
傳統(tǒng)的K-means[12~14]算法是一種無(wú)監(jiān)督的聚類(lèi)算法,這種方式的聚類(lèi)結(jié)果很可能會(huì)與我們的理想結(jié)果有一定的差距。因此,我們希望能夠附加一些條件,使得聚類(lèi)算法的結(jié)果更符合預(yù)期的標(biāo)準(zhǔn)。
約束聚類(lèi)是一種將指定領(lǐng)域的知識(shí)通過(guò)“信息約束”的方式添加到聚類(lèi)過(guò)程的方法。Wagstaff等[15]提出了must link 以及cannot link 這兩種形式的約束。must link 我們可以稱(chēng)之為樣本間的正約束,cannot link 我們可以稱(chēng)之為樣本間的負(fù)約束。在該思想中,若一對(duì)樣本(xi,xj)∈ML,即(xi,xj)滿(mǎn)足must link 約束條件,則樣本xi和樣本xj屬于同一個(gè)簇;反之,如果一對(duì)樣本(xi,xj)∈NL,即(xi,xj)滿(mǎn)足cannot link約束條件,則樣本xi和樣本xj不屬于同一個(gè)簇。其中集合ML則被稱(chēng)為正約束的樣本集,集合NL被稱(chēng)為負(fù)約束的樣本集。PCC[16]聚類(lèi) 算 法(Pairwise Constrained Clustering)在 傳 統(tǒng)K-means的基礎(chǔ)上,在聚類(lèi)的時(shí)候引入了約束性的監(jiān)督信息。將約束條件添加到K-means 的目標(biāo)函數(shù)中,依靠約束信息,使得算法在執(zhí)行的時(shí)候有條件的進(jìn)行搜索,以保證滿(mǎn)足正約束的樣本對(duì)能夠?qū)儆谕粋€(gè)簇,滿(mǎn)足負(fù)約束的樣本對(duì)不屬于同一個(gè)樣本簇。由于基于劃分的聚類(lèi)算法不能直接處理約束條件,需要優(yōu)化目標(biāo),使用懲罰約束參數(shù),使得樣本對(duì)在滿(mǎn)足約束條件的同時(shí),每個(gè)樣本到簇中心的距離和能夠最小。
因此,基于約束的K-means聚類(lèi)的目標(biāo)函數(shù)如下所示。
其中,Zi和Zj為樣本xa和xb的簇標(biāo)記;ML和NL分別表示must link 和cannot link 兩種形式的約束集;Wij表示這兩種約束違反的代價(jià)權(quán)重。是一個(gè)指示函數(shù),用來(lái)表示[true]=1,否則[false]=0,表示第k個(gè)簇的質(zhì)心。
在微博中,一個(gè)用戶(hù)發(fā)布的博文,往往是轉(zhuǎn)發(fā)的好友博文、與好友的互動(dòng)或者是自身興趣愛(ài)好的體現(xiàn)。每個(gè)微博文本都包含著評(píng)論、轉(zhuǎn)發(fā)、點(diǎn)贊等用戶(hù)行為,任何一篇博文都不是獨(dú)立存在的。在傳統(tǒng)的對(duì)微博用戶(hù)進(jìn)行劃分的過(guò)程中,只重視了文本的信息,而忽視了用戶(hù)的行為信息。因此,本節(jié)提出了一種基于用戶(hù)行為的改進(jìn)K-means 弱約束聚類(lèi),以通過(guò)引入用戶(hù)行為信息來(lái)改善僅僅使用文本信息來(lái)劃分微博用戶(hù)時(shí)所面臨的問(wèn)題。
根據(jù)微博博文中反映出來(lái)的用戶(hù)關(guān)系和用戶(hù)行為,我們使用聚類(lèi)算法對(duì)微博用戶(hù)進(jìn)行劃分的時(shí)候,給予每個(gè)樣本一個(gè)約束信息,同時(shí)保留博文之間的文本關(guān)系。為了防止數(shù)據(jù)信息偏差過(guò)大,我們?cè)谶x取用戶(hù)約束關(guān)系時(shí)使用了三層關(guān)系網(wǎng)的數(shù)據(jù)。如圖1 所示,在描述目標(biāo)用戶(hù)的約束信息時(shí),選擇目標(biāo)用戶(hù)自身關(guān)注的用戶(hù)。直覺(jué)上,目標(biāo)用戶(hù)關(guān)注的用戶(hù)與目標(biāo)用戶(hù)存在共同興趣的概率要高于隨機(jī)選擇的用戶(hù),因此,為了改善新用戶(hù)直接關(guān)系用戶(hù)過(guò)少,約束信息太弱的現(xiàn)象,選擇目標(biāo)用戶(hù)關(guān)注的用戶(hù)所關(guān)注的用戶(hù)作為當(dāng)前目標(biāo)用戶(hù)的弱約束信息,以進(jìn)一步改善新用戶(hù)易被忽略的問(wèn)題。
通常,我們判斷一個(gè)用戶(hù)對(duì)一篇微博博文是否感興趣的標(biāo)準(zhǔn)是通過(guò)轉(zhuǎn)發(fā)、評(píng)價(jià)和點(diǎn)贊來(lái)計(jì)算的。但是由于在數(shù)據(jù)獲取上不便于得知一個(gè)用戶(hù)是否對(duì)于另一篇博文有點(diǎn)贊行為。因此,我們利用一個(gè)用戶(hù)對(duì)其他用戶(hù)的轉(zhuǎn)發(fā)和評(píng)價(jià)行為來(lái)控制約束項(xiàng),通過(guò)微博博文來(lái)對(duì)用戶(hù)進(jìn)行約束聚類(lèi)。
圖1 樣本選取圖示
假設(shè)一個(gè)用戶(hù)有評(píng)價(jià)行為Com 和轉(zhuǎn)發(fā)行為For,用Act 來(lái)表示兩個(gè)用戶(hù)之間關(guān)系的親密程度。由于一個(gè)用戶(hù)可能有多個(gè)關(guān)注的對(duì)象,因此用戶(hù)xi與另一個(gè)用戶(hù)xj之間關(guān)系的親密度可以量化為Actij,可用式(2)表示。
其中,Comij表示用戶(hù)xi對(duì)用戶(hù)xj的博文的評(píng)價(jià)次數(shù),F(xiàn)orij表示用戶(hù)xi對(duì)用戶(hù)xj的轉(zhuǎn)發(fā)次數(shù)。Com表示用戶(hù)i對(duì)所有好友的評(píng)論總數(shù),F(xiàn)or 表示用戶(hù)i對(duì)所有關(guān)注的好友的轉(zhuǎn)發(fā)總數(shù)。本文用用戶(hù)xi對(duì)用戶(hù)xj的博文的評(píng)價(jià)次數(shù)與轉(zhuǎn)發(fā)次數(shù)的和與用戶(hù)xi對(duì)于博文總共的評(píng)價(jià)次數(shù)和轉(zhuǎn)發(fā)次數(shù)的和的比值,來(lái)比較用戶(hù)xj相較于用戶(hù)的xi的親密程度。
如式(3)所示的聚類(lèi)目標(biāo)函數(shù),本文提出的用戶(hù)劃分方法只是建議有關(guān)注關(guān)系并且用戶(hù)關(guān)系相對(duì)親密的用戶(hù),在根據(jù)文本內(nèi)容進(jìn)行聚類(lèi)的時(shí)候能夠劃分到一個(gè)用戶(hù)群體中去,并沒(méi)有強(qiáng)制規(guī)定兩個(gè)有關(guān)注關(guān)系的用戶(hù)必須要?jiǎng)澐值酵粋€(gè)用戶(hù)群體中去。因此,相比于經(jīng)典的約束K-means 聚類(lèi),本文提出的方法是一種弱約束的K-means 聚類(lèi)方法。算法流程如圖2所示。
圖2 結(jié)合用戶(hù)行為的約束聚類(lèi)算法
其中,Ck表示第k個(gè)簇的樣本集。
由于考慮到實(shí)驗(yàn)的數(shù)據(jù)是要來(lái)自于微博平臺(tái),并且很多信息來(lái)自于博文和用戶(hù)的信息,因此我們采用以下三種方式相結(jié)合的方式:1)通過(guò)網(wǎng)絡(luò)爬蟲(chóng),將爬出的網(wǎng)頁(yè)解析,運(yùn)用正則表達(dá)式、人工觀察相結(jié)合的方式,獲取所需的數(shù)據(jù)。這個(gè)方式目的性明確,只是獲取數(shù)據(jù)的方式最為復(fù)雜且速度相對(duì)比較慢;2)通過(guò)申請(qǐng)新浪微博的公開(kāi)的API的方式獲取數(shù)據(jù),通過(guò)提供的指定接口,請(qǐng)求需求的數(shù)據(jù);3)通過(guò)網(wǎng)上已經(jīng)公開(kāi)的一些微博數(shù)據(jù)。最經(jīng)常使用的公開(kāi)數(shù)據(jù)源的網(wǎng)站是中國(guó)爬盟。
為了保證獲取的數(shù)據(jù)源的質(zhì)量,需要我們排除一些無(wú)用的數(shù)據(jù),合適的數(shù)據(jù)有利于我們有效地分析數(shù)據(jù),因此,在獲取數(shù)據(jù)之后,必須采取有效的方法對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。在數(shù)據(jù)預(yù)處理階段,首先刪除一些關(guān)注用戶(hù)過(guò)少的用戶(hù)(僵尸用戶(hù)不利于我們后續(xù)的推薦),同時(shí)對(duì)于一定的時(shí)間段內(nèi),發(fā)布微博過(guò)少(不活躍用戶(hù))的用戶(hù),也以予刪除。同時(shí),對(duì)于予以采用數(shù)據(jù)的用戶(hù),記錄下博文的評(píng)論數(shù)、轉(zhuǎn)發(fā)數(shù)、點(diǎn)贊數(shù)和用戶(hù)標(biāo)簽信息(如果有的話(huà))。本節(jié)實(shí)驗(yàn)的數(shù)據(jù)篩選標(biāo)準(zhǔn)如下:
1)每條博文去除停用詞、分詞后,詞語(yǔ)的數(shù)量大于3;
2)最近三個(gè)月內(nèi)有過(guò)發(fā)布微博或者轉(zhuǎn)發(fā)微博的行為;
3)關(guān)注的用戶(hù)量至少有10人;
4)發(fā)表的總微博數(shù)大于等于10。
對(duì)于從用戶(hù)獲取的微博文本信息,使用Jieba分詞算法進(jìn)行分詞、去除停用詞并且去除一些過(guò)短的文本、文本中的表情、顏文字等。
本節(jié)提出的用戶(hù)劃分方法不同于傳統(tǒng)的k-means 算法,由于在通過(guò)聚類(lèi)劃分用戶(hù)的時(shí)候考慮到了用戶(hù)的關(guān)注關(guān)系,因此,實(shí)驗(yàn)采用模塊度Q值來(lái)作為評(píng)價(jià)用戶(hù)劃分的標(biāo)準(zhǔn)。
模塊度度值可以用來(lái)描述社交網(wǎng)絡(luò)中社區(qū)結(jié)構(gòu)好壞。模塊度Q 值可用用戶(hù)關(guān)系中實(shí)際的邊數(shù)減去隨機(jī)情況下用戶(hù)間的邊數(shù)。如式(4)所示。
其中,eii表示社區(qū)i 中,有關(guān)注關(guān)系的用戶(hù)間邊的個(gè)數(shù),ai表示社區(qū)i中,任意用戶(hù)相連邊的個(gè)數(shù)。
由于本文提出的約束信息是基于用戶(hù)關(guān)系和用戶(hù)的行為的聚類(lèi)。因此,在對(duì)用戶(hù)進(jìn)行劃分后,首先分析每個(gè)用戶(hù)群體中,滿(mǎn)足約束條件的用戶(hù)的個(gè)數(shù),分析弱約束聚類(lèi)的效果。
在下圖實(shí)驗(yàn)結(jié)果中,以選定的目標(biāo)用戶(hù)為中心,選取周?chē)?00 名,且在三個(gè)月內(nèi)發(fā)布微博數(shù)超過(guò)30 條的用戶(hù),總計(jì)7645 條微博文本。將周?chē)挠脩?hù)劃分為5、6、7、8、9、10 個(gè)用戶(hù)群體后,分析每個(gè)群體中有交互關(guān)系的用戶(hù)卻不在在一個(gè)群體中的個(gè)數(shù)、沒(méi)有關(guān)注交互卻仍在一個(gè)群體中的個(gè)數(shù)以及模塊度值。
圖3 反映了在不同的用戶(hù)群體數(shù)下,具有交互關(guān)系卻在不一個(gè)群體中的個(gè)數(shù)。
如圖3 所示,當(dāng)只使用K-means 方法,通過(guò)文本分析劃分微博用戶(hù)的時(shí)候,在所有用戶(hù)群體中,具有交互關(guān)系但是不在一個(gè)群體中的用戶(hù)數(shù)量隨著用戶(hù)群體的增加,呈現(xiàn)了逐漸增長(zhǎng)的態(tài)勢(shì),當(dāng)分為10 個(gè)用戶(hù)群體的時(shí)候,已經(jīng)有超過(guò)50%的用戶(hù)在被劃分的時(shí)候忽視了用戶(hù)間的交互信息。相比之下,使用約束K-means的方法劃分用戶(hù)群體的時(shí)候,隨著用戶(hù)群體的數(shù)量的增加,一直保持著將近80%的用戶(hù)能和與自己有交互關(guān)系的用戶(hù)位于同一個(gè)用戶(hù)群體中。
圖3 有交互關(guān)系但不在同個(gè)群體中的用戶(hù)數(shù)
綜上所述,由于微博中的任何博文都不是孤立存在的,當(dāng)只使用傳統(tǒng)的文本聚類(lèi)的方法劃分用戶(hù)時(shí),已經(jīng)把每個(gè)用戶(hù)的博文看作是孤立存在的。通過(guò)這種方式劃分出來(lái)的用戶(hù)群體只有詞之間的聯(lián)系,沒(méi)有交互性。相反,使用本文的方法劃分用戶(hù)時(shí),能較好地區(qū)分用戶(hù)的關(guān)系,相比于傳統(tǒng)的方法,具有較大的提升,更適合與微博用戶(hù)劃分。
根據(jù)本文的方法,分析了圖3 的數(shù)據(jù)后,還需要分析沒(méi)有交互關(guān)系卻被分到同一個(gè)群體中的數(shù)量。圖4 反映了用戶(hù)群體中沒(méi)有交互關(guān)系的用戶(hù)卻在同一個(gè)群體中的用戶(hù)數(shù)目。
圖4 無(wú)約束關(guān)系但卻在同個(gè)群體中的用戶(hù)數(shù)
通過(guò)比較兩種方法可以看出,傳統(tǒng)的聚類(lèi)相比本文提出的方法,同一個(gè)用戶(hù)群體中存在著更多的沒(méi)有交互關(guān)系的用戶(hù)。隨著用戶(hù)群體的增多,傳統(tǒng)的方法保持著較高的非關(guān)系用戶(hù),平均每200 個(gè)用戶(hù)就有80 個(gè)左右這樣的用戶(hù)。而本文提出的算法則較好地減少了這種用戶(hù),并且隨著用戶(hù)群體的增加這類(lèi)用戶(hù)對(duì)維持在55 左右。同時(shí)這也能證明本文的方法是一種弱約束的聚類(lèi)算法,它并沒(méi)有強(qiáng)制規(guī)定每個(gè)用戶(hù)群體中只能存在有交互關(guān)系的用戶(hù),只是建議將親密度比較高的用戶(hù)劃分在一個(gè)群體中。
由于微博用戶(hù)的劃分不能僅僅通過(guò)比較每個(gè)用戶(hù)群體的文本聚類(lèi)準(zhǔn)確度來(lái)判斷,因此為了評(píng)價(jià)本文的算法和傳統(tǒng)的K-means 算法在劃分用戶(hù)時(shí)的差異,實(shí)驗(yàn)使用模塊度值來(lái)評(píng)價(jià)兩種方法。結(jié)果如表1所示。
表1 兩種算法的模塊度值的比較
從表1 的實(shí)驗(yàn)結(jié)果可以看出,本文提出的方法在劃分微博用戶(hù)群體的時(shí)候,比傳統(tǒng)的只通過(guò)文本聚類(lèi)的方法更加的合理。在用戶(hù)群體個(gè)數(shù)從5 增長(zhǎng)的過(guò)程中,傳統(tǒng)的方法由于只關(guān)心了文本信息,因此在將用戶(hù)劃分后,模塊度值一直處在很低的水平,這也說(shuō)明傳統(tǒng)劃分方法結(jié)果雖然能使得每個(gè)群體中的用戶(hù)有相似的興趣,但是用戶(hù)之間卻都是陌生的,在處理微博上的新用戶(hù)或朋友少的用戶(hù)時(shí),效果不佳。
而本文的方法在劃分用戶(hù)群體時(shí),在微博用戶(hù)真實(shí)數(shù)據(jù)集下,當(dāng)用戶(hù)被劃分為7 個(gè)群體時(shí)效果達(dá)到了峰值,最佳結(jié)果是0.343966,這時(shí)構(gòu)成的用戶(hù)群體是最為穩(wěn)定的,同時(shí)也反映用戶(hù)在交友的過(guò)程中,興趣相似固然很重要,但是人與人之間能否溝通是不可忽略的。
本文主要針對(duì)網(wǎng)絡(luò)社交平臺(tái)下,劃分用戶(hù)群體時(shí)僅僅依賴(lài)用戶(hù)的微博文本,忽略了用戶(hù)間的內(nèi)在聯(lián)系等問(wèn)題,采用聚類(lèi)思想,改進(jìn)了用戶(hù)劃分的方式。提出了基于用戶(hù)關(guān)系和用戶(hù)緊密度的約束聚類(lèi),將單獨(dú)的用戶(hù)劃分成有內(nèi)部關(guān)聯(lián)的用戶(hù)群體,針對(duì)微博平臺(tái),進(jìn)行了適應(yīng)性的改進(jìn)并且通過(guò)實(shí)驗(yàn)數(shù)據(jù)的比較證明了結(jié)合了用戶(hù)間關(guān)注信息的約束聚類(lèi)能夠更好地劃分用戶(hù),適應(yīng)微博平臺(tái)。未來(lái)的工作中,將針對(duì)微博中朋友少的用戶(hù)、微博文本少的用戶(hù),改進(jìn)劃分用戶(hù)的方法。