盛逍遙,吳友邦,王 翔,李 麗
(天津市濱海新區規劃和國土資源地理信息中心 天津300450)
規國房系統一般部署在內網以保障數據安全,導致用戶獲取行業外部資訊困難。大數據時代使得引擎搜索結果龐大而復雜,規國房專屬資訊產品較少、針對性弱,造成用戶查找資料耗時長、效率低。如何面向用戶實現個性化資訊推薦是規國房系統資訊版塊需要解決的關鍵問題之一。本文采用 Python語言的 Scrapy框架爬蟲爬取了規國房行業網站相關模塊數據,聚合了規國房行業信息。由于爬取的數據量很大,為解決推薦模型計算開銷,提高計算和加載速度,采用熱度值倒排的方式取出百條數據作為內容庫,熱度值計算考慮時間因素和總點擊量;再根據TF-IDF算法提取每篇文章的關鍵詞,并對百條數據按照點擊、點贊、收藏、評論、搜索等用戶行為進行權重賦值,計算結果按大小排序;最后根據權重計算結果得出的興趣關鍵詞與提取的文章關鍵詞進行余弦相似度計算,最終實現針對不同用戶的個性化資訊推薦。
網絡爬蟲[1]是一種按照一定的規則,自動從網頁上獲取內容的程序。它們被廣泛用于互聯網搜索引擎或其他類似網站,以獲取或更新這些網站的內容和檢索方式[2]。本文采用網絡爬蟲技術自動采集能夠訪問到的規國房行業網站頁面內容,實現規國房相關資訊信息的聚合,目的是解決內網用戶獲取外部資訊困難和篩查耗時問題,同時根據用戶需要分檢整理網站頁面,提高用戶信息檢索效率。
網絡爬蟲是一個自動獲取網頁內容的程序,一般分為數據采集、處理、存儲三個部分。如圖1所示,首先從 web中選取一個或多個與規國房行業相關的種子 URL作為待爬取 URL隊列,下載頁面獲取HTML源碼,通過數據解析模塊,采用正則表達式匹配以獲取網頁中感興趣內容,再從 HTML源碼中提取 URL地址、正文內容和圖片,正文內容和圖片分別存入圖形庫和頁面庫,URL放入已爬取 URL隊列,調度模塊通過分析將未爬取的 URL按照一定順序放入待爬取 URL隊列,如此循環直到滿足停止條件,完成整個頁面爬取。然后,對爬取的數據進行清洗、整理,建立索引,存入數據庫[3]。

圖1 爬蟲基本工作原理Fig.1 Basic working principle of spider
Python語言簡單易學,擁有現成的爬蟲框架Scrapy,強大的網絡支持庫和文本處理庫,能夠快速實現特定功能的網絡爬蟲[2],所以本文采用 Scrapy框架。Scrapy由引擎、調度、下載器、spider 4種組件及組件之間相互調度的中間件組成[3]。其流程如下:待處理的URL通過引擎以Request形式處理,spider爬取待處理的 URL,引擎向調度器請求下一個爬取的URL,并通過調度中間件將待爬取的URL發送給Scrapy,通過引擎調度將此URL轉發給下載器,下載器自動產生一個 Response并通過中間件發送給引擎,引擎再將 Response發送給 spider進行下一步處理,spider處理Response并返回爬取到的條目及新的Request給引擎,引擎將 spider返回的內容(items)發送給傳播管道,并將spider獲取的Request通過中間件傳給調度,如此循環直到沒有新的 URL產生,退出 Scrapy引擎,完成相關頁面的爬取工作[3]。Scrapy框架的整體運行流程如圖2所示。

圖2 Scrapy框架整體運行流程Fig.2 Overall running process of the scrapy framework
本文采用 TF-IDF算法實現文章關鍵詞提取,TF-IDF等于詞頻(TF)與逆文檔頻率(IDF)的乘積。詞頻(term frequency,TF)表示某個詞語在某標題或文章中出現的次數;逆向文件頻率(inverse document frequency,IDF)是某一詞語普遍重要性度量,由總文章數除以包含該詞語的文章數,再將其結果取對數得到[4]。TF越大說明該詞語在該標題或文章中出現的次數越多,IDF越大說明該詞語越重要[5],將 TF-IDF計算結果按大小排序,即得到關鍵詞排序。
余弦相似度(cosine similarity)通過兩個向量之間夾角的余弦值大小來衡量文章的相似性。余弦相似度計算如式(1)所示。

