盛逍遙,吳友邦,王 翔,李 麗
(天津市濱海新區(qū)規(guī)劃和國土資源地理信息中心 天津300450)
規(guī)國房系統(tǒng)一般部署在內(nèi)網(wǎng)以保障數(shù)據(jù)安全,導(dǎo)致用戶獲取行業(yè)外部資訊困難。大數(shù)據(jù)時(shí)代使得引擎搜索結(jié)果龐大而復(fù)雜,規(guī)國房專屬資訊產(chǎn)品較少、針對性弱,造成用戶查找資料耗時(shí)長、效率低。如何面向用戶實(shí)現(xiàn)個(gè)性化資訊推薦是規(guī)國房系統(tǒng)資訊版塊需要解決的關(guān)鍵問題之一。本文采用 Python語言的 Scrapy框架爬蟲爬取了規(guī)國房行業(yè)網(wǎng)站相關(guān)模塊數(shù)據(jù),聚合了規(guī)國房行業(yè)信息。由于爬取的數(shù)據(jù)量很大,為解決推薦模型計(jì)算開銷,提高計(jì)算和加載速度,采用熱度值倒排的方式取出百條數(shù)據(jù)作為內(nèi)容庫,熱度值計(jì)算考慮時(shí)間因素和總點(diǎn)擊量;再根據(jù)TF-IDF算法提取每篇文章的關(guān)鍵詞,并對百條數(shù)據(jù)按照點(diǎn)擊、點(diǎn)贊、收藏、評論、搜索等用戶行為進(jìn)行權(quán)重賦值,計(jì)算結(jié)果按大小排序;最后根據(jù)權(quán)重計(jì)算結(jié)果得出的興趣關(guān)鍵詞與提取的文章關(guān)鍵詞進(jìn)行余弦相似度計(jì)算,最終實(shí)現(xiàn)針對不同用戶的個(gè)性化資訊推薦。
網(wǎng)絡(luò)爬蟲[1]是一種按照一定的規(guī)則,自動從網(wǎng)頁上獲取內(nèi)容的程序。它們被廣泛用于互聯(lián)網(wǎng)搜索引擎或其他類似網(wǎng)站,以獲取或更新這些網(wǎng)站的內(nèi)容和檢索方式[2]。本文采用網(wǎng)絡(luò)爬蟲技術(shù)自動采集能夠訪問到的規(guī)國房行業(yè)網(wǎng)站頁面內(nèi)容,實(shí)現(xiàn)規(guī)國房相關(guān)資訊信息的聚合,目的是解決內(nèi)網(wǎng)用戶獲取外部資訊困難和篩查耗時(shí)問題,同時(shí)根據(jù)用戶需要分檢整理網(wǎng)站頁面,提高用戶信息檢索效率。
網(wǎng)絡(luò)爬蟲是一個(gè)自動獲取網(wǎng)頁內(nèi)容的程序,一般分為數(shù)據(jù)采集、處理、存儲三個(gè)部分。如圖1所示,首先從 web中選取一個(gè)或多個(gè)與規(guī)國房行業(yè)相關(guān)的種子 URL作為待爬取 URL隊(duì)列,下載頁面獲取HTML源碼,通過數(shù)據(jù)解析模塊,采用正則表達(dá)式匹配以獲取網(wǎng)頁中感興趣內(nèi)容,再從 HTML源碼中提取 URL地址、正文內(nèi)容和圖片,正文內(nèi)容和圖片分別存入圖形庫和頁面庫,URL放入已爬取 URL隊(duì)列,調(diào)度模塊通過分析將未爬取的 URL按照一定順序放入待爬取 URL隊(duì)列,如此循環(huán)直到滿足停止條件,完成整個(gè)頁面爬取。然后,對爬取的數(shù)據(jù)進(jìn)行清洗、整理,建立索引,存入數(shù)據(jù)庫[3]。
圖1 爬蟲基本工作原理Fig.1 Basic working principle of spider
Python語言簡單易學(xué),擁有現(xiàn)成的爬蟲框架Scrapy,強(qiáng)大的網(wǎng)絡(luò)支持庫和文本處理庫,能夠快速實(shí)現(xiàn)特定功能的網(wǎng)絡(luò)爬蟲[2],所以本文采用 Scrapy框架。Scrapy由引擎、調(diào)度、下載器、spider 4種組件及組件之間相互調(diào)度的中間件組成[3]。其流程如下:待處理的URL通過引擎以Request形式處理,spider爬取待處理的 URL,引擎向調(diào)度器請求下一個(gè)爬取的URL,并通過調(diào)度中間件將待爬取的URL發(fā)送給Scrapy,通過引擎調(diào)度將此URL轉(zhuǎn)發(fā)給下載器,下載器自動產(chǎn)生一個(gè) Response并通過中間件發(fā)送給引擎,引擎再將 Response發(fā)送給 spider進(jìn)行下一步處理,spider處理Response并返回爬取到的條目及新的Request給引擎,引擎將 spider返回的內(nèi)容(items)發(fā)送給傳播管道,并將spider獲取的Request通過中間件傳給調(diào)度,如此循環(huán)直到?jīng)]有新的 URL產(chǎn)生,退出 Scrapy引擎,完成相關(guān)頁面的爬取工作[3]。Scrapy框架的整體運(yùn)行流程如圖2所示。
圖2 Scrapy框架整體運(yùn)行流程Fig.2 Overall running process of the scrapy framework
本文采用 TF-IDF算法實(shí)現(xiàn)文章關(guān)鍵詞提取,TF-IDF等于詞頻(TF)與逆文檔頻率(IDF)的乘積。詞頻(term frequency,TF)表示某個(gè)詞語在某標(biāo)題或文章中出現(xiàn)的次數(shù);逆向文件頻率(inverse document frequency,IDF)是某一詞語普遍重要性度量,由總文章數(shù)除以包含該詞語的文章數(shù),再將其結(jié)果取對數(shù)得到[4]。TF越大說明該詞語在該標(biāo)題或文章中出現(xiàn)的次數(shù)越多,IDF越大說明該詞語越重要[5],將 TF-IDF計(jì)算結(jié)果按大小排序,即得到關(guān)鍵詞排序。
余弦相似度(cosine similarity)通過兩個(gè)向量之間夾角的余弦值大小來衡量文章的相似性。余弦相似度計(jì)算如式(1)所示。
我們通過TF-IDF算法計(jì)算的關(guān)鍵詞得到兩篇文章的詞頻向量,分別用A和B表示。我們認(rèn)為兩篇文章用詞越相似則內(nèi)容也越相近,據(jù)此從熱度值倒排的百級數(shù)據(jù)內(nèi)容庫中進(jìn)行兩篇文章的詞頻向量夾角余弦值計(jì)算,或者把根據(jù)用戶行為進(jìn)行權(quán)重計(jì)算得出的興趣關(guān)鍵詞與提取的文章關(guān)鍵詞作為兩個(gè)詞頻向量進(jìn)行夾角余弦值計(jì)算,其夾角越小則余弦值越接近1,說明兩個(gè)向量距離越小,文章相似度越大[5]。
本文的推薦模型用形式化方式表達(dá)就是擬合用戶對內(nèi)容滿意度的函數(shù),這個(gè)函數(shù)包括兩個(gè)維度的變量,分別為內(nèi)容特征和用戶特征。其中用戶特征包括用戶固有屬性和各種興趣標(biāo)簽,固有屬性包括性別、年齡、職業(yè)、職位等,興趣標(biāo)簽通過點(diǎn)擊、點(diǎn)贊、評論、搜索、收藏等用戶行為獲取[6]。本文推薦模型采用基本實(shí)時(shí)訓(xùn)練,當(dāng)客戶端接收到用戶操作行為后,傳給服務(wù)器端實(shí)時(shí)記錄,然后根據(jù)算法重新計(jì)算優(yōu)化用戶模型,當(dāng)用戶重新刷新后會根據(jù)新的用戶行為數(shù)據(jù)生成的用戶模型進(jìn)行文章推薦。因?yàn)樽ト〉木W(wǎng)站內(nèi)容量非常大,為提高計(jì)算和加載速度,本文考慮采用熱度值計(jì)算,從抓取的巨大內(nèi)容庫中篩選出百級別內(nèi)容庫,熱度值計(jì)算考慮時(shí)間因素和總點(diǎn)擊量,當(dāng)用戶沒有點(diǎn)擊行為時(shí)只考慮時(shí)間因素解決冷啟動問題,計(jì)算公式見式(2)。
其中score表示計(jì)算得到的熱度值,basic表示基本分(本文的基本分賦值為0),click表示用戶總點(diǎn)擊量,day_diff表示時(shí)間差,即文章發(fā)表時(shí)間和當(dāng)下時(shí)間的差值。
內(nèi)容特征的提取采用TF-IDF算法提取每篇文章的關(guān)鍵詞,然后將熱度值倒排后的百條數(shù)據(jù)按照點(diǎn)擊、點(diǎn)贊、收藏、評論、搜索等用戶行為進(jìn)行權(quán)重賦值,具體記錄指標(biāo)及權(quán)重值見表1,再根據(jù)權(quán)重計(jì)算結(jié)果得出的興趣關(guān)鍵詞與提取的文章關(guān)鍵詞進(jìn)行余弦相似度計(jì)算,實(shí)現(xiàn)用戶個(gè)性化資訊推薦。
表1 用戶行為記錄指標(biāo)及權(quán)重值Tab.1 Record index and weight value of user behaviors
本文開發(fā)了規(guī)國房系統(tǒng)的資訊推薦平臺,用戶通過系統(tǒng)注冊登錄平臺進(jìn)入推薦首頁,如圖3所示。
圖3 推薦首頁Fig.3 Page of recommendation
首頁導(dǎo)航欄包括推薦、法規(guī)、樓市、解讀、規(guī)劃、國土、微文 7個(gè)分類,推薦模塊根據(jù)用戶行為數(shù)據(jù)采用了推薦算法進(jìn)行相似內(nèi)容的推薦,其他主題采用動態(tài)分類方式,在爬蟲階段通過算法實(shí)現(xiàn)內(nèi)容自動分類,主題模塊的文章是按時(shí)間順利排序,用戶主動搜索的形式實(shí)現(xiàn)查找的需要,沒有考慮推薦算法。假設(shè)用戶對規(guī)劃行業(yè)的國家法規(guī)感興趣,系統(tǒng)會根據(jù)興趣模型推薦規(guī)劃行業(yè)其他政策法規(guī),用戶可以根據(jù)需要點(diǎn)擊瀏覽,閱讀時(shí)還可以對文章進(jìn)行點(diǎn)贊、收藏、評論等操作[6],同時(shí)系統(tǒng)也會記錄用戶行為作為用戶刷新后個(gè)性化推薦的數(shù)據(jù)依據(jù)。若用戶有明確的瀏覽需求,可以在搜索框中輸入關(guān)鍵字進(jìn)行檢索,文章會按照關(guān)鍵字符合程度依次排序。當(dāng)用戶第一次登錄資訊平臺時(shí),系統(tǒng)會根據(jù)熱度值進(jìn)行冷啟動,在積累了一定的用戶行為后,就可以根據(jù)用戶數(shù)據(jù)依照相應(yīng)的規(guī)則和推薦算法進(jìn)行智能推薦。
本平臺的優(yōu)勢不僅在于聚合了多網(wǎng)站數(shù)據(jù),減少了用戶資料查找工作量,提高了信息獲取的速度和準(zhǔn)確度,而且打破了傳統(tǒng)規(guī)國房系統(tǒng)或者網(wǎng)站平臺的封閉模式,通過爬蟲爬取不同網(wǎng)站來源的內(nèi)容豐富了規(guī)國房資訊內(nèi)容,解決了平臺新聞更新頻率慢以及內(nèi)網(wǎng)用戶資訊獲取困難的問題。同時(shí),融合互聯(lián)網(wǎng)思維,通過獲取用戶行為數(shù)據(jù),基于用戶興趣模型和智能推薦算法進(jìn)行個(gè)性化資訊推薦,可減少互聯(lián)網(wǎng)時(shí)代信息繁雜篩查耗時(shí)的問題。另外,此平臺提供了 API接口,通過接口調(diào)用的方式可以移植到其他系統(tǒng),應(yīng)用靈活便利。
平臺雖然解決了規(guī)國房行業(yè)內(nèi)網(wǎng)用戶的信息獲取問題,結(jié)合用戶興趣模型和推薦算法實(shí)現(xiàn)不同用戶的個(gè)性化資訊推薦。但目前在算法中只考慮了評估內(nèi)容特征和用戶特征是否匹配的相關(guān)性問題以及根據(jù)熱度特征解決的冷啟動問題,沒有考慮用戶協(xié)同特征和內(nèi)容協(xié)同特征。即只針對個(gè)體用戶歷史行為的內(nèi)容匹配推薦,沒有相似用戶群體的協(xié)同過濾推薦和基于相似內(nèi)容的協(xié)同過濾推薦。下一步,將通過使用K-means聚類算法,擬合出最優(yōu)分類結(jié)果,實(shí)現(xiàn)相似內(nèi)容的聚類,當(dāng)用戶點(diǎn)擊一類資訊信息后會推薦相似的文章內(nèi)容。通過用戶歷史行為分析不同用戶間相似性,建立“用戶-興趣資訊”空間向量模型,利用余弦相似度計(jì)算當(dāng)前用戶與其他目標(biāo)用戶之間的相似度,排列出與當(dāng)前用戶類似相關(guān)的 n名目標(biāo)用戶,按程度高低進(jìn)行排序,篩選出前 N名作為最類似用戶集合 S,通過遍歷 S中所有用戶的資訊閱讀情況,統(tǒng)計(jì)出閱覽次數(shù)最多但當(dāng)前用戶沒有閱讀過的資訊,然后對這些資訊進(jìn)行高低排序,尋找合適的資訊集合推薦給當(dāng)前用戶[7]。