文章來源:中國軟工亞洲指揮中心(Steins;Gate)
共同做者:紀神,爵爺,老闆,小男孩(按首字拼音排序)
責任編輯:爵爺算法
先大體說一下這兩週完成的內容:數據庫
細節還有很是很是多,固然不是說要拘泥於細節而失去了總體意識,而是在細節的把控中瞭解整個項目的脈絡。雖然功能遠沒有實現完,可是如今的項目結構已經略顯臃腫了,因此下一週準備梳理一下整個項目,開始嘗試自上而下地審視並從新設計一下整個結構。數組
本週作的工做值得細說的仍是用戶偏好算法的設計。用戶偏好算法是咱們項目的核心算法,目的是爲推測出用戶近期對於新聞類型的偏好,並記錄在系統內,從而在以後可讓用戶選擇本身感興趣的信息,而且每當發佈了用戶感興趣的信息以後能夠推送給用戶。除此以外,最重要的一點是,系統能夠根據用戶的喜愛向用戶提供興趣相投的好友,從而提高用戶黏性,並能夠隱形中推廣應用。
做爲一個用戶偏好推測算法,能夠劃分到人工智能的領域,在這裏我想談一下對於算法起點的考慮。說到機器學習,普通水平的實現只要看了Coursera上吳恩達的Machine Learning就夠用了(固然我是說很是簡單的應用),再否則Github上一堆數千star的項目,甚至都不須要知道基本概念。可是在第一版算法設計中咱們並無採用機器學習算法,這是因爲如下幾點考慮:服務器
在第一版算法設計中,咱們只是使用了簡單的權值計算,目前先實現這版測試一下效果如何,具體設計以下:機器學習
算法目的:
爲推測出用戶近期對於新聞類型的偏好,並記錄在系統內,從而在以後可讓用戶選擇本身感興趣的信息,而且每當發佈了用戶感興趣的信息以後能夠推送給用戶。除此以外,最重要的一點是,系統能夠根據用戶的喜愛向用戶提供興趣相投的好友,從而提高用戶黏性,並能夠隱形中推廣應用。學習
算法原理:
算法計算結果是用戶對於某種類型的新聞的偏好程度,目的在於兩部分,第一部分是推測近期趨勢,第二部分是推測用戶喜愛。
爲了體現這兩部分,咱們使用兩個衡量指標:時間因子tf(time factor)和認真程度cd(conscientious degree)來表示。爲了突出兩方面的因素,咱們使用高階運算來提高權值,計算出的值爲tpw(temporary preference weight)。
除此以外,因爲偏好值的計算是不斷迭代的,因此每次計算新的偏好值時應該考慮以前的計算結果,給定一個權值因子wf(weight factor),並設舊的用戶偏好值爲opw(old preference weight),則新的用戶偏好值爲npw = opw wf + (1 - wf) * tpw*,目前取wf爲0.3,並取opw初值爲0。測試算法過程:
把用戶訪問一篇新聞的時間以及在這篇新聞上的停留時間分別設爲visitTime(單位:毫秒)和stayTime(單位:毫秒),考慮經過這兩個因素來計算tf和cd。
一、對於tf的計算,主要是體現用戶的偏好有多「新」,考慮取看這篇新聞距離如今的時間間隔,即currentTime - visitTime,換算整天數設爲dayInterval,那麼能夠取tf = 30 / (dayInterval + 1)(取30爲了使tf和cd處於同一個數量級)。
二、 對於cd的計算,取平均閱讀每一個字所用的時間,設新聞正文字數爲newsLength,則cd = stayTime / newsLength。
三、對於tpw的計算,爲了使越新、閱讀越認真的新聞重要性越大且增加速度愈來愈快,能夠取tf和cd和的平方,即tpw = (tf + cd) ^ 2。 而用戶在某一種類的新聞瀏覽記錄有n條,設每條記錄計算的tpw值爲tpwi,綜上所述可得tpwi = (30 24 * 3600 * 1000 / (currentTime - visitTime + 86400000) + stayTime / newsLength) ^ 2。
四、則tpw最終計算結果爲。最終計算所得的npw = wf * opw + (1 - wf) * tpw。
(注意:還能夠考慮的一點是,若是我是信息學院計算機系的,你也是信息學院計算機系的,那麼咱們極可能就有共同語言,也就是同一學院、同一學系或者同一年級的用戶也可能有共同的喜愛,即便這一點沒有體如今算法計算結果上,考慮把這一點也加在偏好算法計算中)*。優化算法實施:
咱們在數據庫中設置了一張用戶偏好表用於記錄用戶偏好信息,表項有用戶id、新聞類型、偏好舊值和詳細信息,在詳細信息中記錄了一個數組,數組中每個元素都包含visitTime和stayTime兩部分。
每當用戶訪問一篇新聞時,都會更新相應的表項。同時在用戶表中添加一個喜愛標籤表項,記錄用戶最近最感興趣的新聞類型,最多記錄三個,太多的話匹配結果會過多,使得匹配系統沒有了意義,並且用戶也沒有精力去關注那麼多的新聞類型。當分別計算完一個用戶對於各個新聞類型的喜愛權值以後,將其排序,獲得的前三名新聞類型放入喜愛標籤中。
當推送新聞時,直接根據標籤過濾便可。推薦好友時,比對兩人的喜愛標籤便可,只要有共同的標籤就推薦,而且若是當前用戶沒有喜愛標籤,那麼就隨機從全部用戶中抽取;若是當前用戶有喜愛標籤,那麼對於其餘待匹配的沒有喜愛標籤的用戶而言,也採用隨機抽取的辦法。
關於用戶喜愛的計算時機,由於計算不是在服務器上完成的(用雲引擎有點麻煩並且也不必佔用服務器資源),因此考慮只要用戶登陸了,就在後臺計算用戶偏好,每一個登陸週期偏好只計算一次。人工智能
目前爲止只作了簡單的試驗,算法能夠獲得較爲合理的偏好值,可是在真實的應用場景中效果如何還有待進一步的測試。設計