軟工大作業 歷物語(二)

2021-07-11 13:20:10 字數 2655 閱讀 9622

先大致說一下這兩周完成的內容:

細節還有非常非常多,當然不是說要拘泥於細節而失去了整體意識,而是在細節的把控中了解整個專案的脈絡。雖然功能遠沒有實現完,但是現在的專案結構已經略顯臃腫了,所以下一周準備梳理一下整個專案,開始嘗試自上而下地審視並重新設計一下整個結構。

本週做的工作值得細說的還是使用者偏好演算法的設計。使用者偏好演算法是我們專案的核心演算法,目的是為推測出使用者近期對於新聞型別的偏好,並記錄在系統內,從而在之後可以讓使用者選擇自己感興趣的資訊,並且每當發布了使用者感興趣的資訊之後可以推送給使用者。除此之外,最重要的一點是,系統可以根據使用者的喜好向使用者提供興趣相投的好友,從而提公升使用者黏性,並可以**中推廣應用。

作為乙個使用者偏好推測演算法,可以劃分到人工智慧的領域,在這裡我想談一下對於演算法起點的考慮。說到機器學習,普通水平的實現只要看了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。

1、對於tf的計算,主要是體現使用者的偏好有多「新」,考慮取看這篇新聞距離現在的時間間隔,即currenttime - visittime,換算成天數設為dayinterval,那麼可以取tf = 30 / (dayinterval + 1)(取30為了使tf和cd處於同乙個數量級)。

2、 對於cd的計算,取平均閱讀每個字所用的時間,設新聞正文本數為newslength,則cd = staytime / newslength

3、對於tpw的計算,為了使越新、閱讀越認真的新聞重要性越大且增長速度越來越快,可以取tf和cd和的平方,即tpw = (tf + cd) ^ 2。 而使用者在某一種類的新聞瀏覽記錄有n條,設每條記錄計算的tpw值為tpwi,綜上所述可得tpwi = (30 24 * 3600 * 1000 / (currenttime - visittime + 86400000) + staytime / newslength) ^ 2*

4、則tpw最終計算結果為。最終計算所得的npw = wf opw + (1 - wf) * tpw*

(注意:還可以考慮的一點是,如果我是資訊學院計算機系的,你也是資訊學院計算機系的,那麼我們很可能就有共同語言,也就是同一學院、同一學系或者同一年級的使用者也可能有共同的喜好,即使這一點沒有體現在演算法計算結果上,考慮把這一點也加在偏好演算法計算中)。

演算法實施:

我們在資料庫中設定了一張使用者偏好表用於記錄使用者偏好資訊,表項有使用者id、新聞型別、偏好舊值和詳細資訊,在詳細資訊中記錄了乙個陣列,陣列中每乙個元素都包含visittime和staytime兩部分。

每當使用者訪問一篇新聞時,都會更新相應的表項。同時在使用者表中新增乙個喜好標籤表項,記錄使用者最近最感興趣的新聞型別,最多記錄三個,太多的話匹配結果會過多,使得匹配系統沒有了意義,而且使用者也沒有精力去關注那麼多的新聞型別。當分別計算完乙個使用者對於各個新聞型別的喜好權值之後,將其排序,得到的前三名新聞型別放入喜好標籤中。

當推送新聞時,直接根據標籤過濾即可。推薦好友時,比對兩人的喜好標籤即可,只要有共同的標籤就推薦,並且如果當前使用者沒有喜好標籤,那麼就隨機從所有使用者中抽取;如果當前使用者有喜好標籤,那麼對於其他待匹配的沒有喜好標籤的使用者而言,也採用隨機抽取的辦法。

關於使用者喜好的計算時機,因為計算不是在伺服器上完成的(用雲引擎有點麻煩而且也沒必要占用伺服器資源),所以考慮只要使用者登入了,就在後台計算使用者偏好,每個登入週期偏好只計算一次。

目前為止只做了簡單的試驗,演算法可以得到較為合理的偏好值,但是在真實的應用場景中效果如何還有待進一步的測試。

軟工大作業中期總結

軟工大作業已經進行了兩個迭代週期,到了預先安排的中期檢查的時間,在這裡對前兩個週期的工作做乙個總結並對之後的工作做出安排。一 技術方面的問題 二 開發時間方面的問題 就我來說,第一次迭代多是基本的一些設計,暫且不談,第二次迭代的大量工作都是第二次迭代檢查前不久的時間才開始進行的。雖然也存在之前有很多...

軟工大作業 第十一組 音悅app

需求分析 設計分析 原型其他文件 包含兩次會議記錄 1.前言 2.個人分工 3.個人總結 4.對課程的建議 1.前言 通過本學期的學習,感覺收穫還是不少的,但是作為本組的組長,還是非常慚愧,完全沒有發揮出組長的作用 只是掛了個空的頭銜 一方面是能力不足,另一方面跟他人的交際能力欠強。2.個人分工 在...

西工大《經濟數學(下)》大作業離線作業

西北工業大學網路教育學院 2020年4月大作業 學習中心 課程名稱 經濟數學 下 學號 姓名 考試日期 年 月 日 一 單項選擇題 每小題4分,共16分 行列式。a.0 b.1 c.2 d.3 設向量,則a滿足 向量可由向量組線性表示。10件產品中有1件是次品,從中任取2件,其中基本事件的總數為 a...