電子科技大學計算機學院-綜合課程設(shè)計報告-以電影資訊評論站點“豆瓣電影”的用戶數(shù)據(jù)構(gòu)建基于語義分析的協(xié)同過濾推薦系統(tǒng)_第1頁
已閱讀1頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  摘 要</b></p><p>  本系統(tǒng)以一個大規(guī)模網(wǎng)絡(luò)爬蟲程序所獲取的網(wǎng)絡(luò)評論數(shù)據(jù)為基礎(chǔ),使用了詞向量,用戶畫像等技術(shù),構(gòu)建了一個基于影評的推薦系統(tǒng)。主要的工作分為兩部分,首先是研究分析了豆瓣電影網(wǎng)站是如何防御網(wǎng)絡(luò)爬蟲程序已經(jīng)應(yīng)對策略,其次根據(jù)網(wǎng)絡(luò)爬蟲程序獲取的大量數(shù)據(jù)構(gòu)建了一個推薦系統(tǒng)。</p><p>  關(guān)鍵詞:大規(guī)模爬蟲,用

2、戶畫像,推薦系統(tǒng)</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p><b>  目 錄II</b></p><p><b>  第一章 緒 論1</b></p><p>

3、;  1.1 背景與意義1</p><p>  1.2 本系統(tǒng)的總體設(shè)計構(gòu)思1</p><p>  1.3 本文的主要貢獻與創(chuàng)新1</p><p>  第二章 大規(guī)模數(shù)據(jù)獲取2</p><p>  2.1 網(wǎng)絡(luò)爬蟲程序的原理2</p><p>  2.2 網(wǎng)絡(luò)爬蟲程序的設(shè)計方案2</p>&l

4、t;p>  2.3 豆瓣電影網(wǎng)站爬蟲可行性分析3</p><p>  2.3.1 豆瓣電影網(wǎng)站頁面分析3</p><p>  2.3.2 豆瓣電影網(wǎng)站反爬蟲策略分析3</p><p>  2.3.3 豆瓣電影網(wǎng)站爬蟲策略的設(shè)計4</p><p>  2.4 網(wǎng)絡(luò)爬蟲性能優(yōu)化4</p><p>  2.5

5、 本章小結(jié)5</p><p>  第三章 影評分析推薦系統(tǒng)6</p><p>  3.1 推薦系統(tǒng)綜述6</p><p>  3.1.1 推薦系統(tǒng)的概念和定義6</p><p>  3.1.2 推薦系統(tǒng)的形式化定義7</p><p>  3.2 推薦系統(tǒng)用戶模型設(shè)計7</p><p>

6、;  3.2.1 文本分析簡介7</p><p>  3.2.2 文本分析操作8</p><p>  3.3 推薦系統(tǒng)推薦對象模型設(shè)計8</p><p>  3.3.1 評分機制建模8</p><p>  3.3.2 影片分類特征建模9</p><p>  3.4 推薦系統(tǒng)算法9</p>&l

7、t;p>  3.4.1 協(xié)同過濾算法9</p><p>  3.4.2 基于項目的協(xié)同過濾算法9</p><p>  3.5 推薦系統(tǒng)推薦關(guān)鍵算法部分10</p><p>  3.5.1 距離定義部分10</p><p>  3.5.2 近鄰查找部分11</p><p>  3.5.3 評分向量的構(gòu)建

8、12</p><p>  第四章 課程設(shè)計總結(jié)與展望13</p><p><b>  4.1 總結(jié)13</b></p><p>  4.2 后續(xù)工作展望13</p><p><b>  致 謝14</b></p><p><b>  參考文獻15<

9、/b></p><p><b>  第一章 緒 論</b></p><p><b>  1.1 背景與意義</b></p><p>  隨著中國移動互聯(lián)網(wǎng)的迅速發(fā)展,網(wǎng)民數(shù)量也在大規(guī)模增長,用戶在社交與電商網(wǎng)站上的活躍程度日趨增加。隨著用戶群體的增加,用戶在網(wǎng)絡(luò)上留下的行為數(shù)據(jù)呈現(xiàn)指數(shù)級增長。面對龐大的用戶群體以及如

