王卓嵐 張雨琦 陳鳴宇 蘇意淇 宋 凱 董春玲
(中國(guó)傳媒大學(xué),北京 100024)
隨著我國(guó)經(jīng)濟(jì)的騰飛,擁有百余年歷史的我國(guó)電影產(chǎn)業(yè)呈現(xiàn)出迅猛發(fā)展的態(tài)勢(shì)。大數(shù)據(jù)時(shí)代的互聯(lián)網(wǎng)為網(wǎng)絡(luò)用戶提供了豐富的影音資源,新冠疫情背景下,線上、線下觀影模式融合互補(bǔ)。與此同時(shí),海量的電影數(shù)據(jù)也給用戶便捷獲取自己喜愛的電影帶來了挑戰(zhàn)。因而,如何精準(zhǔn)地為網(wǎng)絡(luò)用戶推薦電影變成了流媒體平臺(tái)重點(diǎn)關(guān)注的問題。
個(gè)性化電影推薦系統(tǒng)研究的主要問題是如何從互聯(lián)網(wǎng)海量電影數(shù)據(jù)中找到每個(gè)用戶感興趣的電影,并將這些電影推送給用戶。本文依據(jù)知識(shí)圖譜可存儲(chǔ)豐富數(shù)據(jù)及數(shù)據(jù)間關(guān)系的特點(diǎn),將其引入電影推薦系統(tǒng)進(jìn)行模型構(gòu)建。該方法在解決數(shù)據(jù)稀疏性問題、語(yǔ)義匹配精準(zhǔn)度、推薦多樣化和結(jié)果可解釋性方面都有較好的效果,對(duì)電影推薦技術(shù)的發(fā)展有一定現(xiàn)實(shí)意義。
近年來,不少相關(guān)人士針對(duì)電影推薦系統(tǒng)進(jìn)行了學(xué)術(shù)研究,同時(shí)也提出了相關(guān)推薦算法。傳統(tǒng)推薦算法可分為四類:協(xié)同過濾推薦、基于內(nèi)容的推薦、基于人口統(tǒng)計(jì)學(xué)的推薦和混合推薦。毛德磊等人在論文中改進(jìn)了協(xié)同過濾算法,基于用戶行為一致性、區(qū)別性和正負(fù)偏好信息提取用戶偏好,融合偏好相似性與評(píng)分相似性進(jìn)行協(xié)同過濾推薦;呂學(xué)強(qiáng)等人在論文中利用Text Rank、Wor d2 Vec等技術(shù)對(duì)影評(píng)進(jìn)行關(guān)鍵詞抽取和詞向量構(gòu)建,提出一種結(jié)合影評(píng)內(nèi)容相似度和長(zhǎng)短期興趣模型來計(jì)算電影相似度的推薦方法;鄧存彬等人在論文中利用動(dòng)態(tài)協(xié)同過濾算法融入時(shí)間特征,運(yùn)用深度學(xué)習(xí)模型學(xué)習(xí)用戶和電影特征信息,最后將形成的隱向量融入動(dòng)態(tài)協(xié)同過濾算法中進(jìn)行電影推薦。
協(xié)同過濾算法依賴用戶自身或用戶其他已知的歷史數(shù)據(jù)為該用戶推薦喜愛的電影,當(dāng)新用戶或者新電影出現(xiàn)時(shí),個(gè)性化電影推薦會(huì)因?yàn)槿狈v史數(shù)據(jù)而出現(xiàn)冷啟動(dòng)問題。同時(shí),電影發(fā)明一個(gè)多世紀(jì)以來,網(wǎng)絡(luò)相關(guān)數(shù)據(jù)庫(kù)中生成了海量電影資源,其中僅有少數(shù)電影被用戶觀看并評(píng)分過,這就造成用戶—電影評(píng)分矩陣中大量數(shù)據(jù)為空值,隨之出現(xiàn)了難以避免的數(shù)據(jù)稀疏問題。因此依據(jù)評(píng)分矩陣進(jìn)行推薦后的結(jié)果準(zhǔn)確率較低,推薦質(zhì)量也無法保證。
基于內(nèi)容的推薦算法,其核心在于根據(jù)用戶的興趣與偏好,為用戶推薦與其先前喜好內(nèi)容相似的資源。在電影研究方面,該算法的缺點(diǎn)在于電影特征需要人工標(biāo)注和提取,同時(shí)推薦系統(tǒng)還難以發(fā)現(xiàn)用戶新的興趣點(diǎn)。例如,某觀影者過去僅傾向于觀看愛情類電影,那么基于內(nèi)容的推薦算法就會(huì)為其推送更多的愛情電影,而無法發(fā)掘出觀影者對(duì)于科技類電影的潛在興趣。此外,基于內(nèi)容的推薦算法與協(xié)同過濾算法相似,由于缺少新用戶的喜好歷史,無法提取相應(yīng)的電影特征信息,進(jìn)而難以為新用戶進(jìn)行精準(zhǔn)推薦。
基于人口統(tǒng)計(jì)學(xué)的推薦算法根據(jù)用戶的基本信息進(jìn)行推薦,而針對(duì)電影推薦問題的特殊性,用戶基本信息與用戶喜好并無緊密關(guān)聯(lián),因此該方法存在較大的語(yǔ)義失配問題。
混合推薦算法雖解決了單一推薦的局限性問題,但由于其實(shí)現(xiàn)過程復(fù)雜且投入成本過高,目前并未被廣泛采用。
2.3.1 彌補(bǔ)數(shù)據(jù)稀疏性干擾問題
針對(duì)電影評(píng)分?jǐn)?shù)據(jù)存在的稀疏性問題,近年來不少研究將交互記錄以外的輔助信息引入推薦系統(tǒng),從而對(duì)用戶和電影進(jìn)行更精準(zhǔn)、豐富的畫像。此外,用戶的注冊(cè)信息、社交關(guān)系、標(biāo)簽等屬性也可以為該方法提供更加精確的預(yù)測(cè)模型,但往往充分獲取相關(guān)輔助信息需要付出很大的代價(jià)。
知識(shí)圖譜中蘊(yùn)含了豐富的電影及用戶相關(guān)數(shù)據(jù),尤其是其中的屬性信息和用戶間關(guān)系,可作為一類重要的輔助信息引入電影推薦系統(tǒng),很好地彌補(bǔ)了數(shù)據(jù)稀疏性干擾問題,與此同時(shí)也減少了獲取并存儲(chǔ)龐大輔助信息的代價(jià)。
2.3.2 實(shí)現(xiàn)精準(zhǔn)的語(yǔ)義匹配
在知識(shí)圖譜中經(jīng)由簡(jiǎn)單的知識(shí)推理即可發(fā)現(xiàn)眾多實(shí)體或特征之間的語(yǔ)義匹配和關(guān)聯(lián),這一優(yōu)點(diǎn)可以為電影推薦系統(tǒng)產(chǎn)生更準(zhǔn)確的推薦結(jié)果。例如,對(duì)于電影 《勇敢傳說》與 《魔發(fā)奇緣》的語(yǔ)義關(guān)聯(lián)問題,可以通過電影類型圖譜 (存有電影類型與影片名稱的關(guān)系)發(fā)現(xiàn)如圖1所示的語(yǔ)義鏈,從而將兩部電影聯(lián)系起來。
圖1 電影類型語(yǔ)義鏈
2.3.3 完成多樣化電影推薦
知識(shí)圖譜引入了更多的語(yǔ)義關(guān)系,可以深層次地發(fā)現(xiàn)用戶興趣。基于知識(shí)圖譜的電影推薦可以發(fā)現(xiàn)電影間的異質(zhì)關(guān)聯(lián),從而從不同維度推薦電影。例如,在圖2中若用戶曾經(jīng)觀看過電影 《超凡蜘蛛俠》,依據(jù)知識(shí)圖譜中電影導(dǎo)演、演員和電影類型這三種不同屬性的關(guān)聯(lián),推薦系統(tǒng)可以向該用戶推薦《和莎莫的500天》(都由馬克·韋布導(dǎo)演)、《血戰(zhàn)鋼鋸嶺》(都由安德魯·加菲爾德主演)和 《復(fù)仇者聯(lián)盟》(都是科幻片)三部完全不同風(fēng)格的電影。
圖2 多樣化電影推薦
2.3.4 提供可解釋性依據(jù)
知識(shí)圖譜中存有的不同電影間的關(guān)聯(lián)信息可用作電影推薦結(jié)果的可解釋性依據(jù)。還以上例中看過電影 《超凡蜘蛛俠》的用戶為例,將推薦系統(tǒng)推薦出的三部電影與 《超凡蜘蛛俠》的關(guān)聯(lián)直接展現(xiàn)給用戶,能夠讓用戶更直觀地了解系統(tǒng)如此推薦的理由,從而增強(qiáng)了接受該推薦結(jié)果的主觀意愿。
在知識(shí)圖譜中,假定我們用節(jié)點(diǎn)集合E代表實(shí)體或者概念。其中,實(shí)體代表具有可區(qū)別性且獨(dú)立存在的某類事物,概念指具有同種特性的實(shí)體構(gòu)成的集合,每個(gè)實(shí)體或者概念用一個(gè)唯一的ID標(biāo)識(shí);邊R代表實(shí)體或概念之間的各種語(yǔ)義關(guān)系。由此,一個(gè)三元組 (h,r,t)就可以表示兩個(gè)實(shí)體之間的某種關(guān)系,也可以稱其為一條知識(shí),其中h表示知識(shí)的頭節(jié)點(diǎn),t表示尾節(jié)點(diǎn),r表示關(guān)系。即S={(h,r,t)|h?E,r?R,t?E}。
若干三元組的集合構(gòu)成了一個(gè)知識(shí)圖譜。如圖3,知識(shí)圖譜可以清晰地表示出影片、影片題材、導(dǎo)演和主演之間的關(guān)系。隨著實(shí)體或概念種類的增加,知識(shí)圖譜可表示的信息會(huì)更加全面。
圖3 知識(shí)圖譜樣例
電影知識(shí)圖譜構(gòu)建的關(guān)鍵步驟是如何實(shí)現(xiàn)將數(shù)據(jù)從不同的數(shù)據(jù)源中抽取出來,按照一定規(guī)則加入到知識(shí)圖譜中,這個(gè)過程我們稱為知識(shí)抽取。知識(shí)抽取主要分為兩個(gè)方面,分別是命名實(shí)體識(shí)別和關(guān)系抽取。最初在技術(shù)發(fā)展不成熟時(shí),命名實(shí)體識(shí)別和關(guān)系抽取主要以人工編寫規(guī)則或借用模板的方式進(jìn)行抽取。但構(gòu)造規(guī)則的方法會(huì)耗費(fèi)大量的人力物力,并且一套規(guī)則僅適用于一種領(lǐng)域,其遷移性和泛化性很低。
知識(shí)抽取面向的數(shù)據(jù)分為結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù),下面將簡(jiǎn)單介紹面向這兩類數(shù)據(jù)的知識(shí)抽取。
3.2.1 面向結(jié)構(gòu)化數(shù)據(jù)的知識(shí)抽取
結(jié)構(gòu)化數(shù)據(jù)類似于關(guān)系庫(kù)中以表格形式存儲(chǔ)的數(shù)據(jù),數(shù)據(jù)各項(xiàng)之間往往存在明確的對(duì)應(yīng)關(guān)系,可以將其轉(zhuǎn)化為RDF(Resource Description Fra mewor k)或其他形式的知識(shí)庫(kù)內(nèi)容。
3.2.2 面向非結(jié)構(gòu)化數(shù)據(jù)的知識(shí)抽取
非結(jié)構(gòu)化數(shù)據(jù)的實(shí)體抽取較為復(fù)雜。舉例來說,在非結(jié)構(gòu)化數(shù)據(jù)文本中,實(shí)體抽取對(duì)象應(yīng)選取文本中的原子信息元素,通常包含任命、組織/機(jī)構(gòu)名、地理位置、事件/日期、字符值、金額值等標(biāo)簽,具體的標(biāo)簽定義可根據(jù)任務(wù)不同而調(diào)整。實(shí)體抽取的任務(wù)是找到命名實(shí)體名并進(jìn)行分類;關(guān)系抽取是從文本中抽取出兩個(gè)或多個(gè)實(shí)體之間的語(yǔ)義關(guān)系。其抽取方法包括:基于規(guī)則的方法、監(jiān)督學(xué)習(xí)的方法、半監(jiān)督學(xué)習(xí)或無監(jiān)督學(xué)習(xí)的方法。
余弦相似度又稱為余弦相似性,是通過計(jì)算兩個(gè)向量的夾角余弦值來評(píng)估它們的相似度。其計(jì)算公式為:
式 (1)中,A和B分別表示向量A、B的各分量。相似性的范圍是從-1到1。-1代表兩個(gè)向量指向的方向相反,1代表兩個(gè)向量指向的方向相同,0通常代表兩個(gè)向量之間是獨(dú)立的。而在-1到1間的其余值則表示中間的相似性或相異性。
本文中的h和t用于存放用戶ID、電影名稱、電影類型以及出品方等屬性信息,r則代表每對(duì)屬性信息之間的關(guān)系。本文構(gòu)建了多個(gè)知識(shí)圖譜,分別包含電影—類型、電影—關(guān)鍵詞、電影—出品方以及用戶—電影等信息。
基于知識(shí)圖譜的電影推薦系統(tǒng)構(gòu)建主要分為四步:首先獲取電影和用戶數(shù)據(jù);然后對(duì)原始數(shù)據(jù)進(jìn)行處理 (即知識(shí)抽取),構(gòu)建知識(shí)圖譜三元組;接下來將處理后的數(shù)據(jù)導(dǎo)入Neo4j圖數(shù)據(jù)庫(kù)進(jìn)行可視化;最后根據(jù)構(gòu)建出來的知識(shí)圖譜進(jìn)行電影推薦。
4.1.1 數(shù)據(jù)獲取
電影和用戶數(shù)據(jù)來源于Kaggle上兩個(gè)較為經(jīng)典的數(shù)據(jù)集:T MDB(The Movie Database)和Netfil x Prize。T MDB數(shù)據(jù)集存儲(chǔ)電影的各類屬性信息,如電影名稱、電影類型、電影關(guān)鍵詞、電影時(shí)長(zhǎng)、票房收入等各種信息;Netfilx Prize數(shù)據(jù)集存儲(chǔ)用戶對(duì)電影的評(píng)分?jǐn)?shù)據(jù) (評(píng)分等級(jí)從低到高依次為0~5),包含用戶ID及其對(duì)電影的評(píng)分信息。
4.1.2 數(shù)據(jù)處理和知識(shí)抽取
本文對(duì)T MDB、Netflix Prize數(shù)據(jù)庫(kù)以面向結(jié)構(gòu)化數(shù)據(jù)的抽取方式進(jìn)行知識(shí)抽取。首先獲取各項(xiàng)之間存在的較為明確的對(duì)應(yīng)關(guān)系,進(jìn)而實(shí)現(xiàn)RDF數(shù)據(jù)集的創(chuàng)建和數(shù)據(jù)對(duì)象序列化。然后基于python編寫解析程序進(jìn)行數(shù)據(jù)解析和規(guī)范,對(duì)關(guān)鍵屬性進(jìn)行提取,從而生成屬性數(shù)據(jù)集。
從T MDB數(shù)據(jù)集中提取出每一個(gè)電影對(duì)象所需要的屬性值 (包括電影名稱、電影類型、電影關(guān)鍵字、電影出品方),將其表示為節(jié)點(diǎn),其中,電影名稱為主要節(jié)點(diǎn),其他屬性為電影名稱節(jié)點(diǎn)的信息節(jié)點(diǎn)。其次是關(guān)系的構(gòu)建,節(jié)點(diǎn)關(guān)系定義了兩個(gè)節(jié)點(diǎn)之間存在的特定關(guān)聯(lián),在知識(shí)圖譜中,它可以被描述為兩個(gè)節(jié)點(diǎn)實(shí)體間的有形邊。以構(gòu)造電影類型三元組為例,表1中Avatar、Spectre等字段為電影名稱節(jié)點(diǎn),Action、Adventure等屬性字段為電影類型節(jié)點(diǎn),Genre即為Avatar節(jié)點(diǎn) (電影名稱)和Action節(jié)點(diǎn) (電影類型)之間的邊,其含義為:電影(《阿凡達(dá)》)的類型為Action。本例中實(shí)際存儲(chǔ)數(shù)據(jù)集文件時(shí),只用存儲(chǔ)兩個(gè)節(jié)點(diǎn)即可,節(jié)點(diǎn)關(guān)系由Neo4j存儲(chǔ)時(shí)使用cypher語(yǔ)言說明。
表1 電影類型數(shù)據(jù)集 (部分)
從Netfil x Prize數(shù)據(jù)集中提取出用戶對(duì)電影的評(píng)分矩陣,將電影名稱和用戶ID作為節(jié)點(diǎn) (實(shí)體),以用戶對(duì)該電影的評(píng)分值作為邊,進(jìn)行電影名稱節(jié)點(diǎn)和用戶ID節(jié)點(diǎn)間的關(guān)系創(chuàng)建。如表2中,用戶684(用戶ID)和電影(《伴郎》)(電影名稱)之間的邊 (關(guān)系)值為4,其含義為:用戶684對(duì)電影(《伴郎》)的評(píng)分等級(jí)為4。
表2 用戶評(píng)分?jǐn)?shù)據(jù)集 (部分)
其他三元組的構(gòu)建也應(yīng)用上述方法。這樣就構(gòu)建出了知識(shí)圖譜中實(shí)體以及實(shí)體之間的關(guān)系,本文構(gòu)建的電影知識(shí)圖譜實(shí)體以及關(guān)系如表3所示。
表3 實(shí)體關(guān)系表
以上就是數(shù)據(jù)處理和知識(shí)圖譜的構(gòu)建過程。處理過后的數(shù)據(jù)集是符合Neo4j導(dǎo)入要求的CSV文件,文件中包含電影名稱、電影關(guān)鍵詞、電影類型、電影出品方、用戶ID等實(shí)體以及電影名稱與電影類型、電影名稱與出品方、電影名稱與電影關(guān)鍵詞、用戶ID與電影名稱 (包含用戶給電影的評(píng)分)等實(shí)體關(guān)系。
4.2.1 Neo4j存儲(chǔ)的優(yōu)點(diǎn)
目前知識(shí)圖譜的存儲(chǔ)方式主要有關(guān)系型數(shù)據(jù)庫(kù)、圖數(shù)據(jù)庫(kù)和基于RDF結(jié)構(gòu)的存儲(chǔ)方式。圖數(shù)據(jù)庫(kù)存儲(chǔ)方式最大的優(yōu)點(diǎn)在于,圖結(jié)構(gòu)即為知識(shí)圖譜結(jié)構(gòu):圖中的節(jié)點(diǎn)代表知識(shí)圖譜的對(duì)象,圖中的邊代表知識(shí)圖譜對(duì)象之間的關(guān)系。目前使用最廣泛的圖數(shù)據(jù)庫(kù)為Neo4j。
Neo4j圖數(shù)據(jù)庫(kù)以圖形結(jié)構(gòu)的形式存儲(chǔ)信息,關(guān)聯(lián)的數(shù)據(jù)本身就是它所包含的數(shù)據(jù),因此它可以直接顯示關(guān)聯(lián)數(shù)據(jù)特征以及數(shù)據(jù)之間的關(guān)系。Neo4j導(dǎo)入節(jié)點(diǎn)的數(shù)量大、速度快、支持查詢算法,并且相較于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),Neo4j的遍歷算法設(shè)計(jì)借助圖結(jié)構(gòu)自然伸展的特點(diǎn),不需要復(fù)雜的連接運(yùn)算,因此數(shù)據(jù)及其關(guān)系復(fù)雜程度的增加不會(huì)導(dǎo)致搜索效率的下降。
4.2.2 知識(shí)導(dǎo)入
將數(shù)據(jù)導(dǎo)入Neo4j主要使用以下三種方法:第一種是使用cypher CREATE語(yǔ)句,為每條數(shù)據(jù)創(chuàng)建一條CREATE語(yǔ)句;第二種是使用cypher語(yǔ)法中的LOAD CSV語(yǔ)句;第三種是使用Neo4j官方提供的neo4j-i mport工具。cypher語(yǔ)言的LOAD CSV語(yǔ)句可以適用于任何情況下的數(shù)據(jù)導(dǎo)入。本文通過LOAD CSV語(yǔ)句將經(jīng)過數(shù)據(jù)預(yù)處理后的電影CSV文件導(dǎo)入到Neo4j數(shù)據(jù)庫(kù)中 (需要將處理好的數(shù)據(jù)放到Neo4j安裝路徑下的i mport文件夾中)。
4.2.2 .1 導(dǎo)入數(shù)據(jù)并創(chuàng)建節(jié)點(diǎn)
節(jié)點(diǎn)導(dǎo)入模型:
variable:Lable{key1:val ue1,…,key N:value N}
節(jié)點(diǎn)標(biāo)簽對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)的表名,而屬性對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫(kù)中表的列。在被創(chuàng)建時(shí),每個(gè)節(jié)點(diǎn)都會(huì)自動(dòng)獲得一個(gè)默認(rèn)的內(nèi)部屬性ID,其值為整數(shù)。同時(shí),節(jié)點(diǎn)的ID屬性值在圖數(shù)據(jù)庫(kù)中是逐次遞增且唯一的。
以 “用戶”和 “電影”兩個(gè)節(jié)點(diǎn)的導(dǎo)入為例,具體的語(yǔ)句為:
LOAD CSV WITH HEADERS FROM'file:///grade.csv'AScsv
MERGE(m:電影{title:csv.title})
MERGE(u:用戶{id:toInteger(csv.user_id)})
4.2.2 .2 創(chuàng)建節(jié)點(diǎn)之間的關(guān)系
關(guān)系構(gòu)建模型:
(start Node)-[variable:relationship Type{key1:value1,…,key N:value N}]→ (end-Node)
關(guān)系模型中圓括號(hào)內(nèi)字段表示節(jié)點(diǎn),方括號(hào)內(nèi)字段表示關(guān)系,花括號(hào)內(nèi)字段表示關(guān)系的屬性。關(guān)系類型形式上類似于節(jié)點(diǎn)標(biāo)簽,且在創(chuàng)建新關(guān)系時(shí),關(guān)系類型必須被唯一指定。在cypher語(yǔ)言中,關(guān)系可分為兩種:使用一對(duì)短橫線 (即--)表示一個(gè)無方向的關(guān)系;若在無方向關(guān)系的一端加上箭頭 (即→或 ←)則表示一個(gè)有方向的關(guān)系。
以上面構(gòu)建的 “用戶”和 “電影”兩個(gè)節(jié)點(diǎn)為例,構(gòu)建兩個(gè)節(jié)點(diǎn)之間的關(guān)系,即用戶給電影的評(píng)分。具體語(yǔ)句為:
CREATE(用 戶)-[:RATED{grading:toInteger(csv.grade)評(píng)分}]→ (電影)
當(dāng)上例中節(jié)點(diǎn)與節(jié)點(diǎn)關(guān)系創(chuàng)建成功,如圖4所示。
圖4 三元組
橙色 (右)表示為 (電影(《紅磨坊》))實(shí)體,綠色 (左)表示為用戶實(shí)體 (用戶769),箭頭描述的是用戶與電影之間的關(guān)系,意味該用戶給該電影評(píng)分過。將類似的多個(gè)三元組相互連接便形成了知識(shí)圖譜,如圖5和圖6所示。所構(gòu)建的知識(shí)圖譜中節(jié)點(diǎn)與關(guān)系數(shù)量統(tǒng)計(jì)如表4所示。
圖5 電影知識(shí)圖譜的可視化
圖6 電影知識(shí)圖譜實(shí)體關(guān)系圖 (部分)
表4 節(jié)點(diǎn)與關(guān)系數(shù)量統(tǒng)計(jì)表
知識(shí)圖譜構(gòu)建完畢后,依據(jù)知識(shí)圖譜 (圖6)存儲(chǔ)的內(nèi)容,可以提煉出節(jié)點(diǎn)實(shí)體間不同語(yǔ)義的路徑。根據(jù)關(guān)系路徑推斷出目標(biāo)用戶對(duì)電影的喜好關(guān)系,初步找到可能被其喜歡的電影集合M。再基于知識(shí)圖譜,以電影集合M中的每部電影為橋梁找到目標(biāo)用戶的關(guān)聯(lián)用戶 (例如用戶1和用戶2)。
接著計(jì)算用戶之間的相似度,從關(guān)聯(lián)用戶中找到相似用戶,將相似用戶對(duì)于電影集合M中平均評(píng)分高的電影篩選出來,推薦給目標(biāo)用戶,從而使推薦結(jié)果更準(zhǔn)確。
本文以用戶134和電影(《夜鷹》)的喜好關(guān)系為例,從我們已經(jīng)構(gòu)建好的知識(shí)圖譜中可以抽取出以下路徑 (圖7):
圖7 語(yǔ)義推理路徑 (1)
捕捉到的路徑 (1)(2)描述的是同類型電影間的特征關(guān)系,由此可以推斷出用戶134可能會(huì)喜歡的電影是(《夜鷹》)。
從我們已經(jīng)構(gòu)建好的知識(shí)圖譜中還可以抽取出以下路徑 (圖8):
圖8 語(yǔ)義推理路徑 (2)
捕捉到的路徑 (3)(4)(5)描述的是從用戶134喜歡看的電影(《玉焰》)的各種屬性信息出發(fā),檢索出具有相同屬性信息的其他電影。通過多種語(yǔ)義路徑得到類型豐富多樣的電影集合M(部分)如表5所示:
表5 基于知識(shí)圖譜找到的電影集合M(部分)
使用余弦相似度計(jì)算關(guān)聯(lián)用戶間的相似度,將用戶評(píng)分記為向量,篩選出相似用戶 (設(shè)定閾值,相似度大于90%則認(rèn)為相似),生成相似用戶的知識(shí)圖譜SI MILARITY(圖9)。
圖9 相似用戶知識(shí)圖譜SI MIL ARITY
依次檢索電影集合M中的每部電影,統(tǒng)計(jì)當(dāng)前電影與SI MILARITY中每個(gè)實(shí)體 (用戶)間關(guān)系的值 (評(píng)分),缺少關(guān)系數(shù)據(jù)則忽略,計(jì)算每部電影的平均評(píng)分,降序排列后按順序?yàn)槠渫扑]。最終為用戶134推薦的電影結(jié)果如表6所示。
表6 用戶134推薦結(jié)果 (基于相似用戶推薦)
本文以T MDB電影數(shù)據(jù)集和Netflix Prize電影評(píng)分?jǐn)?shù)據(jù)集為例,構(gòu)建了電影知識(shí)圖譜,基于Neo4j圖數(shù)據(jù)庫(kù)實(shí)現(xiàn)了知識(shí)的存儲(chǔ),并依據(jù)知識(shí)圖譜進(jìn)行電影推薦,解決了傳統(tǒng)電影推薦算法面臨的一些難題。推薦結(jié)果也更加精準(zhǔn)多樣,同時(shí)具有很好的可解釋性。而基于知識(shí)圖譜的電影推薦系統(tǒng)為電影推薦技術(shù)的發(fā)展開拓了新思路。知識(shí)圖譜應(yīng)用是一個(gè)較新的領(lǐng)域,本文做了一些探索。下一階段的研究重點(diǎn)將放在改進(jìn)電影推薦算法上,嘗試解決推薦系統(tǒng)中常見的流行度—機(jī)會(huì)偏差 (Popularity-Opportunity Bias)問題,使推薦結(jié)果更精準(zhǔn),力求在電影推薦領(lǐng)域做出更多的貢獻(xiàn)。
①冷啟動(dòng)問題,如何在沒有大量用戶行為數(shù)據(jù)的情況下進(jìn)行有效推薦的問題。
②RDF,即資源描述框架。RDF以三元組形式存儲(chǔ)數(shù)據(jù)且不包含屬性信息。