音樂是一門藝術,是由有組織的樂音來表達人們情感、反映人類現實生活情感的藝術。現代科技的發展使得人們能夠利用網絡隨時隨地的享受音樂,然而在當今互聯網卻不多有一個以音樂爲媒介的社交平臺。本開發團隊想以「音樂+社交」的形式,開發一款集聽歌、交友和討論爲一體的網上社區——「Violet」音樂社區。Violet多指紫羅蘭,也可形容羞怯的人,本團隊旨在經過此平臺加強人們對音樂的交流,同時拉近人與人之間的距離。html
此文檔爲本人做爲該項目成員的我的工做總結,用於記錄在開發過程當中的經驗、感悟以及對該課程的意見和建議,望從此的其餘項目能以此爲鑑。前端
完成版:violet音樂社區java
前端源碼:violet音樂社區前端源碼git
後端源碼:violet音樂社區後端源碼 程序員
需求分析:violet音樂社區需求分析github
設計文檔:violet音樂社區設計文檔web
原型手冊:violet音樂社區原型手冊算法
此項目將模塊按功能劃分爲曲庫、播放器、動態、圈子等主要模塊。小組按模塊將任務分配給各成員。其中,本人負責圈子模塊及其內部帖子模塊的後端開發。數據庫
該平臺是創建在音樂基礎上的社交平臺。圈子是用戶交流、探討音樂的最主要場所。後端
圈子類的字段、方法及解釋以下所示
本人在此模塊編寫的功能以下:
在界面中點擊「圈子」導航欄,頁面將會跳轉至圈子頁面,同時加載目前平臺上的全部圈子。呈現的內容有:圈子圖片、圈子名稱、成員數。圈子的排列順序按其關注人數排序。
此功能可供用戶建立本身的圈子。用戶需輸入圈子標題以及主要內容,圈子標題不得與已有圈子重名,內容必須合法規範。若圈子建立成功,則在數據庫內爲其賦予自增惟一id以標識。
此功能爲管理員的特權功能。用於刪除內容有違法、不文明、不道德的圈子。
此功能可供用戶關注本身感興趣的圈子。若用戶對某圈子內容感興趣,則可點擊「關注」按鈕關注該圈子,數據庫中用戶和圈子關聯表則會加入記錄。
此功能可供用戶將圈子推薦給本身的好友(相互關注的人),提高了該平臺用戶間交流的途徑。
帖子模塊爲圈子模塊的子模塊,用於發佈相關的帖子,用戶能夠在貼子內評論。
貼子類的字段、方法及解釋以下所示
本人在此模塊中編寫的功能以下:
此方法用於當用戶進入圈子時,加載該圈內的全部帖子。帖子按其內部最新評論排序,最新發評的帖子將在最頂部呈現(相似貼吧頂貼)。
此功能用於用戶在圈子內發佈帖子。用戶需輸入帖子標題和主要內容。若帖子建立成功,則在數據庫內爲其賦予自增惟一id以標識。
此功能爲管理員功能。用於刪除內容有違法、不文明、不道德的帖子。
現在在市場上成功的app或互聯網平臺,都有針對用戶的推薦系統。如淘寶網,會根據用戶的瀏覽、購買記錄向用戶推薦商品;如新浪微博,會根據用戶的點贊和關注向用戶推薦相關博文;再如抖音app,會根據用戶的觀看記錄和關注對象推薦短視頻。一個好的推薦系統能幫助用戶擴大瀏覽範圍,提升用戶體驗,同時也能幫助運營商贏得更多利益。
基於以上的市場背景,本人在圈子模塊使用了推薦系統,能夠根據用戶喜愛,向用戶推薦合適的圈子。
協同過濾系統(Collaborative Filtering System)這類系統經過計算用戶或/和項之間的類似度來推薦項。與某用戶類似的用戶所喜歡的項會推薦給該用戶。協同過濾算法能夠從基於用戶(userCF)和基於項(itemCF)兩方面向用戶推薦內容,將這兩個基於不一樣方面的方法結合能夠提高推薦的合理性。如下將從這兩個方面介紹該推薦系統。
基於用戶
基於用戶的協同過濾算法能夠差分爲兩個步驟:
1. 找到與目標用戶興趣類似的用戶集合 2. 找到這個集合中用戶喜歡的、且目標用戶沒有據說過的項目並推薦給用戶
在計算用戶和用戶之間的類似度時,本人使用了餘弦距離來計算,設 N(u) 爲用戶 u 喜歡的物品集合,N(v) 爲用戶 v 喜歡的物品集合,則用戶u和用戶v的類似度爲:
固然也能夠選擇Jaccard距離或其餘距離的方法,但此處使用餘弦距離更加合理且易實現。基於用戶的協同過濾原理較爲簡單,但在實際的應用中仍有缺陷,由於人做爲一個複雜的有機體,其思惟的隨機性、不肯定性較大,僅憑藉用戶的喜愛類似程度來推薦會有不許確、覆蓋面不廣等問題,由此引出基於項的協同過濾算法。
基於項
基於項的推薦能夠分爲如下三個步驟:
1. 計算物品和物品之間的類似度 2. 根據用戶的歷史行爲的偏好計算對不一樣物品的興趣度 3. 最終根據物品興趣度計算用戶對圈子的興趣度
在以上步驟中,計算類似度一樣選擇了餘弦距離,此處再也不贅述。至此,基於用戶和基於項的協同過濾介紹完畢,以上兩種方法在用戶、圈子數量增長的狀況下,會出現矩陣稀疏、空間浪費等問題,網上爲此也有基於模型的協同過濾算法,可供從此項目做參考。
協同過濾算法參考:傳送門
冷啓動的處理
協同過濾的有個明顯的缺點,即須要大量的user-item信息以作出推薦,若平臺前期信息不足,則系統不會作出充分推薦或亂推薦,該問題稱爲「冷啓動」。
網上解決冷啓動的策略有不少種,如:
1. 提供非個性化推薦:前期在用戶信息不足的狀況下給用戶推薦熱門排行版,即從衆推薦,等到信息收集足夠再進行個性化推薦; 2. 利用用戶註冊信息:如年齡、性別、職業、民族、學歷、居住地等,按必定規則向用戶腿甲物品; 3. 選擇合適物品啓動用戶信息:在用戶登錄時對一些物品進行反饋,收集用戶對物品的興趣信息; ……
本人結合該項目實際狀況,採用了第一種策略,旨在體驗與積累經驗,真實狀況還需查閱更多資料、結合更多策略。
解決冷啓動問題參考:傳送門
推薦系統測試
最後,融合上述的兩種方法以及對針對冷啓動的策略,默認取基於項的比例β=0.6爲權重,得出了最終的圈子推薦系統算法。如下爲該系統的效果測試:
在「用戶-圈子」關聯表中,記錄了用戶關注圈子的狀況,以下圖中,用戶2關注了[1,6,8]三個圈子,用戶1關注了 [1,6]兩個圈子,則人爲認爲這兩個用戶是類似的,推薦系統應該向用戶1推薦圈子8。
下圖爲使用Postman向推薦系統url發出GET請求的測試,能夠看到推薦系統的確向用戶1推薦了圈子8,同時也推薦了圈子1,這有多是基於項和基於用戶方法共同做用的結果。這也反映了推薦算法具備結果難解釋性,在用戶和圈子數量增多時,此現象更爲明顯。
加載圈子(成員數排序)
添加圈子
加載帖子(時間排序)
發表評論
添加帖子
這一學期,經過violet音樂平臺項目的合做開發,令我收穫頗豐,我對軟件工程開發有了新的理解和感悟:
項目選擇
一個項目在市場上成功與否不只僅取決於其質量,是否迎合市場需求也一樣重要。咱們選擇violet音樂社交平臺,集音樂和社交爲一體,正是抓住網民對音樂的依賴以及互聯網交流的便捷,填補了市場上的空缺。所以項目的選擇需合理分析市場狀況,才能作出準確判斷。
項目設計
項目設計階段咱們對其進行了需求分析,對該平臺的使用人羣、功能模塊、開發工具等細節進行統一,這一環節每每須要團隊間不斷討論和磨合,並經過實際開發狀況進行調整和改進。這一過程能明確開發目的,提升後期開發的效率。
協做分工
咱們小組合理分析了工做需求,設定了兩個前端開發人員和四個後端開發人員,同時四個後端開發人員又按功能模塊進行細化分工。這一步明確了各程序員的職責和任務。
代碼編寫
代碼編寫需簡潔、規範;要有適量註釋幫助本身和他人閱讀;程序接口需統一,以方便他人調用。
優勢
1. 講過過程當中朱老師會結合我的生活經歷,不只交授專業知識,還穿插人生哲理👍👍👍
2. 講課邏輯清晰、課堂內容豐富、氛圍輕鬆愉快👍👍👍
3. 課堂留有充足的時間讓咱們對大做業進行討論,而且朱老師會給出建設性的意見,受益不淺👍👍👍
……
建議
1. 書上能夠劃點重點,講道理,考試有點慌