10、此大量的行為數(shù)據(jù),如何從中快速、準確、有效的獲取到有價值的數(shù)據(jù),分析出用戶的行為習慣以及偏好,在大規(guī)模內(nèi)容的場景下,為用戶提供精準的推薦服務(wù),是現(xiàn)在大數(shù)據(jù)研究領(lǐng)域的一個熱點和重點。</p><p>  網(wǎng)絡(luò)爬蟲是大規(guī)模數(shù)據(jù)獲取的必要程序。由于網(wǎng)絡(luò)上數(shù)據(jù)的高潛在商業(yè)價值,商業(yè)公司均會對其進行保密,即使能夠直接獲取的數(shù)據(jù)也會給出層層限制。在互聯(lián)網(wǎng)發(fā)展的二十余年里,網(wǎng)絡(luò)爬蟲程序設(shè)計和網(wǎng)站反爬蟲程序設(shè)計共同進步發(fā)展。如何

11、有效的進行大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)爬取,同樣是在工程領(lǐng)域的一個熱點和重點。</p><p>  1.2 本系統(tǒng)的總體設(shè)計構(gòu)思</p><p>  首先通過設(shè)計一個高性能網(wǎng)絡(luò)爬蟲,對部分數(shù)據(jù)進行爬取。在數(shù)據(jù)集上進行清洗,選擇一些高質(zhì)量的活躍用戶,設(shè)計算法,提取特征,進行回測,調(diào)整特征的選擇。之后再在大規(guī)模數(shù)據(jù)集上進行運算。</p><p>  1.3 本系統(tǒng)的主要貢獻與創(chuàng)新&l

12、t;/p><p>  本論文以大規(guī)模爬蟲獲取實時豆瓣電影數(shù)據(jù)為基礎(chǔ),實現(xiàn)了用戶畫像系統(tǒng)與推薦系統(tǒng),根據(jù)歷史數(shù)據(jù)得到的用戶群體行為分析報告,并根據(jù)用戶行為以及評論數(shù)據(jù)實現(xiàn)了智能化的電影推薦。</p><p>  第二章 大規(guī)模數(shù)據(jù)獲取</p><p>  在大規(guī)?;ヂ?lián)網(wǎng)社群站點中,由于網(wǎng)站運營策略以及一些涉及到潛在商業(yè)價值的考慮,運營公司通常會設(shè)置一些特殊的訪問流量識別措

13、施阻止外界使用程序大規(guī)模獲取數(shù)據(jù)。對于網(wǎng)絡(luò)爬蟲程序設(shè)計者來說,必須要識別并且進行一定的特殊設(shè)計,才能高效的大規(guī)模并行獲取數(shù)據(jù)。</p><p>  2.1 網(wǎng)絡(luò)爬蟲程序的原理</p><p>  網(wǎng)絡(luò)爬蟲程序,也叫網(wǎng)絡(luò)蜘蛛,在工程界通用簡稱“爬蟲”,是一種可以自動實現(xiàn)模擬真實用戶對網(wǎng)絡(luò)資源訪問并進行數(shù)據(jù)記錄的程序。爬蟲程序一般會選擇記錄目標站點的索引數(shù)據(jù),以及所關(guān)注的主要內(nèi)容的完整記錄。&

14、lt;/p><p>  2.2 網(wǎng)絡(luò)爬蟲程序的設(shè)計方案</p><p>  網(wǎng)絡(luò)爬蟲的形式多種多樣,從早期的C、C++設(shè)計,到現(xiàn)在主流的Python、Java設(shè)計都有其輝煌的歷史。早期網(wǎng)絡(luò)站點大部分內(nèi)容、形式單一,靜態(tài)網(wǎng)頁居多,網(wǎng)絡(luò)中富文本內(nèi)容較少,計算機資源較少。使用C、C++編寫的程序占用資源小,運行速度快,進行網(wǎng)絡(luò)通訊的方式靈活,加之語言本身使用廣泛,受到大量爬蟲程序員的青睞。</

15、p><p>  隨著全球互聯(lián)網(wǎng)產(chǎn)業(yè)、互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的高速發(fā)展,谷歌、百度等搜索引擎的崛起,互聯(lián)網(wǎng)上的資源爆炸性增長,基于各種目的,越來越多的程序員開始設(shè)計自己的網(wǎng)絡(luò)爬蟲程序。此時C、C++語言的一些缺點顯現(xiàn)出來,集中在編碼的不通用,設(shè)計繁瑣,缺乏高度抽象的類庫等。加之大規(guī)模數(shù)據(jù)存儲平臺的出現(xiàn),C、C++爬蟲程序日漸減少。</p><p>  爬蟲程序主要的任務(wù)在于:訪問網(wǎng)絡(luò)資源,解析返回結(jié)果,

