歐陽龍,盧 琪,彭艷兵
(1.武漢郵電科學(xué)研究院湖北武漢430000;2.南京烽火星空通信發(fā)展有限公司江蘇南京210000)
免費(fèi)一直被國內(nèi)的互聯(lián)網(wǎng)界奉為圭臬,但是,內(nèi)容付費(fèi)卻偏偏在其中獨(dú)樹一幟的發(fā)展了起來。2016年底,新浪微博推出微博問答這一新功能,很快就占領(lǐng)了內(nèi)容付費(fèi)市場的半壁江山。
微博問答的應(yīng)用場景是:用戶群A付費(fèi)對用戶B提出問題,用戶B從問題中選擇問題進(jìn)行作答,作答后,用戶A提問所付的費(fèi)用進(jìn)入用戶B的錢包,問題和答案會(huì)以微博問答的形式被用戶B自動(dòng)轉(zhuǎn)發(fā),其他用戶可以付費(fèi)1元進(jìn)行圍觀,圍觀的費(fèi)用一半進(jìn)入用戶A的錢包,另一半進(jìn)入用戶B的錢包。有一些好問題甚至能以幾十元的問題價(jià)格吸引數(shù)萬的圍觀量,其中的商機(jī)不言而喻。本文研究的目的在于針對特定的微博問答用戶,提出更容易被回答且收益率更高的問題。
需要解決的關(guān)鍵問題是對用戶的關(guān)鍵詞挖掘,也可以說是對用戶興趣的挖掘。對微博用戶興趣的挖掘一般分為兩類:1)基于背景挖掘用戶興趣;2)基于內(nèi)容挖掘用戶興趣。
基于背景的用戶興趣挖掘通過微博平臺(tái)的個(gè)人簡介、職業(yè)、標(biāo)簽、畢業(yè)院校、生日、性別等信息對不同的用戶進(jìn)行分類[1],針對某些平臺(tái)用戶背景信息較少的問題,可以使用多平臺(tái)分析的方法[2],也可以利用朋友的信息[3],但是只有背景相似的朋友的信息才有效[4],甚至可以以朋友的背景為基礎(chǔ)推斷出用戶的背景信息[5],使用其他用戶對該用戶的分組描述作為用戶的背景[6]也是一種不錯(cuò)的方法。
基于背景的用戶興趣挖掘存在的主要問題:用戶背景數(shù)據(jù)不完善,在對新浪微博1.4億用戶的統(tǒng)計(jì)中,添加了標(biāo)簽的用戶只占21.8%,標(biāo)簽個(gè)數(shù)大于5的用戶只占6.2%[7]。
基于內(nèi)容的用戶興趣挖掘可以看作文本主題或關(guān)鍵詞提取問題。由于微博一般比較短小,可以從每一條微博中提取一個(gè)主題[8],或者將一個(gè)用戶的所有微博合并成一個(gè)大文本之后再進(jìn)行主題提取[9],當(dāng)用戶的微博內(nèi)容比較少時(shí),可以用該用戶多個(gè)朋友的共同興趣推出該用戶的興趣[10],AT模型可以用于發(fā)現(xiàn)用戶和主題的關(guān)系[11],針對微博的特性,MBLDA模型也能進(jìn)行微博主題挖掘[12]。
基于內(nèi)容的用戶興趣挖掘存在的主要問題:1)沒有考慮到博主與粉絲的交互,2)缺少一種對關(guān)鍵詞進(jìn)行推薦的方法。
本文在針對博主與粉絲的交互提出了基于微博轉(zhuǎn)發(fā)、評論、點(diǎn)贊和詞頻的詞語權(quán)重計(jì)算方法,針對背景數(shù)據(jù)不全,提出了基于背景和內(nèi)容的AW-LDA用戶關(guān)鍵詞挖掘方法,并結(jié)合背景和內(nèi)容分析用戶之間相似度,進(jìn)而達(dá)到推薦問題關(guān)鍵詞的目的。
LDA的模型結(jié)構(gòu)如圖1所示。

圖1 LDA模型圖
在LDA模型中,一篇文檔的生成方式如下:
1)對于一篇文檔di,從狄利克雷分布(即Dirichlet分布)α中取樣生成文檔di的主題分布θi,即主題分布θi由參數(shù)為α的Dirichlet分布生成;
2)從主題的多項(xiàng)式分布θi中取樣生成文檔di的第j個(gè)詞的主題zij;
3)從狄利克雷分布ε中取樣生成主題zij對應(yīng)的詞語分布βij,即詞語分布βij由參數(shù)為ε的Dirichlet分布生成;
4)從詞語的多項(xiàng)式分布β中采樣最終生成詞語wij。
即每個(gè)詞語出現(xiàn)的概率為:

