沈 華,熊開宇,閆 斌,邱桃榮*
(南昌大學a管理學院;b軟件學院;c.信息工程學院,江西 南昌 330031)
隨著互聯網數據的逐漸積累,“信息過載”已成為一個普遍現象,用戶無法從海量互聯網數據中快速找到自己感興趣的內容。推薦技術的出現為解決“信息過載”問題提供了方向,并且初步取得了一些成效。目前,許多研究者都在為提升推薦效果進行著不斷地嘗試和探索。知識圖譜的出現,為提升推薦效果提供了新的思路。
知識圖譜[1-4]于2012年5月被正式提出,Google公司將其定義為一種描述實體以及實體之間鏈接關系的語義網絡。基于知識圖譜的推薦技術主要是利用知識圖譜對數據進行知識抽取,得到更加細粒度的用戶和內容的特征信息,從而更精準地計算用戶與用戶、用戶與內容以及內容與內容之間的相似度,進而向用戶推薦內容。
本文提出了一種基于知識圖譜的用戶興趣表示方法,將文本中的部分語義特征提取出來,用于對用戶興趣進行描述。此外,本文基于卷積神經網絡搭建了一個推薦模型,模型的輸入為通過知識圖譜計算得到的用戶興趣向量,輸出為每篇文本推薦給當前用戶的概率。本文使用財新網的新聞文本數據集,設計實驗驗證了這種基于知識圖譜的推薦方法的有效性。
基于知識圖譜的推薦技術可以分為基于本體的推薦技術以及基于開放鏈接數據(Linked Open Data,LOD)的推薦技術兩種。
基于本體的推薦技術主要是利用本體中細粒度的、對概念層級關系的描述,通過對概念的細粒度的分類描述來更加精準的對實體特征進行表示,從而挖掘出事實中蘊含的深層次信息[5]。Al-Nazer等[6]使用本體技術來分析用戶的偏好,構建營養和健康導向的用戶檔案,并使用該檔案來組織相關知識,為用戶推薦更加健康的食品。Kethavarapu等[7]基于求職網站上的崗位數據,動態地生成本體,然后通過重排序和相似度算法為求職者推薦崗位信息。Thanapalasingam等[8]構建了一個基于本體的科學出版物推薦系統,解決了科學出版物的主題表征以及推薦問題。盡管基于本體的推薦技術在一些領域取得了不錯的成效,但要使用基于本體的推薦技術,面臨的首要問題就是本體的構建,由于構建本體需要相關領域專家的深度參與,構建成本較高,因此在許多的場景下并不適用。
基于開放鏈接數據的推薦技術的核心思路是將知識圖譜的數據層中豐富的語義信息應用到現有的推薦方法中,用于計算用戶興趣以及內容之間相似程度,從而給出推薦結果。Lu等[9]基于DBpedia和Wikidata構建了一個世界級的旅行知識圖譜,從而在更細的語義粒度上對旅游景點進行描述,提升了針對旅游景點的推薦效果。Wenige等[10]將基于開放鏈接數據的推薦方法應用于數字圖書館中的信息檢索和推薦,使用靈活的相似性計算方法和基于約束的推薦方法對系統中已有的搜索功能進行了增強。Chicaiza等[11]在開放鏈接數據的基礎上,結合每個用戶的特征(比如用戶身份)進行推薦,從而得到更加適合用戶的推薦結果。由于開放鏈接數據的構建難度較小,多采用自動化的方式進行構建,構建成本較低,因此應用較為廣泛。
以上基于知識圖譜的推薦方法,為推薦技術提供了新的實現思路,并且在特定的應用場景下取得了相當不俗的成果。但是,現有方法大多專注于使用知識圖譜對用戶特征進行更加精細的描述,忽略了從更加泛化的維度去描述特征,使得對用戶特征的刻畫過于“精準”,在一定程度上導致了推薦方法的泛化能力欠佳。在實際的應用場景中,當用戶對“喬布斯”這一實體產生濃厚的興趣時,其往往會對與“喬布斯”有直接關聯的實體(如“蘋果公司”、“計算機”、“iOS系統”等)同樣感興趣。因此,在對用戶興趣進行表示時,理應把這些相關實體考慮在內。
本文所使用的數據集為DataCastle大數據競賽平臺所提供的財新網新聞數據集,此數據集包含了10000名財新網用戶在2014年3月的所有新聞瀏覽記錄,如圖1所示。
數據集由6個字段組成,分別為用戶編號、新聞編號、瀏覽時間(精確到秒)、新聞標題、新聞詳細內容以及新聞發表時間。
在數據集中,存在一些不活躍的用戶,需要將這部分用戶剔除,從而保證實驗的可靠性。本文保留了閱讀記錄大于等于10篇的用戶數據,將閱讀數量小于10篇的用戶剔除,最終得到2190個用戶的瀏覽記錄。由于數據集是以用戶為單位進行抽取的,不同用戶可能會閱讀到相同的新聞,因此其中存在部分重復的新聞記錄,不重復的新聞記錄共計5098條。
三元組的抽取通常可以采用兩種方法,第一種是使用命名實體識別及實體關系抽取,第二種是使用依存句法分析。命名實體識別和實體關系抽取通常依賴于大量的標注數據進行模型訓練,不適合本文場景,依存句法分析方法效果良好,并且不依賴標注數據,因此本文選擇通過依存句法分析方法進行三元組的抽取,抽取算法如表1所示。

