




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目 錄 TOC o 1-3 h z u HYPERLINK l _Toc482912974 摘 要 PAGEREF _Toc482912974 h 1 HYPERLINK l _Toc482912975 Abstract PAGEREF _Toc482912975 h 2 HYPERLINK l _Toc482912976 前 言 PAGEREF _Toc482912976 h 3 HYPERLINK l _Toc482912977 第一章 緒 論 PAGEREF _Toc482912977 h 4 HYPERLINK l _Toc482912978 1.1 研究背景及意義 PAGEREF _
2、Toc482912978 h 4 HYPERLINK l _Toc482912979 1.2 電影個性化推薦概述 PAGEREF _Toc482912979 h 4 HYPERLINK l _Toc482912980 1.3 本文的主要工作 PAGEREF _Toc482912980 h 5 HYPERLINK l _Toc482912981 1.4 本文的組織結構 PAGEREF _Toc482912981 h 5 HYPERLINK l _Toc482912982 第二章 設計目標和系統搭建 PAGEREF _Toc482912982 h 6 HYPERLINK l _Toc4829129
3、83 2.1 設計目標 PAGEREF _Toc482912983 h 6 HYPERLINK l _Toc482912984 2.1 Python環境介紹 PAGEREF _Toc482912984 h 6 HYPERLINK l _Toc482912985 2.1.1 Python簡介 PAGEREF _Toc482912985 h 6 HYPERLINK l _Toc482912986 2.1.2 Python特點 PAGEREF _Toc482912986 h 6 HYPERLINK l _Toc482912987 2.1.3 pycharm介紹 PAGEREF _Toc4829129
4、87 h 7 HYPERLINK l _Toc482912988 2.2 Flask介紹 PAGEREF _Toc482912988 h 7 HYPERLINK l _Toc482912989 2.3 Bootstrap介紹 PAGEREF _Toc482912989 h 8 HYPERLINK l _Toc482912990 2.4 Flask 和Bootstrap在此項目中的應用 PAGEREF _Toc482912990 h 8 HYPERLINK l _Toc482912991 2.5 部署Flask應用 PAGEREF _Toc482912991 h 9 HYPERLINK l _T
5、oc482912992 2.6 本章小結 PAGEREF _Toc482912992 h 9 HYPERLINK l _Toc482912993 第三章 數據抓取和數據庫 PAGEREF _Toc482912993 h 11 HYPERLINK l _Toc482912994 3.1 數據抓取 PAGEREF _Toc482912994 h 11 HYPERLINK l _Toc482912995 3.1.1 數據選擇 PAGEREF _Toc482912995 h 11 HYPERLINK l _Toc482912996 3.1.2 爬蟲技術介紹 PAGEREF _Toc482912996
6、h 12 HYPERLINK l _Toc482912997 3.1.3 選擇用Python實現 PAGEREF _Toc482912997 h 12 HYPERLINK l _Toc482912998 3.1.4 注意事項 PAGEREF _Toc482912998 h 13 HYPERLINK l _Toc482912999 3.2 數據庫 PAGEREF _Toc482912999 h 14 HYPERLINK l _Toc482913000 3.2.1 Mongo DB 簡介 PAGEREF _Toc482913000 h 14 HYPERLINK l _Toc482913001 3.
7、2.2 在本項目中的使用 PAGEREF _Toc482913001 h 14 HYPERLINK l _Toc482913002 3.2.3 pymongo的使用 PAGEREF _Toc482913002 h 15 HYPERLINK l _Toc482913003 3.3 本章小結 PAGEREF _Toc482913003 h 16 HYPERLINK l _Toc482913004 第四章 個性化推薦 PAGEREF _Toc482913004 h 17 HYPERLINK l _Toc482913005 4.1 推薦算法概述 PAGEREF _Toc482913005 h 17 H
8、YPERLINK l _Toc482913006 4.1.1 基于內容的推薦和協同過濾 PAGEREF _Toc482913006 h 17 HYPERLINK l _Toc482913007 4.1.2 推薦算法的選擇 PAGEREF _Toc482913007 h 18 HYPERLINK l _Toc482913008 4.2 基于內容的推薦實現 PAGEREF _Toc482913008 h 19 HYPERLINK l _Toc482913009 4.2.1 TF-IDF PAGEREF _Toc482913009 h 19 HYPERLINK l _Toc482913010 4.2
9、.2 余弦相似性 PAGEREF _Toc482913010 h 19 HYPERLINK l _Toc482913011 4.2.3 在本項目中的應用 PAGEREF _Toc482913011 h 20 HYPERLINK l _Toc482913012 4.3 本章小結 PAGEREF _Toc482913012 h 22 HYPERLINK l _Toc482913013 第五章 系統功能測試和分析 PAGEREF _Toc482913013 h 23 HYPERLINK l _Toc482913014 5.1 基本功能測試 PAGEREF _Toc482913014 h 23 HYP
10、ERLINK l _Toc482913015 5.2 推薦功能 PAGEREF _Toc482913015 h 26 HYPERLINK l _Toc482913016 5.3 本章小結 PAGEREF _Toc482913016 h 28 HYPERLINK l _Toc482913017 第六章 工作總結與展望 PAGEREF _Toc482913017 h 29 HYPERLINK l _Toc482913018 6.1 論文工作總結 PAGEREF _Toc482913018 h 29 HYPERLINK l _Toc482913019 6.2 未來工作的展望 PAGEREF _Toc
11、482913019 h 29 HYPERLINK l _Toc482913020 參考文獻 PAGEREF _Toc482913020 h 31 HYPERLINK l _Toc482913021 致 謝 PAGEREF _Toc482913021 h 33摘 要近些年來,提供個性化服務的網站越來越多,打開淘寶或者京東,你會看到這些網站都會有一個推薦模塊。這個模塊會給你推薦一些你感興趣的商品,從而提高網站的經濟效益。電影類的網站亦是如此,不管是國外的Youtube或者是國內的騰訊視頻,都少不了推薦模塊。這種功能對于用戶來說自然是很棒的。一個好的電影網站需要提供及時的觀影資訊,同時需要給用戶推薦
12、合適的電影。在網站資源更新的同時,推薦的算法也在及時的更新。在推薦算法的實現中,數據的支持是必不可少的,所以網絡爬蟲技術也在這里顯得尤為重要了。本文主要以豆瓣的數據作為數據支持,通過爬蟲技術獲取我們所需要的數據。網站的前端主要以當今最火的Bootstrap框架,后端以Python語言為基礎的Flask輕量級web框架,數據庫采用的是Mongo DB,推薦算法選擇了基于內容的推薦算法。這樣的系統就構成了個性化電影推薦系統,根據用戶自己喜歡的電影去推薦相似的電影。給用戶一種“懂我”的體驗。關鍵詞:電影網站;數據采集;Flask ;個性化推薦AbstractIn recent years, the
13、provision of personalized service sites more and more, open Taobao or Jingdong, you will see these sites will have a recommended module. This module will give you some merchandise you are interested in to improve the economic benefits of the website. Movie class site is also true, whether it is fore
14、ign Youtube or domestic Tencent video, are ultimately recommended module. This feature is naturally great for the user. A good movie site needs to provide timely viewing information, while the need to recommend the appropriate film to the user. In the website resources update at the same time, the r
15、ecommended algorithm is also updated in a timely manner.In the implementation of the recommended algorithm, the data support is essential, so the web crawler technology is also particularly particularly important. This article mainly to use data from Douban as data support, through the web crawler t
16、echnology to obtain the data we need. The front end of the site is dominated by todays hottest Bootstrap framework, which is based on a Python language-based lightweight web framework, The database uses Mongodb , and the recommended algorithm is based on content-based recommendation algorithms. This
17、 system constitutes a personalized film recommendation system, according to the users own favorite movies to recommend similar movies. Give the user a understand me experience.Keywords: Film Website; Data Collection; Flask ; Personalized Recommendation前 言個性化推薦系統的出現是有原因和歷史的,從古人狩獵的獵物選擇到皇室美味佳肴的烹飪,從各種制造
18、業到時尚工業,到處都呈現著個性化推薦的“原始”模型。進入互聯網時代后,隨著大數據分析和云計算等技術的發展,在計算和存儲的工具性能躍入新的高度之后,推薦系統這才達到了前所未有的“個性化”高度。個性化推薦系統本質是探究“人”的問題,而并非是計算的問題。所以,我們更應該去探索其中人的特性。對個性化推薦的算法不斷完善,不斷的去貼近人的思想,這會引導我們的科學走向另一個高度。或許我們在未來的某個時間,晚上放松休息時,習慣性的打開某電影網站,點開其中的個性化推薦模塊,總能在這個模塊中發現一些給自己驚喜的影片,選取其中的感覺好的電影觀看一下,然后默默點擊電影旁邊的那個心形圖標。如此的生活就這樣一直持續著。這
19、是本文旨在實現的一種生活方式,一種理解人,并且關心人的生活方式。 緒 論本章介紹了此項目的研究背景,個性化推薦在這個時代的必要性及意義,整個系統的簡單概述,本畢設的主要工作,以及每章的簡要說明。1.1 研究背景及意義不知道從什么時候開始每天聽完網易云音樂的日推成為了我們生活的一部分。不知道從什么時候開始,我們越來越喜歡在Netflix上觀看推薦的電影,這就是個性化推薦的魅力。我們打開一個網站或者應用,我們總是希望它可以給我們推薦我們想看的、想聽的內容。根據Netflix產品創新副總裁Carlos Uribe-Gomez和首席產品官Neil Hunt的一份報告,推薦算法能夠為Netflix節省每
20、年10億美元。10年前,NETFLIX 舉辦了個主題為提升自己網站推薦算法的比賽,第一個把現有的推薦系統的準確率提高10%的隊伍便可以獲勝,并且取得獎金,當時的獎金數額是100萬美金。3年后,一個7人隊伍脫穎而出,奪得了第一并獲得了這非常豐厚的獎金1。由此看來,推薦算法對于一個電影網站是非常重要的,同時也是難以實現的。一個電影網站,如果想要留住用戶,那么它必須給用戶提供與其他網站不一樣的東西,所以推薦模塊便成了一個非常棒的選擇,同時這也是一個非常難的部分。一個好的推薦算法能夠給一個網站帶來的效益是顯而易見的,可以提升用戶對此網站的依賴性,可以提升一個網站在行業領域內的地位,其他的經濟效益就不在
21、本文中敘述了。1.2 電影個性化推薦概述在視頻網站發展的開始時期,推薦視頻這個模塊這網站上就已經存在了。網站推薦模塊根據當前熱門視頻和用戶的一些觀看數據,提供給用戶個性化的視頻推薦,因此讓用戶更加依賴這個網站,增加網站的訪問流量,這也是如今各大視頻網站非常重視的功能之一。對于一些在線電影提供商,網站影片推薦系統的推薦效率和公司的經濟效益直接掛鉤,同時對公司以后的發展也有著極其重要的影響。本文中實現的電影推薦系統采用Python Flask框架作為后臺技術支持,這是一個輕量級的web框架,前端采用Bootstrap框架,數據庫采用Mongo DB,這是一個NoSql 數據庫;推薦算法采用基于內容
22、的推薦算法,簡稱CB(Content-based Recommendations);數據更新的工作采用網絡爬蟲技術。1.3 本文的主要工作在這個項目中主要使用web爬蟲技術,Python web開發,Mongo DB,基于內容的推薦算法(CB)等,來開發了一個電影推薦系統。主要工作如下:使用web爬蟲技術從豆瓣獲取我們需要的數據,即每部電影的數據;把數據存放在Mongo DB;使用Flask框架搭建后臺,Bootstrap框架搭建前端;將數據進行處理,TF-IDF算法提取關鍵詞,通過TF-IDF值構成相應的矩陣,然后再計算每個電影間的余弦相似性,按相似性排序存放在數據庫;根據用戶喜歡的電影去推
23、薦與之相似度較高的電影。1.4 本文的組織結構本文一共有6個章節,每章的內容概要如下:第一章:緒論。這章介紹了本課題的研究背景和意義、電影個性化推薦概述、本文的主要工作;第二章: 系統的搭建。這章介紹了一個網站(Bootstrap+Flask)是如何建立的,前后端是如何交互的以及一個Flask項目是如何部署到服務器的;第三章:數據和數據庫。這章介紹了如何寫一個爬蟲去抓取我們所需要的數據,Mongo DB是如何使用以及在這個系統中的優點。第四章:個性化推薦。這章介紹了基于內容的推薦算法是如何實現的,以及在這個系統中使用的優點和不足;第五章: 系統功能測試與分析。這章對已完成的電影系統進行測試,并
24、對結果進行分析;第六章:工作總結與展望。這章介紹了系統的優缺點以及需要改進的地方。 設計目標和系統搭建本章介紹如何使用Bootstrap和Flask搭建一個網站,簡單進行了Bootstrap,Flask以及Python環境的介紹,并且介紹了如何去部署一個Flask項目。本章的重點不在于界面的設計,所以關于系統界面和一些邏輯的說明和設計放在第五章敘述了。2.1 設計目標實現這樣一個電影推薦系統,過程是很復雜的,在這里將介紹一下本項目的設計目標:1.實現網站的基本功能:這里采用Python語言開發,后臺框架Flask,前端框架Bootstrap;2.實現數據的更新功能:這里采用Python web
25、爬蟲技術,從豆瓣獲取所需要的數據;3.實現個性化推薦功能:這里采用基于內容的推薦算法。2.1 Python環境介紹本文會在此小節介紹在windows平臺下使用Python語言開發一個網站。2.1.1 Python簡介Python跟許多常用的語言一樣是一種面向對象的語言,它以簡潔,快速開發出名,1991年發行了第一個版本,現在主要兩個分支:2.7和3.X。本文中使用的是3.X。Python有很多開源社區,眾多的開源項目為Python增添色彩。 Python語法簡潔清晰,嚴格使用空格,所以Python代碼寫出來非常漂亮。Python安裝包可以從官網下載,也可以使用一個集成安裝包anaconda,這
26、個自帶一些科學計算的package。本文推薦后者。2.1.2 Python特點1.易于學習:Python代碼結構簡單,對于初學者非常友好。2.易于閱讀:Python結構清晰,一般對英文有基本認識的就能讀懂了。3.易于維護:Python的源代碼是相當容易維護的,這也是其成功原因之一。4.一個廣泛的標準庫:Python的最大的優勢之一是豐富的庫。許多開源社區為之服務。 5.互動模式:提供類似于命令行一樣的接口。 6.可移植:由于是開源的,幾乎可以移植到任何平臺。 7.可擴展:Python擁有著強大的擴展能力,可以連接其他語言。 8.數據庫:Python提供幾乎所有的數據庫接口。 9.GUI編程:P
27、ython同樣可以開發GUI程序2,3,4。2.1.3 PyCharm介紹本文的開發環境是windows,在windows下有一款功能強大的集成 HYPERLINK /item/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83 t _blank 開發環境( HYPERLINK /item/IDE t _blank IDE,Integrated Development Environment ),叫做PyCharm,這是由Jetbrain開發的。這個IDE非常適合Python開發者,它帶有主題功能,每個主題都有自己的風格,開發者總能找到自己喜歡的,另外一些智能提示是非常的
28、貼心。項目管理,版本控制,這些非常棒的功能都是有的,PyCharm還提供一些測試的功能,讓開發的工作更加方便和快捷。Pycharm的安裝包可以從官網下載。2.2 Flask介紹It came out of an April Fools joke but proved popular enough to make into a serious application in its own right. Flask的誕生是真的充滿趣味,一開始只是作者愚人節的一個玩笑,但是卻被許多人看好,然后才有了今天的Flask 5。Flask是一個微型框架,因為它只包含簡單的核心功能,其他需要的功能是可以擴展的
29、,同樣有眾多開源社區給Flask開發擴展。Flask沒有對數據庫,驗證,ORM,文件上傳,以及其他的技術做限定和捆綁,所以開發者可以選用自己喜歡的擴展去開發應用,這樣讓開發者更具有主動性6。Flask 是基于MTV的。Modle(模型)層:負責數據庫的交互和數據模型;Template(模版):負責如何把頁面展示給用戶;View(視圖):負責業務邏輯,并在適當的時候調用Model和Template,返回給用戶需要的數據。這樣子給系統分層,會使得開發模塊化,讓開發者的工作效率提高,同時維護也變得簡單。Flask的安裝工作可以使用Python自帶的pip去完成,或者適應PyCharm上圖形界面選擇F
30、lask這個package安裝。pip 安裝的命令行:pip install packagename。2.3 Bootstrap介紹本項目前端采用Bootstrap框架。Bootstrap來自 Twitter公司,目前來說是許多開發者喜歡的前端框架,也是開源的框架。Bootstrap 是基于 jQuery、HTML、CSS的,相當于在這個框架中已經繼承了一些常用且好看的樣式表和JavaScript。它提供了更加簡單的開發模式,使得 Web 開發更加快捷。它是由Twitter的兩位前端工程師Mark Otto和Jacob Thornton合作開發,并且作為一個開源項目繼續維護。Bootstrap
31、提供了優雅漂亮的HTML和CSS規范,對移動端支持也很好。Bootstrap一經推出后頗受歡迎,很多大牛繼續著這個項目的開發。這一直是GitHub上的熱門開源項目,這也是在長期更新的,目前最新的已經出到Bootstrap4.0,本文中使用的是Bootstrap3.3.7。有一些非常有名的公司或組織使用了Bootstrap框架,如NASA的MSNBC(微軟全國廣播公司)的Breaking News都使用了該項目7,8。2.4 Flask 和Bootstrap在此項目中的應用一個網站分為前端和后端,是要能實現前后端數據交互的。下面使用一張導圖說明框架的使用以及網站的結構。如圖2.1:圖2.1 系統
32、簡單結構圖用戶在訪問一個網站時,首先在瀏覽器中輸入域名,然后DNS會解析到對應的服務器,這時候服務器就會返回對應的頁面,用戶在使用這個網站的時候,前后端會進行交互,前端會向后端發送get或者post請求,然后后端Flask中的視圖程序會處理這些請求,與數據庫進行交互,也就是后文中提到的Mongo DB,然后再返回頁面或數據,用戶就可以看到前端頁面的更新或者數據的更新。Bootstrap的主要作用還是在頁面的美觀上。2.5 部署Flask應用在window下部署,可以使用apache + mod_wsgi的組合,apache是一個模塊化的服務器,支持最新的 HYPERLINK /item/HTT
33、P t _blank HTTP/1.1通信協議,mod_wsgi 是Apache HTTP服務器的擴展模塊,實現了 HYPERLINK /base/python t _blank o Python知識庫 PythonWSGI標準,可以支持任何兼容Python WSGI標準的Python應用。在開發過程中暫時可以不用考慮部署的問題。2.6 本章小結本章介紹了一個基于Flask的個性化電影推薦系統的設計目標、Python語言的特點,以及對Python語言在開發一個web項目上的優勢進行了介紹。同時還講述了Bootstrap框架在這個項目中的作用和項目的初步結構,解釋了一個web 項目的數交互過程。
34、并且在一個用戶訪問瀏覽器順序的基礎上,說明了一個web項目是如何運行的。最后簡單說明了Flask項目如何在windows服務器上部署。第三章 數據抓取和數據庫本章會介紹電影網站所需要的數據是如何獲得的,抓取過程中的注意事項,同時會介紹Nosql 數據庫的優點以及在本項目中的應用。3.1 數據抓取本小節會介紹我們所需數據的抓取是如何進行的,同時也會說明爬蟲的一些注意事項。3.1.1 數據選擇在數據抓取之前,需要先去計劃一下哪些數據是需要的,這樣方便數據庫建表。首先應該考慮的是電影信息表,這張表包含了電影的所有信息。那么我就就可以根據這樣表去抓取所需要的數據,我們可以先定下我們抓取的數據(電影id
35、,電影名字,電影海報,電影主演,導演,時間,評分,類型,又名,地區,時長,豆瓣鏈接),可以從豆瓣的網頁上查看到這些信息,如圖3.1 。圖3.1 豆瓣電影信息3.1.2 爬蟲技術介紹 HYPERLINK /item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB t _blank 我們熟悉的百度,谷歌等,都使用到了爬蟲技術。網絡爬蟲,簡而言之就是通過編寫代碼,去實現從互聯網中自動獲取數據的功能,避免了人力操作,因為人力的缺點很明顯:速度慢,易遺漏。其實網絡爬蟲是模擬用戶的行為,并不完全是像機器一樣抓取的。我們稱作網絡爬蟲是spider,結合到它的工作方式,網絡爬蟲可以從
36、一個網頁爬到其他網頁去爬取信息,因為網頁中也會有其他超鏈接。這樣就像個蜘蛛一樣可以在網絡這個巨大的空間中爬行,不停地獲取我們所需要的數據9,10。下面用一張圖來解釋爬蟲的行為,見圖3.2:圖3.2 爬蟲概念3.1.3 選擇用Python實現Python在爬蟲領域有著很大的優勢,代碼簡單明了,適合根據實際情況快速修改代碼,網絡上的內容、布局隨時都會變,Python的快速開發比較有優勢。所以這里我們用Python去實現這個功能。這里我們不需要一個非常龐大的框架,所以選擇一個簡單易用的package,叫做requests。這個package的安裝方式跟上面提到的Flask的安裝方式一樣,pip或者P
37、yCharm 的界面。requests 非常好用,下面用一張圖說明requests的使用,見圖3.3,詳細代碼就不在本文中說明了。 圖3.3 requests的簡要說明首先第一步是創建requests對象,通過這個requests對象就可以模擬用戶訪問網站了,headers參數就是關于瀏覽器的一些配置參數,這樣服務器才不會認為這是機器訪問的。訪問url獲取數據,可以設置一點訪問頻率的參數,這樣可以與人訪問網站的過程更加的相似。接收到返回過來的頁面數據之后就可以從其中刪選出我們需要的數據,可以用正則去匹配或者使用另外一個Python包叫做BeautifulSoup,這個包在處理html文檔時非常
38、的方便。另外在處理一些需要登錄的網站的時候,就需要使用requests中的session對象。3.1.4 注意事項一種情況是網頁不需要特別的處理,直接就可以訪問,不會因為訪問過多而拒絕訪問。這樣的網頁信息是可以隨時進行抓取的,相對較為簡單。另一種是需要特殊對待的,如需要登錄、或者每段時間內有訪問次數限制,需要異步加載等等。這種相對較為復雜,這就需要根據具體的情況來進行抓取,可以結合使用一些其他的工具。我們對于第一種情況的網頁,盡量對爬取的速率進行限制,不要對網站服務的負載性能做出不必要的挑戰。此外值得一提的是,大多數網站都會定義robots.txt文件,這樣可以讓爬蟲了解爬取該網站時存在哪些限
39、制。這些限制雖然僅僅作為建議給出,但是良好的網絡公民都應當遵守這些限制。一般可以訪問主域名/ robots.txt 去獲取這些信息。3.2 數據庫本文選用了Nosql (非關系型的數據庫)來存放電影數據,非關系型數據庫中表的數據是key-value 對應的,熟悉Python的話,那么對這種數據類型就一點都不陌生了。Nosql數據庫在下面幾種情況下比較適用:1、數據模型比較簡單;2、對數據查詢的效率要求較高;3、不需要高度的數據一致性;4、數據存儲空間沒要求限制;5、一些文檔類型的存儲。Nosql 數據庫在大數據時代顯得尤為重要了,有時候數據的查詢速度直接影響的整個系統的性能。3.2.1 Mon
40、go DB 簡介Mongo DB 是Nosql 數據庫中一個典型的例子,是一個基于分布式文件存儲的數據庫。易擴展易遷移,查詢速度快,目的是為WEB應用提供一些sql數據庫不太好實現的或者實現不了的高性能數據存儲解決方案11。Mongo DB可以直接去官網下載windows平臺的最新版。3.2.2 在本項目中的使用這里用一個可視化的工具看一下數據是如何存儲的,Mongo DB 存在的數據和 Python中的dict(字典)數據類型類似。參考圖3.4。圖3.4 mongo DB 樣例3.2.3 pymongo的使用通常開發過程中,我們在一個項目中使用數據庫的時候,不會去寫過多的sql語句,或者使用
41、原生的查詢語句,因為那么對于項目的開發進度會有一些影響。這時候我們會選擇Python語言下的第三方包來對數據庫進行操作,這樣就提高了開發效率,代碼也簡明易懂。本文使用的是pymongo,安裝方式同之前一樣,pip安裝。這里用下面這張圖來說明pymongo是如何在這個項目工作的見圖3.5:圖3.5 pymongo的使用首選創建pymongo的MongoClient對象,這個對象是用來連接數據庫的,參數部分是數據庫的地址和端口。連接上數據庫后就可以訪問具體的數據庫了。然后再對數據庫中集合進行操作。3.3 本章小結本章從需求的角度介紹了數據的選擇,數據的抓取,在數據采集過程中用到的技術,選擇語言時考
42、慮的優缺點。對Mongo DB 進行了簡單的介紹,以及在使用Mongo DB 時選擇的Python 中的pymongo,使得我們操作數據庫更加簡單。在進行數據抓取的時候,需要先對我們的需求進行分析,確定這個網站抓取的難度系數,估算可能需要的工作時間,確定這個網站數據的可行性之后再進行代碼編寫。這樣子可以節省很多不必要的時間和可能多余的開銷。第四章 個性化推薦現在數據有了,網站的總體框架有了,那么我們還需要的就是推薦算法了,這章將會介紹推薦算法的選擇以及如何去實現它。4.1 推薦算法概述推薦算法是推薦系統的核心,推薦算法決定了推薦給用戶的是什么樣的電影。常見的推薦算法大抵可以分為類:基于內容的推
43、薦算法、協同過濾推薦算法12,13,14。 每種推薦算法都有各自的優勢,需要的條件也不盡相同。4.1.1 基于內容的推薦和協同過濾基于內容的推薦(Content-based Recommendation):這是根據物品或內容的元數據,發現物品或內容的相關性,相似性,然后根據用戶以前的喜好記錄推薦給用戶相似度比較高的物品。下圖可以很好的解釋,見圖4.1:圖4.1 基于內容推薦舉例用戶A喜歡A電影,找到與A電影相似度較高的C電影推薦給他?;趨f同過濾的推薦(Collaborative Filtering-based Recommendation)大抵分為兩類:基于用戶的協同過濾推薦和基于項目的協同
44、過濾推薦15,16?;谟脩舻膮f同過濾推薦是使用統計技術找到與目標用戶有相同喜歡的用戶,然后據這個用戶的喜歡去推薦給目標用戶。基本原理就是通過用戶行為的相似性去推薦感興趣的資源。可以用下圖理解,見下頁圖4.2所示:圖4.2 基于用戶的協同過濾舉例根據用戶對電影的評價,發現用戶A與用戶C相似,所以把用戶喜歡的電影推薦給A用戶。圖4.3 基于項目的協同過濾舉例基于項目的協同過濾推薦是根據用戶之間喜歡電影的相似性去推薦一些相似的電影。可以根據圖4.3去理解。用戶A喜歡A電影并且喜歡C電影,用戶B喜歡A電影,并且喜歡C電影,則認為喜歡A的電影也喜歡C電影,所以對于喜歡A電影的用戶就給他推薦C電影。4.
45、1.2 推薦算法的選擇在冷啟動階段,系統用戶數據比較少,可以偏向采用基于內容的推薦,當積累一定用戶數據后,偏向采用協同過濾。因為協同過濾本身是簡歷在海量用戶數據基礎上的。所以本文中采用的推薦算法是基于內容的推薦算法。4.2 基于內容的推薦實現本小節會介紹在這個項目中基于內容的推薦是如何實現的?,F在已經有了電影數據,其次我們還要有用戶喜歡哪些電影的數據,這應該是一個用戶對應喜好電影的表,會在網站中有體現,網站會提供一個功能讓用戶可以添加和刪除喜歡的電影,在第五章里會有介紹網站界面和各個功能。有了這個數據才可以進行基于內容的推薦。4.2.1 TF-IDF(Term Frequency-Invers
46、e Document Frequency, 詞頻-逆文件頻率)TF(詞頻, Term Frequency) = 某個詞在本章中出現的次數/文章的總詞數指的是某一個給定的詞語在該文件中出現的次數。這個數字通常會被歸一化(一般是詞頻除以文章總詞數), 以防止它偏向長的文件。IDF(逆文檔頻率, Inverse Document Frequency) = log(語料庫的總數/包含該詞的文檔數)IDF的主要思想是:如果包含某詞條的文檔越少, IDF越大,則說明詞條具有很好的類別區分能力。某一特定詞語的IDF,可以由總文件數目除以包含該詞語之文件的數目,再將得到的商取對數得到。根據TF-IDF值17排
47、序,構建每個電影的相關向量。4.2.2 余弦相似性在上一步,我們已經得到了每個電影的用于計算余弦相似性的向量。將向量根據坐標值,繪制到向量空間中,求得他們的夾角,并得出夾角對應的 HYPERLINK /item/%E4%BD%99%E5%BC%A6/73670 t _blank 余弦值,此余弦值就可以用來表征,這兩個向量的相似性。夾角越小,余弦值越接近于1,它們的方向更加吻合,則越相似18。那么在電影的相似度就越高。下圖可以更好的理解余弦相似性,見下頁的圖4.4:圖4.4 余弦相似性4.2.3 在本項目中的應用在開始之前,我們需要了解一個叫做sklearn 的模塊,sklearn 是一個 Py
48、thon 的 科學計算庫,提供了數種聚類算法可供選擇。Python 中自然也是有sklearn的。sklearn是機器學習中一個常用的Python第三方模塊12,里面對一些常用的機器學習方法進行了封裝,在進行機器學習任務時,并不需要每個人都實現所有的算法,只需要簡單的調用sklearn里的模塊就可以實現大多數機器學習任務19,20。所以我們計算每個電影的余弦相似性的時候用的就是sklearn,sklearn的安裝比較復雜,所以在剛開始安裝Python環境的時候,本文推薦安裝anaconda,而不是官方Python,因為anaconda包含了sklaern 的包。所以會用起來就簡單多了,可以把精
49、力花在開發整個系統上,而不是花在算法上。在計算TF-IDF之前先把電影的數據進行了簡單的處理。這里將電影的名字,導演,主演,類型,評分等,合起來作為一個已經分詞好的文檔。這個文檔就用來進行TF-IDF算法。計算好TF-IDF之后,然后就可以計算余弦相似性了,計算余弦相似性這里也需要用到sklearn,同樣優點可以讓我們的重心不用放在算法上。項目中計算TF-IDF值和余弦相似性的代碼見下頁的圖4.5。到這里,本文就完成了對每個電影計算與之相似的電影的工作,那么這里就已經建立一張movierelation表,用來存放 “電影-與之相似的電影(排序)”??梢詤⒁娤马搱D圖4.6。圖4.5 計算相似性的
50、代碼圖4.6 電影信息表這里我們推薦的核心工作已經完成,還剩下的就是根據用戶喜歡的電影去推薦相似度高的電影,這些工作會在網站前后臺的交互中完成,可以參考第五章中對系統功能的敘述。用戶在使用網站的過程中,會建立一個喜歡的電影這個字段,然后后臺根據喜歡的電影,再從剛剛movierelation表中查找相似度高的電影,在用戶信息表中再添加一個字段叫做recommend_movies。具體見圖4.7。這樣就完成了每個用戶推薦的內容都是根據自己的興趣決定的,因此實現了個性化推薦功能。圖4.7 用戶信息表4.3 本章小結本章介紹了這個項目的推薦算法是如何選擇的,幾種推薦算法的比較。詳細說明了什么是基于內容
51、的推薦算法以及是如何實現的。在本項目中每部電影之間的相似性是通過TF-IDF算法,和余弦相似性來計算的。詳細介紹了計算過程,以及在數據庫中對應的表是如何建立的。在推薦系統的啟動階段,推薦使用的是基于內容的推薦算法。因為其他的算法對于用戶量的要求很高。在用戶量達到一定數量的時候應該對推薦算法進行完善,增加協同過濾算法或者混合算法。第五章 系統功能測試和分析在本章,會把前幾章的工作結合起來,展示一個完整的系統,并說明每個功能的作用和意義。下面會從一個用戶使用這個系統的順序說明。5.1 基本功能測試本小節,我們模擬一個用戶剛剛接觸這個網站去對這個系統進行說明?,F在我們打開這個網站的首頁。見圖5.1,
52、這里我們可以看到整個界面還是很清新簡潔的,這得益于Bootstrap這個前端框架,在這里得感謝一下Twitter的工程師。圖5.1 網站首頁首頁中展示了一小部分電影,讓人一看就知道這是一個關于電影的網站。首頁的風格是基于Bootstrap的一般風格,簡約大方為主要特點,其中包含了柵格布局,能夠根據瀏覽器的尺寸自適應變化,所以基于Bootstrap的網頁在移動設備上也能非常好的適應。首頁上提供了分類查詢的按鈕見圖5.2和圖5.3。圖5.2 分類按鈕圖5.3 分類查詢首頁上顯眼的看到網站提供了一個搜索框,這樣就可以輕松的搜索自己想要的電影,搜索的關鍵詞是電影片名和電影的主演。見圖5.4。圖5.4
53、搜索樣例另外對于每部電影,都提供了詳情展示的頁面,可以參考圖5.5。風格依舊是清新簡潔,給人一種非常舒適的感覺。同時在這個頁面也提供了豆瓣的鏈接和IMDB的鏈接,這也方便去查看一些在本網站并沒有抓取的數據。圖5.5 電影詳細信息看完初步的功能之后,一定會想要體驗整個提供的功能,那么就需要注冊一個用戶,現在開始注冊,用戶名TestUser,見圖5.6,圖5.6 用戶注冊頁面注冊完成后,就可以登錄了,登錄完成后,首頁上會有歡迎TestUser 的提示。并且會多出一個私人推薦的模塊。這個會在下一小節說明。5.2 推薦功能推薦功能是這個網站的重點,不知道有沒有注意到每個頁面的電影旁邊都有個心形圖案,這
54、就是用戶對一部電影打上標記的功能,點擊這個心形圖案就可以把這部電影添加到我喜歡的電影里。可以參考圖5.7。圖5.7 添加喜歡的電影然后轉到我喜歡的私人推薦的頁面,就可以看到我喜歡的電影的信息,并且在這個頁面,有根據用戶口味推薦模塊(圖5.8)以及一個非常有意思的模塊叫做隨機推薦(圖5.9)。圖 5.8 根據用戶口味推薦圖5.9 隨機推薦根據用戶口味推薦的模塊就是本文在第四章中所講述的內容,這是本文的重點,也是吸引用戶的地方。在這里得說一下隨機推薦給用戶的感受,當用戶對一個網站上的內容有點看膩了的時候,這個隨機推薦會給用戶一些新鮮感,因為有可能就會隨機到一些用戶想看到的內容。這樣子會給用戶一點驚
55、喜感。在隨機推擠這個模塊中使用了ajax技術,數據是異步傳輸的,點擊隨機一下按鈕時不會產生整個頁面的刷新,只是局部刷新。這樣用戶使用起來更加的方便,不會有突兀感。但是推薦功能永遠是一個完善的過程,不可能做的完美。在用戶達到一定量的情況下,需要實現協同過濾的推薦。個性化推薦需要不斷的優化,這樣才不會被用戶淘汰。畢竟基于內容的推薦方式是存在很多不足的,比如推薦的方式單一,缺少更多的維度去推薦等等。5.3 本章小結本章對整個系統的功能做了全面的介紹,測試了一個用戶使用這個系統的過程。結合用戶體驗對一些有意思的功能做了詳細的介紹。對整個系統的界面也做了展示,可以看到界面的風格還是很美觀的。在本節的最后
56、也提出了推薦功能之后的工作和不足之處。一個系統完成之后,可能會存在一些沒有考慮到的問題或者BUG,所以需要進行一些測試的工作。有些測試只需要簡單的人工進行就行,但是有些其他的較為復雜的或者人力完成不來的,則需要寫一些自動化測試的腳本去進行這樣的工作。第六章 工作總結與展望6.1 論文工作總結首先介紹了個性化電影推薦系統產生的背景,結合NETFLIX的例子說明了個性化推薦算法的重要性和意義,個性化推薦算法對于用戶來說這是非常重要的。其次介紹了電影個性化推薦系統的實現需要哪些技術,網站的實現需要用到哪些框架以及這些框架的優點。介紹了Bootstrap的背景和作用,Bootstrap在開發過程中給開
57、發者帶來的便利。介紹了Python的web框架Flask的使用,并說明了一個網站是如何進行數據交互的。然后從需求的角度去分析了這個系統需要什么樣的數據,介紹了Python爬蟲技術的使用,以及采集數據過程中的注意點。在進行爬蟲代碼編寫之前,先要對這個爬蟲項目進行分析,估計需要的時間和可行性,這樣的工作完成后才應該去完成爬蟲的工作。爬蟲在整個系統中的作用是非常大的。介紹了數據庫的選擇,Mongo DB的優勢,在這個系統中需要建立的各種表的說明,如電影信息表,電影關系表,用戶信息表。之后從算法的角度去說明了什么是個性化推薦,一般的推薦算法有哪些,推薦算法的選擇,各自的優缺點?;趦热莸耐扑]算法適用于
58、什么系統,基于內容的推薦算法應該如何實現。結合這個電影推薦系統說明基于內容的推薦算法是如何在sklearn的基礎上實現的。最后對整個系統的功能和界面進行了說明,在用戶的角度去測試了整個系統,解釋了系統應該給用戶什么樣的體驗。同時提出了推薦算法不是靜止的,應該是不斷完善的,這樣子系統才不會被淘汰。6.2 未來工作的展望個性化電影推薦系統基本完成了,但是之后的工作并不會停止,整個系統的完善,數據的更新都需要繼續進行。推薦算法需要繼續優化,在前面幾章提到的基于內容的推薦算法是不夠的,只是適合在冷啟動階段,在用戶積累到一定量的時候就需要使用協同過濾算法。協同過濾的選擇也有很多種,比如基于用戶,基于項目
59、等等。協同過濾之后需要繼續完善和優化,比如使用混合算法或其他更好的個性化推薦算法。同時網站也要緊跟時代,包括前端和后端,這些框架和技術都在更新,必要的時候也需要換框架和技術。另外,不單單是算法的優化和完善,還有網站也需要添加其他的新的,能夠對用戶有吸引力的功能。在這個大數據和機器學習的時代,更需要從海量的電影或者用戶的數據中挖掘出更有用的信息,然后給用戶更好的使用體驗。在開發新的功能或者其他模塊時,需要堅持以用戶體驗為第一要素,努力做到給用戶驚喜和舒適的感覺。這樣子才能更好的增加用戶的依賴性。最后希望這個電影推薦系統可以一直維護下去。不斷提升用戶量的同時也要提高網站自身的性能和其他指標。參考文獻1方育柯, 傅彥, 周俊臨. 基于集成學習的個性化推薦算法J. 計算機工程與應用, 2011, 47(10):1-4.2 HYPERLINK /writer/Wesley%20Chun_1.html t _blank Wesley Chun.Python核心編程M.第三版.北京:人民郵電出版社, 2016-05-01.3 HYPERLINK /writer/%E5%B7%B4%E9%87%8C_1.html t _blank 巴里( HYPERLIN
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校教學群管理制度
- 學校電設備管理制度
- 學校鋼琴室管理制度
- 學生助教團管理制度
- 學科實驗室管理制度
- 安全與責任管理制度
- 安全設施室管理制度
- 實訓室部門管理制度
- 審計局財務管理制度
- 客餐廳配電管理制度
- 建行反洗錢應急預案
- 路燈養護投標方案(技術方案)
- 國家開放大學電大本科《管理英語4》期末試題題庫及答案(試卷號:1389)
- 詢價投標文件(范本)
- 去小學化家長培訓講座課件
- 單光纖光鑷數值仿真和光阱力計算的中期報告
- 一份完整的鹵菜店創業計劃書 工作計劃
- 手術物品清點手術室護理實踐指南課件
- 中國鋁業股份有限公司偃師市東溝鋁土礦礦山地質環境保護與土地復墾方案
- 2023-2024學年河南省濮陽市小學語文五年級期末通關考試題附參考答案和詳細解析
- 國語經典歌曲歌詞接龍考試題庫(180題)
評論
0/150
提交評論