我們通過TF-IDF算法計算的關鍵詞得到兩篇文章的詞頻向量,分別用A和B表示。我們認為兩篇文章用詞越相似則內容也越相近,據此從熱度值倒排的百級數據內容庫中進行兩篇文章的詞頻向量夾角余弦值計算,或者把根據用戶行為進行權重計算得出的興趣關鍵詞與提取的文章關鍵詞作為兩個詞頻向量進行夾角余弦值計算,其夾角越小則余弦值越接近1,說明兩個向量距離越小,文章相似度越大[5]。
本文的推薦模型用形式化方式表達就是擬合用戶對內容滿意度的函數,這個函數包括兩個維度的變量,分別為內容特征和用戶特征。其中用戶特征包括用戶固有屬性和各種興趣標簽,固有屬性包括性別、年齡、職業、職位等,興趣標簽通過點擊、點贊、評論、搜索、收藏等用戶行為獲取[6]。本文推薦模型采用基本實時訓練,當客戶端接收到用戶操作行為后,傳給服務器端實時記錄,然后根據算法重新計算優化用戶模型,當用戶重新刷新后會根據新的用戶行為數據生成的用戶模型進行文章推薦。因為抓取的網站內容量非常大,為提高計算和加載速度,本文考慮采用熱度值計算,從抓取的巨大內容庫中篩選出百級別內容庫,熱度值計算考慮時間因素和總點擊量,當用戶沒有點擊行為時只考慮時間因素解決冷啟動問題,計算公式見式(2)。

其中score表示計算得到的熱度值,basic表示基本分(本文的基本分賦值為0),click表示用戶總點擊量,day_diff表示時間差,即文章發表時間和當下時間的差值。
內容特征的提取采用TF-IDF算法提取每篇文章的關鍵詞,然后將熱度值倒排后的百條數據按照點擊、點贊、收藏、評論、搜索等用戶行為進行權重賦值,具體記錄指標及權重值見表1,再根據權重計算結果得出的興趣關鍵詞與提取的文章關鍵詞進行余弦相似度計算,實現用戶個性化資訊推薦。

表1 用戶行為記錄指標及權重值Tab.1 Record index and weight value of user behaviors
本文開發了規國房系統的資訊推薦平臺,用戶通過系統注冊登錄平臺進入推薦首頁,如圖3所示。

圖3 推薦首頁Fig.3 Page of recommendation
首頁導航欄包括推薦、法規、樓市、解讀、規劃、國土、微文 7個分類,推薦模塊根據用戶行為數據采用了推薦算法進行相似內容的推薦,其他主題采用動態分類方式,在爬蟲階段通過算法實現內容自動分類,主題模塊的文章是按時間順利排序,用戶主動搜索的形式實現查找的需要,沒有考慮推薦算法。假設用戶對規劃行業的國家法規感興趣,系統會根據興趣模型推薦規劃行業其他政策法規,用戶可以根據需要點擊瀏覽,閱讀時還可以對文章進行點贊、收藏、評論等操作[6],同時系統也會記錄用戶行為作為用戶刷新后個性化推薦的數據依據。若用戶有明確的瀏覽需求,可以在搜索框中輸入關鍵字進行檢索,文章會按照關鍵字符合程度依次排序。當用戶第一次登錄資訊平臺時,系統會根據熱度值進行冷啟動,在積累了一定的用戶行為后,就可以根據用戶數據依照相應的規則和推薦算法進行智能推薦。
本平臺的優勢不僅在于聚合了多網站數據,減少了用戶資料查找工作量,提高了信息獲取的速度和準確度,而且打破了傳統規國房系統或者網站平臺的封閉模式,通過爬蟲爬取不同網站來源的內容豐富了規國房資訊內容,解決了平臺新聞更新頻率慢以及內網用戶資訊獲取困難的問題。同時,融合互聯網思維,通過獲取用戶行為數據,基于用戶興趣模型和智能推薦算法進行個性化資訊推薦,可減少互聯網時代信息繁雜篩查耗時的問題。另外,此平臺提供了 API接口,通過接口調用的方式可以移植到其他系統,應用靈活便利。
平臺雖然解決了規國房行業內網用戶的信息獲取問題,結合用戶興趣模型和推薦算法實現不同用戶的個性化資訊推薦。但目前在算法中只考慮了評估內容特征和用戶特征是否匹配的相關性問題以及根據熱度特征解決的冷啟動問題,沒有考慮用戶協同特征和內容協同特征。即只針對個體用戶歷史行為的內容匹配推薦,沒有相似用戶群體的協同過濾推薦和基于相似內容的協同過濾推薦。下一步,將通過使用K-means聚類算法,擬合出最優分類結果,實現相似內容的聚類,當用戶點擊一類資訊信息后會推薦相似的文章內容。通過用戶歷史行為分析不同用戶間相似性,建立“用戶-興趣資訊”空間向量模型,利用余弦相似度計算當前用戶與其他目標用戶之間的相似度,排列出與當前用戶類似相關的 n名目標用戶,按程度高低進行排序,篩選出前 N名作為最類似用戶集合 S,通過遍歷 S中所有用戶的資訊閱讀情況,統計出閱覽次數最多但當前用戶沒有閱讀過的資訊,然后對這些資訊進行高低排序,尋找合適的資訊集合推薦給當前用戶[7]。