姜雨菲 萬(wàn) 超
(西安工業(yè)大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 西安 710021)
隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,網(wǎng)絡(luò)電視已經(jīng)在人群中得到普及,但是由于電視節(jié)目資源數(shù)量的不斷擴(kuò)大,用戶在尋找自己所需的節(jié)目資源時(shí)難度加大。此時(shí)對(duì)用戶的電視產(chǎn)品推薦功能顯得尤為重要。
在各大公司的推薦系統(tǒng)中,根據(jù)推薦算法的不同主要可以分為基于協(xié)同過(guò)濾的推薦系統(tǒng)、混合的推薦系統(tǒng)、基于關(guān)聯(lián)規(guī)則的推薦系統(tǒng)等,其中基于協(xié)同過(guò)濾的推薦系統(tǒng)是應(yīng)用最為廣泛的。協(xié)同過(guò)濾推薦系統(tǒng)主要包括基于用戶的協(xié)同過(guò)濾推薦、基于項(xiàng)目的協(xié)同過(guò)濾推薦和基于模型的協(xié)同過(guò)濾推薦,其中在用戶比較多時(shí)基于項(xiàng)目的協(xié)同過(guò)濾算法比基于用戶的協(xié)同過(guò)濾算法有更好的時(shí)效性,它通常應(yīng)用于電子商務(wù)推薦系統(tǒng)中[1,14]。近年來(lái),基于內(nèi)容的文本挖掘領(lǐng)域的隱形語(yǔ)義模型逐漸流行起來(lái),它的核心思想是挖掘用戶隱形的感興趣的物品推薦,主要技術(shù)包括隱含類別模型、隱含主題模型、矩陣分解技術(shù)等。
雖然協(xié)同過(guò)濾推薦系統(tǒng)以及一些電視節(jié)目推薦系統(tǒng)在很多方面取得了很多研究成果,但是依然存在很多問(wèn)題需要解決,比如在物品-物品評(píng)分稀疏矩陣下,傳統(tǒng)的相似性度量方法不能很好地計(jì)算用戶間或項(xiàng)目間的相似度,并且存在冷啟動(dòng)、新項(xiàng)目等問(wèn)題,以及核心的推薦算法的好壞等問(wèn)題[2~3]。
本文介紹了傳統(tǒng)協(xié)同過(guò)濾推薦算法的實(shí)現(xiàn)過(guò)程,分析了其在冷啟動(dòng)、新項(xiàng)目等問(wèn)題上的不足。然后,介紹了針對(duì)冷啟動(dòng)問(wèn)題的解決方法。利用了廣電網(wǎng)絡(luò)運(yùn)營(yíng)公司的大數(shù)據(jù)基礎(chǔ)營(yíng)銷服務(wù)平臺(tái)積累下來(lái)的海量真實(shí)數(shù)據(jù),通過(guò)分析用戶的收視內(nèi)容與產(chǎn)品內(nèi)容,利用jieba中文分詞工具對(duì)用戶收視內(nèi)容與電視產(chǎn)品內(nèi)容進(jìn)行分詞處理,統(tǒng)計(jì)了對(duì)應(yīng)用戶與節(jié)目的詞語(yǔ)次數(shù),通過(guò)計(jì)算詞語(yǔ)的TF-IDF值[15~16],得到用戶收視內(nèi)容向量表與電視產(chǎn)品向量表。經(jīng)過(guò)計(jì)算用戶內(nèi)容與產(chǎn)品內(nèi)容的余弦相似度,得到推薦值。最后通過(guò)準(zhǔn)確率和召回率兩個(gè)指標(biāo)對(duì)該系統(tǒng)進(jìn)行了評(píng)價(jià),最終證明該方法在解決冷啟動(dòng)問(wèn)題上有較好的效果。
基于物品的協(xié)同過(guò)濾(item-based collabora?tive filtering)算法是目前得到廣泛應(yīng)用的算法之一[4]。其基本思想就是通過(guò)分析物品之間的關(guān)聯(lián)度來(lái)給用戶推薦那些與他們?cè)?jīng)喜歡過(guò)的產(chǎn)品關(guān)聯(lián)度較大的產(chǎn)品。
ItemCF算法的基本思想并不是通過(guò)計(jì)算物品的內(nèi)容相似度來(lái)得到物品之間的關(guān)聯(lián)程度,而是通過(guò)分析用戶的行為記錄來(lái)計(jì)算物品之間的關(guān)聯(lián)程度[5]。簡(jiǎn)單來(lái)說(shuō),若物品A和物品B具有很大的關(guān)聯(lián)度是由于喜歡物品A的用戶多數(shù)也會(huì)選擇物品B。
首先,我們可以用下面的公式來(lái)定義物品的關(guān)聯(lián)度:
上式中,wij表示物品i與物品j的關(guān)聯(lián)度,分母就代表喜歡物品i的用戶集合,而分子則是同時(shí)喜歡物品i和物品j的用戶集合。因此,這里物品i與j之間關(guān)聯(lián)度簡(jiǎn)單來(lái)說(shuō)就是指只喜歡物品i的用戶中同時(shí)喜歡兩種物品的用戶所占的比例。
上述定義似乎很正確,但存在一個(gè)漏洞,也就是沒(méi)有考慮物品的熱門程度。假設(shè)物品j是熱門物品,那么喜歡的人會(huì)很多,此時(shí)wij就會(huì)接近1,這就表現(xiàn)為熱門物品與所有物品的關(guān)聯(lián)度都接近1。所以為了避免總是會(huì)推薦那些熱門的物品,可以對(duì)上式進(jìn)行改進(jìn):
這個(gè)公式懲罰了物品j的權(quán)重,這樣也就緩解了上述問(wèn)題[6]。
在用這種方法計(jì)算關(guān)聯(lián)度時(shí),由于用戶興趣列表很大,所以計(jì)算的時(shí)間復(fù)雜度較高。在實(shí)際情況中,某些用戶可能只對(duì)一兩個(gè)物品產(chǎn)生過(guò)行為,其興趣列表很小,這樣就會(huì)導(dǎo)致 | N(i)∩N(j)|=0。也就是說(shuō)很多時(shí)間會(huì)浪費(fèi)在計(jì)算這種物品之間的相似度上。如果換一個(gè)思路,我們可以首先計(jì)算出|N(i)∩N(j)|≠0的物品對(duì),再對(duì)這些物品對(duì)做后續(xù)計(jì)算,這樣就可以省去計(jì)算關(guān)聯(lián)度為0的物品對(duì)的時(shí)間。為此,我們可以首先建立用戶到物品的倒排表,得到每個(gè)用戶的興趣列表。令稀疏矩陣C[i][j]= | N(i)∩N(j) |,假設(shè)物品i和j同時(shí)屬于倒排表中K個(gè)用戶對(duì)應(yīng)的物品列表,那么就有C[i][j]=K。最終就可以得到所有物品之間K不為0的C[i][j]。
圖1是一個(gè)根據(jù)上面的程序計(jì)算物品相似度的簡(jiǎn)單例子。
圖1 一個(gè)計(jì)算物品相似度的簡(jiǎn)單例子
圖1 中最左邊每一條為一個(gè)用戶的物品興趣列表,然后,我們將里面的物品兩兩加一,得到一個(gè)單獨(dú)的用戶興趣矩陣。最終將所有這些單獨(dú)的矩陣相加得到上圖中最終的C矩陣。C矩陣中記錄了同時(shí)喜歡物品i和物品j的用戶數(shù)。最后,我們可以將C矩陣進(jìn)行歸一化處理,這樣就可以得到物品之間的余弦相似度矩陣W,W中記錄了兩兩物品的相似度。
然后我們可通過(guò)如下公式計(jì)算用戶u對(duì)一個(gè)新物品j的興趣度:
上式中N(u)是用戶喜歡的物品的集合,S(j,K)是和物品j最相似的K個(gè)物品的集合,wji是物品j和i的相似度,rui是用戶u對(duì)物品i的興趣[7~8]。puj就表示為物品j對(duì)于用戶u的推薦度。
在傳統(tǒng)推薦算法中,它們所需推薦的物品總是已經(jīng)出現(xiàn)在市場(chǎng)中的,也就是說(shuō)這些產(chǎn)品已經(jīng)得到了部分用戶的反饋。而對(duì)于某些新產(chǎn)品來(lái)說(shuō),它們無(wú)法得到一個(gè)好的推薦目標(biāo)用戶,如何在沒(méi)有得到用戶對(duì)產(chǎn)品的反饋信息的情況下對(duì)產(chǎn)品做出一個(gè)好的推薦方案,就是冷啟動(dòng)的問(wèn)題[8,17~18]。
通過(guò)上節(jié)中算法的介紹,我們可以知道對(duì)于傳統(tǒng)的ItemCF算法來(lái)說(shuō),物品冷啟動(dòng)是一個(gè)嚴(yán)重的問(wèn)題。如果需要解決這個(gè)問(wèn)題,就需要考察物品的內(nèi)容信息了。
物品的內(nèi)容信息多種多樣,一般來(lái)說(shuō),物品的內(nèi)容可以通過(guò)向量空間模型表示,它會(huì)將每個(gè)物品表示成一個(gè)關(guān)鍵詞向量。其中一些諸如導(dǎo)演、演員等實(shí)體的信息就可以直接作為關(guān)鍵詞。但如果是諸如物品簡(jiǎn)介等形式的文本信息時(shí),就需要引入一些理解自然語(yǔ)言的技術(shù)(如Python中的jieba分詞工具包等)來(lái)抽取文本中的關(guān)鍵詞。圖2展示了從文本生成關(guān)鍵詞向量的主要步驟。在得到關(guān)鍵詞集合后,需要對(duì)關(guān)鍵詞進(jìn)行排名,計(jì)算每個(gè)關(guān)鍵詞的權(quán)值,從而生成關(guān)鍵詞向量。
圖2 關(guān)鍵詞向量的生成過(guò)程
對(duì)物品d,它的內(nèi)容表示成一個(gè)關(guān)鍵詞向量如下:
如果物品是文本,我們可以用信息檢索領(lǐng)域著名的TF-IDF公式計(jì)算詞的權(quán)重:
在得到每個(gè)物品的關(guān)鍵詞向量后,物品之間的內(nèi)容相似度就可以通過(guò)向量之間的余弦相似度公式計(jì)算得到:
在實(shí)際應(yīng)用中,可以首先通過(guò)建立關(guān)鍵詞—物品的倒排表加速這一計(jì)算過(guò)程。得到物品相似度之后,可以利用傳統(tǒng)的ItemCF算法中的思想,最終生成用戶的產(chǎn)品推薦列表。
對(duì)于推薦系統(tǒng)而言,推薦的精確度是評(píng)判推薦系統(tǒng)優(yōu)劣的一個(gè)重要指標(biāo),它反映了系統(tǒng)推薦給用戶的視頻有多少是用戶感興趣的。本文從準(zhǔn)確率和召回率兩個(gè)方面來(lái)對(duì)系統(tǒng)進(jìn)行評(píng)測(cè),這個(gè)指標(biāo)是推薦系統(tǒng)最重要的評(píng)測(cè)指標(biāo)[20]。其中準(zhǔn)確率的計(jì)算公式如下所示:
召回率的計(jì)算公式如下所示:
R(u)為向用戶u推薦的電影個(gè)數(shù)。
T(u)為用戶u在測(cè)試集合上感興趣的電影個(gè)數(shù)。
我們可以通過(guò)訓(xùn)練集預(yù)測(cè)用戶在測(cè)試集上的興趣偏好,然后計(jì)算預(yù)測(cè)結(jié)果和測(cè)試集實(shí)際偏好的重合度。重合度越高,系統(tǒng)的準(zhǔn)確度越高[19~20]。
本實(shí)驗(yàn)中所采用的數(shù)據(jù)集合包括兩部分,第一部分為1329個(gè)用戶的38010條收視記錄,數(shù)據(jù)形式如表1所示;第二部分為18480條節(jié)目信息,數(shù)據(jù)形式如表2所示。
表1 用戶收視記錄表
表2 節(jié)目信息表
將用戶收視節(jié)目?jī)?nèi)容與電視產(chǎn)品節(jié)目?jī)?nèi)容進(jìn)行清洗、分詞、停詞等預(yù)處理操作后使用TF-IDF算法對(duì)兩組內(nèi)容進(jìn)行文本向量化,TF表示特征詞在該條文本中出現(xiàn)的概率,IDF表示含有該特征詞的文本數(shù)占所有文本數(shù)的比例,它反映了該特征詞在所有文本中的熱度[18,20~21]。單獨(dú)使用 TF值可能會(huì)導(dǎo)致一個(gè)問(wèn)題:一些特征詞可能在所有文檔中的TF值都很高,很難區(qū)分這些特征詞到底代表哪個(gè)文檔。因此需要將TF和IDF值結(jié)合使用,算法流程如圖1所示。
圖3 操作流程圖
根據(jù)用戶收視節(jié)目的內(nèi)容與待推薦電視產(chǎn)品內(nèi)容,對(duì)文本的預(yù)處理進(jìn)行以下幾個(gè)步驟:
1)數(shù)據(jù)清洗:首先將文本中的一些噪音數(shù)據(jù)清除掉,因?yàn)楣?jié)目?jī)?nèi)容中難免有一些特殊符號(hào)、數(shù)字等信息,這些信息對(duì)于內(nèi)容的識(shí)別沒(méi)有任何意義,會(huì)影響模型的準(zhǔn)確性,所以要對(duì)這些信息進(jìn)行清除。
2)分詞、停詞:中文的分詞是將一個(gè)漢字序列根據(jù)某種規(guī)則切分成若干個(gè)詞語(yǔ),然后將無(wú)意義的詞去掉。停詞則是去除一些對(duì)內(nèi)容識(shí)別度不高的詞,對(duì)文本的識(shí)別沒(méi)有任何意義,也要去除掉,同時(shí)也能降低向量空間的維度,減少程序運(yùn)行內(nèi)存消耗[20]。
根據(jù)TF-IDF算法,對(duì)文本建立向量空間模型,步驟如下:
1)計(jì)算TF-IDF值:通過(guò)每個(gè)條目的詞語(yǔ)出現(xiàn)次數(shù),分別計(jì)算詞語(yǔ)出現(xiàn)的TF和IDF值,得到最終的TF-IDF值,其代表了該詞語(yǔ)在每個(gè)條目中的重要程度。
2)文本向量化:對(duì)文本進(jìn)行向量化,為下一步計(jì)算用戶收視內(nèi)容與電視節(jié)目信息內(nèi)容的相似度作出準(zhǔn)備。
通過(guò)python語(yǔ)言對(duì)如上步驟進(jìn)行處理:
首先遍歷文本預(yù)處理后得到的字典,計(jì)算TF值,存入新的json文件,其每個(gè)條目的組織形式為{用戶設(shè)備號(hào):[[詞語(yǔ)1,TF1],[詞語(yǔ)2,TF2],…,[詞語(yǔ)n,TFn]]}。根據(jù)文本預(yù)處理后得到的字典,建立用戶-詞語(yǔ)的倒排表,存入新的json文件,便于IDF值的計(jì)算,其每個(gè)條目的組織形式為{詞語(yǔ):[[用戶設(shè)備號(hào)1,出現(xiàn)次數(shù)1],[用戶設(shè)備號(hào)2,出現(xiàn)次數(shù)2],…,[用戶設(shè)備號(hào)n,出現(xiàn)次數(shù)n]]}。遍歷倒排表,計(jì)算出IDF值,存入新的json文件,其每個(gè)條目的組織形式為{詞語(yǔ):[[用戶設(shè)備號(hào)1,IDF1],[用戶設(shè)備號(hào)2,IDF2],…,[用戶設(shè)備號(hào)n,IDFn]]}。通過(guò)TF值表和IDF值的倒排表,得到TF-IDF值表,存入新的json文件,其每個(gè)條目的組織形式為{用戶設(shè)備號(hào):[[詞語(yǔ)1,TF-IDF1],[詞語(yǔ)2,TF-IDF2],…,[詞語(yǔ)n,TF-IDFn]]}。其中未出現(xiàn)的詞語(yǔ)的TF-IDF值則為0。
最終形式如表3所示。
表3 用戶點(diǎn)播信息向量空間模型
分別將用戶點(diǎn)播信息與用戶單片點(diǎn)播信息,電視產(chǎn)品節(jié)目信息分別進(jìn)行如上處理,電視產(chǎn)品節(jié)目信息的最后字典條目組織形式為{產(chǎn)品節(jié)目編號(hào):[[詞語(yǔ)1,TF-IDF1],[詞語(yǔ)2,TF-IDF2],…,[詞語(yǔ)n,TF-IDFn]]}。
根據(jù)所得的用戶收視信息的用戶-內(nèi)容向量表,電視產(chǎn)品-內(nèi)容向量表,計(jì)算推薦度分為以下幾個(gè)步驟:
計(jì)算用戶收視節(jié)目的信息與電視產(chǎn)品節(jié)目的余弦相似度,得到初步推薦值。余弦相似度公式為
其中mi表示用戶-內(nèi)容向量表,nj表示電視產(chǎn)品-內(nèi)容向量表。分別計(jì)算用戶點(diǎn)播信息對(duì)應(yīng)的節(jié)目推薦名單與推薦度,用戶單片點(diǎn)播信息對(duì)應(yīng)的推薦名單與推薦度。給予相應(yīng)的權(quán)值,綜合計(jì)算,得到最終的推薦名單與推薦度。
使用python語(yǔ)言對(duì)如上步驟進(jìn)行處理:
根據(jù)兩個(gè)向量表字典,找出同時(shí)擁有詞語(yǔ)及對(duì)應(yīng)TF-IDF值,將其相乘,存入新json文件,字典條目組織形式為{詞語(yǔ):[[[用戶設(shè)備號(hào)1,電視節(jié)目編號(hào)1],TF-IDFm1*TF-IDFn1],[[用戶設(shè)備號(hào)2,電視節(jié)目編號(hào) 2],TF-IDFm2*TF-IDFn2],…,[[用戶設(shè)備號(hào) n,電視節(jié)目編號(hào) n],TF-ID?Fmn*TF-IDFnn]]}。將同一個(gè)詞語(yǔ)中用戶設(shè)備號(hào)-節(jié)目編號(hào)對(duì)相同的進(jìn)行合并,存入新json文件,字典條目組織形式為{“用戶設(shè)備號(hào),節(jié)目編號(hào)”:[TF-IDFm1*TF-IDFn1,…,TF-IDFmn*TF-IDF?nn]}。
遍歷上一步得到的字典,將value值列表中的值相加,得到余弦相似度公式分子,新的字典組織形式為
{“用戶設(shè)備號(hào),節(jié)目編號(hào)”:sum(TF-ID?Fm*TF-IDFn)}。
通過(guò)用戶-點(diǎn)播內(nèi)容詞TF-IDF向量表計(jì)算出每個(gè)用戶的向量模|mi|,通過(guò)節(jié)目-內(nèi)容詞TF-IDF向量表計(jì)算出每個(gè)節(jié)目的向量模|nj|,根據(jù)上一步得到的字典中的“用戶設(shè)備號(hào)-節(jié)目編號(hào)”計(jì)算出對(duì)應(yīng)的分母值,最終得到新的字典,字典條目組織形式為{“用戶設(shè)備號(hào),節(jié)目編號(hào)”:sum(TF-ID?Fm*TF-IDFn)/(|mi|*|nj|)}。
分別計(jì)算得到用戶點(diǎn)播信息-節(jié)目信息推薦度表和用戶單片點(diǎn)播信息-節(jié)目信息推薦度表,由于單片點(diǎn)播信息的重要程度比點(diǎn)播信息的重要程度高[21],所以,給予單片點(diǎn)播信息的權(quán)值為0.6,點(diǎn)播信息的權(quán)值為0.4,計(jì)算最終推薦度并進(jìn)行排序并選取推薦度最高的20個(gè)節(jié)目編號(hào)對(duì)應(yīng)推薦值。最終字典組織形式為{用戶設(shè)備號(hào):[[節(jié)目編號(hào)1,推薦度1],[節(jié)目編號(hào)2,推薦度2],…,[節(jié)目編號(hào)n,推薦度n]]}。
最終形式表4所示:
根據(jù)以上過(guò)程,將最終推薦列表結(jié)合節(jié)目信息輸出,部分結(jié)果如表5所示。
根據(jù)所得推薦列表與測(cè)試數(shù)據(jù)中用戶的收視記錄,以準(zhǔn)確率和召回率作為系統(tǒng)的評(píng)價(jià)指標(biāo),通過(guò)計(jì)算得到準(zhǔn)確率和召回率分別為25.16%和14.11%。
表4 最終推薦度
本文利用了廣電網(wǎng)絡(luò)運(yùn)營(yíng)公司的大數(shù)據(jù)基礎(chǔ)營(yíng)銷服務(wù)平臺(tái)積累下來(lái)的海量真實(shí)數(shù)據(jù),采用數(shù)據(jù)挖掘技術(shù),分析了用戶的收視偏好、產(chǎn)品的內(nèi)容信息。對(duì)傳統(tǒng)的基于物品的協(xié)同過(guò)濾算法進(jìn)行了介紹,描述了其在冷啟動(dòng)問(wèn)題上的不足,并將其與基于產(chǎn)品內(nèi)容的推薦算法結(jié)合,實(shí)現(xiàn)了對(duì)用戶的產(chǎn)品個(gè)性化推薦。
結(jié)果表明:在利用準(zhǔn)確率和召回率作為評(píng)價(jià)指標(biāo)時(shí),基于物品內(nèi)容的推薦算法在解決冷啟動(dòng)問(wèn)題上有較好的效果,兩者分別達(dá)到了25.16%和14.11%。