王洪偉 段友祥
(中國(guó)石油大學(xué)(華東)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 青島 266580)
隨著互聯(lián)網(wǎng)的發(fā)展,人們正處于一個(gè)信息爆炸的時(shí)代。相比于過(guò)去的信息匱乏,面對(duì)現(xiàn)階段海量的信息數(shù)據(jù),對(duì)信息的篩選和過(guò)濾成為了衡量一個(gè)系統(tǒng)好壞的重要指標(biāo)。一個(gè)具有良好用戶體驗(yàn)的系統(tǒng),會(huì)將海量信息進(jìn)行篩選、過(guò)濾,將用戶最關(guān)注最感興趣的內(nèi)容展現(xiàn)在用戶面前。這將大大提升系統(tǒng)工作的效率,也會(huì)節(jié)省用戶篩選信息的時(shí)間。
微博作為當(dāng)下信息傳播的熱門(mén)載體,針對(duì)微博信息的推薦也成為了當(dāng)下研究的熱點(diǎn)。李敬等[1]基于話題標(biāo)簽來(lái)挖掘出有價(jià)值的主題信息,有效挖掘出不同微博類(lèi)型的主題分布;馬慧芳等[2]提出了基于多標(biāo)簽關(guān)聯(lián)關(guān)系的微博推薦算法,該算法通過(guò)挖掘被同一用戶標(biāo)注的多標(biāo)簽的內(nèi)在關(guān)聯(lián)以及被不同用戶標(biāo)注的多標(biāo)簽外在關(guān)聯(lián)來(lái)構(gòu)建用戶的興趣集;彭澤環(huán)等[3]在總結(jié)影響用戶微博興趣的基礎(chǔ)上,應(yīng)用潛在因素模型提出了社區(qū)熱點(diǎn)微博推薦系統(tǒng)。上述研究中,在數(shù)據(jù)集預(yù)處理上均采用了傳統(tǒng)的方法,導(dǎo)致用戶數(shù)據(jù)的稀疏性問(wèn)題沒(méi)有得到充分解決。本文著眼于對(duì)微博數(shù)據(jù)集的預(yù)處理,并基于此提出一種混合推薦算法,基本思想是利用中文分詞技術(shù)提取文本內(nèi)容中的關(guān)鍵字,將關(guān)鍵字作為微博內(nèi)容的特征屬性,用于樸素貝葉斯分類(lèi)。篩選出與待推薦用戶關(guān)聯(lián)度高的微博數(shù)據(jù)后,通過(guò)基于用戶的協(xié)同過(guò)濾算法,計(jì)算用戶之間的相似度,求解最近鄰居,計(jì)算得到Top-N的推薦列表。
針對(duì)文本數(shù)據(jù)的分析,需要將一段連續(xù)文字按照一定的規(guī)則重新組合成詞序列,形成關(guān)鍵字詞集合,即中文分詞技術(shù)[4],它是文本內(nèi)容分析和挖掘的基礎(chǔ)。
中文分詞相較于英文而言,詞與詞之間缺乏明確的界限和分隔符,使得詞組劃分上存在不少技術(shù)上的困難。目前主流的中文分詞算法有基于辭典的方法、基于統(tǒng)計(jì)的方法、基于規(guī)則的方法等,其中基于辭典的方法是按照一定策略將待分析的漢字串與一個(gè)“大機(jī)器詞典”中的詞條進(jìn)行匹配,從而實(shí)現(xiàn)分詞,并引入停用詞的概念,對(duì)于一些功能詞匯和常用詞匯進(jìn)行摒除,以獲得更具代表性的關(guān)鍵字詞集合作為標(biāo)識(shí)句子的特征屬性。本文使用基于java語(yǔ)言開(kāi)發(fā)的輕量級(jí)的中文分詞工具包-IK Analyzer[5],通過(guò)實(shí)驗(yàn)表明,該分詞工具包具有良好的分詞效果。
文本分類(lèi)技術(shù)是組織和管理文本信息的重要和有效手段。利用分詞得到的文本關(guān)鍵字、關(guān)鍵詞組等屬性,采用分類(lèi)技術(shù)篩選數(shù)據(jù)集中與用戶感興趣的微博(包括用戶發(fā)表、轉(zhuǎn)發(fā)、點(diǎn)贊、評(píng)論等)具備強(qiáng)關(guān)聯(lián)關(guān)系的微博數(shù)據(jù),排除掉大量不相關(guān)數(shù)據(jù)的干擾,以期在推薦算法中得到更好的推薦效果。
主流的分類(lèi)方法有基于統(tǒng)計(jì)的分類(lèi)方法、基于規(guī)則的分類(lèi)方法和基于連接的分類(lèi)方法等。樸素貝葉斯分類(lèi)[6~7]是一種穩(wěn)定、簡(jiǎn)單、高效的統(tǒng)計(jì)分類(lèi)方法,在分類(lèi)問(wèn)題中被廣泛應(yīng)用。
樸素貝葉斯分類(lèi)是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類(lèi)法。設(shè)X={x1,x2,x3,…,xm}為一個(gè)待分類(lèi)項(xiàng),xi為X 的一個(gè)特征屬性。存在待分類(lèi)集合Y={y1,y2,y3,…,yn},其中P(yk|X)表示X 在分類(lèi)yk下的概率。
已知貝葉斯公式(1):
要求解X 在給定任一分類(lèi)下的概率P(y1|X),P(y2|X),…,P(yn|X)時(shí),由上述貝葉斯公式(1)可知P(X)相等,所以只需計(jì)算出P(Y|X)= P(X|Y)P(Y),即可根據(jù)概率最大值P(yk|X)= MAX{P(y1|X),P(y2|X),…,P(yn|X)}得到物品的最終分類(lèi)結(jié)果。
本文中P(X|Y)為文本分詞后得到的關(guān)鍵字/詞組在分類(lèi)文檔中出現(xiàn)的概率,P(Y)為某分類(lèi)下文檔數(shù)目占數(shù)據(jù)集總文檔數(shù)目的比例。
協(xié)同過(guò)濾是目前應(yīng)用最廣泛的推薦算法,它僅僅通過(guò)了解用戶與物品之間的關(guān)系進(jìn)行推薦,而不需要考慮到物品本身的屬性,該類(lèi)方法主要有兩類(lèi):一類(lèi)是基于用戶的協(xié)同過(guò)濾推薦算法[8~9],其核心思想是根據(jù)用戶對(duì)物品的偏好計(jì)算相似度,找到相鄰鄰居用戶,然后將鄰居喜歡的物品推薦給當(dāng)前用戶。另一類(lèi)是基于物品的協(xié)同過(guò)濾算法[10~11],根據(jù)用戶對(duì)物品的偏好找到相似的物品,然后根據(jù)用戶的歷史偏好,推薦相似的物品。兩類(lèi)算法有著鮮明的優(yōu)缺點(diǎn)和適應(yīng)場(chǎng)景。其中,基于用戶的協(xié)同過(guò)濾算法適用于用戶較少的場(chǎng)合,如果用戶很多,計(jì)算用戶相似度矩陣代價(jià)很大,當(dāng)用戶產(chǎn)生新行為時(shí),不一定造成推薦結(jié)果的立即變化,具有較強(qiáng)的時(shí)效性;基于物品的協(xié)同過(guò)濾算法適用于物品數(shù)明顯小于用戶數(shù)的場(chǎng)合,如果物品特別多,計(jì)算物品相似矩陣的代價(jià)也會(huì)很大,當(dāng)用戶產(chǎn)生新行為時(shí),一定會(huì)導(dǎo)致推薦結(jié)果的實(shí)時(shí)變化,適用于用戶個(gè)性化需求強(qiáng)烈的區(qū)域。
根據(jù)本文的應(yīng)用特點(diǎn),選擇采用基于用戶的協(xié)同過(guò)濾推薦算法。用U ={u1,u2,u3,…,un}代表用戶集合,用T={t1,t2,t3,…,tm}代表微博文本內(nèi)容集合,用S 代表評(píng)分項(xiàng)si,j的n*m 評(píng)分矩陣,其中i∈{1,2,…,n},j ∈{1,2,…,m}。
通過(guò)皮爾遜相關(guān)系數(shù)計(jì)算用戶a和用戶b之間的相似性,如式(2)。
其中,sa,t代表用戶a 對(duì)文本t 的評(píng)分,sˉa代表用戶a對(duì)其關(guān)聯(lián)微博文本數(shù)據(jù)的平均評(píng)分,sb,t代表用戶b對(duì)文本t 的評(píng)分,sˉb代表用戶b 對(duì)其關(guān)聯(lián)微博文本數(shù)據(jù)的平均評(píng)分。用戶對(duì)其關(guān)聯(lián)微博文本數(shù)據(jù)的評(píng)分基于用戶的行為轉(zhuǎn)化而來(lái),眾所周知,微博用戶可以發(fā)表微博、對(duì)微博進(jìn)行點(diǎn)贊、評(píng)論、轉(zhuǎn)發(fā)等操作,基于不同的動(dòng)作,本文在對(duì)微博內(nèi)容預(yù)處理時(shí)為其賦予了不同的評(píng)分權(quán)重,從而將用戶行為轉(zhuǎn)化為量化評(píng)分,得到用戶、微博內(nèi)容、評(píng)分的三元矩陣。
計(jì)算出用戶之間的相似度后,挑選相似鄰居時(shí)采用了基于相似度門(mén)檻的鄰居選取法,以當(dāng)前點(diǎn)為中心,選取距離為K 區(qū)域中的所有點(diǎn)作為當(dāng)前點(diǎn)的鄰居,該法相較于固定數(shù)量鄰居選取法,得到的相似鄰居數(shù)目不固定,但是此法排除了孤立點(diǎn)對(duì)于鄰居選取的干擾,避免了相似度出現(xiàn)較大的誤差。根據(jù)鄰居的相似度權(quán)重以及他們對(duì)物品的偏好,預(yù)測(cè)當(dāng)前用戶可能感興趣的未涉及物品的評(píng)分,根據(jù)評(píng)分高低得到推薦列表,選取Top-N 推薦給當(dāng)前用戶。其中,評(píng)分預(yù)測(cè)公式如式(3)。
此公式預(yù)測(cè)用戶a 對(duì)微博內(nèi)容t 的評(píng)分,其中Sim(a,b)代表用戶a 和用戶b 的相似度,N 代表用戶a的最近鄰居。
混合推薦算法包括預(yù)處理、分類(lèi)、推薦三部分。
對(duì)于數(shù)據(jù)集的預(yù)處理[12],目的是將原始數(shù)據(jù)轉(zhuǎn)化為蘊(yùn)含一定規(guī)則的結(jié)構(gòu)化數(shù)據(jù),以便于算法處理。
微博中能反映用戶行為的數(shù)據(jù)分為以下四類(lèi):用戶發(fā)表的微博、用戶點(diǎn)贊的微博、用戶評(píng)論的微博、用戶轉(zhuǎn)發(fā)的微博。本文使用的微博數(shù)據(jù)集中包含用戶名、微博內(nèi)容、用戶行為等信息,用戶行為中,定義publish表示發(fā)表,like表示點(diǎn)贊,forward表示轉(zhuǎn)發(fā),comment 表示評(píng)論,定義scorei,j為用戶i 對(duì)文本數(shù)據(jù)j的評(píng)分。評(píng)分計(jì)算公式如式(4)。
其中,publish,like,forward,comment 取值為0 或者1,代表該行為存在或者不存在。a,b,c,d代表一組給定的常數(shù),根據(jù)經(jīng)驗(yàn),用戶發(fā)表微博的權(quán)重應(yīng)當(dāng)大于轉(zhuǎn)發(fā)微博,轉(zhuǎn)發(fā)的權(quán)重應(yīng)當(dāng)大于評(píng)論,評(píng)論的權(quán)重應(yīng)當(dāng)大于點(diǎn)贊,因此本文按照權(quán)重大小給定一組常數(shù)值,即可計(jì)算得到用戶i對(duì)其關(guān)聯(lián)微博j的評(píng)分?jǐn)?shù)據(jù)。
現(xiàn)行評(píng)分制系統(tǒng)中,大多采用5 分制,本文沿用此評(píng)分機(jī)制,引入式(5)將上述評(píng)分結(jié)果轉(zhuǎn)化為5分制。
預(yù)處理完數(shù)據(jù)集后,得到用戶、微博文本數(shù)據(jù)、評(píng)分值的三元矩陣(u,t,s),本文將數(shù)據(jù)集中獲得的評(píng)分?jǐn)?shù)據(jù)1~5 分作為五個(gè)分類(lèi),將用戶相關(guān)的微博數(shù)據(jù),包括用戶發(fā)表、點(diǎn)贊、評(píng)論、轉(zhuǎn)發(fā)的微博作為訓(xùn)練集,計(jì)算數(shù)據(jù)集中其他微博內(nèi)容所屬的分類(lèi),其中分類(lèi)為3、4、5 的微博數(shù)據(jù)與當(dāng)前用戶感興趣的微博具有強(qiáng)相關(guān)性,關(guān)鍵字、詞的匹配程度較高,則將該三個(gè)分類(lèi)下的微博數(shù)據(jù)結(jié)合用戶訓(xùn)練集作為協(xié)同過(guò)濾推薦算法的最終數(shù)據(jù)集。
本文中貝葉斯算法流程如圖1所示。
圖1 貝葉斯分類(lèi)流程圖
其中,訓(xùn)練集數(shù)據(jù)中,每個(gè)分類(lèi)下包含若干文檔,文檔中包含該用戶關(guān)聯(lián)的微博內(nèi)容。計(jì)算P(特征屬性|分類(lèi))時(shí),通過(guò)字符串匹配的方式計(jì)算出某文檔中是否包含該特征屬性關(guān)鍵字/詞組,給定包含關(guān)鍵字/詞組的文本數(shù)Nxc,其初始值為0,若文檔中包含該關(guān)鍵字/詞組,則Nxc+1,分類(lèi)下所有的文檔數(shù)目Nc為一固定值,因此所得類(lèi)條件概率P(特征屬性|分類(lèi))=Nxc/Nc,考慮到可能存在的情況是:訓(xùn)練集中,多樣本的取值可能并不在其中,但是這并不代表這種情況發(fā)生的概率為0,換言之:未被觀測(cè)到,不代表不會(huì)發(fā)生。因此引入拉普拉斯修正,即式(6)被修正為式(7):
其中,N 為分類(lèi)總數(shù),得到本文中拉普拉斯修正后的公式為P(特征屬性|分類(lèi))= Nxc + 1/ Nc + V,V代表分類(lèi)總數(shù),本文中V=5。
貝葉斯分類(lèi)通過(guò)中文分詞法提取文本中的關(guān)鍵字/詞組作為特征屬性,計(jì)算出每一個(gè)特征詞在特定分類(lèi)中的概率,因?yàn)樘卣鲗傩灾g相互獨(dú)立,將計(jì)算得到的每一個(gè)特征屬性的類(lèi)條件概率相乘后再乘以此分類(lèi)在數(shù)據(jù)集文本中所占的比例-先驗(yàn)概率,即可計(jì)算得到后驗(yàn)概率,也就是文本屬于某個(gè)特定分類(lèi)下的概率。
通過(guò)貝葉斯分類(lèi)法將計(jì)算屬于3、4、5 分類(lèi)下的微博數(shù)據(jù)保留并結(jié)合待推薦用戶的訓(xùn)練集數(shù)據(jù)形成新的數(shù)據(jù)集,后續(xù)的協(xié)同過(guò)濾算法在此數(shù)據(jù)集基礎(chǔ)上進(jìn)行微博個(gè)性化內(nèi)容推薦。
在微博推薦內(nèi)容領(lǐng)域[13],每天都會(huì)產(chǎn)生海量的實(shí)時(shí)數(shù)據(jù),相比較而言,用戶的數(shù)目是相對(duì)固定的,因此本文選用基于用戶的協(xié)同過(guò)濾算法進(jìn)行微博內(nèi)容的個(gè)性化推薦。針對(duì)篩選后的數(shù)據(jù)集,數(shù)據(jù)內(nèi)容由三元矩陣(微博用戶,微博內(nèi)容,用戶評(píng)分)組成,算法流程如圖2所示。
圖2 基于用戶的協(xié)同過(guò)濾算法流程圖
本文在實(shí)驗(yàn)中使用Apache Software Foundation(ASF)旗下的一個(gè)開(kāi)源項(xiàng)目-Mahout 來(lái)實(shí)現(xiàn)基于用戶的協(xié)同過(guò)濾推薦算法,算法中對(duì)于用戶和物品的處理是基于long類(lèi)型數(shù)據(jù)處理的,因此需要對(duì)三元矩陣中的微博用戶和微博內(nèi)容進(jìn)行再處理,策略如下:
1)構(gòu)造微博用戶ID 發(fā)號(hào)規(guī)則,設(shè)定發(fā)號(hào)規(guī)則為5 位數(shù)字,從“00001”開(kāi)始順?lè)l(fā)號(hào),將該映射關(guān)系記錄到數(shù)據(jù)庫(kù)表中。
2)同理,可構(gòu)造微博內(nèi)容ID 的發(fā)號(hào)規(guī)則,設(shè)定發(fā)號(hào)規(guī)則為6 位數(shù)字,從“000001”開(kāi)始順?lè)l(fā)號(hào),同樣將該映射關(guān)系記錄到數(shù)據(jù)表中。
將微博用戶名和微博內(nèi)容分別與long 類(lèi)型數(shù)據(jù)映射完畢后,得到如下格式的三元矩陣數(shù)據(jù)集:
Mahout提供的基于用戶的協(xié)同過(guò)濾算法中,通過(guò)傳入的用戶ID 和待推薦的物品數(shù)量計(jì)算得到推薦列表-微博內(nèi)容ID,通過(guò)關(guān)聯(lián)數(shù)據(jù)表匹配到最終的待推薦微博內(nèi)容列表。
本文使用的微博數(shù)據(jù)集來(lái)源于爬蟲(chóng)抓取的實(shí)時(shí)微博數(shù)據(jù),包含32004個(gè)用戶的160076條微博內(nèi)容,其中微博內(nèi)容中包含相關(guān)用戶行為。
本文根據(jù)實(shí)驗(yàn)結(jié)果設(shè)定當(dāng)評(píng)分值大于2 時(shí),代表用戶對(duì)該微博內(nèi)容感興趣;當(dāng)評(píng)分值小于等于2時(shí),代表用戶對(duì)該微博內(nèi)容不感興趣。實(shí)驗(yàn)進(jìn)行N(本文N=10)組,每組隨機(jī)取100 名不同用戶分別計(jì)算得到前100 條推薦結(jié)果,計(jì)算推薦準(zhǔn)確率,即推薦列表中評(píng)分值>2 的微博內(nèi)容占推薦列表的比例。針對(duì)單一的基于用戶的協(xié)同過(guò)濾推薦算法和本文的混合推薦算法所得的準(zhǔn)確率結(jié)果(百分比)統(tǒng)計(jì)如表1所示。
表1 單一和混合算法所得的準(zhǔn)確率結(jié)果統(tǒng)計(jì)
綜合實(shí)驗(yàn)結(jié)果的準(zhǔn)確率統(tǒng)計(jì)表明,混合算法的平均推薦結(jié)果的平均準(zhǔn)確率為93.4%,而單一的基于用戶的協(xié)同過(guò)濾算法平均準(zhǔn)確率只有86.5%,混合算法[14~15]的平均推薦準(zhǔn)確率提高了7%左右,實(shí)驗(yàn)表明混合算法在提高推薦精度上有著良好的效果。
單一的推薦算法一般情況下存在的缺點(diǎn)比較明顯,混合算法的優(yōu)勢(shì)在于取長(zhǎng)補(bǔ)短,通過(guò)結(jié)合其他算法來(lái)彌補(bǔ)單一算法中的不足,從而實(shí)現(xiàn)推薦準(zhǔn)確率的提高。不同的場(chǎng)景下,存在不同的數(shù)據(jù)結(jié)構(gòu)特點(diǎn),需要根據(jù)不同的場(chǎng)景設(shè)計(jì)不同的推薦算法,以求達(dá)到最理想的推薦效果。本文基于微博數(shù)據(jù)的個(gè)性化結(jié)構(gòu),結(jié)合貝葉斯分類(lèi)與協(xié)同過(guò)濾推薦提出了混合推薦算法,實(shí)驗(yàn)數(shù)據(jù)表明,該算法在微博內(nèi)容推薦上實(shí)現(xiàn)了比單一算法更高的準(zhǔn)確率。