文/梁肇敏 劉峻
近年,推薦系統(tǒng)逐漸應用在圖書信息系統(tǒng)上,推薦系統(tǒng)通過分析讀者行為習慣等信息向讀者推薦讀者感興趣的圖書,實現(xiàn)了“圖書主動找人”,從而提高了圖書的銷售率。推薦系統(tǒng)成為解決“信息過載”問題的有效手段,但也暴露了數(shù)據(jù)稀疏性、數(shù)據(jù)冷啟動等問題。為解決推薦系統(tǒng)的相關(guān)問題,本文主要借鑒了在自然語言中的詞嵌入表示方法,將word2vec訓練詞向量的思想應用于讀者-圖書行為數(shù)據(jù)集,通過word2vec思路訓練出每本書的嵌入表示,然后用來做圖書相似推薦。
在自然語言處理中,詞向量化最常見的做法是使用One-hot Representation方法,但該方法無法解決向量稀疏性問題,1986年Hinton提出了詞分布式表示(Word Distributed Representation)的概念。該方法是指將詞表中的詞映射為一個稠密、低維的實值向量,每一維表示詞的一個潛在特征。這種方法基于深度學習,可以表示出詞與詞之間的聯(lián)系[1]。word2vec訓練出來的向量正是這種表示。
Word2vec訓練詞向量的思路借鑒了Bengio于2003年提出的神經(jīng)網(wǎng)絡(luò)語言模型[2]?;谙嗨圃~應該出現(xiàn)在相似上下文這個假設(shè)所做的工作。一般該神經(jīng)網(wǎng)絡(luò)語言模型是用來處理自然語言任務的,而詞向量作為神經(jīng)網(wǎng)絡(luò)語言模型的副產(chǎn)物訓練出來。
2013年mikolov在谷歌發(fā)表了兩篇文章[3,4],提出word2vec算法,對神經(jīng)網(wǎng)絡(luò)模型進行了改進和優(yōu)化,在輸出層利用層次softmax或Negative Sampling使輸出數(shù)大大減小,同時簡化網(wǎng)絡(luò)復雜結(jié)構(gòu),在保證效果的前提下提高了計算效率。
首先需要對輸入的數(shù)據(jù)進行預處理,其過程如下:
(1)首先整理出讀者—圖書的關(guān)聯(lián)數(shù)據(jù)。
(2)把圖書數(shù)據(jù)整理成行為集合,將讀者-圖書行為數(shù)據(jù)整理成每行是讀者所看過圖書的集合,這樣一個讀者看過圖書集合對應于語言中的一句話,集合里的書本就對應于句子里的詞語。
(3)構(gòu)建詞典,統(tǒng)計數(shù)據(jù)記錄中共有多少本書,根據(jù)讀者看的次數(shù)由多到少進行排序,去除借閱次數(shù)少于5次圖書數(shù)據(jù)后,構(gòu)建出長度為V的圖書詞典,其中V是書本數(shù)量。然后根據(jù)詞典,從0開始按順序給書下標標號。
(4)構(gòu)建詞向量矩陣,建立一個行數(shù)為詞典數(shù),列數(shù)為向量數(shù)的詞向量矩陣。這樣,矩陣每一行就是一個詞的詞向量。每個詞向量賦高斯分布的初始值,模型訓練后最終要得到的就是這個向量矩陣迭代后的最終值。
word2vec訓練詞向量使用的模型一般有兩種模式:CBOW和Skip-gram,兩種模型結(jié)構(gòu)如圖1所示,CBOW模型要預測的目標是詞典中的一個詞wt,而Skip-gram模型正好相反,該模型是通過wt去預測窗口為k大小的上下文。
參照word2vec自然語言處理,把物品的共現(xiàn)性作為自然語言中的上下文關(guān)系,利用Skip-gram模型和Negative Sampling算法思路構(gòu)建神經(jīng)網(wǎng)絡(luò)學習出物品在隱空間的向量表示。這樣雖然丟失了空間/時間信息,但可以忽略用戶-物品關(guān)系,可以生成物品集合。在該思路下,本文以數(shù)據(jù)集中每個讀者看過的圖書為集合,每本書代表一個詞語,按照Skipgram模型和Negative Sampling算法,對每個讀者的圖書集合用大小為K的窗口進行掃描,生成輸入數(shù)據(jù)和標簽數(shù)據(jù)。模型進行迭代訓練,達到收斂,最后得出每本書的向量。
通過模型訓練好的書本向量,是一個固定低維度的稠密向量。得到每本書的向量后,就可以通過向量余弦相似度算法,計算出兩本書的相似度。計算公式為:
其中,A,B表示兩本書的向量,得出兩本書的相似度,通過分析讀者所看過的圖書記錄,計算出TOPN個相似度最大的圖書,完成圖書推薦。
本文使用由 Cai-Nicolas Ziegler 整理的圖書評分公開數(shù)據(jù)集Book-Crossings對算法進行評價,該數(shù)據(jù)集由90000位讀者對270000本圖書組成的1100000萬條評分記錄組成,評分數(shù)據(jù)值在1至10之間。本文將閱讀書本數(shù)量少于50本的讀者和閱讀人數(shù)少于50人的書排除在外。經(jīng)過篩選整理,數(shù)據(jù)集里剩余808位讀者和2185本圖書,共96448條評分記錄,其數(shù)據(jù)格式如表1所示。數(shù)據(jù)集按7:3的比例分為訓練集和測試集。
實驗硬件環(huán)境如下:CPU為Intel(R)Core(TM)i7-7700HQ v4 @ 2.80GHz,內(nèi)存為8GB。軟件環(huán)境如下:操作系統(tǒng)為windows10 64位。
本文使用推薦系統(tǒng)中常用的top_N推薦評價指標,統(tǒng)一選取N=10-100進行推薦,即推薦10到100本書,然后使用準確率、召回率和算法運行時間指標,將本算法與基于物品的協(xié)同過濾算法和基于奇異值分解(SVD)推薦算法進行對比。并且還通過設(shè)置物品不同向量維度的不同取值,來驗證特征向量維度對算法的影響。實驗結(jié)果如表1和表2所示。
從表1和表2可以看出,本文研究的基于神經(jīng)網(wǎng)絡(luò)物品嵌入表示的推薦算法在準確率和召回率上的結(jié)果均比傳統(tǒng)推薦算法有一定的提升。同時從表2第三列運算速度上可以看出由于物品表示成了一個固定低維度的向量,使得在維度的計算上代價減少,使得運算速度相對提升。這說明本文提出的模型在圖書推薦上的有效性。
從圖2可以看出,進行圖書推薦的準確率和召回率與圖書的特征維度有關(guān),不同的維度大小,影響著推薦性能,從圖2可以看出向量維度為70時,推薦性能最優(yōu)。
表1:top10-100各算法召回率(%)
表2:各算法之間top10的評測結(jié)果
如何讓讀者更好地找到自己喜歡的圖書,對于圖書館提高圖書借閱服務質(zhì)量,以及對于書商提高圖書銷售量都有重要意義,本文借鑒word2vec思想,利用讀者對圖書的評分數(shù)據(jù)集做圖書推薦。經(jīng)過對比實驗,結(jié)果顯示本文算法相比傳統(tǒng)推薦算法有所提升,解決了傳統(tǒng)推薦算法因數(shù)據(jù)維度過大而導致的數(shù)據(jù)稀疏和運算效率低下問題,為圖書推薦提供了一種有效的解決途徑。
圖1:CBOW和Skip-gram模型
圖2:向量維度對準確率和找回率的影響