唐東平,方民俊,吳邵宇
(華南理工大學,廣東 廣州 510640)
“民以食為天”,隨著互聯網技術的推廣,餐飲行業成功地實現了從線上到線上的轉型,“互聯網+餐飲”作為現階段餐飲領域的熱門應用在各種各樣的場景,人們不僅可以利用此方式團購美食和訂購外賣,而且可以從中找到適合自己的餐飲以及通過美食形成交友圈[1]。
餐飲O2O雖然提高了人們的生活效率,但人們經常無法正確選擇符合其自身的食物。第一,面對種類繁多的食物,加上缺乏一定的營養健康理論基礎,人們很難準確地判斷出有利于其健康的食物[2];第二,人們比較容易受到外界條件的干擾從而做出飲食的選擇,例如受到其他消費者的評分、天氣、地理位置等因素的影響[3]。綜上原因,為用戶推薦出適合的餐飲很有必要,既能改善用戶的餐飲O2O體驗,又能推動餐飲O2O的發展,使其更加智能化、人性化。
在此背景下,該文從用戶的心理認知出發,當系統把餐飲推薦給時用戶時,用戶的心理認知直接決定了該推薦信息是否有效、是否確切地實現個性化推薦。個性化推薦質量的提高,能有效地提高用戶的使用頻率,增加用戶對推薦系統的信任程度。個性化推薦可定義為,A用戶在網站留下如購買、評價等行為數據,假如B用戶與A用戶具有相似的歷史行為數據,則B用戶為相似用戶,并且可以將A用戶具備而B用戶不具備的愛好推薦給B用戶。運用此原理,當目標用戶打開餐飲網站或軟件時,可以迅速推薦可能適合他們的食物[3]。
基于協同過濾的推薦方法是個性化推薦方法的一種思路,由于互聯網的餐飲推薦是動態的,因此該文加入上下文感知因素,研究基于上下文感知的協同過濾推薦算法。根據Dey對上下文感知的定義,用戶和環境等上下文夠為用戶反饋出符合當前上下文的信息[4]。該文采用上下文后過濾模式在忽略上下文信息的前提下,先運用傳統方法進行推薦,再匹配符合用戶當前上下文的數據從而實現推薦。
該文區分項目資源的選擇偏好和評分偏好,認為上下文信息與評分偏好之間的關系是松耦合的關系,即用戶對項目的喜歡程度很大程度上影響著其對項目評分的高低,然而環境、地點等上下文信息的記錄反映出了用戶會在何種信息對該項目發出請求。換言之,在上下文信息的綜合影響下,用戶項目選擇的感知不清晰,而上下文對項目選擇的影響通常是根據概率的,即對于某種類型或具有某種屬性的項目在不同的上下文條件下有相應的概率被觸發。
基于上下文的推薦算法,一般需要結合基于用戶或物品的協同過濾推薦算法進行改進[5]。根據傳統的協同過濾算法,通常是依用戶或物品之間的歐氏距離定義鄰居集,進而在鄰居數據中實現推薦過程。在傳統的協同過濾算法思想的基礎上,該文改進的基于上下文感知的協同過濾算法的主要流程如圖1所示。