表1 三元組抽取算法
三元組抽取算法主要包含4個步驟,分別是分句、分詞及詞性標注、依存句法分析、三元組抽取。
(1)分句
以句號、感嘆號、問號為結束標志,對新聞正文進行分句,并將新聞標題作為單獨的一句,與分好的句子一同存儲,共計得到924,813條句子。
(2)分詞及詞性標注
在分詞方面,本文采用基于規則的分詞方法。首先進行詞圖的構造,如圖2所示。新聞中出現的每個字都是詞圖上的一個節點,使用詞典在詞圖上進行匹配,匹配成功的字與字之間則建立一條邊。詞圖構建完成后,分詞問題已經成功轉化為一個最優路徑問題,通過Viterbi算法進行最優路徑求解,即可得到分詞結果。
分詞完成后,還需要進行詞性標注。本文所選用的分詞及詞性標注工具是HanLP工具包。首先將分好的句子進行分詞及詞性標注處理,詞語與詞性之間使用“/”進行分隔,每一組詞語與詞性之間使用空格分隔。分詞及詞性標注處理后的結果如圖3所示。
(3)依存句法分析
將處理好的分詞及詞性輸入到哈爾濱工業大學的語言技術平臺(LTP)[12]中進行依存句法分析,結果如圖4所示。以“全國各族人民都要珍惜民族大團結的政治局面”一句為例,其分詞及詞性標注結果為“全國/n 各族/r 人民/n 都/d 要/v 珍惜/v 民族/n 大團結/n 的/uj 政治/n 局面/n”,依存句法分析結果為“3/ATT 3/ATT 6/SBV 5/ADV 6/ADV 0/HED 8/ATT 11/ATT 8/RAD 11/ATT 6/VOB”。依存句法分析結果與分詞及詞性標注結果一一對應,即“全國/n”對應“3/ATT”,“3/ATT”表示“全國”是第三個詞“人民”的定語,以此類推。“0/HED”則表示當前詞“珍惜”是句子的核心謂語。
(4)三元組抽取
結合分詞結果以及依存句法分析結果,進行三元組抽取,抽取標準如下:“n/SBV”表示主語,此處“n”代表謂語在句子中的位置,即句子的第n個詞是當前詞的謂語。根據預定義的規則(如長度應該小于5,不能包含特殊的符號等)判斷主語是否符合規則,將不符合規則的主語丟棄,不進行后續操作。通過“n”獲取謂語后,同樣判斷謂語是否符合預定的規則,如不符合,則不進行后續操作。獲取到有效的謂語后,繼續根據謂語上標注的賓語位置,找到句子的賓語,并判斷是否符合規則。將符合規則的三元組存入文件,共計獲得84 655個三元組。
知識圖譜的存儲方式比較多元,可以選擇知識描述語言進行表示及存儲,如RDF等;也可以通過圖數據庫進行存儲并進行可視化,如Neo4j等。考慮到可視化的需求以及數據訪問的便捷性,本文選擇使用Neo4j進行知識存儲。
Neo4j[14]是一個高性能的NoSQL數據庫,也是目前最流行的圖數據庫。Neo4j創建的圖是一個用頂點和邊構成的有向圖,它包括如下幾個顯著特點:完整的事務支持、高可用性、能夠輕易擴展到上億級別的節點和關系、支持通過遍歷工具高速檢索數據。
將三元組導入Neo4j后,共計獲得14 492個節點,37 309條關系。通過Neo4j進行可視化后,以“中國”為中心的部分知識圖譜如圖5所示。
財新網的新聞數據集是一個純文本數據集,因此需要將文本轉化為數值向量才可以導入模型進行計算。本文使用Google公司的Word2Vec模型[13],借助Gensim庫訓練得到詞向量。Gensim(Generate Similarity)是一個簡單高效的自然語言處理Python庫,其中包含Word2Vec,FastText,潛在語義分析(Latent Semantic Analysis,LSA),潛在狄利克雷分布(Latent Dirichlet Allocation,LDA)等工具包。Gensim中包含的所有算法都是無監督的,這意味著調用者不需要準備訓練集,只需要提供文本語料即可使用。
在訓練詞向量前,需要先對新聞文本進行分詞,并去除其中包含的停用詞。本文使用哈工大停用詞表、百度停用詞表、四川大學機器智能實驗室停用詞庫三個停用詞表,合并得到一個綜合的停用詞表。將新聞文本中的詞語放入停用詞表進行匹配,并將存在于停用詞表中的詞丟棄。
去除停用詞后,使用Gensim庫中的Word2Vec模型訓練詞向量。為了不遺漏關鍵詞,將模型的最小詞頻設置為1,迭代次數設置為5,詞向量維度設置為200,訓練得到詞向量模型,計算得到的詞向量可以描述為式1的形式。
V=[v1,v2,…,v200]
(1)
每一個用戶都會有一定的興趣傾向,表現在新聞系統中則是對新聞內容的點擊及閱讀傾向。如何衡量用戶的興趣,是推薦算法的關鍵。本文將用戶瀏覽過的新聞內容視為其感興趣的內容,通過用戶的瀏覽記錄以及構建好的知識圖譜,為每個用戶生成3個興趣向量,以供后續的實驗對比。用戶興趣向量的計算方式如式2所示。
(2)
其中,N為用戶閱讀記錄中包含的所有詞的集合大小,W為用戶的閱讀記錄中包含的所有詞的詞向量集合,Wi表示第i個詞的詞向量。
用戶興趣向量的計算算法如表2所示。