16、對資源進行合理存儲。由于高度抽象以及簡潔的語法,Python以及Java等一下代的更加工程化的語言被大家所青睞。網(wǎng)絡(luò)爬蟲的開發(fā)極具靈活性,由于現(xiàn)代前端技術(shù)的成熟,爬蟲程序所獲取的內(nèi)容可能隨時變化,無法使用傳統(tǒng)的軟件工程方法進行設(shè)計開發(fā),通常的做法是迭代式的對網(wǎng)絡(luò)站點進行交替的探測、開發(fā)。網(wǎng)絡(luò)爬蟲的主要模塊功能比較固定,遇到的異常情況繁雜,需要有完善的異常處理機制。在對大規(guī)模數(shù)據(jù)設(shè)計的爬蟲中尤其重要。Python在網(wǎng)絡(luò)爬蟲類程序的開發(fā)效率

17、上有著無可比擬的先天優(yōu)勢,在文本分析、異常處理方面同樣有著大量的簡潔的設(shè)計,使得開發(fā)網(wǎng)絡(luò)爬蟲程序的方便程度與靈活程度大大提升。加之有許多專門為Python語言設(shè)計的網(wǎng)絡(luò)訪問庫,數(shù)據(jù)庫訪問框架,瀏覽器模擬器,文本解析器的存在,使得這門語言有著一個完備的網(wǎng)絡(luò)爬蟲程序開發(fā)生態(tài)環(huán)境。</p><p>  本文選擇使用Python3語言實現(xiàn)一個網(wǎng)絡(luò)爬蟲程序,對豆瓣電影網(wǎng)上Top250電影榜單上共計一千四百余萬條用戶對電源的

18、短評進行完全的爬取。在爬取數(shù)據(jù)的過程中,使用結(jié)構(gòu)化序列化的方式進行數(shù)據(jù)的存儲。</p><p>  2.3 豆瓣電影網(wǎng)站爬蟲可行性分析</p><p>  2.3.1 豆瓣電影網(wǎng)站頁面分析</p><p>  編寫網(wǎng)絡(luò)爬蟲程序,首先要對目標站點進行頁面分析。</p><p>  第一個參考頁面:豆瓣Top250電影榜單</p>

19、<p>  第二個參考頁面:豆瓣任意電影頁面</p><p>  第三個參考頁面:豆瓣任意電影短評頁面</p><p>  使用Chrome瀏覽器的開發(fā)者模式觀察頁面。所有關(guān)鍵信息都以靜態(tài)方式給出,不需要模擬用戶鼠標鍵盤行為與用戶觀察延時行為。我們可以直接解析,通過發(fā)出Get請求得到的返回頁面。</p><p>  榜單頁面可解析信息如下:總數(shù),排行榜名稱

20、,排行榜排名,電影中文名,電影英文名,電影id,電影導演,電影主演,電影封面</p><p>  電影詳情頁面可解析信息如下:電影id,電影中文名,電影別名,電影豆瓣評分,看過人數(shù),想看人數(shù),評分人數(shù),5張海報圖,條目分類,導演,主演,編劇,官方網(wǎng)站,豆瓣小站,上映時間日期,年代,語言,電影時長,影片類型,制片國家和地區(qū),簡介,長評數(shù)量,短評數(shù)量。</p><p>  電影短評頁面可解析信

21、息如下:短評數(shù)量,每條短評。對于每條短評:短評id,發(fā)布日期,上傳用戶,短評內(nèi)容,短評評分,有用數(shù)。</p><p>  通過輪詢請求以上頁面,我們可以獲得幾乎所有豆瓣電影公開的數(shù)據(jù)。</p><p>  2.3.2 豆瓣電影網(wǎng)站反爬蟲策略分析</p><p>  豆瓣電影作為國內(nèi)電影領(lǐng)域最大的在線交流平臺,擁有著大量的電影數(shù)據(jù)以及觀眾用戶數(shù)據(jù),一直被廣大程序員以及

22、數(shù)據(jù)分析人員作為目標數(shù)據(jù)站點使用網(wǎng)絡(luò)爬蟲獲取數(shù)據(jù)。該網(wǎng)站的反爬蟲策略已經(jīng)比較完善,例如對單個IP地址并發(fā)訪問量的限制,單個IP時間段內(nèi)訪問次數(shù)限制,用戶瀏覽器Cookie檢測,用戶訪問頁面連續(xù)性檢測,等等。</p><p>  經(jīng)過長時間訪問的實驗,以及編寫網(wǎng)絡(luò)爬蟲程序的經(jīng)驗,總結(jié)出了如下規(guī)律:</p><p>  當發(fā)起Get請求是不帶上Cookie,連續(xù)訪問次數(shù)稍多,豆瓣網(wǎng)站將直接對操

