文/梁肇敏 劉峻
近年,推薦系統(tǒng)逐漸應(yīng)用在圖書信息系統(tǒng)上,推薦系統(tǒng)通過(guò)分析讀者行為習(xí)慣等信息向讀者推薦讀者感興趣的圖書,實(shí)現(xiàn)了“圖書主動(dòng)找人”,從而提高了圖書的銷售率。推薦系統(tǒng)成為解決“信息過(guò)載”問(wèn)題的有效手段,但也暴露了數(shù)據(jù)稀疏性、數(shù)據(jù)冷啟動(dòng)等問(wèn)題。為解決推薦系統(tǒng)的相關(guān)問(wèn)題,本文主要借鑒了在自然語(yǔ)言中的詞嵌入表示方法,將word2vec訓(xùn)練詞向量的思想應(yīng)用于讀者-圖書行為數(shù)據(jù)集,通過(guò)word2vec思路訓(xùn)練出每本書的嵌入表示,然后用來(lái)做圖書相似推薦。
在自然語(yǔ)言處理中,詞向量化最常見(jiàn)的做法是使用One-hot Representation方法,但該方法無(wú)法解決向量稀疏性問(wèn)題,1986年Hinton提出了詞分布式表示(Word Distributed Representation)的概念。該方法是指將詞表中的詞映射為一個(gè)稠密、低維的實(shí)值向量,每一維表示詞的一個(gè)潛在特征。這種方法基于深度學(xué)習(xí),可以表示出詞與詞之間的聯(lián)系[1]。word2vec訓(xùn)練出來(lái)的向量正是這種表示。
Word2vec訓(xùn)練詞向量的思路借鑒了Bengio于2003年提出的神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型[2]。基于相似詞應(yīng)該出現(xiàn)在相似上下文這個(gè)假設(shè)所做的工作。一般該神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型是用來(lái)處理自然語(yǔ)言任務(wù)的,而詞向量作為神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型的副產(chǎn)物訓(xùn)練出來(lái)。
2013年mikolov在谷歌發(fā)表了兩篇文章[3,4],提出word2vec算法,對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行了改進(jìn)和優(yōu)化,在輸出層利用層次softmax或Negative Sampling使輸出數(shù)大大減小,同時(shí)簡(jiǎn)化網(wǎng)絡(luò)復(fù)雜結(jié)構(gòu),在保證效果的前提下提高了計(jì)算效率。
首先需要對(duì)輸入的數(shù)據(jù)進(jìn)行預(yù)處理,其過(guò)程如下:
(1)首先整理出讀者—圖書的關(guān)聯(lián)數(shù)據(jù)。
(2)把圖書數(shù)據(jù)整理成行為集合,將讀者-圖書行為數(shù)據(jù)整理成每行是讀者所看過(guò)圖書的集合,這樣一個(gè)讀者看過(guò)圖書集合對(duì)應(yīng)于語(yǔ)言中的一句話,集合里的書本就對(duì)應(yīng)于句子里的詞語(yǔ)。
(3)構(gòu)建詞典,統(tǒng)計(jì)數(shù)據(jù)記錄中共有多少本書,根據(jù)讀者看的次數(shù)由多到少進(jìn)行排序,去除借閱次數(shù)少于5次圖書數(shù)據(jù)后,構(gòu)建出長(zhǎng)度為V的圖書詞典,其中V是書本數(shù)量。然后根據(jù)詞典,從0開(kāi)始按順序給書下標(biāo)標(biāo)號(hào)。
(4)構(gòu)建詞向量矩陣,建立一個(gè)行數(shù)為詞典數(shù),列數(shù)為向量數(shù)的詞向量矩陣。這樣,矩陣每一行就是一個(gè)詞的詞向量。每個(gè)詞向量賦高斯分布的初始值,模型訓(xùn)練后最終要得到的就是這個(gè)向量矩陣迭代后的最終值。
word2vec訓(xùn)練詞向量使用的模型一般有兩種模式:CBOW和Skip-gram,兩種模型結(jié)構(gòu)如圖1所示,CBOW模型要預(yù)測(cè)的目標(biāo)是詞典中的一個(gè)詞wt,而Skip-gram模型正好相反,該模型是通過(guò)wt去預(yù)測(cè)窗口為k大小的上下文。
參照word2vec自然語(yǔ)言處理,把物品的共現(xiàn)性作為自然語(yǔ)言中的上下文關(guān)系,利用Skip-gram模型和Negative Sampling算法思路構(gòu)建神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)出物品在隱空間的向量表示。這樣雖然丟失了空間/時(shí)間信息,但可以忽略用戶-物品關(guān)系,可以生成物品集合。在該思路下,本文以數(shù)據(jù)集中每個(gè)讀者看過(guò)的圖書為集合,每本書代表一個(gè)詞語(yǔ),按照Skipgram模型和Negative Sampling算法,對(duì)每個(gè)讀者的圖書集合用大小為K的窗口進(jìn)行掃描,生成輸入數(shù)據(jù)和標(biāo)簽數(shù)據(jù)。模型進(jìn)行迭代訓(xùn)練,達(dá)到收斂,最后得出每本書的向量。
通過(guò)模型訓(xùn)練好的書本向量,是一個(gè)固定低維度的稠密向量。得到每本書的向量后,就可以通過(guò)向量余弦相似度算法,計(jì)算出兩本書的相似度。計(jì)算公式為:

