隨著人們生活水平的不斷提高, 外出吃飯的機會越來越
多, 逢年過節聚餐, 同事聚餐, 同學聚餐等等。 當一說到吃飯,
最先考慮的是去哪吃, 吃什么, 因此美食網站就成為了人們獲
取這些信息的主要來源
[1] 。 當然傳統的美食網站上邊都是千
篇一律的菜品, 價錢等, 展示給所有用戶的都是一樣的, 用戶
就需要從這菜單中一樣一樣地選擇, 想要從這么多的菜品中
找到自己喜歡吃的難上加難, 而且還費時費事。 因此個性化
推薦技術應用于美食領域變得尤為重要。
目前關于美食個性化推薦的移動應用, 主要是基于 App
的點餐和基于 iPad 的點餐。 前者是你需要在自己手機上下載
該餐廳的 App, 有時候只是偶爾去一次, 程序麻煩而且還占用
手機內存; 后者是不需要自己下載, 看起來好像比 App 好點,
但是如果一個餐廳里邊每一個服務員都配備一臺 iPad, 好像
也是不小的投資。 隨著微信小程序的出現, 一些商家就發現
了商機, 微信小程序的應用就隨機而來。 本文的研究內容就
是基于微信小程序的美食點餐推薦系統, 本文用到的算法就
是目 前較為經典的協同過濾算法, 即通過系統來分析與當前
用戶相似的用戶的瀏覽行為和點擊率來預測當前用戶的潛在
飲食偏好進而產生推薦。
1 推薦算法
本文用到的推薦算法主要是協同過濾算法。 協同過濾推
薦是目前最成功也是應用最為廣泛的推薦算法
[2] 。協同過濾從
標題就可以看出是指尋找與你有相同興趣愛好的群體, 把少數
不同的觀點過濾掉, 把一些相同的信息推薦給感興趣的用戶。
這類算法的數據源主要是來自用戶的行為數據 [ 3 ] , 包括網頁瀏
覽、購買、點擊、評分和評論等, 這些數據能夠真實有效地反映
出用戶對物品的感興趣程度, 因此用它來進行推薦, 效果要比
其他類型的推薦算法在性能上要好。
(1)構建評價矩陣。 想要找到鄰居用戶的關鍵是找到最
近鄰居, 也就是計算出用戶與用戶之間的興趣相似度, 如果
要計算兩個用戶之間的相似度首先需要獲取這兩個用戶所
有的評分項, 按照相似性度量計算產生相似性數據。 用戶
u、 v 間的相似性可以用 sim ( u,v ) 來表示, 如下表所示, 如果
將每一個用戶對全部推薦對象評分用 m 維的向量表示, 這
樣就可以用不同的 m 維向量之間的相似度來度量用戶間的
相似度。
(2)相似度計算。 本文采用的是修正余弦相似度, 其計算
方法如下所示:
(1)
其中, I u,v 代表的是用戶 u、用戶 v都評過分的項目的集合,
I u 、I v 分別代表的是用戶 u、用戶 v各自評過分的項目的集合,R u,c 、
R v,c 分別代表的是用戶 u、 用戶 v 對項目 c 的評分, R u 、 R v 分別
代表的是用戶 u、用戶 v 各自對項目 的評分的平均值。
( 3 ) 計算鄰居用戶。 根據公式(1)計算得到的結果, 將與目
標用戶相似度最高的前 N 位用戶作為目 標用戶的最近鄰居,
其中 N 的值是可以自己設定的。
( 4 ) 產生推薦。 通過相似度的計算可以得到目 標用戶的最
近鄰居集, 設 Nu 為用戶 u 的最近鄰居集, 那么用戶 u 對預測
項目 c 的評分 P u,c 可利用用戶 u 對集合 N u 中項目評分來求得,
計算方法如下:
(2)
上式中的 sim ( u,v ) 代表的是用戶 u、 用戶 v 的相似性, R v,c
代表的是用戶 v 對推薦項目 c 的評分。R u 、R v 表示用戶 u 和用
戶 v 對于推薦項目 的平均評分。
通過此方法就可以預測用戶對所有沒有評分的推薦項目
的評分,最后以預測評分的高低點餐小程序, 選擇分數最高的 N個結果反
饋給用戶。
協同過濾算法主要分為 4 個步驟來進行推薦: 構建評分
矩陣、相似度的計算、尋找鄰居用戶集及推薦。 本文結合美食
自身的特點, 對算法在推薦的時候加入了時間函數以及菜品
搭配。
2 美食點餐推薦系統的設計與實現
2.1 美食點餐推薦系統功能結構設計
美食點餐推薦系統分為用戶展示模塊、 服務器管理模塊
以及廚房顯示模塊。根據用戶展示模塊的功能需求以及特點,
用戶展示模塊主要包括的功能模塊有會員管理模塊、 菜品查
詢模塊、菜品瀏覽模塊、菜品推薦模塊、訂餐車模塊、及訂單查
詢模塊、 留言板模塊。 根據服務器管理模塊的功能需求以及
特點, 服務器管理模塊主要包括的功能模塊有管理員信息管
理模塊、會員信息管理模塊、菜品管理模塊、訂單管理模塊、留
言板管理模塊、 餐位管理管理模塊。 根據廚房顯示模塊的功
能需求以及特點, 主要包括菜單顯示模塊、 菜品分類模塊、 菜
品顯示模塊。
圖 1 系統整體功能結構圖
2.2 美食點餐推薦系統功能模塊設計
(1)美食點餐推薦系統用戶展示端設計。 本文的用戶端設
計主要是基于微信小程序的, 通過微信小程序展示給用戶。用
戶展示模塊的功能主要是用戶遍歷推薦表進行菜品推薦, 菜
品瀏覽以及查詢, 加入訂餐車點餐, 瀏覽菜單, 生產訂單。 訂
單提交之后還可以查詢訂單的處理進度: 包括訂單已提交、餐
館已接單以及廚房已接單, 在餐館還沒有接單之前可以取消
訂單。 菜品推薦, 這是本系統的關鍵模塊, 對于注冊用戶與未
注冊用戶推薦的方式是不一樣的, 對于注冊用戶,系統會自動
結合該用戶的個人注冊信息點餐小程序, 查詢菜品的記錄, 歷史訂單信息,
訂餐車信息以及當前的菜品瀏覽的行為信息進行個性化的推
薦; 對于未注冊用戶, 系統只能根據其當前的瀏覽和查詢行為
進行推薦。 對于訂單就是只有在登錄后的用戶才可以提交,
提交之后還可以查詢訂單, 可以看到訂單的處理進度。
(2) 美食點餐推薦系統服務器端設計。 本文的服務器端主
要是采用 框架進行設計的。 服務器端的功能主要
是對點餐信息進行統計分析與處理,實現菜品推薦算法,生成推
薦表, 用戶端訪問的時候遍歷推薦表進行菜品推薦。 再就是餐
位的信息管理、訂單信息以及向廚房顯示端自動發送點餐信息。
(3)美食點餐推薦系統廚房顯示端設計。 本文的廚房顯示
端主要是根據提交訂單時的時間還有菜品的分類進行智能排
序和顯示。 廚師可以根據顯示的菜品進行準備, 這樣更加方
便也不會出錯。
2.3 美食點餐推薦系統數據庫設計
美食點餐推薦系統需要存儲大量的用戶訂單信息, 根據
業務的需求, 建立具體的數據庫表如下: 菜品信息表, 該表
包括菜品信息、菜品名稱、菜品價格、菜品推出時間、菜品圖片
以及備注。 菜品分類表該表包括菜品類別名稱以及添加時
間。 用戶注冊表, 該表包括用戶名稱、用戶密碼、用戶性別、
用戶飲食偏好等。 用戶訂單信息表, 該表包括用戶名稱、菜
品名稱、菜品數目 、訂單時間、應付款等。 訂餐車記錄表, 該
表包括添加訂餐車的時間, 添加的菜品等。 用戶菜品瀏覽
記錄表, 該表包括用戶名稱、 菜品名稱、 瀏覽時間。 用戶菜
品查詢記錄表, 該表包括用戶名稱、菜品名稱、查詢時間、查詢
內容。 餐桌信息表, 該表包括餐桌號、餐桌的狀態。 留言
信息表, 該表包括用戶名稱、 留言內容等。 管理員表, 該表
包括管理員名稱、管理員密碼、性別、職稱。 廚師信息表, 該
表包括廚師名稱、廚師密碼、廚師編號、性別等。
2.4 美食點餐推薦系統的實現
本系統主要是有用戶展示端、 服務器管理端和廚房顯示
端 3 部分構成的。 其實現流程主要是: 用戶通過在展示端對
菜品瀏覽、菜品查詢以及菜品推薦這些模塊進行操作, 然后選
擇自己喜歡的菜品加入到訂餐車, 在此之前需要先登錄才可
以進行此操作, 進入訂餐車, 可以對餐車里的菜品進行刪除,
增減數量操作, 確定沒有問題之后提交訂單, 訂單提交之后可
以查看訂單的處理進程, 包括餐廳已接單, 廚房已接單等, 在
餐廳還未接單之前可以取消訂單。 然后餐廳管理員或者系統
管理員會對于訂單進行接單操作, 接單之后將會傳從至廚房
顯示端, 由廚師點擊確認訂單。
圖 2 系統流程圖
圖 3 菜品推薦流程圖
3 結語
綜上所述, 本文設計的基于協同過濾的微信美食點餐推
薦系統, 不僅是對大數據時代海量的數據信息進行整合, 而且
達到了使用工具與技術為人類服務的本質目 的。 利用微信小
程序的方便快捷吸引用戶, 根據用戶的歷史點餐記錄、查詢菜
品記錄以及用戶當前的瀏覽記錄來進行評分構建用戶—菜品
評分矩陣, 然后基于綜合評分矩陣進行推薦排序, 最終推薦結
果將以移動的方式推送給用戶, 實現了菜品的動態推薦, 幫助
用戶快速地發現自己喜歡吃的菜品, 同時餐廳也可以發現更
多的客戶, 提高餐廳營業額, 達到雙贏的效果。
免責聲明:部分文章信息來源于網絡以及網友投稿,本站只負責對文章進行整理、排版、編輯,出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其內容的真實性,如本站文章和轉稿涉及版權等問題,請作者在及時聯系本站,我們會盡快為您處理。