23、作的IP進行封禁。此時無論如何操作都將返回HTTP403的結(jié)果。需要等待半小時至一小時IP才會解除封禁。</p><p>  使用Cookie進行訪問。第一次發(fā)起Get請求任意一個豆瓣頁面,豆瓣都會返回一個名為bid的Cookie。之后帶上這個Cookie請求頁面,可以在約2秒一次訪問頻率上,5分鐘不封禁的結(jié)果。但此時的封禁是對于該Cookie的,只要清空該Cookie,又可獲得一個新的Cookie進行訪問。IP

24、地址是不會被封禁的。</p><p>  若保持低頻率訪問豆瓣頁面,比如在10秒一次的基礎(chǔ)上,不論如何都不會被封禁。</p><p>  2.3.3 豆瓣電影網(wǎng)站爬蟲策略的設(shè)計</p><p>  首先進行多次次無Cookie的請求,獲取多個bid,對這多個bid進行保存,并且進行訪問次數(shù)的統(tǒng)計。</p><p>  對于每次的Get請求,隨

25、機在bid池中獲取一個bid隨請求發(fā)出,并根據(jù)返回結(jié)果更新次數(shù)統(tǒng)計。若該請求返回HTTP 403或者bid使用次數(shù)到達100次,即將該次訪問操作回滾,將該bid拋棄</p><p>  在池中bid數(shù)量小于一個閾值時,進行一輪無Cookie請求,更新bid池</p><p>  在之后的訪問試驗中,對bid進行測試時,發(fā)現(xiàn)豆瓣電影并沒有對某個bid的第一次使用進行合法性判斷。于是修改訪問策

26、略為:每次訪問前對bid進行隨機,并隨請求發(fā)出,若失敗則直接重新隨機bid到成功為止。</p><p>  2.4 網(wǎng)絡(luò)爬蟲性能優(yōu)化</p><p>  經(jīng)過第一輪對電影榜單數(shù)據(jù)的統(tǒng)計,得到短評總數(shù)有一千四百萬條。傳統(tǒng)單線程爬取完全無法獲取所有的短評信息。</p><p>  針對網(wǎng)絡(luò)爬蟲這種IO密集型的應(yīng)用場景,多線程、多進程能夠很好的解決并發(fā)訪問的問題。使用Py

27、thon3中的multiprossesing庫對訪問進行多線程加速。同時使用time庫對訪問頻率進行控制。由于單次請求返回時間的不確定性(頁面大小,網(wǎng)絡(luò)情況),我們統(tǒng)計一段時間內(nèi)Get次數(shù),若超過閾值則在每個請求完成之后進行一個sleep操作以降低總體速度。</p><p>  針對單IP訪問數(shù)量的限制,建立了一個IP代理池,部署在一臺阿里云服務(wù)器上,全天候自動在各大代理網(wǎng)站上刺探可用的HTTP/HTTPS代理服

28、務(wù)器。網(wǎng)絡(luò)爬蟲程序可直接調(diào)用接口獲取一個代理IP。若某個IP連續(xù)請求失敗次數(shù)超過閾值,可以立即更換代理IP,以躲過豆瓣晚上對爬蟲的限制。</p><p>  針對爬蟲需要全天候運行的特點,使用Git作為源代碼管理工具,分別管理開發(fā)分支與穩(wěn)定版本分支,將穩(wěn)定版分支實時同步到一臺阿里云服務(wù)器上,并合理設(shè)計數(shù)據(jù)序列化保存格式,實現(xiàn)全天候運行的能力。</p><p><b>  2.5

29、本章小結(jié)</b></p><p>  本章內(nèi)容從工程的第一個需求出發(fā),逐步迭代開發(fā)了一個具有針對目標站點完備功能和高運行效率的網(wǎng)絡(luò)爬蟲程序。在連續(xù)運行4天后爬取了豆瓣電影Top250榜單中所有電影共計一千四百余萬條影評信息,并構(gòu)建初步的影評數(shù)據(jù)庫。</p><p>  第三章 影評分析推薦系統(tǒng)</p><p>  3.1 推薦系統(tǒng)綜述</p>

