0引言
新浪微博是一個由新浪網推出, 提供微型博客服務的類 Twitter 網站。 用戶可以通過網頁、WAP 頁面、手機客戶端、手機短信、彩信發布消息或上傳圖片。 新浪可以把微博理解為“微型博客”或者“一句話博客”。 用戶可以將看到的、聽到的、想到的事情寫成一句話,或發一張圖片,通過電腦或者手機隨時隨地分享給朋友,一起分享、討論;還可以關注朋友,即時看到朋友們發布的信息。
由于新浪微博的低門檻和社交的便利性, 目前它擁有的用戶群體和微博數量急劇增加。 如何能夠快速精確地找到用戶所感興趣的或可能感興趣的內容是本文主要的關注點。 目前與這個問題比較類似的問題是網頁搜索, 因為網頁搜索同樣基于關鍵詞找到用戶最需要的網頁。 目前較成熟的是 Google 提出的 PageRank算法,它根據網頁與關鍵詞的相關性和被引用程度對網頁進行排序,從而預測用戶比較感興趣的頁面。 但是微博與網頁之間還是存在著一些差別, 例如文本長度、文本引用關系、社交性等。
本文提出了一種新浪微博的搜索排序方法。 該方法首先通過對微博分析提取出可能影響因素, 然后使用神經網絡模型和初始化參數對于微博進行評分排序, 最后使用網頁日志修正模型參數不斷提高模型的準確性。
1相關知識
1.1 搜索引擎
搜索引擎, 通常指的是收集了互聯網上的網頁并對網頁中的每一個文字(即關鍵詞)進行索引,建立索引數據庫的全文搜索引擎。 用戶輸入要查詢的關鍵詞,搜索引擎則把所有與該關鍵詞相關的網頁按照與關鍵詞相關性的高低排序后提供給用戶作為搜索結果。 搜索引擎的原理包括以下三步:
(1)從互聯網上抓取網頁:利用爬蟲程序自動訪問互聯網上的網頁, 并沿著任何網頁中的所有鏈接爬到其他網頁,以從互聯網上自動收集網頁。
(2)建立索引數據庫:分析收集回來的網頁 ,提取相關網頁信息, 計算每一個網頁針對頁面文字中的相關度,再基于這些相關信息建立網頁索引數據庫。
(3)在索引數據庫中搜索排序:當用戶開始搜索關鍵詞時, 由搜索系統程序從網頁索引數據庫中找到符合該關鍵詞的所有相關網頁。 相關度越高, 排名越靠前。 關于搜索引擎的一些近期發展可參見文獻[2]。
1.2 Lucene
Lucene 是 apache 軟件基金會 Jakarta 項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎, 而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎、部分文本分析引擎(英文與德文兩種西方語言)。 Lucene作為一個全文檢索引擎,具有如下突出的優點:①索引文件格式獨立于應用平臺; ②與傳統全文檢索引擎相比,提高了索引速度、實現分塊索引,為新的文件建立小文件索引; ③優秀的面向對象的系統架構; ④索引器通過接受 Token 流完成索引文件的創立, 文本分析接口與語言和文件格式無關。 Lucene 的詳細使用方法可參見文獻[5]。
1.3 人工神經網絡
神經網絡是人工智能的一種常用方法。 目前人工智能廣泛應用于各個領域,通過模擬生物功能已是人們解決實際問題的一種有效方法。 人工神經網絡就是由模仿生物神經網絡而來,其中應用比較多是 BP神經網絡,BP 神經網絡是一種具有三層或三層以上的多層神經元網絡。 BP 網絡按有教師學習方式進行訓練,當一對學習模式提供給網絡后,其神經元的激活值將從輸入層經各中間層向輸出層傳播, 在輸出層的各神經元輸出對應于輸入模式的網絡響應。 接下來,根據的原則為減少希望輸出與實際輸出誤差, 從輸出層經各中間層、 最后再回到輸入層, 并且逐層修正各連接權。 正因為這種修正過程是由輸出到輸入逐層進行的,所以它被稱為“誤差逆傳播算法”。 當這種誤差逆傳播訓練不斷進行時, 網絡對輸入模式響應的正確率也會不斷地得到提升。 BP 網絡的具體步驟可參見文獻[4]。
2搜索排序架構與實現
本節將詳細介紹我們排序服務的流程以及模塊組成,同時對每一個模塊給出其功能以及簡要的描述,主要目的是為了提供一個整體的框架的描述。
2.1 整體框架
整個排序服務以 Webservice 的形式提供服務,服務的框架包括兩層,即路由層和控制層,路由層負責與前端界面和后臺索引建立數據連接和傳輸, 控制層完成微博的排序邏輯以及排序模型的遞增訓練。 圖 1 是整體框架的示意圖。2.2 路由層
如圖 2 所示,路由層包括三個小模塊:Search、Log-Grasp、GetJson。 它們共同完成了數據在前端界面排序服務以及后臺索引之間的傳輸。
●Search 模塊: 該模塊主要負責從頁面端接收搜索關鍵字,并將搜索關鍵字通過 GetJson 模塊傳輸給后臺索引。經過后臺索引的處理,將返回給 Search 模塊相應的微博。 接著,Search 模塊將從索引端獲得的微博傳遞給控制層的排序模塊處理, 從而獲得排序結果前 20的微博。 最后該模塊將 20 條微博返回給前端界面。
●LogGrasp 模塊: 該模塊負責從前端界面獲取用戶的點擊日志,并將日志傳遞給控制層的 Model 模塊,以便該模塊通過日志對模型進行改進。
●GetJson 模塊:用于獲得后臺索引端返回的相應關鍵字的微博列表。2.3 控制層
控制層用于實現微博的排序邏輯 , 包括排序(Rank)和模型(Model)兩個子模塊。
(1)排序模塊
排序模塊(如圖 3)負責具體實現微博排序的邏輯。
HandleRequest 模塊將從路由層的微博參數解析,過濾掉無關的臟數據(例如來自 iPhone、來自 iPad 等),并將參數傳遞給負責排序模型各維度處理的模塊, 排序模型的維度模塊包括作者相關屬性模塊(AuthorDimen-sion)、微博相關屬性模塊(ArticleDimension),以及相關性維度模塊(SimilarityDimension)。 這些模塊計算出相應維度的權重作為模型的輸入,以便進行排序。
●作者相關屬性模塊(AuthorDimension),負責統計計算與微博作者相關的屬性維度的權重, 包括作者的粉絲數、關注數,以及作者是否為 V 用戶等。
●微博相關屬性模塊(ArticleDimension),負責統計計算與微博相關的屬性維度的權重, 包括微博的評論數、轉發數等。
●相關性維度模塊(SimilarityDimension),負責統計計算微博內容與關鍵字的相關性維度的權重。 在該模塊中我們基于第三方開放源代碼的全文檢索引擎工具包 Lucene 以及 IKAnalyzer 分析工具重構了微博索引,并修改了相關性公式。 在原來的計算公式中微博內容越短微博的相關性越高, 我們認為這在實際使用的是欠合理的, 因此我們修改公式使內容較長的微博的相關性權重有所提高。 此外我們還通過修改索引建立的規則, 增加了多關鍵查詢的功能, 在改進后效果提升。(2)模型層
模型層(如圖 4)是微博排序的模型實現,負責從排序模塊獲得微博參數,通過模型計算出結果。 此外,我們在模型層還增加了模型的優化模塊, 通過對用戶點擊日志的解析,重新訓練模型,進而獲得更好的排序結果。
在該模塊中使用的排序模型為神經網絡模型,以排序模塊中各維度獲得的權重為輸入建立模型, 學習率設定為 0.9, 產生的輸出即為該微博的排序得分,將其返回排序模塊排序即可獲得排序結果。日志處理模塊(LogPreprocessing)負責統計處理路由層獲得的日志數據,作為訓練模型的 test data,將預處理的日志結果傳遞給模型訓練模塊(Training),由該模塊訓練排序模型, 以便根據用戶點擊結果實時更新模型參數。 考慮到新浪微博只允許同一賬號在一個小時內抓取 150 條左右的微博,我們設計了一個定時器,在每天晚上 24 點從前端界面獲取點擊日志,然后每一個小時處理 150 條微博改進排序模型。
3實驗結果
3.1 文本長度
我們使用關鍵詞“藥監局”做搜索,圖 6 左右兩側給出了使用原始算法和經過改進的搜索結果的比較。從圖中我們可以清晰地看到改進的算法降低了短文本的相關性,使得一些更長更相關的較長文本排在前面。
3.2 多關鍵詞
我們使用兩個關鍵詞“北京”和“玉淵潭”做搜索,圖 7 左右兩側給出了使用原始算法和經過改進的搜索結果的比較。 從圖中我們可以清晰的看到改進的算法考慮了多個關鍵詞, 使得匹配更多地關鍵詞的微博排在前面。3.3 噪音數據
我們使用關鍵詞“iPad”做搜索,圖 8 左右兩側給出了使用原始算法和經過改進的搜索結果的比較。 從圖中我們可以清晰地看到改進的算法過濾了一些噪音數據,使得搜索結果更準確。
4結語
本文介紹了一種基于 BP 神經網絡的新浪微博搜索排序方法,主要工作有:
●提取可能影響排序結果的微博特征, 例如關鍵詞與微博內容的相似度,博主信息等,同時對于這些特征做了預處理。
●通過網絡點擊日志訓練預測模型。
●通過分析實驗結果,改進算法,例如考慮文本長度,多關鍵詞搜索等。
下面是目前我們方法中的一些不足和改進方法:
●目前網絡日志的數據比較少, 且數據有效性并不能保證,因此我們訓練出的模型還不夠準確。 這點的解決方案是增加搜索引擎的用戶數量和點擊數量,同時保證用戶不能夠隨意點擊。
●我們方法中的一些改進技術需要重新對搜索結果做索引,這樣可能會降低搜索和排序的速度。
●從最后的統計結果看, 我們的排序結果在前三條的點擊率都很高,但會在 10 或 11 條有一點突起。 這個的主要原因是我們的排序結果中是所有搜索結果與關鍵詞的相關性都比較高, 用戶愿意點擊的微博存在一定的隨機性。參考文獻:
[1]新浪微博. 百度百科.
[2]羅武,方選,朱興輝 .網絡搜索引擎排序算法研究進展. 湖南農業科學,2010,7:137~140
[3]S. K. Ganta,S. P. Somayajula. Search Engine Optimization Through Spanning Forest Generation Algorithm. International Journal onCormputer Science and Engineering,2011,3:3276~3282
[4]J. Han,M. Kamber. Data Mining. China Machine Press, 2006
[5]M. Mohd. Development of Search Engines Using Lucene: An Experience. Procedia Social and Behavioral Sciences,2011,18:282 ~286
[6]X. Zeng, T. Song, X. Zhang, L. Pan. Performing Four Arithmetic Operations with Spiking Neural P Systems, IEEE Transaction onNanoBioscience,2012,11(4):366~374
[7]L. Pan, X. Zeng, Small Universal Spiking Neural P Systems Working in Exhaustive Mode. IEEE Transaction on NanoBioscience,2011,10(2):99~105
[8]M. P. Selvan, A .C. S., A. P. Dharshin. Survey on Web Page Ranking Algorithms. International Journal of Computer Applications,2012,41:1~7
[9]D. K. Sharma,A. K. Sharma. A Comparative Analysis of Web Page Ranking Algorithms. International Journal on Computer Science andEngineering, 2010,2:2670~2676
[10]曾湘祥. 膜優化算法在 DNA 編碼中的應用研究[D]. 武漢: 華中科技大學, 2007
[11]X. Zhang, X. Zeng, L. Pan, On Languages Generated by Asynchronous Spiking Neural P Systems, Theoretical Computer Science,2009,410(26):2478~2488