1. 一種基于Spark的實時推薦系統(tǒng),其特征在于,通過Spark軟件分析棧構(gòu)建基于Spark的一棧式推薦系統(tǒng)框架,包括數(shù)據(jù)采集模塊、離線推薦模塊、在線推薦模塊和推薦模塊,各模塊之間的數(shù)據(jù)共享通過Spark RDD轉(zhuǎn)換;
數(shù)據(jù)采集模塊,用于采集用戶行為數(shù)據(jù);
所述離線推薦模塊,包含離線推薦算法庫,根據(jù)用戶配置參數(shù)從離線推薦算法庫中選擇相應(yīng)推薦算法對用戶行為數(shù)據(jù)進行訓(xùn)練,得到用戶特征模型;
所述在線推薦模塊,接收來自Kafka的用戶行為數(shù)據(jù),并發(fā)送給在線推薦算法庫中的相應(yīng)算法進行訓(xùn)練,得到增量用戶特征模型;在線模型訓(xùn)練引擎將訓(xùn)練得到的用戶特征模型作為基礎(chǔ)模型,使用流式增量推薦算法利用最新接收到的用戶行為數(shù)據(jù)對基礎(chǔ)模型進行增量更新,得到最新用戶特征模型;
所述推薦模塊,根據(jù)用戶特征模型,并結(jié)合惰性更新機制更新用戶推薦列表。
2.根據(jù)權(quán)利要求1所述的基于Spark的實時推薦系統(tǒng),其特征在于,所述在線推薦模塊還包括接近在線推薦模塊,將最新接收到的用戶行為數(shù)據(jù)與在此之前接收到的所有用戶行為數(shù)據(jù)進行融合,將融合之后的用戶行為數(shù)據(jù)發(fā)送給接近在線模型訓(xùn)練引擎,選擇在線推薦算法庫中的接近在線推薦算法進行訓(xùn)練,得到精確用戶特征模型。
3.根據(jù)權(quán)利要求2所述的基于Spark的實時推薦系統(tǒng),其特征在于,還包括模型融合模塊,用于將離線模型訓(xùn)練引擎、接近在線模型訓(xùn)練引擎和在線模型訓(xùn)練引擎訓(xùn)練得到的用戶特征模型進行融合,得到最終用戶特征模型。
4.根據(jù)權(quán)利要求1所述的基于Spark的實時推薦系統(tǒng),其特征在于,所述離線算法庫中包含的算法至少有:基于用戶的協(xié)同過濾算法(User-CF)、基于物品的協(xié)同過濾算法(Item-CF)、考慮時間上下文因素的基于用戶的協(xié)同過濾算法(time-User-CF)、考慮時間上下文因素的基于物品的協(xié)同過濾算法(time-Item-CF)、ALS算法;在線推薦算法庫中包含的算法至少有:流式基于用戶的協(xié)同過濾算法(Streaming-User-CF)、流式基于物品的協(xié)同過濾算法(Streaming-Item-CF)。
5.根據(jù)權(quán)利要求3所述的基于Spark的實時推薦系統(tǒng),其特征在于,所述惰性更新機制包括如下步驟:
(1)分析用戶活躍頻率統(tǒng)計表,獲取活躍用戶集合;
(2)將得到的最終用戶特征模型與活躍用戶相結(jié)合,為活躍用戶生成推薦列表;
(3)將推薦列表保存在Spark RDD中,供Spark SQL進行查詢。
6.根據(jù)權(quán)利要求1所述的基于Spark的實時推薦系統(tǒng),其特征在于,通過惰性更新機制獲取推薦列表包括如下步驟:
(a)Spark SQL獲取與用戶對應(yīng)的推薦列表,并提取該推薦列表最后一次更新的時間戳timeStamp1;
(b)從用戶訪問系統(tǒng)時間表中獲取用戶最后一次通過系統(tǒng)選擇物品的時間戳timeStamp2;
(c)對比時間戳timeStamp1和timeStamp2,如果timeStamp1 > timeStamp2,將Spark SQL查詢得到的推薦列表返回給該用戶;
(d)否則,重新通過訓(xùn)練得到的用戶特征模型更新該用戶的推薦列表,并將更新后的推薦列表寫入推薦列表集合進行存儲,并將其返回給用戶。
7.一種基于Spark的實時推薦方法,其特征在于,包括以下步驟:
S01:統(tǒng)計用戶訪問的時間和頻率,并將相關(guān)數(shù)據(jù)寫入用戶活躍頻率統(tǒng)計表和用戶訪問系統(tǒng)時間表;
S02:記錄用戶對系統(tǒng)操作的所有行為,并將用戶行為日志數(shù)據(jù)實時發(fā)送給Kafka分布式集群;
S03:根據(jù)用戶配置參數(shù)從離線推薦算法庫中選擇相應(yīng)推薦算法對用戶行為數(shù)據(jù)進行訓(xùn)練,得到用戶特征模型;
S04:通過Spark Streaming實時接收來自Kafka的最新用戶行為數(shù)據(jù),并發(fā)送給在線推薦算法庫中的相應(yīng)算法進行增量用戶特征模型訓(xùn)練;在線模型訓(xùn)練引擎將訓(xùn)練得到的用戶特征模型作為基礎(chǔ)模型,然后使用流式增量推薦算法利用最新接收到的用戶行為數(shù)據(jù)對基礎(chǔ)模型進行增量更新,得到最新用戶特征模型;
S05:當用戶在配置參數(shù)中選擇了接近在線推薦模塊時,接近在線推薦模塊將最新接收到的用戶行為數(shù)據(jù)與在此之前接收到的所有用戶行為數(shù)據(jù)進行融合,將融合之后的用戶行為數(shù)據(jù)發(fā)送給接近在線模型訓(xùn)練引擎,選擇在線推薦算法庫中的接近在線推薦算法進行訓(xùn)練,得到精確用戶特征模型;
S06:模型整合模塊將離線模型訓(xùn)練引擎、接近在線模型訓(xùn)練引擎和在線模型訓(xùn)練引擎訓(xùn)練得到的用戶特征模型進行融合,得到最終用戶特征模型;
S07:推薦模塊根據(jù)得到的最終用戶特征模型,并結(jié)合惰性更新機制更新用戶的推薦列表。
8.根據(jù)權(quán)利要求7所述的基于Spark的實時推薦方法,其特征在于,所述惰性更新機制包括如下步驟:
(1)分析用戶活躍頻率統(tǒng)計表,獲取活躍用戶集合;
(2)將得到的最終用戶特征模型與活躍用戶相結(jié)合,為活躍用戶生成推薦列表;
(3)將推薦列表保存在Spark RDD中,供Spark SQL進行查詢。
9.根據(jù)權(quán)利要求7所述的基于Spark的實時推薦方法,其特征在于,通過惰性更新機制獲取推薦列表包括如下步驟:
(a)Spark SQL獲取與用戶對應(yīng)的推薦列表,并提取該推薦列表最后一次更新的時間戳timeStamp1;
(b)從用戶訪問系統(tǒng)時間表中獲取用戶最后一次通過系統(tǒng)選擇物品的時間戳timeStamp2;
(c)對比時間戳timeStamp1和timeStamp2,如果timeStamp1 > timeStamp2,將Spark SQL查詢得到的推薦列表返回給該用戶;
(d)否則,重新通過訓(xùn)練得到的用戶特征模型更新該用戶的推薦列表,并將更新后的推薦列表寫入推薦列表集合進行存儲,并將其返回給用戶。