30、<p>  互聯(lián)網(wǎng)的出現(xiàn)和普及給用戶帶來了大量的信息,滿足了 用戶在信息時代對信息的需求,但隨著網(wǎng)絡(luò)的迅速發(fā)展而帶 來的網(wǎng)上信息量的大幅增長,使得用戶在面對大量信息時無 法從中獲得對自己真正有用的那部分信息,對信息的使用效 率反而降低了,這就是所謂的信息超載(information overload) 問題。</p><p>  信息超載問題一個非常有潛力的辦法是個性化推薦系統(tǒng),它是根據(jù)用戶的信息需

31、求、興趣等,將用戶感興趣的信息、產(chǎn)品等推薦給用戶的個性化信息推薦系統(tǒng)。和搜索引擎相比推薦系統(tǒng)通過研究用戶的興趣偏好,進行個性化計 算,由系統(tǒng)發(fā)現(xiàn)用戶的興趣點,從而引導用戶發(fā)現(xiàn)自己的信息需求。一個好的推薦系統(tǒng)不僅能為用戶提供個性化的服務(wù), 還能和用戶之間建立密切關(guān)系,讓用戶對推薦產(chǎn)生依賴。</p><p>  3.1.1 推薦系統(tǒng)的概念和定義</p><p>  推薦系統(tǒng)的定義有不少,但被廣

32、泛接受的推薦系統(tǒng)的概念和定義Resnick和Varian在1997年給出的:“它是利用電子商務(wù)網(wǎng)站向客戶提供商品信息和建議,幫助用戶決定應(yīng)該購買什么產(chǎn)品,模擬銷售人員幫助客戶完成購買過程”。推薦系統(tǒng)有3個重要的模塊:用戶建模模塊、推薦對象建模模塊、推薦算法模塊。通用的推薦系統(tǒng)模型流程如圖所示。</p><p>  推薦系統(tǒng)把用戶模型中興趣需求信息和推薦對象模型中的特征信息匹配,同時使用相應(yīng)的推薦算法進行計算篩選,

33、找到用戶可能感興趣的推薦對象,然后推薦給用戶。</p><p>  3.1.2 推薦系統(tǒng)的形式化定義</p><p>  推薦系統(tǒng)的形式化定義如下:設(shè)C是所有用戶的集合,S是所有可以推薦給用戶的對象的集合。實際上,C和S集合的規(guī)模通常很大,如上百萬的顧客以及上億種歌曲等。設(shè)效用函數(shù)可以計算對象s對用戶c的推薦度(如提供商的可靠性(vendor reliability)和產(chǎn)品的可得性(pro

34、duct availability)等),即 ,R是一定范圍內(nèi)的全序的非負實數(shù),推薦 要研究的問題就是找到推薦度R最大的那些對象 S* ,如式:</p><p>  從上述模型看來,推薦系統(tǒng)的構(gòu)建有三個主要步驟:對用戶(服務(wù))對象建模(即用戶畫像),對推薦對象建模,在(離)線推薦算法。</p><p>  3.2 推薦系統(tǒng)用戶模型設(shè)計</p><p>  在所有通

35、過網(wǎng)絡(luò)爬蟲程序獲取的數(shù)據(jù)當中,可以作為用戶畫像的有兩個方向的數(shù)據(jù):</p><p>  每個用戶對電影的評分</p><p>  每個用戶對電影的文字短評</p><p>  根據(jù)以上信息,我們可以以上數(shù)據(jù)構(gòu)成多維度模型對用戶的喜好進行刻畫。下文將介紹文本分析以及</p><p>  3.2.1 文本分析簡介</p><p

36、>  在自然語言處理領(lǐng)域,傳統(tǒng)的詞匯語義相似度方法主要是依靠本體詞典或知識庫的規(guī)則方法,利用統(tǒng)計語言模型在大規(guī)模語料庫上進行分析處理. 但是由于詞典和知識庫大多依賴人工構(gòu)建,其實時性和擴展性都比較差,因此在互聯(lián)網(wǎng)文本和專業(yè)領(lǐng)域文本處理中很難發(fā)揮出作用,在傳統(tǒng)研究方法中,詞匯通常用 one-hot 編碼形式表示,即假設(shè)詞表大小為 V,第 k 個詞表 示為一個維數(shù)為 V 的向量,除了第 k 維為 1,其他維均為 0. 一方面,這種表示