LDA原始論文中采用變分-EM算法估計(jì)未知參數(shù)[13]。EM算法,即期望最大算法,其基本思想是:首先隨機(jī)選取一個(gè)值去初始化估計(jì)值θ(0),然后不斷迭代尋找更優(yōu)的θ(n+1)使得其似然函數(shù)比原來的要大。可以用來給LDA模型求解。
EM算法的關(guān)鍵便是要找到L(θ)的一個(gè)下界,然后不斷最大化這個(gè)下界。從而逼近要求解的似然函數(shù)算法的一般步驟為:
3)重新估計(jì)參數(shù)θ,即求,使得

4)如果L(θ)收斂,即Q(Q;Qn)收斂,則算法完成,否則回到步驟2[15]。
這樣就能求得LDA模型中的主題分布和詞分布。
LDA原始論文中采用變分-EM算法估計(jì)未知參數(shù),后來發(fā)現(xiàn)另一種估計(jì)LDA未知參數(shù)的方法更好,這種方法就是:Gibbs Sampling,有時(shí)叫Gibbs采樣或Gibbs抽樣[16]。Gibbs抽樣是馬爾可夫鏈蒙特卡爾理論(MCMC)中用來獲取一系列近似等于指定多維概率分布(比如2個(gè)或者多個(gè)隨機(jī)變量的聯(lián)合概率分布)觀察樣本的算法[17]。通過求解出主題分布和詞分布的后驗(yàn)分布,從而成功解決主題分布和詞分布這兩參數(shù)未知的問題。
Gibbs采樣算法的步驟為:


表示對z(t+1)中的第i個(gè)參數(shù)進(jìn)行抽樣,對于包含隱變量的LDA模型來說,抽樣公式為:

本文的數(shù)據(jù)來自于新浪微博的微博問答模塊中系統(tǒng)推薦的前5000個(gè)用戶,都是業(yè)內(nèi)專家或者名人,他們在各自的微博問答主頁上都有各自擅長回答的問題等標(biāo)簽,將這些標(biāo)簽作為用戶的背景信息;另外采集這5000個(gè)用戶發(fā)布的微博文本信息,包括原創(chuàng)微博內(nèi)容和轉(zhuǎn)發(fā)微博內(nèi)容以及本條微博轉(zhuǎn)發(fā)、評論、點(diǎn)贊的數(shù)量,將這些文本信息作為內(nèi)容分析用戶的興趣;采集這5000個(gè)用戶的所有微博問答內(nèi)容,包括問題內(nèi)容、問題價(jià)值、圍觀數(shù)量,將這些文本作為內(nèi)容分析用戶的答題興趣。
由于采用的數(shù)據(jù)集是微博原始文本,所以需要對數(shù)據(jù)進(jìn)行一定的處理[19]。第一步是對文本進(jìn)行切詞處理。文中采用的是python第三方庫jieba分詞,其精確模式可以將句子以精確的方式切開,消除歧義。
第二步去除文本中的停用詞(代詞和語氣詞)[20],這類詞一般在文本中很常見,但是對用戶興趣挖掘沒有用處。本文使用的是Github上的中文停用詞詞表,共1598個(gè)詞,并且在處理文本的過程中根據(jù)文本的內(nèi)容和語義不斷添加停用詞,最后將停用詞個(gè)數(shù)擴(kuò)充到1912個(gè)。
第三步是對詞頻進(jìn)行統(tǒng)計(jì)。針對用戶的微博內(nèi)容,由于微博是用戶與用戶之間的交流,所以關(guān)注者對被關(guān)注者的反饋信息比如轉(zhuǎn)發(fā)、評論、點(diǎn)贊都會(huì)影響到被關(guān)注者,比如某個(gè)話題的微博受到了大量的轉(zhuǎn)發(fā)、評論、點(diǎn)贊,那么被關(guān)注者可能會(huì)更傾向于喜歡個(gè)話題,在微博問答中回答這類問題的可能性也會(huì)比較高,關(guān)注者的圍觀人數(shù)也可能會(huì)很多。所以本文在進(jìn)行詞頻統(tǒng)計(jì)的時(shí)候并不是簡單的只統(tǒng)計(jì)詞出現(xiàn)的次數(shù),而是結(jié)合各條微博被轉(zhuǎn)發(fā)、評論、點(diǎn)贊的次數(shù)對該條微博中出現(xiàn)的詞的詞頻進(jìn)行加成,微博被轉(zhuǎn)發(fā)、評論、點(diǎn)贊的次數(shù)越多,詞的詞頻加成也越多,即