圖1 基于上下文的協同過濾算法流程
一般地,基于內容的推薦算法僅是簡單地直接根據用戶對項目的評分推算目標用戶感興趣的項目或目標用戶的近鄰用戶并向目標用戶推薦項目,這種通過評分信息把項目推薦給目標用戶的方式可能會因為疏忽了用戶偏好的具體細節而影響推薦的效果[6]。這類研究通常是基于分類的思想來挖掘用戶對資源類別的粗粒度興趣偏好,因此難以有效地反映用戶對項目資源多個屬性特征的偏好情況。若進一步劃分和挖掘用戶的粗粒度興趣偏好,則能夠更加準確地理解用戶對項目資源的需求。朱磊等人研究了基于評分偏好和項目屬性的協同過濾算法,物品的相似度公式改進后融合時間參數,結果表明,改進算法的準確率和召回率在MovieLens-100K數據集上提高了9%~27%,在MovieLens-Latest-Small數據集上提高了16%~28%[7]。該文認為,用戶在不同項目資源間進行選擇時主要從自身較重視的幾個項目屬性配置情況進行評估,對應地在項目使用結束后的評分也主要反映了用戶對項目屬性的評價。
該文提出將傳統的用戶-項目評分矩陣與項目屬性結合以推算用戶對項目屬性的偏好信息,并基于用戶對項目屬性的偏好信息計算用戶評分偏好的相似度,結合靜態上下文信息確定協同過濾推薦近鄰搜索。
在基于項目屬性的推薦系統中要以用戶-項目屬性值評分矩陣為基礎,在不加大用戶反饋的工作量和能夠共享傳統推薦系統中用戶信息數據的前提下,需要根據用戶對項目資源的評分計算用戶對項目屬性值的評分信息進而得到用戶-項目屬性值評分矩陣。用戶-項目屬性值評分矩陣與用戶-項目評分矩陣具有相同的結構,因此借助傳統推薦系統中近鄰查找算法或用戶偏好模型建立方法以及目標用戶對項目偏好的預測方法預測用戶對項目資源的偏好程度,進而完成推薦過程。
在基于項目屬性的推薦系統中,評分矩陣中的元素主要是用戶對項目資源的顯性評分,某用戶對全體項目的評分構成單一的評分矢量,擴展到全體用戶時則構成用戶-項目評分矩陣。系統中包含n個用戶和m個項目資源可表示的評分矩陣結構如表1所示。其中rij表示第i個用戶對第j個項目資源的評分數值,可以用1或0分別表示喜歡和不喜歡,也可以選擇具體的數值范圍如1~5分、1~7分、1~10分當中某值表示用戶對項目資源的喜好程度。矩陣的空缺元素表示用戶沒有對該項目評分,協同過濾推薦基于評分計算的相似用戶或項目,預測這些空缺元素的評分值,而基于項目屬性的推薦過程需要在用戶-項目評分矩陣的基礎上,結合項目的屬性信息轉化為用戶-項目屬性值評分矩陣。

表1 用戶-項目評分矩陣
項目資源的特征一般可以用一定數量的屬性來描述,每個屬性可以取若干個屬性值,從而利用項目屬性的取值情況對項目進行區分和描述,即項目資源I可以表示為元素屬性值集的矢量:
(1)
其中,CiPj表示項目I的pj屬性的取值集。根據各個項目資源所具備的屬性值的情況可以得到項目集的屬性描述矩陣,如表2所示。

表2 項目-屬性矩陣
CiPj可能表示單一屬性值或含有多個屬性值的集合。比如菜式清蒸皖魚的食材屬性,取值可能為{皖魚,蔥,姜}。查找近鄰用戶和產生推薦結果是基于用戶或項目資源之間的相似性計算,其中相似度計算方法的余弦相似度要求相關矢量包含的每個元素只能取單值,且取值必須量化,因此需要將項目-屬性矩陣中的矢量轉為只含有單個數值元素的矢量。

表3 項目-屬性值矩陣
對于離散型數值的項目屬性,每個可能的屬性取值轉化為項目屬性描述矢量中的一個元素,以1和0分別表示某個項目是否具備相應的屬性。對于連續型數值的項目屬性,首先將可能的屬性取值范圍進行離散化處理,然后按照屬性具體的取值給相應矢量中的元素進行賦值,同樣地以1和0分別表示項目是否具備該屬性。處理后項目資源的每個屬性p的取值可以表示為屬性p所有可能離散取值的二進制矢量,項目-屬性值矩陣如表3所示。
用戶在使用項目結束后的評分反映了用戶對項目屬性的評價,整體上用r來描述用戶對某項目資源的評分,而用sp1,sp2,…,spo分別描述用戶對項目中各屬性的評分,最后以函數f表示用戶對項目屬性的評分與用戶對項目的整體評分之間的轉換函數:
r=f(Sp1,Sp2,…,Spo)
(2)
在用戶對項目資源的評分以及每個項目的屬性取值數量足夠多的前提下,則可以把函數f具體化,并運用該函數推算出用戶-項目屬性值評分矩陣。如果用U表示用戶集,I表示項目資源集,P表示項目屬性集,M和M'分別表示用戶-項目評分矩陣和用戶-項目屬性值評分矩陣,則有:
M:U×I→M':U×P
矩陣的元素則為推算出的用戶對項目屬性值的評分,如表4所示。