37、方法無法刻畫兩個詞語義上相似性,如“電腦”和“計算機”兩個詞匯,雖然它們在語義有著相似性,但是由于它們在詞表中的位置不同,one-hot 表示是正交的。另一方面,這種方法容易造成數(shù)據(jù)稀疏問題。不同的詞作為完全不同的特征應(yīng)用于統(tǒng)計模型中時,由于不常見的詞出現(xiàn)的次數(shù)在訓練數(shù)據(jù)中比較少,從而導致對應(yīng)特征的估計存在偏差。為了解決這個問題,Collober 等人提出利用神經(jīng)網(wǎng)絡(luò)語言模型自動學習詞匯向量化表示。其基本思想是: 一個詞的含義是由它的上

38、下文決定的。將詞表中的每一個詞隨機初始化為一個高維向量,用大量語料進行訓練,保證相似的詞有相近的向量表示,稱之為詞向量(word e</p><p>  3.2.2 文本分析操作</p><p>  使用word2vec工具包,通過使用網(wǎng)絡(luò)上大量語料庫進行訓練,我們可以獲得一個泛化能力極強的中文詞向量模型。這里使用了維基百科以及搜狗實驗室公開的語料庫進行了訓練。過程中使用了Jieba分詞工

39、具,并對數(shù)據(jù)進行清洗,獲得接近2億詞匯量的已分詞數(shù)據(jù)。在一臺雙路E5-2683v3服務(wù)器上,使用三十分鐘訓練出一個合理的詞向量模型,并進行保存。</p><p>  對每一條評論,同樣使用Jieba分詞,并對文本進行清洗,去除不合法字符,并對每個詞匯轉(zhuǎn)化為對應(yīng)的向量進行求和,最后根據(jù)向量數(shù)量取平均值,獲得一個“句子向量”,代表某個用戶的“語言習慣”。</p><p>  至此,對每個用戶,

40、在文本分析方面,獲得了一個400維度的向量。</p><p>  3.3 推薦系統(tǒng)推薦對象模型設(shè)計</p><p>  3.3.1 評分機制建模</p><p>  對于每部影片,網(wǎng)絡(luò)爬蟲程序可以直接獲得站點所有歷史用戶對該電影的總平均評分,以及所有評分的百分比分布情況。根據(jù)用戶短評上所附帶的評分(星星數(shù)量)減去這一電影的平均打分,即可得出對應(yīng)這部電影的特征量。&l

41、t;/p><p>  這樣我們獲得了一個直接且獨立的250維度向量。注意,若用戶未看過某一部電影,則對應(yīng)位置設(shè)置0。</p><p>  3.3.2 影片分類特征建模</p><p>  對于每部影片,網(wǎng)絡(luò)爬蟲程序可以直接獲得該影片所屬類型。例如喜劇、愛情、恐怖、懸疑等等。根據(jù)生活經(jīng)驗,用戶對某一類型電影的喜好極有可能反映出該用戶的整個喜好傾向。影片的類型特征對于單一的

42、對某一部影片的喜好來說,很可能更有代表性。</p><p>  這樣我們獲得了一個直接且獨立的36維度向量。</p><p>  3.4 推薦系統(tǒng)算法</p><p>  3.4.1 協(xié)同過濾算法</p><p>  協(xié)同過濾,簡單來說是利用某興趣相投、擁有共同經(jīng)驗之群體的喜好來推薦用戶感興趣的信息,個人通過合作的機制給予信息相當程度的回應(yīng)(

43、如評分)并記錄下來以達到過濾的目的進而幫助別人篩選信息,回應(yīng)不一定局限于特別感興趣的,特別不感興趣信息的紀錄也相當重要。協(xié)同過濾又可分為評比或者群體過濾。其后成為電子商務(wù)當中很重要的一環(huán),即根據(jù)某顧客以往的購買行為以及從具有相似購買行為的顧客群的購買行為去推薦這個顧客其“可能喜歡的品項”,也就是借由社區(qū)的喜好提供個人化的信息、商品等的推薦服務(wù)。</p><p>  3.4.2 基于項目的協(xié)同過濾算法</p&

44、gt;<p>  傳統(tǒng)的以用戶為基礎(chǔ)的協(xié)同推薦算法隨著用戶數(shù)量的增多,計算的時間就會變長,所以在2001年Sarwar提出了基于項目的協(xié)同過濾推薦算法(Item-based Collaborative Filtering Algorithms)。以項目為基礎(chǔ)的協(xié)同過濾方法有一個基本的假設(shè)“能夠引起用戶興趣的項目,必定與其之前評分高的項目相似”,通過計算項目之間的相似性來代替用戶之間的相似性。 方法步驟:先計算已評價項目和待

45、預測項目的相似度,并以相似度作為權(quán)重,加權(quán)各已評價項目的分數(shù),得到待預測項目的預測值。例如:要對項目 A 和項目 B 進行相似性計算,要先找出同時對 A 和 B 打過分的組合,對這些組合進行相似度計算,常用的算法同以用戶為基礎(chǔ)(User-based)的協(xié)同過濾。以項目為基礎(chǔ)的協(xié)同過濾不用考慮用戶間的差別,所以精度比較差。但是卻不需要用戶的歷史數(shù)據(jù),或是進行用戶識別。對于項目來講,它們之間的相似性要穩(wěn)定很多,因此可以離線完成工作量最大的相

46、似性計算步驟,從而降低了在線計算量,提高推薦效率,尤其是在用戶多于項目的情形下尤為顯著。</p><p>  3.5 推薦系統(tǒng)推薦關(guān)鍵算法部分</p><p>  3.5.1 距離定義部分</p><p>  在推薦系統(tǒng)中常見的四種距離:歐式距離、曼哈頓距離、cos距離、pearson距離。</p><p>  def euclidean_d

47、is(rating1, rating2):</p><p>  """計算2個打分序列間的歐式距離. 輸入的rating1和rating2都是打分dict</p><p>  格式為{'電影id1': 1.0, '電影idn': 5.0}"""</p><p>  dista

48、nce = 0</p><p>  commonRatings = False </p><p>  for key in rating1:</p><p>  if key in rating2:</p><p>  distance += (rating1[key] - rating2[key])^2</p><p&g

49、t;  commonRatings = True</p><p>  #兩個打分序列之間有公共打分電影</p><p>  if commonRatings:</p><p>  return distance</p><p><b>  #無公共打分電影</b></p><p><b>

50、;  else:</b></p><p><b>  return -1</b></p><p>  def manhattan_dis(rating1, rating2):</p><p>  distance = 0</p><p>  commonRatings = False </p>

51、<p>  for key in rating1:</p><p>  if key in rating2:</p><p>  distance += abs(rating1[key] - rating2[key])</p><p>  commonRatings = True</p><p>  #兩個打分序列之間有公共打分電影

52、</p><p>  if commonRatings:</p><p>  return distance</p><p><b>  #無公共打分電影</b></p><p><b>  else:</b></p><p><b>  return -1<

53、/b></p><p>  def cos_dis(rating1, rating2):</p><p>  distance = 0</p><p>  dot_product_1 = 0</p><p>  dot_product_2 = 0</p><p>  commonRatings = False&l

54、t;/p><p>  for score in rating1.values():</p><p>  dot_product_1 += score^2</p><p>  for score in rating2.values():</p><p>  dot_product_2 += score^2</p><p> 

55、 for key in rating1:</p><p>  if key in rating2:</p><p>  distance += rating1[key] * rating2[key]</p><p>  commonRatings = True</p><p>  #兩個打分序列之間有公共打分電影</p><

56、;p>  if commonRatings:</p><p>  return 1-distance/sqrt(dot_product_1*dot_product_2)</p><p><b>  #無公共打分電影</b></p><p><b>  else:</b></p><p><

57、;b>  return -1</b></p><p>  def pearson_dis(rating1, rating2):</p><p>  sum_xy = 0</p><p><b>  sum_x = 0</b></p><p><b>  sum_y = 0</b>&

58、lt;/p><p>  sum_x2 = 0</p><p>  sum_y2 = 0</p><p><b>  n = 0</b></p><p>  for key in rating1:</p><p>  if key in rating2:</p><p><

59、b>  n += 1</b></p><p>  x = rating1[key]</p><p>  y = rating2[key]</p><p>  sum_xy += x * y</p><p>  sum_x += x</p><p>  sum_y += y</p><

60、;p>  sum_x2 += pow(x, 2)</p><p>  sum_y2 += pow(y, 2)</p><p>  # now compute denominator</p><p>  denominator = sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow(sum_y, 2) / n

61、)</p><p>  if denominator == 0:</p><p><b>  return 0</b></p><p><b>  else:</b></p><p>  return (sum_xy - (sum_x * sum_y) / n) / denominator</

