寫給用我的“新聞推薦項目”做畢設的同學們

故事的背景這樣滴

14年的時候,我還在讀研究生,那時候機器學習還算不上是一個重要的計算機學科,如果能順嘴說一說TF-IDF、Collaborative Filtering這種算法(雖然現在聽起來很naive),在當時基本上就是技術潮男一般的存在,在五道口咖啡廳能橫着“騙項目”、“騙錢”。

我因爲當時正好在微創業,當時準備做一個智能獵頭的項目,用算法去給每個程序員的能力打分,再把程序員推送給合適的公司應聘,然後給B端獵頭公司做ToB服務(當時這個理念有點太geek,不過現在有些PAI的客戶確實把這種事做起來了,我很欣慰)。

這其中涉及到很多文本分析和推薦相關的技術,於是我就自己開發了一套新聞推薦系統錘鍊相關技術,從網上爬了真實的新聞數據,並把這個項目開源。

https://github.com/X-Brain/News-Recommend-System

項目動圖:

還成了相關項目的搜索頭條:

 

成了畢設熱門項目

 

萬萬沒想到,我的無心之舉沒想到成就了很多在校同學。每年畢設季都能收到非常多的來自同學們的私信,大致是下面這種。

 

也有很多同學在我的微信公衆號留言,想交流這個項目。所以我想還是有必要跟大家把這個項目好好介紹下,因爲這個項目雖然目前來看技術比較老,但是作爲本科生畢設項目還是OK的,而且吃透後會給同學們很多收穫。

 

技術點拆解

 

做這個項目一定要動手去做,去讀代碼,不要直接拿過來用。最核心的幾個技術點我列一下:

1.crawler爬蟲

做訓練要有數據,可以在網上找下相關的爬蟲開源項目,直接爬搜狐、新浪這樣的網站。他們有反扒機制,如何破解這種機制是大家要掌握的。

2.分詞

做文本分析一定要用到分詞,我在項目裏用的是jieba分詞,14年的時候這個項目還是在比較初級階段,現在應該好很多,大家可以看看有啥新功能。比如詞性提取,新聞推薦系統建議只提取名詞性相關的詞語做TF-IDF。

3.算法

在項目裏用了協同過濾和TF-IDF,這兩個算法我是自己實現的,基本上是機器學習裏最簡單的算法,用的好像是hashtable的方式--具體想不起來了。雖然有很多開源版本,但是我建議有能力的同學這兩個算法要自己寫。我在做TF-IDF的時候有大量中間計算結果需要先落盤到硬盤上,這個主要是當時我的電腦內存太小,貌似只有1個G,所以沒辦法把所有計算壓到內存做,現在大家可以試試全部內存計算的方式。

4.架構設計

其實前面三點,對於目前的本科同學應該都不難,因爲現在網上的資料很多。真正要學習的是架構設計,因爲一個推薦系統不光只有原子化的算法還要有一個好的設計把算法結果串起來。要思考哪些功能可以抽象成util或者tools這種工具包,比如統計、排序等功能。哪些計算中間結果可以在多個模塊複用?

 

如何優化這個項目

 

這個項目是14年的老項目,算法更新迭代很快,那如何在這個基礎上優化呢?

1.從詞到主題

在整個項目裏,我是基於每個人過去瀏覽的新聞中的關鍵詞進行推薦。關鍵詞的上一級是主題,能不能給每個用戶喜愛的主題打標,基於主題推薦。比如現在的項目裏可以抽象出用戶A喜歡 費德勒、喬丹、跑步這樣的關鍵詞,那麼能不能向上抽象一層,顯示出用戶A喜歡體育並且推送體育相關的新聞。

2.增加排序模型

現在的推薦系統只有召回沒有排序,也就是說可以基於協同過濾或者TF-IDF計算出每個用戶潛在的喜歡的文章,但是並不能確定這些文章哪個是用戶最喜歡,哪個是第二喜歡。如果可以基於文本做特徵提取,並且使用邏輯迴歸等排序算法訓練出排序模型,那麼推薦的準確率會大大增加。

這一點我在後續的很多項目做了類似的工作,比如:

https://blog.csdn.net/buptgshengod/article/details/40541949

總結

 

羨慕大家現在畢設就能接觸到推薦系統,在我畢業那個年代還是比較少見的,給大家的建議就是一定要自己動手,能自己寫的模塊儘量自己寫~還有就是,這個項目比較簡單,可能只適合本科生,研究生同學建議搞點更高深的。這篇文章我會加到新聞推薦那個項目介紹的博客後面,方便以後更多的同學看到。

發佈了279 篇原創文章 · 獲贊 681 · 訪問量 124萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章