表4 用戶-項目屬性值評分矩陣
項目屬性值對系統分類結果影響的權重,反映了用戶對項目屬性的偏好程度。由此計算項目屬性值對決定用戶是否喜好某個項目資源所貢獻的權重,以表示用戶對于項目屬性的偏好程度。
選取文本分類研究中計算文本特征項權重的TF-IDF算法來計算屬性值的權重,在用戶對項目資源的偏好分析中,如果在用戶喜好的項目資源中某屬性值出現的次數多,而該屬性值出現在所有項目中的頻率低,說明用戶越偏好具有該屬性值的項目,因此該屬性值對決定用戶喜好這個項目資源所貢獻的權重越大[8]。
為了避免某個評分偏好對應的項目資源過少的問題,并考慮到推薦系統使用過程中消費者對商品只有選擇和不選擇這兩種情況,可以根據用戶對項目評分的高低將已評分的項目資源分為喜歡和不喜歡這兩種偏好分類。假設用戶u評分集共有N個項目資源,具有屬性值pij的項目有npij個,喜歡的Na個項目具有屬性值pij的有apij個,不喜歡的Nb個項目具有屬性值pij的有bpij個,用戶對屬性值pij的初始偏好權重可以表示為vu,pij:
(3)
先求出用戶對各個項目屬性值的初始偏好權重,構成用戶對項目資源各屬性值的偏好權重矢量,再對每個用戶的偏好矢量進行歸一化處理后評分上限top相乘得到用戶對各個屬性值的偏好評分矢量。用戶u對pij的偏好評分可以表示為su,pij:
(4)
一般地,協同過濾推薦算法通常以兩個用戶對同一項目資源集給出的評分數值為基礎,直接利用余弦相似性或Pearson相關相似性測量用戶的相似度[9]。在餐飲O2O推薦的用戶-商品評分矩陣中,具有明顯的稀疏性,共同評分的菜式占目標用戶評分集所有菜式的比例較小,且根據商品評分計算相似度忽略掉了用戶偏好的具體細節。本研究將采用余弦相似性測量用戶對于項目屬性值偏好的相似度。用戶a和b對項目屬性值評分的相似度simrating(a,b)可以表示如下:
(5)

另外,該文采用靜態上下文信息搜索的依據,同時考慮到用戶評分記錄較少時會存在用戶冷啟動問題[10]。如果兩件事物之間存在很多相同的屬性,即它們共享的信息越多,說明它們之間的相似度就越大;反之當兩件事物之間沒有共同的屬性時,則認為它們是不相似的。為此,該文釆用基于屬性的語義相似性計算方法來衡量兩個用戶在基本信息上的相似度[11]。用戶a和b在用戶本體基本信息的語義相似性可以表示如下:
(6)