62、p><p>  3.5.2 近鄰查找部分</p><p><b>  #查找最近鄰</b></p><p>  def computeNearestNeighbor(username, users):</p><p>  """在給定username的情況下,計算其他用戶和它的距離并排序&quo

63、t;""</p><p>  distances = []</p><p>  for user in users:</p><p>  if user != username:</p><p>  #distance = manhattan_dis(users[user], users[username])</p&

64、gt;<p>  distance = pearson_dis(users[user], users[username])</p><p>  distances.append((distance, user))</p><p>  # 根據(jù)距離排序,距離越近,排得越靠前</p><p>  distances.sort()</p>&l

65、t;p>  return distances</p><p><b>  #推薦</b></p><p>  def recommend(username, users):</p><p>  """對指定的user推薦電影"""</p><p><

66、b>  # 找到最近鄰</b></p><p>  nearest = computeNearestNeighbor(username, users)[0][1]</p><p>  recommendations = []</p><p>  # 找到最近鄰看過,但是我們沒看過的電影,計算推薦</p><p>  neig

67、hborRatings = users[nearest]</p><p>  userRatings = users[username]</p><p>  for artist in neighborRatings:</p><p>  if not artist in userRatings:</p><p>  recommendati

68、ons.append((artist, neighborRatings[artist]))</p><p>  results = sorted(recommendations, key=lambda artistTuple: artistTuple[1], reverse = True)</p><p>  for result in results:</p><p&