其中WTwi表示詞wi的詞頻,Tij表示詞wi在微博j中出現(xiàn)的次數(shù),repj表示微博j被轉(zhuǎn)發(fā)的次數(shù),comj表示微博j被評論的次數(shù),likj表示微博j被評論的次數(shù)。針對用戶的微博問答內(nèi)容,關(guān)鍵詞的推薦需要與問題的收益率掛鉤才能正確反映基于微博內(nèi)容的關(guān)鍵詞推薦的正確性,所以在對微博問答問題內(nèi)容進(jìn)行詞頻統(tǒng)計(jì)時(shí),不僅要統(tǒng)計(jì)詞出現(xiàn)的次數(shù),還要統(tǒng)計(jì)問題的收益率


其中WTwi表示詞wi的詞頻,Tij表示詞wi在微博j中出現(xiàn)的次數(shù),REij表示問題的收益率。
由于本文的目的是對微博問答的問題作出推薦,所以對于微博內(nèi)容來說,關(guān)注的重點(diǎn)不是主題,而是主題中的詞,即對問題的關(guān)鍵詞作出推薦。傳統(tǒng)的LDA模型采用的是“用戶-主題-詞袋”的模式[21],即用戶以一定的概率分布選擇主題,主題以一定的概率分布選擇詞袋中的詞,最終構(gòu)成文檔。但是傳統(tǒng)的LDA模型對于關(guān)鍵詞的推薦并不合適,我們需要的是“用戶-詞袋”的概率分布,主題層對于問題的關(guān)鍵詞推薦來說沒有意義。所以本文基于傳統(tǒng)的LDA模型提出了AW-LDA模型,重點(diǎn)分析用戶(author)與詞袋(words)的概率分布關(guān)系。AW-LDA模型如圖2所示。
對于一個(gè)用戶的微博內(nèi)容或者背景文檔di,從

圖2 AW-LDA模型
其中REij表示問題的收益率,Gij表示問題的圍觀人數(shù),PAij表示問題價(jià)值,i表示用戶編號(hào),j表示問題編號(hào)。根據(jù)問題的收益率對問題中出現(xiàn)的關(guān)鍵詞的詞頻進(jìn)行加成,收益率越高,詞的詞頻加成也越多。即狄利克雷分布(即Dirichlet分布)ε中取樣生成文檔di的詞分布βi,即詞分布βi由參數(shù)為ε的Dirichlet分布生成,對于文檔di中的第j個(gè)詞語wij,從詞語的多項(xiàng)式分布β中采樣最終生成詞語wij。
采用Gibbs采樣算法對AW-LDA模型進(jìn)行求解,首先用歐拉公式將P(w|ε)展開:

然后用Gibbs算法對如下后驗(yàn)分布進(jìn)行抽樣:

對上式進(jìn)行反復(fù)迭代,并對所有詞進(jìn)行抽樣,抽樣結(jié)果穩(wěn)定時(shí),結(jié)果為

這樣,AW-LDA模型就使用Gibbs抽樣解出了微博內(nèi)容在詞語上的概率分布βw。
使用AW-LDA模型分別對用戶的微博內(nèi)容和背景進(jìn)行分析,得到針對用戶微博內(nèi)容的推薦詞集WCi及其概率分布PCi和針對用戶微博背景的推薦詞集WBi及其概率分布PBi,其中i表示用戶編號(hào)。
得到用戶的推薦詞集及其概率分布后,采用余弦相似度算法計(jì)算用戶之間的相似度,具體實(shí)現(xiàn)為:先將兩個(gè)用戶的推薦詞集合并,組成一個(gè)新的含有N個(gè)詞的詞集WN,可以通過補(bǔ)零的方式根據(jù)用戶對推薦詞集WCi的概率分布PCi求得用戶對詞集WN的概率分布PWi,其中i表示用戶編號(hào),這樣就能得到兩個(gè)用戶對詞集WN的概率分布PWi和PWj,可以看作是兩個(gè)N維向量,然后采用余弦相似度算法

計(jì)算兩個(gè)向量的余弦值,結(jié)果可以表示兩個(gè)用戶的內(nèi)容相似度sim(Cij),其中xi、yi分別表示概率分布PWi和PWj中的元素。用相同的方法可以求出兩個(gè)用戶的背景相似度sim(Bij)。將兩個(gè)相似度結(jié)合起來,令兩個(gè)用戶的相似度

其中a表示微博內(nèi)容相似度所占的權(quán)重。
在對訓(xùn)練集中的用戶A進(jìn)行關(guān)鍵詞推薦時(shí),根據(jù)simij在樣本集中找到與用戶A相似度最高的用戶B,并將用戶B的問答關(guān)鍵詞中權(quán)重最高的10個(gè)詞推薦為用戶A的問答關(guān)鍵詞。實(shí)驗(yàn)結(jié)果表明當(dāng)a取值為0.79時(shí),推薦的關(guān)鍵詞所包含的問題的價(jià)值總和占所有問題價(jià)值總和的比例最大,為92.56%;當(dāng)a取值為0.84時(shí),推薦的關(guān)鍵詞所包含的問題個(gè)數(shù)占所有問題總量的比例最大,為83.73%。
文中采用perlexity指標(biāo)對模型的優(yōu)劣進(jìn)行衡量。Perlexity指標(biāo)通常用來衡量一個(gè)概率模型的好壞,在主題模型領(lǐng)域也是比較常見的衡量指標(biāo),perlexity指數(shù)越低表示模型的性能越好。Perlexity定義為:

