摘 要: 基于實時推薦的移動健身管理平臺,將健身視頻與健身管理結合,同時滿足用戶學習健身方法的需求和科學管理健身數據的需求。該系統實現了基于Android平臺的移動健身管理應用,具備科學記錄用戶健身和飲食數據的功能和視頻分享功能。通過對目前已有推薦系統算法的研究,根據系統和開發平臺的特點,設計出一種實時視頻推薦算法,然后基于目前流行的分布式流處理計算框架ApacheStorm實現了實時視頻推薦引擎,移動健身管理應用提供視頻實時推薦服務。
關鍵詞: 健身管理; 視頻; 實時推薦; 安卓
中圖分類號: TN911?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2016)21?0132?05
Research on mobile fitness management system based on
distributed stream processing framework
SUN Kaitao
(College of Application Engineering, Henan University of Science and Technology, Sanmenxia 472000, China)
Abstract: On the basis of the mobile fitness management platform based on real?time recommendation, the combination of fitness video and fitness management can simultaneously meet the requirements of learning fitness method and scientific fitness data management for users. The system realized the application of mobile fitness management based Android platform, and has the functions of scientifically user fitness and diet data recording, and video sharing. According to the study of the available recommendation system algorithm and characteristics of system and development platform, a real?time video recommendation algorithm was designed. The real?time video recommendation engine was realized based on the popular distributed stream processing computing framework ApacheStorm, in which the mobile fitness management application provides the video real?time recommendation service.
Keywords: fitness management; video; real?time recommendation; Android
0 引 言
互聯網上有大量關于各類健身運動等資源供參考,能夠幫助人們更合理地安排健身計劃和飲食計劃。移動設備和移動互聯網的普及使這些海量資源可以隨時隨地被獲取,滿足了人們對運動和飲食信息的即時性需求。然而面對海量的信息資源,用戶很難在短時間內獲取符合自身需要的信息,有價值的資源有很多,幫助用戶找到符合自身需求的信息至關重要。推薦系統正是為解決這個問題而產生的。推薦系統可以通過采集和分析用戶的歷史瀏覽數據,從大量視頻中找到符合用戶需求的視頻,生成推薦列表返回給用戶。
1 系統概要設計
1.1 系統架構設計
(1) 系統物理架構
本系統實現了客戶端/服務器(C/S)和瀏覽器/服務器(B/S)兩種軟件架構。普通用戶通過Android移動客戶端與服務器進行交互,實現健身管理和視頻觀看功能;系統管理員通過瀏覽器與服務器進行交互,對基礎數據和用戶進行管理。實時推薦系統的主節點運行在應用服務器上,其他工作節點運行在分布式集群上,為用戶提供實時視頻推薦服務。
(2) 系統邏輯架構
移動健身管理平臺中有用戶和后臺管理員兩種角色,分別通過移動客戶端和瀏覽器與服務器交互。系統的結構自頂向下分為視圖層、控制層、模型層、基礎服務層和數據層。移動客戶端的視頻推薦功能由獨立的實時視頻推薦系統和服務器通過Redis數據庫交互,為視頻推薦功能提供用戶的推薦列表。系統的架構圖如圖1所示。
實時視頻推薦需要經過離線計算和在線計算兩個步驟。離線計算以用戶的歷史行為數據為注入,建立用戶興趣模型,生成離線推薦列表。由于用戶不斷有新的行為,離線推薦列表需要每天更新一次。在線計算綜合離線推薦結果和用戶的當前行為,生成實時推薦列表。
1.2 系統功能模塊設計
1.2.1 用戶功能模塊設計
(1) 編輯運動日志。用戶查看運動日志,可選擇添加新的運動項目或刪除已有項目。
(2) 同步健身數據。用戶可以手動同步健身數據到服務器,防止數據丟失。
(3) 獲取視頻推薦。客戶端將獲取視頻推薦列表的請求發送給服務器,響應的servlet調用視頻推薦類,調取數據庫中的視頻推薦列表返回給客戶端。
(4) 播放視頻。用戶進入視頻主頁,查看視頻列表。選擇一個視頻后,系統分別加載視頻和視頻簡介等信息。
1.2.2 后臺管理功能模塊設計
(1) 數據更新模塊
管理員可對運動和食物數據進行更新。首先查看運動數據,輸入要添加的運動項目。如果項目已經存在則不能添加,需要重新輸入。
(2) 視頻管理模塊
視頻首頁由管理員維護的視頻列表,固定的顯示在客戶端視頻頁面的上方。管理員登陸系統后,查看視頻列表,可選擇添加視頻。
1.3 數據庫設計
1.3.1 關系數據庫設計
移動客戶端產生的用戶數據,如訓練計劃、運動日志和飲食日志等存儲在Android客戶端的SQLite數據庫中。這些數據需要被用戶頻繁地查看和編輯,因此把數據存放在本地可以提高數據的加載速度,減少從網絡中讀取數據所耗費的時間。這些數據要定期同步至服務器端的MySQL數據庫,防止用戶信息丟失。MySQL數據庫還存有視頻、視頻評論、用戶收藏等信息。
1.3.2 非關系數據庫設計
(1) 用戶事件隊列。用戶每一次點擊視頻、收藏視頻的行為都會被存儲到事件隊列中。
(2) 相似度矩陣。相似度矩陣存儲任意兩個視頻的相似度,使用hash實現。
(3) 用戶評分向量。一個用戶對所有視頻的評分構成一個[n]維向量,同樣使用hash數據結構實現。用戶ID作為鍵,視頻ID作為字段,存儲對應的評分。
2 推薦系統算法及評測方法
2.1 基于內容的推薦
基于內容的推薦只需要用戶模型和項模型,不受到項的評分信息數量少的約束,這點是協同過濾系統無法實現的。由于只關注內容,因此不會降低新項目、冷門項目被推薦給用戶的幾率,有助于增加推薦結果的新穎度。但基于內容的推薦系統只適用于可描述內容的項推薦,不適用于視頻、聲音、圖片等特征提取困難的對象。
2.2 協同過濾算法
協同過濾算法中最重要的方法是基于鄰域的方法,主要包含基于用戶的協同過濾(User?based Collaborative Filtering,UserCF)和基于項的協同過濾(Item?based Collaborative Filtering,ItemCF)兩類算法。
推薦系統當中有兩類研究對象,一類是用戶(user),另一類是項(item)。用戶和某些項具有一定關系,這個關系可以被描述成一個數值。
用戶和項可以構成一個效用矩陣(utility matrix),矩陣中每個值代表某用戶對某個項的喜愛程度。如圖2所示的效用矩陣,代表用戶a、b、c對6部電影的評分,其中空白的部分表示用戶還沒有對電影評分。推薦系統的一個主要目標就是預測空白部分的數值,把分數最高的前[n]個項推薦給用戶。
2.2.1 基于用戶的協同過濾
基于用戶的協同過濾算法的工作方式是首先找到和目標用戶的興趣相似的用戶集合,然后找到這個集合中用戶喜愛的項中目標用戶不知曉的項推薦給該用戶。判斷兩個用戶的興趣是否相似,通過判斷用戶對相同項的行為是否相似得出。
2.2.2 基于項的協同過濾
基于項的協同過濾算法廣泛地應用于各種推薦系統中,它基于的假設是兩個項被同樣的用戶喜愛則具有很高的相似度?;陧椀膮f同過濾主要分為兩步。計算項之間的相似度,然后根據項的相似度和用戶的行為數據生成推薦列表。
2.3 健身視頻實時推薦系統算法設計
(1) 離線算法的選擇
基于用戶的協同過濾推薦適合用戶個性化需求不太豐富但時效性較強的場合。相反,基于項的協同過濾具有很強的發掘長尾物品的能力,適合用戶個性化需求強烈的領域?;陧椀膮f同過濾推薦可以解決新用戶的冷啟動問題。相比較而言,基于用戶的協同過濾要先更新用戶的行為數據。
目標系統的用戶個性化需求強烈,對新用戶的冷啟動有要求,由于對時效性沒有要求,因此可以容忍新項的冷啟動問題。本系統選擇基于項的協同過濾算法作為推薦系統的離線算法。
(2) 實時推薦過程算法設計
要讓實時推薦的結果反應用戶當前興趣,需要將用戶的點擊行為和收藏行為轉化成量化的喜愛程度。本算法用可調節參數[a]和[b]表示用戶對未評價過視頻的喜愛程度,[a]表示用戶對點擊的視頻的喜愛程度,[b]表示用戶對收藏的視頻的喜愛程度。令用戶對視頻[i]的預測興趣度為[Pui,]定義如下:
[Pui=j∈Nus(i,j)ruj] (1)
式中:[N(i)]表示喜歡視頻[i]的用戶集合;[N(j)]表示喜歡視頻[j]的用戶集合;[s(i,j)]的定義如式(2)所示。其中分母懲罰了熱門物品的相似度,熱門物品被大多數用戶知曉,應該避免推薦。
[s(i,j)=N(i)?N(j)N(i)N(j)] (2)
令視頻的關聯矩陣為[C,]式(3)表示用戶[u]的興趣向量[P,]其中從上到下依次表示用戶[u]對視頻的興趣度。
[P=C×V′u] (3)
去掉用戶已評價過的視頻,得到待推薦視頻集合,集合中的元素是視頻ID和對應的預測興趣度。取預測興趣度最高的前[k]項,生成推薦列表[R,]如式(4)所示:
[R=(v1,s1),(v2,s2),…,(vk,sk)] (4)
由于不同用戶的評分高低的習慣不同,[a]和[b]應由用戶的歷史評分的平均分決定。
用戶每產生一次點擊操作或收藏操作,就對用戶評分向量進行相應的修改,如果用戶對同一個視頻有數個操作,則取模擬評價分數的最高值。當用戶事件數量累計達到預先設定的閾值,系統使用以上算法為用戶產生實時推薦列表。
2.4 推薦系統測評
(1) 實驗方法
離線實驗首先通過系統工具獲得用戶行為數據,并按照一定的格式生成數據集。然后將數據集按照一定的比例分為訓練集和測試集,將訓練集算法注入到推薦系統中訓練用戶興趣模型,在測試集上進行預測。最后通過離線實驗指標評測在測試集上生成的預測結果與實際結果。
(2) 評測指標
衡量推薦質量的指標有很多,根據不同的實驗方式,使用不同的指標進行評估。離線實驗一般使用評分預測準確度(RMSE)、覆蓋率、多樣性等指標評價推薦系統。用戶調查和在線實驗可以獲得用戶滿意度、驚喜度等離線實驗無法獲得的指標。
3 系統詳細設計與實現
3.1 移動客戶端設計與實現
移動客戶端的架構圖如圖3所示。要實現移動客戶端的用戶功能模塊,需要使用一些中間件作為基礎,包括網絡連接模塊、網絡檢測模塊和圖片緩存模塊。
(1) 網絡連接模塊
首先通過Volley工具創建RequestQueue對象,RequestQueue是使用Volley框架的核心,通過將創建的請求添加到RequestQueue中,該對象就可以按照先進先出的方式按順序分發請求。在分發請求時,首先判斷該請求是否被緩存過,如果已經緩存在本地,則使用CacheDispatcher調用緩存的內容返回給客戶端。如果沒有緩存,則調用NetworkDispatcher向網絡發送請求,Dispatcher返回后,通過調用相應的onResponse接口,處理返回后的數據。
(2) 網絡檢測模塊
網絡檢測模塊還負責檢測網絡狀態是連接還是斷開。當網絡斷開時,給用戶發送提示。在Android系統中,使用ConnectivityManager類對網絡進行檢測。網絡檢測用到的主要方法如表1所示。
(3) 圖片緩存模塊
LRU(Least Recently Used)緩存把最近最少使用的數據移除,將系統內存讓給最新讀取的數據。要想實現LRU存儲策略,可以使用哈希表和雙鏈表實現。將Cache的所有位置都用雙向鏈表連接起來。當一個Cache被訪問之后,通過相應的鏈表操作,將該Cache調整到鏈表表頭的位置。新加入的Cache直接插入到鏈表表頭。在進行多次調整操作后,最近被命中的Cache就會向鏈表頭方向移動,而沒有命中的則向鏈表尾部移動。因此,鏈表尾表示的是最近最少使用的Cache。當空間不足需要清除一部分內容時,鏈表最后的節點就是最少被使用的數據,根據需要將最后面的幾個數據清除。
3.2 后臺管理子系統詳細設計與實現
(1) 視頻管理模塊
管理員對視頻首頁進行管理,可以增加和刪除視頻,這些視頻將顯示在移動客戶端的視頻界面。
(2) 用戶管理模塊
管理員刪除用戶評論的流程圖如圖4所示。首先查詢被舉報的評論是否存在,如果存在則刪除,否則終止操作。
(3) 數據更新模塊
管理員也可以對已有的運動和食物數據進行修改。圖5所示為管理員更新運動數據的流程圖。
3.3 實時推薦系統詳細設計與實現
(1) Storm分布式流處理框架
在Storm集群中,有主節點和工作節點。主節點上運行著Nimbus進程,工作節點上運行著Supervisor進程。主節點上的Nimbus后臺程序負責資源分配和任務調度,它會盡量均勻地將任務分配給Supervisor。Supervisor負責接收Nimbus分配的任務,啟動和停止屬于自己管理的進程。Nimbus和Supervisor的通信通過Zookeeper集群完成。
(2) 事件生成模塊
一個事件紀錄了時間戳、Sessionid、事件類型、用戶ID和視頻ID。事件流的類型分為三類,分別為點擊事件、推薦事件和會話終止事件,分別代表用戶的點擊操作、推薦請求和會話結束狀態。
(3) 實時視頻推薦模塊
要實現實時視頻推薦,首先要計算離線推薦結果,編寫MapReduce批處理任務。離線結果和它的中間結果是實時推薦的基礎。得到了離線推薦結果和它的中間結果后,將這些數據存儲到Redis中。運行在Storm集群上的topology接收用戶的點擊事件流,根據用戶的點擊時間和離線推薦的計算結果生成實時推薦列表。
(4) 推薦系統實驗
本文的實時推薦系統實驗數據基于Youtube上的用戶評價健身視頻數據的仿真數據。在Youtube上搜索關鍵詞,取最熱門的[N]個視頻鏈接作為起點使用爬蟲工具抓取用戶對視頻的評價信息。將這些數據整理,得到8千個用戶對2千個視頻的行為。進而可以得到用戶對視頻的評價矩陣和視頻的相似度矩陣。將評論了視頻但是沒有把視頻標記為喜歡的用戶作為用戶的點擊數據。選擇某一個時間點的點擊數據作為實時數據。
4 系統測試
對系統的功能測試主要涉及健身管理模塊、視頻模塊和賬戶管理模塊的主要功能。通過測試得出,結果均通過。本系統使用Monkey對Android系統進行壓力測試,使用命令adb shell monkey?p com.bit.fitlab?v 10對com.fitlab.manage包發送一定數量的隨機事件流,模擬用戶隨機操作,然后返回這些操作對系統的影響。該測試結果說明,模擬了100次操作,系統沒有產生崩潰,WiFi傳輸數據的耗時為520 ms。
5 結 論
本文實現了一款基于實時視頻推薦系統的Android平臺健身管理類應用軟件,將健身視頻資源和健身管理應用整合,便于用戶提高健身效率。提出了實時視頻推薦與健身管理結合的研究方向,系統的健身管理功能實現了對運動的時間、持續的時間、消耗的能量、項目完成的進度、攝取食物的質量和能量的全面管理功能,設計并實現了視頻實時推薦系統,解決了新用戶推薦的冷啟動問題,并且增強了系統的實時性,使用戶的興趣點被實時捕捉。使用Storm分布式流處理框架實現,系統的性能卓越。
參考文獻
[1] MILICEVIC A K, NANOPOULOS A, IVANOVIC M. Social tagging in recommender systems: a survey of the state?of?the?art and possible extensions [J]. Artificial intelligence review, 2010, 33(3): 187?209.
[2] 周海平,黃湊英.兩種協同過濾推薦算法的比較研究[J].貴陽學院學報(自然科學版),2015,10(1):1?4.
[3] SNEHA S, JAYALAKSHMI D S, SHRUTHI J, et al. Recommending music by combining content?based and collaborative filtering with user preferences [C]// Proceedings of 2012 International Conference on ICERECT. India: Springer, 2012: 507?515.
[4] CUGOLA G, MARGARA A. Processing flows of information: from data stream to complex event processing [J]. ACM compu?ting surveys, 2012, 44(3): 359?360.
[5] CANTADOR I, BELLOGíN R, VALLET D. Content?based re?commendation in social tagging systems [C]// Proceedings of 2010 ACM Conference on Recommender Systems. New York: ACM, 2010: 237?240.
[6] XIA M J, ZHANG J G. Research on personalized recommendation system for e?commerce based on Web log mining and user browsing behaviors [C]// Proceedings of 2010 International Conference on Computer Application System Modeling. Zhengzhou, China: IEEE, 2010: 408?411.
[7] 劉建國,周濤,郭強,等.個性化推薦系統評價方法綜述[J].復雜系統與復雜性科學,2009,6(3):1?10.
[8] 孟遠.Android網絡通信框架Volley的解析和比較[J].軟件,2014,35(12):66?68.