69、gt;  print(result[0], result[1])</p><p>  3.5.3 評分向量的構(gòu)建</p><p>  # 構(gòu)建電影評分標準向量</p><p>  vec_std = []</p><p>  movie_pos = {}</p><p>  for index, item in enu

70、merate(movie_data):</p><p>  movie_pos[item['id']] = index</p><p>  vec_std.append(item['rating']['average'] / 2)</p><p>  logging.debug('%s 的評分為 %f'

71、, item['title'], item['rating']['average'])</p><p>  vec_std = np.array(vec_std)</p><p>  第四章 課程設(shè)計總結(jié)與展望</p><p><b>  4.1 總結(jié)</b></p><p&g

72、t;  本次課程設(shè)計以國內(nèi)訪問量排名第一的電影資訊評論站點“豆瓣電影”的用戶數(shù)據(jù)為基礎(chǔ),構(gòu)建了一個基于語義分析的協(xié)同過濾推薦系統(tǒng)。該系統(tǒng)建立在使用高性能網(wǎng)絡(luò)爬蟲程序獲得的熱門電影的逾一千四百萬真實用戶影評之上,實現(xiàn)了一個多維度評價用戶的推薦系統(tǒng)。并可以分析生成一個統(tǒng)計結(jié)果。</p><p>  4.2 后續(xù)工作展望</p><p>  在數(shù)據(jù)的獲取存儲方面,后續(xù)可進行數(shù)據(jù)庫或分布式數(shù)據(jù)庫的

73、改進。在評價機制方面,由于現(xiàn)有數(shù)據(jù)量少,電影數(shù)量少,推薦系統(tǒng)使用基于項目的協(xié)同過濾算法。若爬蟲繼續(xù)運行獲取全站大量數(shù)據(jù),用戶、電影數(shù)量快速增長,還可以進行一些在線的推薦嘗試。</p><p><b>  致 謝</b></p><p>  本課程設(shè)計的工作是在我的導師謝寧老師悉心指導下完成的,導師淵博的專業(yè)知識,嚴肅的科學態(tài)度,嚴謹?shù)闹螌W精神,耐心的指導同學,這些都

74、對我產(chǎn)生了深遠的影響。</p><p>  在此還要感謝樊駿同學對文檔寫作的指導,鮮檳丞同學對網(wǎng)絡(luò)爬蟲設(shè)計的指導和幫助,他們幫助我克服了一個個困難,使本課程設(shè)計順利完成,非常感謝他們!</p><p><b>  參考文獻</b></p><p>  Paul Resnick, Neophytos Iacovou, Mitesh Suchak,

75、 Peter Bergstrom, John Riedl, GroupLens: an open architecture for collaborative filtering of netnews, Computer Supported Cooperative Work, pp175-186, Chapel Hill, North Carolina, 1994.</p><p>  Balabanovic &

76、amp; Shoham, 1997; Mobasher et al., 2000; Yang et al., 2004</p><p>  F. Heylighen, Collaborative Filtering, http:/pespmc1.vub.ac.be/COLLFILT.html</p><p>  鄭秀華、廖婉菁、吳肇銘,在線商品推薦系統(tǒng)之研究 -協(xié)同過濾機制之應(yīng)用A Stu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論