葉 天 順
(復(fù)旦大學軟件學院 上海 201203)
進入21世紀之后,互聯(lián)網(wǎng)的飛速發(fā)展,一個極度信息化時代的到來,對人們生活的各個方面都產(chǎn)生了極大的影響。這些年來世界各地的網(wǎng)絡(luò)技術(shù)飛速發(fā)展,伴隨著移動互聯(lián)網(wǎng)的出現(xiàn),各種手持智能設(shè)備的普及,微博、論壇已經(jīng)離開不了我們的生活。大量新興社交媒體不斷涌現(xiàn),各種創(chuàng)新技術(shù)不斷地推動網(wǎng)絡(luò)傳播向普遍性、多樣性的方向發(fā)展。由于移動互聯(lián)網(wǎng)的普及,普通群眾可以方便地在網(wǎng)上發(fā)表自己的觀點,對于消費后的餐廳酒店可以方便地進行評論,發(fā)表意見變得越來越方便。用戶使用Facebook、Twitter、Yelp、微博和微信等社交媒體平臺接收朋友的生活更新,并從朋友那里學習知識。眾所周知的社會網(wǎng)絡(luò)效應(yīng)是“同質(zhì)性”的概念,這種概念在心理學[1]中發(fā)展并在社交網(wǎng)絡(luò)[2]中觀察到。這表明用戶和朋友之間往往會有相似的意見或主題。另一方面,社會語言學家還發(fā)現(xiàn),社會中的自然語言理解需要理解語言所嵌入的社交網(wǎng)絡(luò)。一個網(wǎng)絡(luò)可能會松散或緊密,這取決于成員之間如何互動[3],并可能影響發(fā)表者采用的發(fā)言模式[4]。世界上的每個人都有自己的語言模式,并且會受到其他人的影響,所以擴展語言模型以進行社交化是非常有意義的事情。最近,人們已開發(fā)出社交化語言模型,但是這些模型主要用于社交媒體文本搜索[5-7]。Zeng等[8]提出一種社交詞嵌入的算法,但是其社交正則化有不足之處。本文提出的社交詞嵌入的算法通過實驗證明,所生成的詞向量的性能要優(yōu)于其他算法。
本文介紹了一種社交化的詞嵌入語言模型來為社交媒體中的詞生成依賴社交關(guān)系的向量。該模型采用了最簡單但最有效的word2vec[8]中使用的詞嵌入模型作為基礎(chǔ)模型。為了結(jié)合朋友關(guān)系,當訓練詞向量時,本文提出了一個社交正則項將社交關(guān)系融入模型。為了演示社交化詞嵌入算法,本文使用Yelp商業(yè)評論數(shù)據(jù)來訓練社交詞嵌入語言模型。隨后進行了Perplexity實驗和SVM情感分類實驗來驗證社交詞嵌入語言模型生成的詞嵌入向量要優(yōu)于其他的詞嵌入模型。
在將社交關(guān)系融入模型之前,我們需要將每個用戶向量加入模型中。為了訓練詞嵌入向量,本文將連續(xù)詞袋模型(CBOW)[9]作為基礎(chǔ)模型。與CBOW不同的是,社交詞嵌入模型為每個用戶分配一個詞向量,并且加入模型進行訓練[8]。對于每個詞不僅像CBOW模型一樣,提供每個詞的上下文,而且為每個詞加入這個詞所對應(yīng)的用戶向量到模型中,在完成每個詞向量訓練的同時,也為每個用戶訓練出了每個用戶的向量。
(1)
這里與之前介紹word2vec模型不同的地方是,對于不同的用戶文檔進行輸入時,模型中加入不同用戶的向量。與CBOW模型不同,這里指定上下文單詞是依賴于用戶的,不同的詞不僅要對應(yīng)其上下文信息,還要對應(yīng)不同的用戶。這意味著對于每個用戶ui,他/她將考慮預(yù)測的詞,即給出全局詞的含義并將其定制為他/她自己的偏好。更具體地說,假設(shè)使用wj∈d,其中d是向量wj的維數(shù),作為單詞w的全局向量表示。本文還將使用用戶向量ui∈d來表示每個用戶。然后,將全局詞向量和用戶向量組合為新的向量如果有一個單詞序列wj-s,…,wj+s,那么用戶ui的組合詞向量表示為與word2vec最大的不同之處是,在輸入向量時,對于不同的單詞,加入其對應(yīng)的每個用戶向量。由于logP(wj|Cwj,ui))的計算需要對詞匯表中所有單詞進行歸一化,所以當詞匯量很大時,CBOW模型難以優(yōu)化。因此,最初有兩種技術(shù)用于優(yōu)化問題:分層softmax模型[10-11]和負采樣模型[9]。由于社交詞嵌入語言模型實現(xiàn)的代碼是用負采樣為基本模型來實現(xiàn)的。本文以負采樣作為例子來進行介紹,需要優(yōu)化的目標函數(shù)是:
(2)
為了最大化目標函數(shù),使用隨機梯度上升法對上式進行優(yōu)化,可以推導(dǎo)出相應(yīng)的更新函數(shù)。
(3)
(4)
(5)
通過迭代學習,最后可以得到每個單詞的詞向量和每個用戶的向量。
將用戶的好友關(guān)系通過本文提出的社交正則項,融入到語言模型中,對于改善詞嵌入向量的學習效果可以起到很大的幫助。
(6)
(7)
(8)
當我們使用由ui發(fā)布的文檔時,用戶向量ui應(yīng)該根據(jù)其所有朋友的uj的向量進行更新,而用戶向量uj僅基于ui進行更新。可以將第二個目標函數(shù)與第一個目標函數(shù)相結(jié)合,并對全局詞向量、參數(shù)向量和本地用戶向量交替執(zhí)行隨機梯度上升法。但是,由式(7)、式(8)可知用戶向量將被更新的次數(shù)比單詞向量多得多。最初在CBOW優(yōu)化中,所有全局詞向量不受約束,因為單詞向量的大小可以由學習速率(與單詞的頻率組合)限定。本文使用了一個用戶向量的約束,使數(shù)值優(yōu)化穩(wěn)定。所有的損失函數(shù)是:
(9)
算法1社交詞嵌入算法
輸入:N個用戶(u1,…,uN)的社交媒體數(shù)據(jù),其中每個用戶有一個語料庫Wi={di,1,…,di,Mi},Mi為用戶ui寫的文檔數(shù)量。
初始化:最大迭代次數(shù)T,學習速率η1、η2,社交正則化權(quán)重λ,上下文窗口大小c,約束參數(shù)r。
If Iterationt for alluido for alldiinWido end for if ‖ui‖>rthen end if if ‖uj‖>rthen end if end if end if 輸出:詞向量wj和用戶向量ui。 本節(jié)使用Yelp數(shù)據(jù)集來訓練社交詞嵌入語言模型,通過兩個實驗來展示本文所提出來的語言模型生成社交詞嵌入向量的有效性。 實驗中使用Yelp Round 10數(shù)據(jù)集。Yelp網(wǎng)站在國外就是類似于中國的大眾點評網(wǎng)站。在Yelp,用戶可以為一些商家撰寫評論,例如餐廳,酒店等。用戶可以為餐廳或者酒店進行打分,也可以彼此關(guān)注以接收來自朋友的信息(一些朋友信息來自Facebook或其他社交網(wǎng)絡(luò))。這個數(shù)據(jù)集和其他數(shù)據(jù)集有的優(yōu)勢是提供了好友關(guān)系,這也是為什么本實驗選擇這個數(shù)據(jù)集的原因。Yelp數(shù)據(jù)集統(tǒng)計如表1所示。Yelp發(fā)布的數(shù)據(jù)量在數(shù)年內(nèi)增長很多,所以數(shù)據(jù)量大、用戶撰寫的評論之多適合社交詞嵌入語言模型進行詞向量的訓練。Yelp是美國最大的點評網(wǎng)站,令人興奮的是:Yelp公開了他們內(nèi)部的數(shù)據(jù)集。這是可獲取大量文本的最大的社交網(wǎng)絡(luò)數(shù)據(jù)之一。實驗中將數(shù)據(jù)隨機分為訓練集、開發(fā)集和測試集,其比例為8∶1∶1。如表1所示,所有結(jié)果均基于此分段的數(shù)據(jù)集。 表1 Yelp數(shù)據(jù)庫數(shù)據(jù)統(tǒng)計結(jié)果 對于Yelp提供的數(shù)據(jù)集,本實驗并沒有使用它所提供的所有數(shù)據(jù),而是選取了模型所需要的數(shù)據(jù),比如:每個用戶及其評論、好友關(guān)系、對不同商品的評分等。本實驗基于分離出的訓練數(shù)據(jù)訓練了所有的詞嵌入模型。對于下游實驗,本實驗將根據(jù)想要測試模型的不同意圖來更改設(shè)置。詞嵌入模型代碼是基于用C語言編寫的原始版本word2vec。word2vec源碼是Google所公布的源碼。本實驗以此為基礎(chǔ)在word2vec源碼上面寫入社交詞嵌入模型代碼。本實驗和文獻[8]所進行的實驗進行了對比,為了進行公平比較,本實驗將原始word2vec的超參數(shù)設(shè)置為對于所有模型都是相同的。例如,窗口大小設(shè)置為5,并且單詞的維度被設(shè)置為100。實驗對所有的詞嵌入使用了CBOW模型和負采樣訓練語言模型。 如果要對一個語言模型評判其好壞,最佳的方式是把它應(yīng)用到實際問題中去,比如機器翻譯、語音識別等。然后觀察這個語言模型在這些實際任務(wù)中的具體表現(xiàn)。但是,這種方法首先是不容易進行操作,其次是需要大量的時間。因此,人們就希望找一種比較直接評判方法。希望按照語言模型本身的一些特點,來設(shè)計出一個簡單又高效的指標。于是,提出了perplexity。Perplexity是一種使用在自然語言處理領(lǐng)域中用來評價一個語言模型的好壞的非常有效的指標。它可以評價一個語言模型是否為一個很好的預(yù)測樣本的標準。如果復(fù)雜度越低,即perplexity值越小,表示語言模型的預(yù)測性能更好。本文在第一個實驗中選用perplexity(復(fù)雜度)來評價社交詞嵌入語言模型。Perplexity的定義如下: (10) 式中:wi代表第i個詞,PP為Perplexity運算出來的結(jié)果。 在第一個實驗中,使用不同的參數(shù)來測試詞嵌入模型。首先在開發(fā)集尋找最優(yōu)的超參數(shù),然后在測試集上進行測試。使用perplexity作為實驗的一種指標,由于本質(zhì)上社交詞嵌入語言模型和word2vec不是直接優(yōu)化perplexity的語言模型,因此本實驗的perplexity值要高于文獻中的一些perplexity值。本實驗僅用于展示本文所提出的模型的不同超參數(shù)設(shè)置。根據(jù)定義,perplexity是用來評估一個模型在預(yù)測當前單詞的基礎(chǔ)上有多少其他單詞的指標。由于本實驗使用大小為s=5的滑動窗口來訓練所有單詞嵌入,所以實驗中提出的是六元perplexity,然后根據(jù)整個訓練數(shù)據(jù)訓練詞嵌入。為了提高測試不同超參數(shù)的效率,對于開發(fā)集和測試集,實驗中隨機抽取每個用戶的一個句子來評估基于perplexity的句子。 實驗結(jié)果如圖1和圖2所示。實驗?zāi)康氖菫榱藢Ρ扰c之前相似文獻中的實驗和進行超參數(shù)的設(shè)置,而不是與文獻中其他類型的perplexity進行對比。本類型perplexity值偏高主要有兩個原因:(1) 本文提出的模型并不像其他語言模型那樣直接優(yōu)化perplexity。因此,該模型可能沒有很好的擬合數(shù)據(jù)。(2) 本實驗使用的Yelp數(shù)據(jù)比正式語言更嘈雜,因此,perplexity更高。這也在文獻[7]中得到驗證。在經(jīng)驗上,盡管word2vec和本文提出的模型并不直接優(yōu)化perplexity,但它在訓練的損失和測試有效性之間有良好的折衷,作為其他下游任務(wù)(下節(jié)中的SVM情感分類實驗)的詞表示,有著優(yōu)秀的效果。 圖1 Perplexity在開發(fā)集上的結(jié)果(r固定 λ變化) 圖2 Perplexity在開發(fā)集上的結(jié)果(λ固定 r變化) 實驗在YelpR10數(shù)據(jù)集上進行測試,如圖1所示,固定r(用戶向量的L2正則約束)和變化λ(社交正則化參數(shù))的perplexity結(jié)果。在固定的r和變化的λ的情況下,本實驗訓練出的社交網(wǎng)絡(luò)詞嵌入的向量相比word2vec算法生成的詞向量,可以明顯地改善perplexity結(jié)果。本文所提出的社交正則項訓練的詞向量的效果要略優(yōu)于文獻[8]中提出的社交正則項??梢钥闯?,當增大社交正則項時,perplexity可以得到進一步改善,當λ=1時,實驗效果達到最好,但當λ過大時不會獲得更多的改善。這個原因可能是:在固定用戶向量大小時,增加社交正則項將傾向于首先通過其朋友來優(yōu)化每個用戶向量,但最終使所有用戶向量變得盡可能相似,這將再次使其欠擬合。 圖2中顯示變化的r(用戶向量的L2正則約束)與固定λ=1(社交正則化參數(shù))的結(jié)果。它表明,當增加正則項約束r時,perplexity首先被降低。當r=1時,perplexity值達到最小??梢钥闯?,本文所提出的優(yōu)化模型略優(yōu)于文獻[8]所提出的社交正則項。當繼續(xù)增加r時,再次會使perplexity值增大。如果用戶向量的參數(shù)r變得太大,那么當優(yōu)化代價函數(shù)時,它將支配單詞向量。因此,在本文提出的算法中,參數(shù)r和λ是耦合的,沒有任何一種趨勢會使perplexity持續(xù)減少,所以需要通過實驗選出最優(yōu)的超參數(shù)。實驗將參數(shù)在{2-5,…,25}的范圍內(nèi)執(zhí)行網(wǎng)格搜索,根據(jù)驗證集合選擇最佳的超參數(shù)。 表2為測試集上進行測試的最終結(jié)果,可以看到,應(yīng)用詞嵌入社交化語言模型使最后的結(jié)果有顯著的改善,并且本文所提出的社交正則項的改善結(jié)果要優(yōu)于文獻[8]所提出來的相關(guān)模型。 表2 Perplexity在測試集上的結(jié)果 在本實驗中使用perplexity作為評價社交詞嵌入語言模型的指標,首先在開發(fā)集上找出最優(yōu)的超參數(shù):r(用戶向量的L2正則約束)和λ(社交正則化參數(shù)),然后在測試集上進行對比實驗。本文所提出的社交正則項所訓練出來的詞向量在perplexity作為評價指標上要優(yōu)于word2vec和文獻[8]模型所訓練的詞向量,說明了本文所提出的社交正則項的有效性。 本節(jié)要測試社交化詞嵌入的下游任務(wù)——Yelp評論的分數(shù)預(yù)測。在Yelp網(wǎng)站上,用戶可以寫評論給商家。同時,用戶可以為服務(wù)提供評分,對每個商家可以打一到五分。實驗?zāi)康氖鞘褂蒙缃辉~嵌入模型訓練出來的詞向量,將用戶發(fā)表的每句話相加求和進行平均表示成向量,使用支持向量機作為機器學習方法進行學習,然后進行預(yù)測得到結(jié)果。本實驗遵循文獻[8]中的任務(wù),這是長文本情感分類。為了測試這個任務(wù),實驗采用簡單的支持向量機(SVM)作為機器學習方法,其中特征是用戶向量和單詞向量的平均值,并選擇不同比例的數(shù)據(jù)來訓練SVM分類器。為了測試重要的數(shù)據(jù)選擇或預(yù)處理如何影響最終結(jié)果,實驗還將用戶分為頭部用戶和尾部用戶。頭部用戶,就是那些發(fā)布了大量評論的用戶,而尾部用戶發(fā)布較少。然后簡單地對所有用戶進行排序,并選擇那些發(fā)布了全部評論的一半用戶為頭部用戶,其他用戶則作為尾部用戶。隨機選擇五分之一的訓練數(shù)據(jù)進行SVM訓練以提高實驗效率。 表3顯示了頭部和尾部用戶的統(tǒng)計數(shù)據(jù)。可以看出,頭部用戶傾向于發(fā)布更多評論并擁有更多朋友。圖3顯示了基于頭部和尾部子集訓練的結(jié)果??梢钥吹剑疚奶岢龅纳缃徽齽t化模型的預(yù)測結(jié)果要高于word2vec和文獻[8]模型的結(jié)果,進一步說明本文提出的社交網(wǎng)絡(luò)正則化的有效性。從圖中還可以推測出,頭部數(shù)據(jù)的個性化和社交化的改善比尾部數(shù)據(jù)更大。這意味著,當用戶評論較少,同時與該用戶的關(guān)系鏈接較少時,當前的算法無法很好地進行訓練。當用戶評論較多并且有較多的好友關(guān)系時,可以用本文提出的模型算法進行較好的訓練。另一方面,預(yù)測頭部評論的準確度高于尾部。這意味著,當用戶寫的評論越多和擁有更多的好友時,社交詞嵌入模型可以更好地提取相關(guān)信息生成更有效果的詞向量。但是,實際上更有可能在網(wǎng)絡(luò)中隨機抽取用戶來標注相應(yīng)的數(shù)據(jù)。因此,當遇到需要為社交媒體注釋數(shù)據(jù)的真正問題時,認真對待不同用戶群體可能會更好??梢赃x擇用戶好友更多而且發(fā)表了較多評論的用戶。 表3 1/5訓練集的頭部和尾部數(shù)據(jù)統(tǒng)計結(jié)果 圖3 SVM分類在頭部和尾部數(shù)據(jù)上的準確率 本實驗還將支持向量機在全部的五分之一數(shù)據(jù)上進行訓練,在開發(fā)集上進行超參數(shù)調(diào)整(包括用于SVM的參數(shù)),在測試集上進行測試,并將結(jié)果在表4中顯示。可以看出,本文提出的社交正則化模型要比文獻[8]模型準確率高0.11%,比word2vec模型要好0.4%,再次通過實驗證明社交詞嵌入模型的有效性。 表4 SVM分類在測試集上的準確率 本節(jié)提出了一種社交化的詞嵌入算法,將社交關(guān)系加入語言模型的訓練中,以從社交媒體文本中和用戶社交關(guān)系中學習一組全局詞向量和一組本地用戶向量。一個簡單但有效的社交正則化被強加給詞嵌入語言模型。通過實驗表明,用戶向量本身的個性化和社交正則化可以改善下游任務(wù)。使用兩組實驗來演示本文提出的社交詞嵌入算法的有效性。實驗對比了Goolge提出的word2vec和文獻[8]中的模型,均取得了略好于它們的效果,證明了本文提出的社交詞嵌入語言模型的正確性和有效性。 本文提出了一種社交化的詞嵌入方法來為社交媒體中的詞生成依賴社交的詞嵌入向量。該模型采用了最簡單但最有效的word2vec中使用的詞嵌入模型作為基礎(chǔ)模型。為了結(jié)合朋友關(guān)系,本文為模型添加一個社交正則項,然后使用Yelp商業(yè)評論數(shù)據(jù)來訓練社交詞嵌入語言模型,進行了Perplexity實驗和SVM情感分類實驗,驗證了本文提出的模型生成的詞嵌入向量要優(yōu)于其他的詞嵌入模型。 本文工作中也存在不足,那些擁有較多好友和發(fā)表較多評論的用戶,在應(yīng)用社交詞嵌入語言模型時所得到的實驗結(jié)果的改進要優(yōu)于好友數(shù)和評論數(shù)較少的用戶。未來需要在模型中改善那些發(fā)表評論很少的用戶和那些好友比較少用戶。2 實 驗
2.1 數(shù)據(jù)集和實驗設(shè)置
2.2 Perplexity實驗
2.3 SVM情感分類實驗
3 結(jié) 語