其中W為測試集,wm為測試集中的單詞,Nm為測試集中的單詞數(shù)。LDA模型與AW-LDA模型的perlexity指數(shù)對比如表1所示。

表1 LDA模型與AW-LDA模型對比
由表1可以看出隨著迭代次數(shù)的增加,LDA模型的Perlexity指數(shù)越來越低,模型性能越來越好,且變化率越來越低,表示模型趨于穩(wěn)定;AW-LDA模型的Perlexity指數(shù)不隨迭代次數(shù)變化是因?yàn)橹付嗣總€(gè)用戶的文本主題數(shù)為1,即用戶選擇詞的概率已經(jīng)確定,迭代不會(huì)影響用戶選擇詞的概率;在LDA模型收斂的過程中,AW-LDA模型的Perlexity指數(shù)一直比LDA模型低,表明使用AW-LDA模型對微博用戶的微博文本和背景進(jìn)行分析,的確能提升模型的性能。
本文采用文本內(nèi)容關(guān)鍵詞與背景關(guān)鍵詞結(jié)合的方式計(jì)算測試集與樣本集中的用戶相似度,并推薦問答關(guān)鍵詞。推薦效果如圖3所示。

圖3 問題數(shù)量推薦效果
由圖3可以看出,當(dāng)基于微博內(nèi)容和背景進(jìn)行關(guān)鍵詞推薦時(shí),隨著微博內(nèi)容所占的權(quán)重不斷增加,推薦的關(guān)鍵詞命中的問題個(gè)數(shù)比例先增加后減少,且當(dāng)微博內(nèi)容所占的權(quán)重為0.84時(shí),推薦的關(guān)鍵詞命中的問題個(gè)數(shù)比例達(dá)到最高,為83.73%;只基于微博內(nèi)容進(jìn)行關(guān)鍵詞推薦時(shí),關(guān)鍵詞命中的問題個(gè)數(shù)比例為74.58%;只基于背景進(jìn)行關(guān)鍵詞推薦時(shí)關(guān)鍵詞命中的問題個(gè)數(shù)比例為16.33%。都低于將微博內(nèi)容和背景以最優(yōu)的方式結(jié)合后的問題關(guān)鍵詞推薦命中率,表明改進(jìn)后的關(guān)鍵詞推薦方法能使問題更容易被回答。

圖4 問題價(jià)值推薦效果
由圖4可以看出,當(dāng)基于微博內(nèi)容和背景進(jìn)行關(guān)鍵詞推薦時(shí),隨著微博內(nèi)容所占的權(quán)重不斷增加,推薦的關(guān)鍵詞命中的問題價(jià)值比例先增加后減少,且當(dāng)微博內(nèi)容所占的權(quán)重為0.79時(shí),推薦的關(guān)鍵詞命中的問題價(jià)值比例達(dá)到最高,為92.56%;只基于微博內(nèi)容進(jìn)行關(guān)鍵詞推薦時(shí),關(guān)鍵詞命中的問題價(jià)值比例為77.03%;只基于背景進(jìn)行關(guān)鍵詞推薦時(shí)關(guān)鍵詞命中的問題價(jià)值比例為23.95%。都低于將微博內(nèi)容和背景以最優(yōu)的方式結(jié)合后的問題關(guān)鍵詞推薦命中率,表明改進(jìn)后的關(guān)鍵詞推薦方法能在問題的價(jià)值方面做出有效的推薦。
文中針對微博的用戶關(guān)系,改進(jìn)了詞頻統(tǒng)計(jì)方法;針對微博文本的特殊結(jié)構(gòu),提出了一個(gè)適合提取微博用戶關(guān)鍵詞的模型AW-LDA,并針對微博文本內(nèi)容和用戶背景共存的特點(diǎn),提出了將內(nèi)容和背景結(jié)合起來進(jìn)行關(guān)鍵詞推薦的方法,實(shí)驗(yàn)表明該方法能從問題個(gè)數(shù)和問題價(jià)值方面做出有效的關(guān)鍵詞推薦。
今后的研究工作中將繼續(xù)優(yōu)化AW-LDA模型的效率,探索微博文本內(nèi)容和用戶背景結(jié)合的更好方法,并在詞頻統(tǒng)計(jì)環(huán)節(jié)加入對原創(chuàng)微博和轉(zhuǎn)發(fā)微博的考慮。