電子科技大學(xué) 計(jì)算機(jī)學(xué)院 綜合課程設(shè)計(jì) 報(bào)告材料
《電子科技大學(xué) 計(jì)算機(jī)學(xué)院 綜合課程設(shè)計(jì) 報(bào)告材料》由會(huì)員分享,可在線閱讀,更多相關(guān)《電子科技大學(xué) 計(jì)算機(jī)學(xué)院 綜合課程設(shè)計(jì) 報(bào)告材料(20頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 摘 要 本系統(tǒng)以一個(gè)大規(guī)模網(wǎng)絡(luò)爬蟲程序所獲取的網(wǎng)絡(luò)評(píng)論數(shù)據(jù)為根底,使用了詞向量,用戶畫像等技術(shù),構(gòu)建了一個(gè)基于影評(píng)的推薦系統(tǒng)。主要的工作分為兩局部,首先是研究分析了豆瓣電影是如何防御網(wǎng)絡(luò)爬蟲程序已經(jīng)應(yīng)對(duì)策略,其次根據(jù)網(wǎng)絡(luò)爬蟲程序獲取的大量數(shù)據(jù)構(gòu)建了一個(gè)推薦系統(tǒng)。 關(guān)鍵詞:大規(guī)模爬蟲,用戶畫像,推薦系統(tǒng) 17 / 20 目 錄 摘要I 目錄II 第一章緒論1 1.1 背景與意義1 1.2 本系統(tǒng)的總體設(shè)計(jì)構(gòu)思1 1.3 本文的主要貢獻(xiàn)與創(chuàng)新1 第二章大規(guī)模數(shù)據(jù)獲取2 2.1 網(wǎng)絡(luò)爬蟲程序的原理2 網(wǎng)絡(luò)爬蟲程序的設(shè)計(jì)方案2 豆瓣電影爬蟲可行性分析3 2
2、.3.1 豆瓣電影頁(yè)面分析3 2.3.2 豆瓣電影反爬蟲策略分析3 2.3.3 豆瓣電影爬蟲策略的設(shè)計(jì)4 網(wǎng)絡(luò)爬蟲性能優(yōu)化4 2.5 本章小結(jié)5 第三章影評(píng)分析推薦系統(tǒng)6 3.1 推薦系統(tǒng)綜述6 3.1.1 推薦系統(tǒng)的概念和定義6 3.1.2 推薦系統(tǒng)的形式化定義7 3.2 推薦系統(tǒng)用戶模型設(shè)計(jì)7 3.2.1 文本分析簡(jiǎn)介7 3.2.2 文本分析操作8 3.3 推薦系統(tǒng)推薦對(duì)象模型設(shè)計(jì)8 3.3.1 評(píng)分機(jī)制建模8 3.3.2 影片分類特征建模9 3.4 推薦系統(tǒng)算法9 3.4.1 協(xié)同過濾算法9 3.4.2 基于項(xiàng)目的協(xié)同過濾算法9 3.5 推薦系統(tǒng)推薦關(guān)
3、鍵算法局部10 3.5.1 距離定義局部10 3.5.2 近鄰查找局部11 3.5.3 評(píng)分向量的構(gòu)建12 第四章課程設(shè)計(jì)總結(jié)與展望13 4.1 總結(jié)13 4.2 后續(xù)工作展望13 致14 參考文獻(xiàn)15 第一章 緒 論 1.1 背景與意義 隨著中國(guó)移動(dòng)互聯(lián)網(wǎng)的迅速開展,網(wǎng)民數(shù)量也在大規(guī)模增長(zhǎng),用戶在社交與電商上的活躍程度日趨增加。隨著用戶群體的增加,用戶在網(wǎng)絡(luò)上留下的行為數(shù)據(jù)呈現(xiàn)指數(shù)級(jí)增長(zhǎng)。面對(duì)龐大的用戶群體以與如此大量的行為數(shù)據(jù),如何從中快速、準(zhǔn)確、有效的獲取到有價(jià)值的數(shù)據(jù),分析出用戶的行為習(xí)慣以與偏好,在大規(guī)模容的場(chǎng)景下,為用戶提供精準(zhǔn)的推薦服務(wù),是現(xiàn)在大
4、數(shù)據(jù)研究領(lǐng)域的一個(gè)熱點(diǎn)和重點(diǎn)。 網(wǎng)絡(luò)爬蟲是大規(guī)模數(shù)據(jù)獲取的必要程序。由于網(wǎng)絡(luò)上數(shù)據(jù)的高潛在商業(yè)價(jià)值,商業(yè)公司均會(huì)對(duì)其進(jìn)展,即使能夠直接獲取的數(shù)據(jù)也會(huì)給出層層限制。在互聯(lián)網(wǎng)開展的二十余年里,網(wǎng)絡(luò)爬蟲程序設(shè)計(jì)和反爬蟲程序設(shè)計(jì)共同進(jìn)步開展。如何有效的進(jìn)展大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)爬取,同樣是在工程領(lǐng)域的一個(gè)熱點(diǎn)和重點(diǎn)。 本系統(tǒng)的總體設(shè)計(jì)構(gòu)思 首先通過設(shè)計(jì)一個(gè)高性能網(wǎng)絡(luò)爬蟲,對(duì)局部數(shù)據(jù)進(jìn)展爬取。在數(shù)據(jù)集上進(jìn)展清洗,選擇一些高質(zhì)量的活躍用戶,設(shè)計(jì)算法,提取特征,進(jìn)展回測(cè),調(diào)整特征的選擇。之后再在大規(guī)模數(shù)據(jù)集上進(jìn)展運(yùn)算。 1.3 本系統(tǒng)的主要貢獻(xiàn)與創(chuàng)新 本論文以大規(guī)模爬蟲獲取實(shí)時(shí)豆瓣電影數(shù)據(jù)為根底,實(shí)現(xiàn)了用
5、戶畫像系統(tǒng)與推薦系統(tǒng),根據(jù)歷史數(shù)據(jù)得到的用戶群體行為分析報(bào)告,并根據(jù)用戶行為以與評(píng)論數(shù)據(jù)實(shí)現(xiàn)了智能化的電影推薦。 第二章 大規(guī)模數(shù)據(jù)獲取 在大規(guī)模互聯(lián)網(wǎng)社群站點(diǎn)中,由于運(yùn)營(yíng)策略以與一些涉與到潛在商業(yè)價(jià)值的考慮,運(yùn)營(yíng)公司通常會(huì)設(shè)置一些特殊的訪問流量識(shí)別措施阻止外界使用程序大規(guī)模獲取數(shù)據(jù)。對(duì)于網(wǎng)絡(luò)爬蟲程序設(shè)計(jì)者來(lái)說(shuō),必須要識(shí)別并且進(jìn)展一定的特殊設(shè)計(jì),才能高效的大規(guī)模并行獲取數(shù)據(jù)。 2.1 網(wǎng)絡(luò)爬蟲程序的原理 網(wǎng)絡(luò)爬蟲程序,也叫網(wǎng)絡(luò)蜘蛛,在工程界通用簡(jiǎn)稱“爬蟲〞,是一種可以自動(dòng)實(shí)現(xiàn)模擬真實(shí)用戶對(duì)網(wǎng)絡(luò)資源訪問并進(jìn)展數(shù)據(jù)記錄的程序。爬蟲程序一般會(huì)選擇記錄目標(biāo)站點(diǎn)的索引數(shù)據(jù),以與所關(guān)注的主要容
6、的完整記錄。 網(wǎng)絡(luò)爬蟲程序的設(shè)計(jì)方案 網(wǎng)絡(luò)爬蟲的形式多種多樣,從早期的C、C++設(shè)計(jì),到現(xiàn)在主流的Python、Java設(shè)計(jì)都有其輝煌的歷史。早期網(wǎng)絡(luò)站點(diǎn)大局部容、形式單一,靜態(tài)網(wǎng)頁(yè)居多,網(wǎng)絡(luò)中富文本容較少,計(jì)算機(jī)資源較少。使用C、C++編寫的程序占用資源小,運(yùn)行速度快,進(jìn)展網(wǎng)絡(luò)通訊的方式靈活,加之語(yǔ)言本身使用廣泛,受到大量爬蟲程序員的青睞。 隨著全球互聯(lián)網(wǎng)產(chǎn)業(yè)、互聯(lián)網(wǎng)根底設(shè)施的高速開展,谷歌、百度等搜索引擎的崛起,互聯(lián)網(wǎng)上的資源爆炸性增長(zhǎng),基于各種目的,越來(lái)越多的程序員開始設(shè)計(jì)自己的網(wǎng)絡(luò)爬蟲程序。此時(shí)C、C++語(yǔ)言的一些缺點(diǎn)顯現(xiàn)出來(lái),集中在編碼的不通用,設(shè)計(jì)繁瑣,缺乏高度抽象的類庫(kù)
7、等。加之大規(guī)模數(shù)據(jù)存儲(chǔ)平臺(tái)的出現(xiàn),C、C++爬蟲程序日漸減少。 爬蟲程序主要的任務(wù)在于:訪問網(wǎng)絡(luò)資源,解析返回結(jié)果,對(duì)資源進(jìn)展合理存儲(chǔ)。由于高度抽象以與簡(jiǎn)潔的語(yǔ)法,Python以與Java等一下代的更加工程化的語(yǔ)言被大家所青睞。網(wǎng)絡(luò)爬蟲的開發(fā)極具靈活性,由于現(xiàn)代前端技術(shù)的成熟,爬蟲程序所獲取的容可能隨時(shí)變化,無(wú)法使用傳統(tǒng)的軟件工程方法進(jìn)展設(shè)計(jì)開發(fā),通常的做法是迭代式的對(duì)網(wǎng)絡(luò)站點(diǎn)進(jìn)展交替的探測(cè)、開發(fā)。網(wǎng)絡(luò)爬蟲的主要模塊功能比擬固定,遇到的異常情況繁雜,需要有完善的異常處理機(jī)制。在對(duì)大規(guī)模數(shù)據(jù)設(shè)計(jì)的爬蟲中尤其重要。Python在網(wǎng)絡(luò)爬蟲類程序的開發(fā)效率上有著無(wú)可比擬的先天優(yōu)勢(shì),在文本分析、異常處
8、理方面同樣有著大量的簡(jiǎn)潔的設(shè)計(jì),使得開發(fā)網(wǎng)絡(luò)爬蟲程序的方便程度與靈活程度大大提升。加之有許多專門為Python語(yǔ)言設(shè)計(jì)的網(wǎng)絡(luò)訪問庫(kù),數(shù)據(jù)庫(kù)訪問框架,瀏覽器模擬器,文本解析器的存在,使得這門語(yǔ)言有著一個(gè)完備的網(wǎng)絡(luò)爬蟲程序開發(fā)生態(tài)環(huán)境。 本文選擇使用Python3語(yǔ)言實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)爬蟲程序,對(duì)豆瓣電影網(wǎng)上Top250電影榜單上共計(jì)一千四百余萬(wàn)條用戶對(duì)電源的短評(píng)進(jìn)展完全的爬取。在爬取數(shù)據(jù)的過程中,使用結(jié)構(gòu)化序列化的方式進(jìn)展數(shù)據(jù)的存儲(chǔ)。 2.3豆瓣電影爬蟲可行性分析 2.3.1 豆瓣電影頁(yè)面分析 編寫網(wǎng)絡(luò)爬蟲程序,首先要對(duì)目標(biāo)站點(diǎn)進(jìn)展頁(yè)面分析。 第一個(gè)參考頁(yè)面:豆瓣Top250電影榜單
9、第二個(gè)參考頁(yè)面:豆瓣任意電影頁(yè)面 第三個(gè)參考頁(yè)面:豆瓣任意電影短評(píng)頁(yè)面 使用Chrome瀏覽器的開發(fā)者模式觀察頁(yè)面。所有關(guān)鍵信息都以靜態(tài)方式給出,不需要模擬用戶鼠標(biāo)鍵盤行為與用戶觀察延時(shí)行為。我們可以直接解析,通過發(fā)出Get請(qǐng)求得到的返回頁(yè)面。 榜單頁(yè)面可解析信息如下:總數(shù),排行榜名稱,排行榜排名,電影中文名,電影英文名,電影id,電影導(dǎo)演,電影主演,電影封面 電影詳情頁(yè)面可解析信息如下:電影id,電影中文名,電影別名,電影豆瓣評(píng)分,看過人數(shù),想看人數(shù),評(píng)分人數(shù),5海報(bào)圖,條目分類,導(dǎo)演,主演,編劇,官方,豆瓣小站,上映時(shí)間日期,年代,語(yǔ)言,電影時(shí)長(zhǎng),影片類型,制片國(guó)家和地區(qū),簡(jiǎn)介,長(zhǎng)
10、評(píng)數(shù)量,短評(píng)數(shù)量。 電影短評(píng)頁(yè)面可解析信息如下:短評(píng)數(shù)量,每條短評(píng)。對(duì)于每條短評(píng):短評(píng)id,發(fā)布日期,上傳用戶,短評(píng)容,短評(píng)評(píng)分,有用數(shù)。 通過輪詢請(qǐng)求以上頁(yè)面,我們可以獲得幾乎所有豆瓣電影公開的數(shù)據(jù)。 2.3.2 豆瓣電影反爬蟲策略分析 豆瓣電影作為國(guó)電影領(lǐng)域最大的在線交流平臺(tái),擁有著大量的電影數(shù)據(jù)以與觀眾用戶數(shù)據(jù),一直被廣闊程序員以與數(shù)據(jù)分析人員作為目標(biāo)數(shù)據(jù)站點(diǎn)使用網(wǎng)絡(luò)爬蟲獲取數(shù)據(jù)。該的反爬蟲策略已經(jīng)比擬完善,例如對(duì)單個(gè)IP地址并發(fā)訪問量的限制,單個(gè)IP時(shí)間段訪問次數(shù)限制,用戶瀏覽器Cookie檢測(cè),用戶訪問頁(yè)面連續(xù)性檢測(cè),等等。 經(jīng)過長(zhǎng)時(shí)間訪問的實(shí)驗(yàn),以與編寫網(wǎng)絡(luò)爬蟲程序的經(jīng)驗(yàn)
11、,總結(jié)出了如下規(guī)律: 1. 當(dāng)發(fā)起Get請(qǐng)不帶上Cookie,連續(xù)訪問次數(shù)稍多,豆瓣將直接對(duì)操作的IP進(jìn)展封禁。此時(shí)無(wú)論如何操作都將返回403的結(jié)果。需要等待半小時(shí)至一小時(shí)IP才會(huì)解除封禁。 2. 使用Cookie進(jìn)展訪問。第一次發(fā)起Get請(qǐng)求任意一個(gè)豆瓣頁(yè)面,豆瓣都會(huì)返回一個(gè)名為bid的Cookie。之后帶上這個(gè)Cookie請(qǐng)求頁(yè)面,可以在約2秒一次訪問頻率上,5分鐘不封禁的結(jié)果。但此時(shí)的封禁是對(duì)于該Cookie的,只要清空該Cookie,又可獲得一個(gè)新的Cookie進(jìn)展訪問。IP地址是不會(huì)被封禁的。 3. 假如保持低頻率訪問豆瓣頁(yè)面,比如在10秒一次的根底上,不論如何都不會(huì)被封禁。
12、 2.3.3 豆瓣電影爬蟲策略的設(shè)計(jì) 1. 首先進(jìn)展屢次次無(wú)Cookie的請(qǐng)求,獲取多個(gè)bid,對(duì)這多個(gè)bid進(jìn)展保存,并且進(jìn)展訪問次數(shù)的統(tǒng)計(jì)。 2. 對(duì)于每次的Get請(qǐng)求,隨機(jī)在bid池中獲取一個(gè)bid隨請(qǐng)求發(fā)出,并根據(jù)返回結(jié)果更新次數(shù)統(tǒng)計(jì)。假如該請(qǐng)求返回 403或者bid使用次數(shù)到達(dá)100次,即將該次訪問操作回滾,將該bid拋棄 3. 在池中bid數(shù)量小于一個(gè)閾值時(shí),進(jìn)展一輪無(wú)Cookie請(qǐng)求,更新bid池 在之后的訪問試驗(yàn)中,對(duì)bid進(jìn)展測(cè)試時(shí),發(fā)現(xiàn)豆瓣電影并沒有對(duì)某個(gè)bid的第一次使用進(jìn)展合法性判斷。于是修改訪問策略為:每次訪問前對(duì)bid進(jìn)展隨機(jī),并隨請(qǐng)求發(fā)出,假如失敗如此直接
13、重新隨機(jī)bid到成功為止。 網(wǎng)絡(luò)爬蟲性能優(yōu)化 經(jīng)過第一輪對(duì)電影榜單數(shù)據(jù)的統(tǒng)計(jì),得到短評(píng)總數(shù)有一千四百萬(wàn)條。傳統(tǒng)單線程爬取完全無(wú)法獲取所有的短評(píng)信息。 針對(duì)網(wǎng)絡(luò)爬蟲這種IO密集型的應(yīng)用場(chǎng)景,多線程、多進(jìn)程能夠很好的解決并發(fā)訪問的問題。使用Python3中的multiprossesing庫(kù)對(duì)訪問進(jìn)展多線程加速。同時(shí)使用time庫(kù)對(duì)訪問頻率進(jìn)展控制。由于單次請(qǐng)求返回時(shí)間的不確定性〔頁(yè)面大小,網(wǎng)絡(luò)情況〕,我們統(tǒng)計(jì)一段時(shí)間Get次數(shù),假如超過閾值如此在每個(gè)請(qǐng)求完成之后進(jìn)展一個(gè)sleep操作以降低總體速度。 針對(duì)單IP訪問數(shù)量的限制,建立了一個(gè)IP代理池,部署在一臺(tái)阿里云服務(wù)器上,全天候自動(dòng)在
14、各大代理上刺探可用的/S代理服務(wù)器。網(wǎng)絡(luò)爬蟲程序可直接調(diào)用接口獲取一個(gè)代理IP。假如某個(gè)IP連續(xù)請(qǐng)求失敗次數(shù)超過閾值,可以立即更換代理IP,以躲過豆瓣晚上對(duì)爬蟲的限制。 針對(duì)爬蟲需要全天候運(yùn)行的特點(diǎn),使用Git作為源代碼管理工具,分別管理開發(fā)分支與穩(wěn)定版本分支,將穩(wěn)定版分支實(shí)時(shí)同步到一臺(tái)阿里云服務(wù)器上,并合理設(shè)計(jì)數(shù)據(jù)序列化保存格式,實(shí)現(xiàn)全天候運(yùn)行的能力。 2.5 本章小結(jié) 本章容從工程的第一個(gè)需求出發(fā),逐步迭代開發(fā)了一個(gè)具有針對(duì)目標(biāo)站點(diǎn)完備功能和高運(yùn)行效率的網(wǎng)絡(luò)爬蟲程序。在連續(xù)運(yùn)行4天后爬取了豆瓣電影Top250榜單中所有電影共計(jì)一千四百余萬(wàn)條影評(píng)信息,并構(gòu)建初步的影評(píng)數(shù)據(jù)庫(kù)。 第
15、三章 影評(píng)分析推薦系統(tǒng) 3.1 推薦系統(tǒng)綜述 互聯(lián)網(wǎng)的出現(xiàn)和普與給用戶帶來(lái)了大量的信息,滿足了 用戶在信息時(shí)代對(duì)信息的需求,但隨著網(wǎng)絡(luò)的迅速開展而帶 來(lái)的網(wǎng)上信息量的大幅增長(zhǎng),使得用戶在面對(duì)大量信息時(shí)無(wú) 法從中獲得對(duì)自己真正有用的那局部信息,對(duì)信息的使用效 率反而降低了,這就是所謂的信息超載〔information overload〕 問題。 信息超載問題一個(gè)非常有潛力的方法是個(gè)性化推薦系統(tǒng),它是根據(jù)用戶的信息需求、興趣等,將用戶感興趣的信息、產(chǎn)品等推薦給用戶的個(gè)性化信息推薦系統(tǒng)。和搜索引擎相比推薦系統(tǒng)通過研究用戶的興趣偏好,進(jìn)展個(gè)性化計(jì) 算,由系統(tǒng)發(fā)現(xiàn)用戶的興趣點(diǎn),從而引導(dǎo)用戶發(fā)現(xiàn)自己
16、的信息需求。一個(gè)好的推薦系統(tǒng)不僅能為用戶提供個(gè)性化的服務(wù), 還能和用戶之間建立密切關(guān)系,讓用戶對(duì)推薦產(chǎn)生依賴。 3.1.1 推薦系統(tǒng)的概念和定義 推薦系統(tǒng)的定義有不少,但被廣泛承受的推薦系統(tǒng)的概念和定義Resnick和Varian在1997年給出的:“它是利用電子商務(wù)向客戶提供商品信息和建議,幫助用戶決定應(yīng)該購(gòu)置什么產(chǎn)品,模擬銷售人員幫助客戶完成購(gòu)置過程〞。推薦系統(tǒng)有3個(gè)重要的模塊:用戶建模模塊、推薦對(duì)象建模模塊、推薦算法模塊。通用的推薦系統(tǒng)模型流程如下列圖。 推薦系統(tǒng)把用戶模型中興趣需求信息和推薦對(duì)象模型中的特征信息匹配,同時(shí)使用相應(yīng)的推薦算法進(jìn)展計(jì)算篩選,找到用戶可能感興趣的
17、推薦對(duì)象,然后推薦給用戶。 3.1.2 推薦系統(tǒng)的形式化定義 推薦系統(tǒng)的形式化定義如下:設(shè)C是所有用戶的集合,S是所有可以推薦給用戶的對(duì)象的集合。實(shí)際上,C和S集合的規(guī)模通常很大,如上百萬(wàn)的顧客以與上億種歌曲等。設(shè)效用函數(shù)可以計(jì)算對(duì)象s對(duì)用戶c的推薦度〔如提供商的可靠性〔vendor reliability〕和產(chǎn)品的可得性〔product availability〕等〕,即 ,R是一定圍的全序的非負(fù)實(shí)數(shù),推薦 要研究的問題就是找到推薦度R最大的那些對(duì)象 S* ,如式: 從上述模型看來(lái),推薦系統(tǒng)的構(gòu)建有三個(gè)主要步驟:對(duì)用戶〔服務(wù)〕對(duì)象建模〔即用戶畫像〕,對(duì)推薦對(duì)象建模,在〔離〕線推薦
18、算法。 3.2 推薦系統(tǒng)用戶模型設(shè)計(jì) 在所有通過網(wǎng)絡(luò)爬蟲程序獲取的數(shù)據(jù)當(dāng)中,可以作為用戶畫像的有兩個(gè)方向的數(shù)據(jù): 1. 每個(gè)用戶對(duì)電影的評(píng)分 2. 每個(gè)用戶對(duì)電影的文字短評(píng) 根據(jù)以上信息,我們可以以上數(shù)據(jù)構(gòu)成多維度模型對(duì)用戶的喜好進(jìn)展刻畫。下文將介紹文本分析以與 3.2.1 文本分析簡(jiǎn)介 在自然語(yǔ)言處理領(lǐng)域,傳統(tǒng)的詞匯語(yǔ)義相似度方法主要是依靠本體詞典或知識(shí)庫(kù)的規(guī)如此方法,利用統(tǒng)計(jì)語(yǔ)言模型在大規(guī)模語(yǔ)料庫(kù)上進(jìn)展分析處理. 但是由于詞典和知識(shí)庫(kù)大多依賴人工構(gòu)建,其實(shí)時(shí)性和擴(kuò)展性都比擬差,因此在互聯(lián)網(wǎng)文本和專業(yè)領(lǐng)域文本處理中很難發(fā)揮出作用,在傳統(tǒng)研究方法中,詞匯通常用 one-hot
19、 編碼形式表示,即假設(shè)詞表大小為 V,第 k 個(gè)詞表 示為一個(gè)維數(shù)為 V 的向量,除了第 k 維為 1,其他維均為 0. 一方面,這種表示方法無(wú)法刻畫兩個(gè)詞語(yǔ)義上相似性,如“電腦〞和“計(jì)算機(jī)〞兩個(gè)詞匯,雖然它們?cè)谡Z(yǔ)義有著相似性,但是由于它們?cè)谠~表中的位置不同,one-hot 表示是正交的。另一方面,這種方法容易造成數(shù)據(jù)稀疏問題。不同的詞作為完全不同的特征應(yīng)用于統(tǒng)計(jì)模型中時(shí),由于不常見的詞出現(xiàn)的次數(shù)在訓(xùn)練數(shù)據(jù)中比擬少,從而導(dǎo)致對(duì)應(yīng)特征的估計(jì)存在偏差。為了解決這個(gè)問題,Collober 等人提出利用神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型自動(dòng)學(xué)習(xí)詞匯向量化表示。其根本思想是: 一個(gè)詞的含義是由它的上下文決定的。將詞表中的
20、每一個(gè)詞隨機(jī)初始化為一個(gè)高維向量,用大量語(yǔ)料進(jìn)展訓(xùn)練,保證相似的詞有相近的向量表示,稱之為詞向量(word embedding),雖然詞向量也是一個(gè)高維向量,但與one-hot 向量表示不同,可以通過計(jì)算詞向量的余弦相似度衡量詞匯語(yǔ)義上的相似度?;谶@種思路,Mikolov等人提出了兩種詞向量計(jì)算模型,一種是從周圍詞預(yù)測(cè)中心詞的連續(xù)詞袋模型(CBOW)。另一種是通過中心詞預(yù)測(cè)周圍詞的 Skip-gram 模型,并開發(fā)出結(jié)合這兩種詞向量計(jì)算模型的開源工具包word2vec。 3.2.2 文本分析操作 使用word2vec工具包,通過使用網(wǎng)絡(luò)上大量語(yǔ)料庫(kù)進(jìn)展訓(xùn)練,我們可以獲得一個(gè)泛化能力極強(qiáng)的
21、中文詞向量模型。這里使用了維基百科以與搜狗實(shí)驗(yàn)室公開的語(yǔ)料庫(kù)進(jìn)展了訓(xùn)練。過程中使用了Jieba分詞工具,并對(duì)數(shù)據(jù)進(jìn)展清洗,獲得接近2億詞匯量的已分詞數(shù)據(jù)。在一臺(tái)雙路E5-2683v3服務(wù)器上,使用三十分鐘訓(xùn)練出一個(gè)合理的詞向量模型,并進(jìn)展保存。 對(duì)每一條評(píng)論,同樣使用Jieba分詞,并對(duì)文本進(jìn)展清洗,去除不合法字符,并對(duì)每個(gè)詞匯轉(zhuǎn)化為對(duì)應(yīng)的向量進(jìn)展求和,最后根據(jù)向量數(shù)量取平均值,獲得一個(gè)“句子向量〞,代表某個(gè)用戶的“語(yǔ)言習(xí)慣〞。 至此,對(duì)每個(gè)用戶,在文本分析方面,獲得了一個(gè)400維度的向量。 3.3 推薦系統(tǒng)推薦對(duì)象模型設(shè)計(jì) 3.3.1 評(píng)分機(jī)制建模 對(duì)于每部影片,網(wǎng)絡(luò)爬蟲程序可
22、以直接獲得站點(diǎn)所有歷史用戶對(duì)該電影的總平均評(píng)分,以與所有評(píng)分的百分比分布情況。根據(jù)用戶短評(píng)上所附帶的評(píng)分〔星星數(shù)量〕減去這一電影的平均打分,即可得出對(duì)應(yīng)這部電影的特征量。 這樣我們獲得了一個(gè)直接且獨(dú)立的250維度向量。注意,假如用戶未看過某一部電影,如此對(duì)應(yīng)位置設(shè)置0。 3.3.2 影片分類特征建模 對(duì)于每部影片,網(wǎng)絡(luò)爬蟲程序可以直接獲得該影片所屬類型。例如喜劇、愛情、恐怖、懸疑等等。根據(jù)生活經(jīng)驗(yàn),用戶對(duì)某一類型電影的喜好極有可能反映出該用戶的整個(gè)喜好傾向。影片的類型特征對(duì)于單一的對(duì)某一部影片的喜好來(lái)說(shuō),很可能更有代表性。 這樣我們獲得了一個(gè)直接且獨(dú)立的36維度向量。 3.4 推薦系
23、統(tǒng)算法 3.4.1 協(xié)同過濾算法 協(xié)同過濾,簡(jiǎn)單來(lái)說(shuō)是利用某興趣相投、擁有共同經(jīng)驗(yàn)之群體的喜好來(lái)推薦用戶感興趣的信息,個(gè)人通過合作的機(jī)制給予信息相當(dāng)程度的回應(yīng)〔如評(píng)分〕并記錄下來(lái)以達(dá)到過濾的目的進(jìn)而幫助別人篩選信息,回應(yīng)不一定局限于特別感興趣的,特別不感興趣信息的紀(jì)錄也相當(dāng)重要。協(xié)同過濾又可分為評(píng)比或者群體過濾。其后成為電子商務(wù)當(dāng)中很重要的一環(huán),即根據(jù)某顧客以往的購(gòu)置行為以與從具有相似購(gòu)置行為的顧客群的購(gòu)置行為去推薦這個(gè)顧客其“可能喜歡的品項(xiàng)〞,也就是借由社區(qū)的喜好提供個(gè)人化的信息、商品等的推薦服務(wù)。 3.4.2 基于項(xiàng)目的協(xié)同過濾算法 傳統(tǒng)的以用戶為根底的協(xié)同推薦算法隨著用戶數(shù)量的增
24、多,計(jì)算的時(shí)間就會(huì)變長(zhǎng),所以在2001年Sarwar提出了基于項(xiàng)目的協(xié)同過濾推薦算法(Item-based Collaborative Filtering Algorithms)。以項(xiàng)目為根底的協(xié)同過濾方法有一個(gè)根本的假設(shè)“能夠引起用戶興趣的項(xiàng)目,必定與其之前評(píng)分高的項(xiàng)目相似〞,通過計(jì)算項(xiàng)目之間的相似性來(lái)代替用戶之間的相似性。 方法步驟:先計(jì)算已評(píng)價(jià)項(xiàng)目和待預(yù)測(cè)項(xiàng)目的相似度,并以相似度作為權(quán)重,加權(quán)各已評(píng)價(jià)項(xiàng)目的分?jǐn)?shù),得到待預(yù)測(cè)項(xiàng)目的預(yù)測(cè)值。例如:要對(duì)項(xiàng)目 A 和項(xiàng)目 B 進(jìn)展相似性計(jì)算,要先找出同時(shí)對(duì) A 和 B 打過分的組合,對(duì)這些組合進(jìn)展相似度計(jì)算,常用的算法同以用戶為根底〔User-b
25、ased〕的協(xié)同過濾。以項(xiàng)目為根底的協(xié)同過濾不用考慮用戶間的差異,所以精度比擬差。但是卻不需要用戶的歷史數(shù)據(jù),或是進(jìn)展用戶識(shí)別。對(duì)于項(xiàng)目來(lái)講,它們之間的相似性要穩(wěn)定很多,因此可以離線完成工作量最大的相似性計(jì)算步驟,從而降低了在線計(jì)算量,提高推薦效率,尤其是在用戶多于項(xiàng)目的情形下尤為顯著。 3.5 推薦系統(tǒng)推薦關(guān)鍵算法局部 3.5.1 距離定義局部 在推薦系統(tǒng)中常見的四種距離:歐式距離、曼哈頓距離、cos距離、pearson距離。 defeuclidean_dis(rating1, rating2): """計(jì)算2個(gè)打分序列間的歐式距離. 輸入的rating1和rating2都是打分d
26、ict 格式為{'電影id1': 1.0, '電影idn': 5.0}""" distance =0 monRatings =False for key in rating1: if key in rating2: distance += (rating1[key] - rating2[key])^2 monRatings =True #兩個(gè)打分序列之間有公共打分電影 if monRatings: return distance #無(wú)公共打分電影 else: return-1 de
27、fmanhattan_dis(rating1, rating2): distance =0 monRatings =False for key in rating1: if key in rating2: distance +=abs(rating1[key] - rating2[key]) monRatings =True #兩個(gè)打分序列之間有公共打分電影 if monRatings: return distance #無(wú)公共打分電影 else: return-1 defcos_dis(rating
28、1, rating2): distance =0 dot_product_1 =0 dot_product_2 =0 monRatings =False for score in rating1.values(): dot_product_1 += score^2 for score in rating2.values(): dot_product_2 += score^2 for key in rating1: if key in rating2: distance += r
29、ating1[key] * rating2[key] monRatings =True #兩個(gè)打分序列之間有公共打分電影 if monRatings: return1-distance/sqrt(dot_product_1*dot_product_2) #無(wú)公共打分電影 else: return-1 defpearson_dis(rating1, rating2): sum_xy =0 sum_x =0 sum_y =0 sum_x2 =0 sum_y2 =0 n =0 for key i
30、n rating1: if key in rating2: n +=1 x = rating1[key] y = rating2[key] sum_xy += x * y sum_x += x sum_y += y sum_x2 +=pow(x, 2) sum_y2 +=pow(y, 2) # now pute denominator denominator = sqrt(s
31、um_x2 -pow(sum_x, 2) / n) * sqrt(sum_y2 -pow(sum_y, 2) / n) if denominator ==0: return0 else: return (sum_xy - (sum_x * sum_y) / n) / denominator 3.5.2 近鄰查找局部 #查找最近鄰 defputeNearestNeighbor(username, users): """在給定username的情況下,計(jì)算其他用戶和它的距離并排序""" distances = [] for user in users: if us
32、er != username: #distance = manhattan_dis(users[user], users[username]) distance = pearson_dis(users[user], users[username]) distances.append((distance, user)) # 根據(jù)距離排序,距離越近,排得越靠前 distances.sort() return distances #推薦 defremend(username, users): """對(duì)指定的user推薦電影
33、""" # 找到最近鄰 nearest = puteNearestNeighbor(username, users)[0][1] remendations = [] # 找到最近鄰看過,但是我們沒看過的電影,計(jì)算推薦 neighborRatings = users[nearest] userRatings = users[username] for artist in neighborRatings: ifnot artist in userRatings: remendations.append((artist,
34、neighborRatings[artist])) results =sorted(remendations, key=lambda artistTuple: artistTuple[1], reverse =True) for result in results: print(result[0], result[1]) 3.5.3 評(píng)分向量的構(gòu)建 # 構(gòu)建電影評(píng)分標(biāo)準(zhǔn)向量 vec_std = [] movie_pos = {} for index, item inenumerate(movie_data): movie_pos[item['id']] = i
35、ndex vec_std.append(item['rating']['average'] /2) logging.debug('%s 的評(píng)分為 %f', item['title'], item['rating']['average']) vec_std = np.array(vec_std) 第四章 課程設(shè)計(jì)總結(jié)與展望 總結(jié) 本次課程設(shè)計(jì)以國(guó)訪問量排名第一的電影資訊評(píng)論站點(diǎn)“豆瓣電影〞的用戶數(shù)據(jù)為根底,構(gòu)建了一個(gè)基于語(yǔ)義分析的協(xié)同過濾推薦系統(tǒng)。該系統(tǒng)建立在使用高性能網(wǎng)絡(luò)爬蟲程序獲得的熱門電影的逾一千四百萬(wàn)真實(shí)用戶影評(píng)之上,實(shí)現(xiàn)了一個(gè)多維度評(píng)價(jià)用戶的推薦系
36、統(tǒng)。并可以分析生成一個(gè)統(tǒng)計(jì)結(jié)果。 4.2 后續(xù)工作展望 在數(shù)據(jù)的獲取存儲(chǔ)方面,后續(xù)可進(jìn)展數(shù)據(jù)庫(kù)或分布式數(shù)據(jù)庫(kù)的改良。在評(píng)價(jià)機(jī)制方面,由于現(xiàn)有數(shù)據(jù)量少,電影數(shù)量少,推薦系統(tǒng)使用基于項(xiàng)目的協(xié)同過濾算法。假如爬蟲繼續(xù)運(yùn)行獲取全站大量數(shù)據(jù),用戶、電影數(shù)量快速增長(zhǎng),還可以進(jìn)展一些在線的推薦嘗試。 致 本課程設(shè)計(jì)的工作是在我的導(dǎo)師寧教師悉心指導(dǎo)下完成的,導(dǎo)師淵博的專業(yè)知識(shí),嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,耐心的指導(dǎo)同學(xué),這些都對(duì)我產(chǎn)生了深遠(yuǎn)的影響。 在此還要感樊駿同學(xué)對(duì)文檔寫作的指導(dǎo),鮮檳丞同學(xué)對(duì)網(wǎng)絡(luò)爬蟲設(shè)計(jì)的指導(dǎo)和幫助,他們幫助我克制了一個(gè)個(gè)困難,使本課程設(shè)計(jì)順利完成,非常感他們!
37、參考文獻(xiàn) [1] Paul Resnick, Neophytos Iacovou, Mitesh Suchak, Peter Bergstrom, John Riedl, GroupLens: an open architecture for collaborative filtering of netnews, puter Supported Cooperative Work, pp175-186, Chapel Hill, North Carolina, 1994. [2] Balabanovic & Shoham, 1997; Mobasher et al., 2000; Yang et al., 2004 [3] [4] 秀華、廖婉菁、吳肇銘,在線商品推薦系統(tǒng)之研究 -協(xié)同過濾機(jī)制之應(yīng)用A Study for On-line modity Remendation System:A Case of Collaborative Filtering,中原資管所
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案