表2 用戶興趣向量計算算法
用戶興趣向量的計算步驟共包含4個主要步驟,具體如下:
步驟1通過數據集中的用戶編號將新聞以用戶為單位進行分類,獲得每個用戶的閱讀記錄。將用戶的閱讀記錄中出現的詞語,加入用戶的第一個興趣詞集合,記此興趣詞集合為A。
步驟2根據A集合中的詞語,在知識圖譜中匹配與之直接相連的實體詞,將匹配到的實體詞加入該用戶的第二個興趣詞集合,記此興趣詞集合為B。
步驟3將A集合與B集合合并,得到用戶的第三個興趣詞集合,記此興趣詞集合為C。
步驟4分別使用用戶興趣詞集合A、B、C中的詞,從訓練好的詞向量模型中獲取詞向量,并求得用戶對應興趣詞集合的平均詞向量VA、VB、VC,視為用戶的興趣向量。
自從卷積神經網絡被提出以來,由于其優秀的特征抽取能力,使得其在圖像處理領域大放異彩。卷積神經網絡的成功使得越來越多的學者嘗試將其應用到文本處理領域,并且已經取得了一些成果[15-16]。本文基于卷積神經網絡搭建了推薦模型,模型結構如圖6所示。
首先根據用戶的興趣詞集合及詞向量模型,獲取詞向量,并計算平均向量作為用戶興趣向量。然后將用戶興趣向量傳入卷積層進行特征提取,由于用戶興趣向量是一維數值型向量,因此此處的卷積操作為一維卷積,計算公式如式3所示。
ci=f(w·Xi,i+h-1+b)
(3)
其中,ci是特征圖中的第i個特征值;f為卷積核函數;w∈Rh是滑動窗口寬度為h的濾波器;b為偏置值;Xi,i+h-1表示第i到i+h-1列組成的局部特征向量。由此,求得的特征向量C為:
C=[c1,c2,…,cn-h+1]
(4)
池化層采用最大池化方法進行特征采樣,假設采用2×1的池化窗口,水平方向移動步長為2,池化操作完成之后,特征向量C的維度變為原來的一半,可表示為:
Cp=[c1,c2,…,c(n-h+1)/2]
(5)
池化層之后連接一個全連接層,將提取到的特征向量傳入全連接層進行擬合。由于卷積神經網絡一般有m個卷積核進行特征提取,對應會產生m個特征向量,需要將這m個特征向量進行重新組合后得到全連接層的輸入向量,表示為:
V=[c1,1,…,cj,i,…,cm,(n-h+1)/2]
(6)
其中,cj,i(1≤j≤m,1≤i≤(n-h+1)/2)表示第j個特征向量的第i個特征值。為了防止過擬合,全連接層上可加入一個dropout處理。最后將全連接層的輸出傳入softmax函數,計算每篇新聞被推薦的概率并輸出。
模型構建完成后,需要對其進行訓練。訓練模型時的損失通過交叉熵進行度量,損失函數定義如下:
(7)
其中,n為新聞的數量;y′i表示新聞i是否真實的被當前用戶所喜歡,喜歡為1,不喜歡為0;yi是模型預測新聞i被當前用戶喜歡的概率。
在本文中,訓練Word2Vec詞向量模型時設置的詞向量維度為200維,因此從該模型中獲取的詞向量均為200維,平均后得到的用戶興趣向量的維度也為200維。卷積層卷積核維度為20*1,水平方向移動步長為1,垂直方向移動步長也為1,激活函數為relu,并進行2×1的最大池化。全連接層的輸入為卷積層的輸出,全連接層的輸出節點數量為模型輸出節點數量的3倍,激活函數為tanh。考慮到全連接層容易過擬合,因此在全連接層加入了保留比例為0.5的dropout層。輸出層節點數量為不重復的新聞數量,即5098,通過softmax函數映射為每條新聞被推薦給當前用戶的概率值。模型使用Adam算法進行訓練,初始學習率設置為0.000 1,為了防止過擬合以及無法收斂到全局最優值,學習率每隔1 200步衰減為當前學習率的0.4倍。
本文將每個用戶的閱讀記錄的最后一條新聞作為未知的預測目標,除了最后一條新聞之外的其它新聞視為已知的閱讀記錄。因此,實驗目標則是根據每個用戶已經瀏覽過的新聞,預測其下一次會瀏覽的新聞。
為了保證實驗的準確性,本文每組實驗進行5次,以5次實驗的平均結果作為最終結果。每次實驗將2 190個用戶按照7:3的比例隨機分割為訓練集和測試集兩部分,其中訓練集占70%,測試集占30%。如3.1節所述,為每個用戶生成3個用戶興趣向量,分別記為VA、VB、VC。其中,VA為用戶瀏覽記錄中所有詞的平均詞向量;VB為從知識圖譜中抽取到的詞集合的平均詞向量;VC為以上兩個詞集合的并集的平均詞向量。另外,本文以傳統的基于協同過濾的推薦方法Baseline進行對比。
本文沿用DataCastle競賽中CCF大數據競賽的評價標準,以F值作為最終的評價指標,F值定義如式8所示:
(8)
其中,precision的定義如式(9)所示:
(9)
其中U為數據集中2 190個用戶的集合,hit(ui)表示推薦給用戶ui的新聞中,確實被該用戶瀏覽的個數。在本文的實驗數據中,由于每個用戶在預測集合中僅有一條記錄,因此hit(ui)要么為0,要么為1。L(ui)表示提供給用戶ui的新聞列表的長度。
recall的定義如式10所示:
(10)
hit(ui)的定義同上,T(ui)則為測試集中用戶ui真正瀏覽的新聞的數目,在本文中T(ui)=1。
本次實驗構造了3種用戶興趣向量,分別來源于用戶的瀏覽記錄中包含的詞集合、從知識圖譜中抽取的詞集合、融合瀏覽記錄以及知識圖譜的詞集合,將以上3種用戶興趣向量分別輸入到本文提出的模型以及傳統的協同過濾模型進行實驗。為保證實驗結果的可靠性,使用每種用戶興趣向量進行5次實驗。本文提出模型實驗結果如圖7所示,橫軸為實驗次數,縱軸為F值。
從上圖可以看出,使用知識圖譜計算出的用戶興趣向量的實驗效果好于通過瀏覽記錄以及融合后的詞集合計算出的用戶興趣向量。主要原因是通過用戶瀏覽記錄中的詞集合計算用戶興趣向量,會使得對用戶興趣的刻畫過于“精準”,反而降低了模型的泛化能力。通過知識圖譜,能夠更好地刻畫用戶的興趣,提升了模型的泛化能力。融合了瀏覽記錄以及知識圖譜的用戶興趣向量實驗結果介于兩者之間,也印證了以上結論。
將3種用戶興趣向量輸入傳統的協同過濾模型的實驗結果如圖8所示。
從圖8可以看出,協同過濾推薦模型的穩定性較差,5次實驗結果抖動較為明顯。但是依舊可以看出,通過知識圖譜計算出的用戶興趣向量推薦效果整體上好于通過其它兩種方式計算出的用戶興趣向量。
本文提出的模型與傳統的協同過濾模型的對比如圖9所示,橫軸為使用不同用戶興趣向量的不同模型,縱軸為F值。
從圖9中可以看出,本文提出的模型的推薦效果整體上好于傳統的協同過濾推薦模型,并且通過知識圖譜計算出來的用戶興趣向量,在兩種模型上的表現都要好于其它兩種用戶興趣向量,這證明了基于知識圖譜的推薦模型的有效性,也證明了知識圖譜在文本特征提取上具有一定的效果。
本文使用財新網的新聞數據集,通過依存句法分析提取三元組,借助圖數據庫Neo4j進行知識存儲,構建了一個小規模的通用知識圖譜。基于此知識圖譜,提出了一種結合了語義特征的用戶興趣向量的計算方法,還基于卷積神經網絡構建了一個推薦模型。實驗表明,本文提出的用戶興趣向量的計算方法和推薦模型對提升推薦效果有一定的作用。