推薦系統應用---新聞資訊類

很久很久以前,大家獲取信息的渠道可能就是讀書,聽廣播,看報紙,看電視等等,可以獲得的信息也非常少。然而當今的社會,我們整天都會發愁從無數的巨大的永遠都不可能看完的信息中很輕鬆地找到需要的信息,也就是說“信息過載”的問題十分嚴重。

我們每天都會看一些新聞,關注一些社會熱點。當然你可以在圍脖上看到很多大家炒的很熱的話題,但很多人更願意看的是新聞和評論。

在本文中,我想虛構出一家提供新聞資訊的網站,在你的個人頁面上會顯示每天各個領域發生的新聞大事件,以及你可能會喜歡的新聞資訊。

我們的網站需要做好下面的工作:

1、搜索

用戶面對海量的信息,他如何能夠比較快速的相對準確地找到他想要的東西,答案就是搜索引擎。

搭建一個搜索引擎需要解決下面的問題。

  • 抓取
抓取還有一個比較好聽的同義詞,叫做收錄,當然也有一個更難聽的同義詞,叫做爬蟲。
在網上,你可以爬到別人的網頁,doc,pdf,xml等等很多信息。
大家平時關注新聞事件,大多也都是從新浪、qq、搜狐、網易那些大的門戶或者是新聞媒體的網站上瀏覽新聞。
所以,我們的爬蟲不必像google或者百度那樣從整個互聯網上爬取信息,而只需要在這些特有的網站上來爬取信息。
當然,如果你想做一個垂直並且非常另類的奇聞資訊的話,你需要動一番腦子,來尋找這些奇聞異事的來源。
不過,爬別人的東西,如果你不說明你的這個新聞的來源而且不添加原文鏈接的話,和偷別人的東西是一樣一樣的,是很不道德的行爲。所以,我們會在前臺頁面上清晰地顯示出我們從哪個站爬的信息,並添加原文鏈接。
通過爬取各大網站的新聞網頁 ,我們會得到一些雜亂的文本文件和圖片,需要經過下面的處理。
  • 解析
拿到爬來的東西后,我們需要對這些信息做一些處理,處理成我們要的格式。這一步往往被稱作“清洗”數據。解析數據的時候,需要對不同類型的數據進行不同的處理。不過,我們這裏只會拿到兩種類型的數據,新聞網頁的文本和網頁所配的圖片。
文本文件的處理可以用NekoHTML或者Python的beautifulsoup來做,去掉html的元標記符號以及其他和新聞無關的東西。
解析後的文本就比較乾淨了,需要進行下一步驟。
  • 索引
拿到乾淨的文本後,我們需要對這些文本做一個索引,以方便我們後續的搜索。
我們的索引對應於一個這樣的結構:
  1. 所有不同的單詞,當然這些單詞都是經過分詞器過濾出來的比較重要的有意義的單詞,而不是“的”或者“地”之類的出現頻率高但永遠不會成爲核心的詞,最好是限定一個範圍,只保留一些出現頻率在5%-50%之間的詞
  2. 這些單詞所在的文本
  3. 單詞在文本中的位置
這樣我們可以通過在搜索框中輸入一個詞彙,可以找到所有含有這些詞彙的文本,並返回結果。
這個是搜索最基本的表現形式,但是這樣的搜索引擎並不能很好地給用戶帶來他們想要的結果。
因爲排序結果只有根據最簡單的詞頻(TF)和逆向文檔頻率(IDF)這兩種指標,這種方法可以解決大部分簡單的搜索問題,但作爲一個智能的web服務還遠遠不夠。
  • 搜索
google在90年代末作爲一個後起之秀,超越其他的搜索引擎成爲全球最大的最牛的公司,一個主要原因在於他們用了PageRank算法。pageRank的算法利用了一種打分機制,來反映出一個網頁和另外一個網頁哪個更加重要。
但很可惜,我們並不能很好地用到這個算法,因爲新聞網頁之間絕大部分沒有相互鏈接,所以我們很難去利用網頁之間的關係來排序。
既然PR無法用了,我們可以用一種叫做DocRank的算法來對各個搜索結果進行排序。
這裏簡單介紹下這個DocRank是如何工作的:
(1)首先通過分詞得到每個文本的一組詞彙,以及它們出現在這個文本中的頻率。
(2)然後是想一些辦法來賦給每個文本一定的重要性。
計算文本相對重要性的方法如下:
1)找到兩個本文中出現最頻繁的詞彙的交集。
2)找到交集中的每個詞,計算該詞在文本1和文本2中出現次數的比值,然後對這個值取雙曲正切tanh後四捨五入,最後得到所有比值的綜合,也就是文本2相對於文本1的重要性。
這裏爲什麼用tanh去處理呢?原因是,我們希望重要性這個值可以處於0-1之間,並且最終四捨五入以後的結果就是一個詞或是被忽略或是有1個單位的重要性。
這樣就可以得到一個文本重要性的矩陣,然後就可以根據這個矩陣對搜索結果進行排序了。
當然,作爲一個智能的web應用,我們也會分析用戶行爲,來發現他可能更喜歡哪個結果,來改進搜索的效果。

