唐东平,方民俊,吴邵宇
(华南理工大学,广东 广州 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聚类算法的思想进行算法改良;对特定的情景应该有更具体准确的分类,以提高推荐度。