許文英,向 強
(西南民族大學電氣信息工程學院,四川 成都 610041)
隨著互聯(lián)網(wǎng)技術的發(fā)展,人們的生活越來越豐富.尤其近幾年來,電子商務的快速發(fā)展,各大網(wǎng)站銷售的商品幾乎涵蓋人們的所有需求.并且伴隨著電商平臺的物品豐富多樣,數(shù)量數(shù)不勝數(shù),甚至一類相似物品數(shù)量達到幾十個,使得人們選購商品的時候,信息過載導致選購商品倍感費力.在海量的信息情況下,商家對顧客消費的大量數(shù)據(jù)的處理技術提出嚴峻的挑戰(zhàn),消費者對紛繁復雜的商品,很難準確定位自己所需求的物品.因此,推薦系統(tǒng)[1]應運而生.
由最早的亞馬遜推薦系統(tǒng)[2],到目前各知名的淘寶網(wǎng)、豆瓣網(wǎng)、京東等電商門戶的各自的推薦系統(tǒng),都得到廣泛的應用,并取得顯著的成功.傳統(tǒng)的推薦系統(tǒng)包括基于協(xié)同過濾算法的推薦系統(tǒng)[3]、基于用戶相似的矩陣分解模型算法的推薦系統(tǒng)[4]、社會化的推薦系統(tǒng)[5]等.在電商時代,更好的掌握和運用用戶與物品的數(shù)據(jù),才能為電商的運營帶來更好的指導方向.隨著大數(shù)據(jù)分布式技術的發(fā)展,對于推薦系統(tǒng)框架:車晉強等人對分布式Spark的協(xié)同過濾推薦算法研究[6],岑凱倫等人基于Spark平臺,對電商實時推薦系統(tǒng)的研究[7],劉壽強等人對Hadoop平臺推薦算法的研究[8],彭建喜對MapReduce平臺推薦系統(tǒng)的研究[9];近年來,對推薦算法的有很大的改進,隨著大數(shù)據(jù)環(huán)境的發(fā)展,大數(shù)據(jù)運用推薦系統(tǒng)也隨著變化[10],大數(shù)據(jù)推薦算法有:關聯(lián)規(guī)則算法[10],社交網(wǎng)絡算法[11],組合推薦算法[12].本文針對傳統(tǒng)的協(xié)同過濾算法,在大量數(shù)據(jù)運算的情況下,存在單節(jié)點計算難度大以及特征矩陣稀疏等問題,適應大數(shù)據(jù)環(huán)境的要求、采用大數(shù)據(jù)分布式框架Pyspark,對并發(fā)性很好的ALS協(xié)同過濾算法原理進行研究并實踐應用.
根據(jù)官方提供,Apache Spark是一個開源的大數(shù)據(jù)處理框架,它具有高速處理、易用性、構建復雜大數(shù)據(jù)分析的特點.相比其它大數(shù)據(jù)處理技術(如Hadoop,Storm)和MapReduce技術,Spark提供了一個全面、統(tǒng)一的大數(shù)據(jù)處理框架.
Spark技術族包括資源調度、文件存儲、編程模型、分析工具,其中資源調度包括YARN、Mesos,文件存儲包括HDFS、Tachyon,編程模型包括Hadoop、MapReduce、Spark/Spark Straming,分析工具包括 Hive、Spark SQL、SparkR、Pyspark、GraphX、MLlib.Spark 吸收和借鑒大數(shù)據(jù)分布式計算模式的優(yōu)勢,它巧妙的融合彈性分布式數(shù)據(jù)集(Resilient Distributed Datasets,RDD)和算子(Operation),以此減少對內存的訪問和消耗,實現(xiàn)簡潔高效的分布式計算的運行框架.其中Spark的算子包括創(chuàng)建算子(Creation)、變換算子(Transformation)、緩存算子(Cache)、行動算子(Action),用于對RDD中的數(shù)據(jù)進行轉換和操作.
Spark是用面向函數(shù)式變成語言(Scala)編寫的,并提供了幾個交互式的API.Pyspark即是Spark開發(fā)者為python語言開發(fā)者提供的pythonAPI,與Spark相似,PySpark的中心數(shù)據(jù)抽象是一個“彈性分布式數(shù)據(jù)集”(RDD),它只是一個Python對象的集合,圖1給出了Pyspark與Spark的關系示意圖.選擇Pyspark的原因是對于熟練Python的程序員,Python自身的輕量級、簡單的優(yōu)勢,結合Spark的特點,得到很多程序員的青睞.
圖1 Pyspark與Spark的關系示意圖Fig.1 diagram of the relationship between Pyspark and Spark
Pyspark相對于Spark是在外圍包裝一層Python API,通過集成的Py4J對Python和Java進行交互,進而實現(xiàn)Python編寫Spark應用程序,其運行基本架構如圖2所示:
圖2 pyspark架構Fig.2 pyspark architecture
a)在Python引擎中,SparkContext通過Py4J連接Java的解釋器JVM,并且創(chuàng)建一個JavaSparkContext.
b)Py4J通過引擎,把本地的Python與JavaSpark-Context的對象進行互相通信.
c)Pyspark的RDD在Python下的轉化被映射成Java環(huán)境下的PythonRDD.
d)在遠程的worker機器上PythonRDD對象啟動子進程,并且使用Pipes與啟動的這些子進程進行通信,通過這樣的關系為用戶傳遞代碼和數(shù)據(jù).
協(xié)同過濾模算法摸型:假設有一個用戶數(shù)據(jù)集:U = {u1,u2,u3,…,uk} , 收 集 用 戶 買 過 商 品:,用評分矩陣Mn×k表示用戶對商品的評價[13]、打分、點贊等方式,Mu,i表示第u個用戶對第i個商品的綜合評分,評分相近的表示用戶喜歡的商品相似.
基于改進的協(xié)同過濾算法摸型:ALS(alternatingleast-squares)繼承協(xié)同過濾算法模型的思想,用戶與用戶對商品的打分構成隱含的評分矩陣,其中隱含因子就是用戶對一些物品的偏好.
基于隱含的ALS協(xié)同過濾算法原理:由于一個用戶不能給所有物品打分,因此決定了評分矩陣高度稀疏,因此假設一定存在兩個低秩矩陣U、I盡可能逼近M,即
為了使低秩矩陣乘法最大限度逼近真實值,需要計算平方誤差函數(shù),且使得誤差達到最小:
根據(jù)潔洪諾夫正則化(Tikhonovregularization)準則[14],則(3)式變?yōu)?/p>
根據(jù)偏微分原理,求解U,固定I,對U求偏導:
令偏導數(shù)為零,得:
化簡得:
根據(jù)偏導數(shù)對稱原則,同理可得:
根據(jù)(4)、(5)式,隨機給定 U,I的初始值,可以迭代求出U,I矩陣,當平方誤差(6)的值變化很小時,算法達到收斂,進而求得評分矩陣M.
Tikhonovregularization求解的質量依賴于正則化參數(shù)λ,為了合理迭代求取(4)、(5)式,根據(jù)最小化廣義交叉驗證算法求取[15]λ:
其中 Sλ= Φ(Φ'Φ + λR)-1Φ',Φ表示全體基函數(shù).
數(shù)據(jù)準備:選取開源的電影評價數(shù)據(jù)集(MovieLens);
平臺部署:官方網(wǎng)址下載對應操作系統(tǒng)版本的Spark,本次采用 Spark 2.0、JDK 1.8.0、 Python 2.7.13,安裝完成并配置環(huán)境變量,啟動Pyspark,如圖3.
圖3 Pyspark啟動(MovieLens數(shù)據(jù)集)Fig.3 Pyspark startup(MovieLens data set)
推薦程序流程圖如圖4:
圖4 推薦系統(tǒng)流程圖Fig.4 recommendation system flow chart
使用Anaconda仿真,調節(jié)程序中三個參數(shù)λ,RANK,numIteration.首先取λ =0.01、λ =0.02、λ=0.03,改變隱形因子的數(shù)量,畫出RMSE變化,如圖5所示;其次取 rank=8、rank=10、rank=12,改變參數(shù)Lambda,畫出RMSE,如圖6所示.
圖5 RMSE1Fig.5 RMSE1
圖6 RMSE2Fig.6 RMSE2
通過實驗結果,當隱形因子數(shù)取10,正則參數(shù)為0.01時,RMSE最大,得到本次數(shù)據(jù)集在本次實驗環(huán)境下的最佳推薦結果,其中RMSE如圖7所示;并且保存模型,根據(jù)ALS模型,分別計算出第196個用戶對第241,第240,第139部電影的評分,以及第197、第198、第199、第200個用戶對第139部電影的評分結果,如圖8所示,然后根據(jù)模型(ALS)計算結果,將評分最高的推薦給相應用戶.
圖7 RMSE最佳值Fig.7 RMSE best value
圖8 第i用戶個對第j個電影的評分Fig.8 Thei-th user scores the j-th movie
與傳統(tǒng)的協(xié)同過濾推薦相比,首先,Pyspark針對大數(shù)據(jù)環(huán)境平臺,在計算量很大的情況下,運行速度快,并發(fā)性好,穩(wěn)定,可以用于生產(chǎn)環(huán)境.其次,ALS協(xié)同過濾算法,并發(fā)性好,在Pyspark平臺下,隨著隱形因子數(shù)的增多,平方誤差越??;隨著正則數(shù)的增大,平方誤差變大,這個實驗結論可用于生產(chǎn)環(huán)境中對模型參數(shù)調優(yōu)有決策的方向,能使推薦精度更高.最后,隨著物品的日益增多,數(shù)據(jù)量增大,上網(wǎng)購物體驗會有很大變化,推薦系統(tǒng)的性能還有很多改進的地方,比如怎么實現(xiàn)實時推薦有效的問題、算法平臺遷移穩(wěn)定性等,需要進一步的研究.
[1]張素智,趙亞楠,吳健.推薦系統(tǒng)研究[J].湖北民族學院學報(自然科學版),2016,35(2):1-6.
[2]洪亮,任秋圜,梁樹賢.國內電子商務網(wǎng)站推薦系統(tǒng)信息服務質量比較研究—以淘寶、京東、亞馬遜為例梁樹賢[J].2016,60(23):97-110.
[3]余娜娜,王中杰.基于Spark的協(xié)同過濾算法的研究[J].系統(tǒng)仿真技術,2016,12(1):41-45.
[4]盛偉,余英,王保云.基于相似用戶索引和ALS矩陣分解的推薦算法研究[J].陜西理工學院學報(自然科學版),2016,32(6):47-52.
[5]孟祥武,劉樹棟,張玉潔,等.社會化推薦系統(tǒng)的研究[J].軟件學報,2015,26(6):1356-1372.
[6]車晉強,謝紅薇.基于Spark的分層協(xié)同過濾推薦算法[J].電子技術應用,2015,41(9):135-138.
[7]岑凱倫,于紅巖,楊騰霄.大數(shù)據(jù)下基于Spark的電商實時推薦系統(tǒng)的設計與實現(xiàn)[J].現(xiàn)代計算機,2016(11):61-69.
[8]劉壽強,祁明.基于Hadoop云平臺的社交大數(shù)據(jù)協(xié)同過濾個性化推薦的研究與實現(xiàn)[J].現(xiàn)代計算機,2016(32):76-79.
[9]彭建喜.基于MapReduce的潛在因素算法在推薦系統(tǒng)中的研究與應用[J].科技通報,2013(29):124-126.
[10]陳平華,陳傳瑜,洪英漢.一種結合關聯(lián)規(guī)則的協(xié)同過濾推薦算法[J].小型微型計算機系統(tǒng),2016(2):287-292.
[11]李霞,李守偉.一種基于社交網(wǎng)絡輿論影響的推薦算法[J].計算機應用與軟件,2017,34(1):276-280.
[12]王子政,姚衛(wèi)東.一種改進的組合推薦算法研究[J].軍民兩用技術與產(chǎn)品,2015(1):46-51.
[13]李偉霖,王成良,文俊浩.基于評論與評分的協(xié)同過濾算法[J].計算機應用研究,2017(3):362-412.
[14]傅初黎,李洪芳,熊向團.不適定問題的迭代iT k h o n o v正則化方法[J].計算數(shù)學,2006,28(3):238-246.
[15]王麗,王文劍,姜高霞.數(shù)據(jù)擬合中光滑參數(shù)的優(yōu)化[J].計算機科學,2015,42(9):226-234.