其中,A,B表示兩本書的向量,得出兩本書的相似度,通過(guò)分析讀者所看過(guò)的圖書記錄,計(jì)算出TOPN個(gè)相似度最大的圖書,完成圖書推薦。
本文使用由 Cai-Nicolas Ziegler 整理的圖書評(píng)分公開(kāi)數(shù)據(jù)集Book-Crossings對(duì)算法進(jìn)行評(píng)價(jià),該數(shù)據(jù)集由90000位讀者對(duì)270000本圖書組成的1100000萬(wàn)條評(píng)分記錄組成,評(píng)分?jǐn)?shù)據(jù)值在1至10之間。本文將閱讀書本數(shù)量少于50本的讀者和閱讀人數(shù)少于50人的書排除在外。經(jīng)過(guò)篩選整理,數(shù)據(jù)集里剩余808位讀者和2185本圖書,共96448條評(píng)分記錄,其數(shù)據(jù)格式如表1所示。數(shù)據(jù)集按7:3的比例分為訓(xùn)練集和測(cè)試集。
實(shí)驗(yàn)硬件環(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推薦評(píng)價(jià)指標(biāo),統(tǒng)一選取N=10-100進(jìn)行推薦,即推薦10到100本書,然后使用準(zhǔn)確率、召回率和算法運(yùn)行時(shí)間指標(biāo),將本算法與基于物品的協(xié)同過(guò)濾算法和基于奇異值分解(SVD)推薦算法進(jìn)行對(duì)比。并且還通過(guò)設(shè)置物品不同向量維度的不同取值,來(lái)驗(yàn)證特征向量維度對(duì)算法的影響。實(shí)驗(yàn)結(jié)果如表1和表2所示。
從表1和表2可以看出,本文研究的基于神經(jīng)網(wǎng)絡(luò)物品嵌入表示的推薦算法在準(zhǔn)確率和召回率上的結(jié)果均比傳統(tǒng)推薦算法有一定的提升。同時(shí)從表2第三列運(yùn)算速度上可以看出由于物品表示成了一個(gè)固定低維度的向量,使得在維度的計(jì)算上代價(jià)減少,使得運(yùn)算速度相對(duì)提升。這說(shuō)明本文提出的模型在圖書推薦上的有效性。
從圖2可以看出,進(jìn)行圖書推薦的準(zhǔn)確率和召回率與圖書的特征維度有關(guān),不同的維度大小,影響著推薦性能,從圖2可以看出向量維度為70時(shí),推薦性能最優(yōu)。

表1:top10-100各算法召回率(%)

表2:各算法之間top10的評(píng)測(cè)結(jié)果
如何讓讀者更好地找到自己喜歡的圖書,對(duì)于圖書館提高圖書借閱服務(wù)質(zhì)量,以及對(duì)于書商提高圖書銷售量都有重要意義,本文借鑒word2vec思想,利用讀者對(duì)圖書的評(píng)分?jǐn)?shù)據(jù)集做圖書推薦。經(jīng)過(guò)對(duì)比實(shí)驗(yàn),結(jié)果顯示本文算法相比傳統(tǒng)推薦算法有所提升,解決了傳統(tǒng)推薦算法因數(shù)據(jù)維度過(guò)大而導(dǎo)致的數(shù)據(jù)稀疏和運(yùn)算效率低下問(wèn)題,為圖書推薦提供了一種有效的解決途徑。

圖1:CBOW和Skip-gram模型

圖2:向量維度對(duì)準(zhǔn)確率和找回率的影響