2、分類

首先,先說明一個問題,爲什麼不先進行聚類,而是先做分類呢?

因爲數據的噪聲會在分類之後得到很大的抑制,聚類的效果就會非常好。但如果反過來的話,會看到很多的科技新聞被歸到國內新聞或者其他很搞笑的事情。

我們的網站將會分爲:國內新聞,國外新聞,科技新聞,娛樂新聞,體育新聞,軍事新聞這六大類。

分類的思路有兩個:

  • 一個比較簡單的分類就是爬取新聞的時候就做好分類,也就是說你從新浪的科技新聞版塊爬新聞自然就會分到這個類,這種分類方法完全依靠專家分類,分類的準確性會很高。但這種辦法不能用在所有的數據源,因爲很多的新聞都是從很多並沒有分類。但是,這些專家分類的數據源可以作爲分類器的訓練集。
  • 機器分類是解決這個問題的主要方法,構造一個好的分類器對於整個網站的成功起着非常重要的作用。可以想象,一個用戶如果在體育新聞中看到了中國房價常年居高不下的新聞他還是會再次訪問這個網站嗎?

3、聚類

新聞分好類後,要對新聞做一些分組的工作。這就會用到聚類算法。新聞分組有個好處在於,我們可以很容易地找到一篇新聞的相關新聞,對於每個分組會根據這個分組中的新聞提取一個關鍵詞作爲名稱。

4、個性化推薦

終於寫到重點了。

網站爲用戶提供的新聞是在太多太多了,而且每天都會更新大量的新聞,用戶如何能夠一一看的過來呢?

首先,我們會提供一個訂閱的功能,訂閱用戶自己感興趣的分類或者分組。

用戶如何找到這個分組?他可以搜索,他可以點開分類,然後他可以看到一個像樹一樣的結構。

但如果說我是用戶的話,我在一個目錄中點開一個鏈接。然後又看到無數的鏈接等着我去點,我會吐得。

所以這裏,我們可以採用標籤雲的方式來表示這些分組,當你打開一個分類時,你會看到許許多多的分組標籤,標籤的大小和顏色都不同,大小由這個分組中的新聞篇數決定。

然後,我們如何進行個性化推薦?

(1)我們會給用戶提供一個表達自己對這個新聞的喜好程度的機會,一個紅心,就像豆瓣電臺的那個紅心,當然也會讓他輕易地將這條新聞一鍵轉發至各大社交網站上。通過這個行爲我們就可以知道用戶是喜歡這篇新聞的,那麼個性化推薦也就不是問題了。

(2)當然,看過了一條新聞之後,總得讓用戶評論幾句吧。這個是用戶最基本的權利,而且是最容易出亮點的地方,網易新聞在這方面做的非常好。(釋永信爲失足女事主開光的新聞下面網友的詩詞接龍堪稱經典啊!)我們可以通過對評論進行語義分析,來分析用戶對這個新聞是否關注或者喜歡。但國內用戶很多時候都是在上面問候各自的直系親屬,這點使得對於評論的語義分析顯得沒有太大的意義哈。

我們會用到哪些算法呢?

基於內容的推薦算法是肯定的,因爲這是一個文本內容豐富而且可以利用IR的一些成熟技術來做的推薦。

基於條目的協同過濾貌似不太好用,因爲新聞具有時效性,有熱度效應,所以新聞會很頻繁地更新,用戶評分矩陣就會不斷地朝着條目的這個方向快速地增長,如果我們不加取捨的話,很快就會發現這個矩陣變成一個零矩陣,失去了意義。所以我們可以給這些數據加個時間窗口,來分析用戶的短期興趣,同時隔一段時間對歷史的陳舊的數據做一次挖掘,然後提取出用戶的興趣模型,然後丟掉這些數據。這樣我們可以得到用戶的長期興趣和短期興趣。

基於用戶的協同過濾算法,因爲它的優勢(尋找taste相同的人)在新聞類網站中顯得很單薄,所以我們棄用這種算法。

有了這些,個性化的推薦就變得簡單多了。

如果,我們把以上的這些功能和算法都做好了的話,並且用在手機客戶端上的話,可能就是這個樣子:

如果我們做成ipad客戶端後,也許就是這個樣子:

PS:因爲我是指閱的fans,真心喜歡這個產品,所以在這裏自願打了廣告哈,大家可以嘗試用一下這個產品。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章