該文從用戶對項目屬性的評分偏好和用戶本體基本信息兩個方面綜合計算用戶偏好相似度。因此,基于上述兩部分的相似度計算,本節采用線性加權的函數來計算綜合相似度。用戶a和b的綜合相似度simcombine(a,b)可以表示如下:
simcombine(a,b)=γsimrating(a,b)+
(1-γ)simprofile(a,b)
(7)
其中,γ是可調系數,可用Sigmoid函數表示,其取值范圍為[0,1]。當γ取值接近1時,表示主要通過用戶對項目屬性的評分偏好相似度來表示用戶之間的相似度,當γ取值接近0時,表示主要通過用戶本體基本信息的相似度來表示用戶之間的相似度。
本研究融合了動態的情景因素,結合加權的貝葉斯方法進行基于上下文感知的項目屬性動態偏好分析。根據相似組情景信息的歷史記錄,采用基于KL散度為情景信息加權的貝葉斯方法預測用戶對于商品屬性值的動態偏好,因而解決信息記錄缺乏時難以構建概率模型以及推薦系統的用戶冷啟動問題。
不同的上下文中各類型或具有某種屬性特征的商品依概率來響應用戶的選擇偏好。本研究采用貝葉斯方法來預測用戶在特定場所、活動等上下文信息對于商品屬性值的動態偏好程度[12]。基于上下文感知的貝葉斯模型的構建需要一定數量訓練集的支撐,但目標用戶可能存在上下文信息記錄缺乏而影響概率模型準確性的用戶冷啟動問題。該文對目標用戶進行貝葉斯偏好模型構建時,認為偏好相似用戶在相同或近似上下文中對于商品的選擇偏好也具有相似性,根據用戶對項目屬性評分偏好以及靜態上下文計算的綜合相似度simcombine(a,b)進行排序,取排名較前且擁有足夠數量歷史行為記錄的鄰居用戶作為相似組,并以所有相似用戶的歷史行為記錄作為構建概率模型的訓練數據集。用ci來表示動態的關鍵上下文因素取值,則在用上下文因素的取值集為C=(c1,c2,…,cn)的情況下,用戶u選擇具有pij屬性的項目資源的概率可以表示如下:
(8)
其中,P(pij)=Npij/N表示訓練數據集的記錄中具有屬性值pij的概率,N為訓練數據集中用戶選擇的項目資源總個數,Npij為用戶選擇具有屬性值為pij的項目資源個數。式(8)通過計算每個屬性值pij在訓練數據中的特定上下文下的概率來預測用戶對屬性值的動態偏好。由于上下文具有多維特征,滿足特定上下文的歷史記錄樣本量不足,因此使用貝葉斯公式進行轉換。另外,由于計算P(c1,c2,…,cn|pij)需要一個較大的訓練數據集,且上下文因素間的相互關系需要大量人為工作量,因此采用樸素貝葉斯方法假設在給定目標值時屬性值之間互相條件獨立,即在給定pij的情況下,觀測到聯合上下文的概率等于每個單獨上下文因素取值的概率乘積:
(9)
考慮到由于部分項目記錄較少而引起P(ck|pij)為0的問題,定義在具有屬性值pij的項目記錄數Npij<10的情況下,若P(ck|pij)為0,則設為P(ck)。將式(9)代入式(8),即可計算得基于上下文感知的貝葉斯模型:
(10)
該模型在具有各個屬性值的項目記錄的條件概率下作比較,對于?pij,P(c1,c2,…,cn)為恒定的,可設為與屬性值pij無關的參數θ,剩余部分具備條件概率比較特征[13]。由于貝葉斯偏好模型中上下文因素的取值規定為離散值,則上下文因素要考慮到對用戶的動態偏好影響較大且其條件盡可能互相獨立。
在基于上下文感知的貝葉斯模型中,上下文因素取值ck對于各個屬性值的動態偏好重要程度視為一致,權重均為1。實際上不同ck對于各個屬性的選擇偏好的影響效果存在差異,比如城市和健康狀況上下文信息的某些實例對口味選擇的影響可能比較大,但外賣或堂食時選擇的口味可能與日常類似。因此,需要根據具體ck對具體屬性的影響程度來確定式(10)中上下文信息的權重。
此處引入KL散度用來衡量兩個概率分布之間差異的指標。為了具體化不同上下文對于每個屬性的重要程度,在計算用戶在無上下文與具體上下文中對于單個屬性的選擇概率分布時,采用KL散度上下文加權方法[14],對于項目屬性Pi來說,計算ck值影響程度的KL散度可以描述為:
(11)
其中,Rpij表示用戶選擇具有屬性值為pij的項目占屬性Pi項目統計數的比率,Rck,pij表示在上下文因素值ck前提下的比率,fi表示項目屬性Pi取值范圍的屬性值個數。當KL散度為0時,說明在某上下文下用戶對屬性Pi的選擇與平常無差異,ck重要程度較低。而KL散度越大,則說明ck對用戶在屬性Pi上的選擇引起了較大的影響,應賦予ck較大的權重。據此,本研究提出的計算上下文因素值ck對于屬性Pi重要程度的加權系數可以表示為:
Wck,Pi=1+DPi(Rck||R)
(12)
式(10)中考慮加權系數后,即可計算得相應上下文信息加權的動態偏好模型:
(13)
推薦系統最后輸出的結果是項目資源,因此項目屬性的偏好值要轉化為項目資源整體的偏好得分。基于屬性效用疊加的思想,通過線性加權計算整體偏好得分,項目資源中同一屬性有多個取值則取其平均值。用戶u對于項目資源v的預測偏好得分Ruv可以表示如下:
(14)
其中,o表示項目屬性的個數,pij為項目v所具有的屬性值。wi為該項目第i個屬性特征的權重,表示該屬性對項目的重要程度,此權重值通過調查項目各屬性的重要程度或咨詢專家后得出。su,pij和tc,pij分別預測了用戶u對于項目v所具有屬性值pij的評分偏好和基于上下文感知的選擇偏好,兩者通過相乘結合,最后再取均值。
本研究設計一個用于收集用戶上下文信息的Web頁面,結合多種上下文信息獲取方法來采集用戶用餐時的記錄。在考慮基于上下文感知的貝葉斯模型中上下文信息因素的取值約束和條件盡可能相互獨立的原則,篩選出收集的數據。篩選后的屬性包括DayNight、Weather、Temperature(離散化后)、Holiday、AreaType、Acquaintance、Mode、Companion、Health,屬性的取值主要通過手機瀏覽器和服務器從互聯網等外部信息源直接獲取,用戶手動輸入獲取后3個屬性。信息收集的頁面如圖2所示。
由于用戶不易判斷出菜式類的菜系等屬性,而菜式的子類類型具有主觀性且主要決定于食材和做法,因此不作為網頁收集的菜式屬性。實驗選擇便于用戶判斷的菜式屬性:1~2個食材、做法、口味、價格標簽。為了方便用戶分類并避免誤判,部分屬性值進行了合并和簡化的處理,比如食材的選項按常識歸納縮減為28個類,包括畜肉類4項、禽肉類4項、蔬菜類5項、魚蝦蟹貝類5項、谷類、薯類、豆類、菌類等食材。做法選項有10個屬性值,分別為炒、蒸、煲、煎炸類、燒烤類、燉煮類、灼燙類、烘焙、常溫處理、其他做法。口味有6個屬性值,分別為淡、咸、甜、苦、酸、辣。在加權結合用戶評分偏好和基于上下文感知的選擇偏好的式(14)中,屬性效用權重wi表示屬性對菜式重要程度,食材取0.4,做法、口味、價格標簽各取0.2。

圖2 信息收集頁面
每次用餐記錄可以保存1~4個菜式,信息獲取錯誤等上下文信息缺失的情況不保存記錄。通過輸入菜式名保存的菜式在用戶下次記錄時可以直接通過下拉列表選擇,將用戶的記錄中屬性值相同的菜式設定為相同菜式,另外用戶自定義菜式名的差異可忽略。根據上下文與項目評分的松耦合關系,評分表現的是用戶對項目的固定偏好程度,因此同一用戶在不同上下文中對相同菜式的重復評分記錄取平均值。
在本研究中,邀請了各年齡段、各職業的用戶進行用餐記錄。在餐飲O2O平臺注冊時先對用戶的靜態信息進行采集,再為用戶分配獨立的頁面鏈接,在移動設備的瀏覽器打開即可直接獲取動態上下文信息,記錄用餐內容信息以及評分。收集到的數據經過剔除和篩選,去除少于5條記錄的用戶后,共得到34位用戶在2019年后三個季度期間的2 170條記錄,合并屬性值相同菜式后共得到不同的356個菜式。
推薦預測準確度是評價電子商務推薦系統優劣的指標之一。針對用戶的選擇偏好程度進行基于上下文感知的預測,將用戶對項目的選擇偏好與評分偏好進行區分。為預測基于上下文感知的用戶選擇行為,實驗以對比推薦列表和實際列表的準確率和召回率來評估個性化推薦的預測準確度。
實驗數據劃分為訓練集和測試集,推薦系統根據訓練集的數據得到一個在測試集條件下預測的推薦列表。通過準確率(Precision)表示推薦算法預測的推薦菜式結果符合用戶偏好的程度,并通過召回率(Recall)表示用戶偏好的菜式被推薦算法成功預測的程度[15]。假設D為實驗的菜式列表,對于某目標用戶,R(d)為推薦系統根據訓練集的數據,采用不同算法得到的在測試集條件下預測的推薦列表,T(d)為測試集中該用戶選擇的菜式列表,準確率和召回率的計算公式可以表示如下:
(15)
(16)
從每位用戶的記錄中隨機抽取5條包含上下文信息的用餐記錄作為測試集,每條記錄包含1~4個菜式,其余的所有記錄作為訓練集,計算平均的準確率和召回率。34位用戶各自的記錄條數從5條至183條,因此實驗的條件出現了傳統協同過濾算法中用戶冷啟動的情況。菜式評分記錄方面,同一用戶對屬性值相同菜式的重復評分記錄取平均值后,以34位用戶對不同菜式完整的911條評分作為近鄰搜索的訓練集,用戶-菜式評分矩陣的缺失率為92.5%,符合推薦系統實際使用中評分數據稀疏的情況。
本實驗將對文中的上下文后過濾的協同過濾推薦方法I,傳統基于用戶的協同過濾推薦方法II,傳統協同過濾近鄰搜索的動態偏好預測推薦方法III,基于上下文信息相似度的推薦方法IV進行比較。其中:
方法II根據對菜式的相同評分尋找鄰居用戶,再根據鄰居用戶的評分預測目標用戶的缺失評分,其不融入上下文信息;
方法III根據傳統協同過濾的方式尋找鄰居用戶,再按照本研究采用上下文信息加權的貝葉斯方法進行動態偏好分析,得到基于上下文感知的選擇偏好;
方法IV按照本研究基于項目屬性的方法搜索鄰居,在目標用戶以及鄰居用戶的歷史上下文信息中,找出與當前上下文語義相似度最高的上下文,再推薦菜式[16]。
本實驗對比了以上4種推薦方法在取不同鄰居用戶數量時得到的TOP-10推薦菜式的準確率和召回率,結果如圖3和圖4所示。

圖3 準確率

圖4 召回率
由圖3和圖4得,文中提出的上下文后過濾的協同過濾推薦方法的準確率和召回率整體上高于其他推薦算法,隨著鄰居數量的增加,準確率呈現先上升再下降的趨勢。因為評分矩陣稀疏,傳統基于用戶的協同過濾推薦方法II在鄰居數量較少時推薦結果較好,而待推薦菜式的已有評分記錄菜式較少,因此在鄰居數量上升時準確率和召回率下降較快,在鄰居數目大于12時,其準確度均低于其他基于上下文感知的推薦方法,表明了融入上下文信息可以有效提高餐飲O2O推薦的準確度。方法I的準確度整體比方法III高,且相比以全體用戶為鄰居即不通過綜合相似度選擇鄰居的情況表現更優,表明了基于項目屬性的近鄰搜索以及評分偏好預測方法的有效性。基于上下文相似度的推薦方法IV僅在鄰居較少時有較高的準確率和召回率,鄰居數目增大時準確度明顯低于方法I,表明用戶在相似上下文中可能會選擇相同菜式,但該方法沒有考慮用戶偏好信息,同時證實了采用上下文信息加權的貝葉斯方法進行動態偏好分析的有效性。
在為用戶個性化地定制餐飲服務時,本研究融合了上下文后過濾的協同過濾推薦算法和基于貝葉斯模型的加權方法。經實驗證明,所設計的模型能有效解決數據稀疏的問題,與其他算法進行對比,提高了推薦的準確率和召回率,表明更容易滿足用戶對個性化餐飲的要求。
此外,本研究還存在改善的空間:用戶對菜品屬性的偏好是隨時間發生改變的,因此可考慮在推薦算法中引入與時間相關的因素,提高某時間段對用戶的餐飲推薦;當用戶群體較大時,可引入K-means聚類算法的思想進行算法改良;對特定的情景應該有更具體準確的分類,以提高推薦度。