掌桥专利:专业的专利平台
掌桥专利
首页

一种基于上下文感知重排序的菜品推荐方法

文献发布时间:2024-04-18 19:58:30


一种基于上下文感知重排序的菜品推荐方法

技术领域

本发明属于互联网计算机技术领域,具体而言,涉及一种基于上下文感知重排序的菜品推荐方法。

背景技术

随着移动互联网技术的不断发展和用户基数的不断扩大,信息技术与餐饮行业的结合愈发地紧密,线上餐饮平台的数量也在逐步增加。这种趋势带动了餐饮业的蓬勃发展。消费者得到了更便利的反馈途径,也享受到了更丰富的菜品选择,同时消费者的点餐方式也从传统的纸质化菜单点餐演变成线上APP点餐。但是,面对数量巨大的菜品信息,消费者处在菜品搜索选择时间成本高和平台推荐菜品单一的困境中。

排序是个性化菜品推荐服务中的一个重要模块,有助于用户快速,准确找到适合他们的菜品,解决信息过载的问题,因此如何能够持续、及时、有效地为用户推荐健康且适合的菜品成为了提升用户体验最大的难题。

传统推荐方法主要依赖基于用户和基于内容的协同过滤技术。但难以解决冷启动问题以及处理更加复杂的推荐场景。后来大量的推荐排序的算法被提出,用于优化排名性能,如申请公布号为CN108230009A的中国专利中,提出了一种基于预训练的偏好预测模型,对目标对象的交互行为特征进行偏好预测,从而进行推荐,又如申请公布号为CN104462560A的中国专利中,提出基于局部敏感哈希的随机投影方法,但是这些方法在推荐系统中排名时只考虑用户—项目对的特性,而不考虑候选排序列表中其他项目的输入。申请公布号为CN106897419 A的中国专利中,采用对级排序学习技术,学习用户-物品的偏序关系。尽管成对级和列表级排序学习的方法试图通过将项目偏序对或项目列表作为输入来解决问题,但是只专注于优化损失函数,没有明确地对特征空间中项目之间的相互影响进行建模。

发明内容

本发明的目的在于建模列表中任意物品之间的相互影响,提供一种基于上下文感知重排序的菜品推荐方法。

本发明所采用的具体技术方案如下:

本发明提供了一种基于上下文感知重排序的菜品推荐方法,其包括:

S1、通过训练初排序算法模型,获得线上餐饮平台中每个用户的用户向量和该用户的候选菜品列表中每个候选菜品的菜品向量;将每个用户和其对应的候选菜品排列组合后,每个组合将各自的用户向量和菜品向量进行连接形成组合向量;针对线上餐饮平台中的每个用户,将其与各候选菜品的组合向量输入所述初排序算法模型中计算得分,并将该用户的候选菜品按照得分进行初次排序,得到每个用户对应的候选菜品初排序列表;

S2、针对目标用户,按照对应的候选菜品初排序列表中的排序,将用户向量和菜品向量的组合向量按序输入重排序算法模型中,先用预训练编码模型对候选菜品初排序列表中的每个候选菜品对应的组合向量进行进行编码并得到第一编码向量,再对目标用户的候选菜品列表进行编码得到第二编码向量,然后通过多重解码器对每个候选菜品的第一编码向量和第二编码向量进行解码和融合,得到每个候选菜品的重排序得分,最后根据重排序得分对所述候选菜品初排序列表重新进行排序,得到用于推荐的最终候选菜品列表。

作为优选,所述初排序算法模型中包含候选菜品编码模块、用户编码模块和预测模块;

所述候选菜品编码模块用于生成每个菜品的完整表征向量,其生成方法如下:

S11、针对每个用户的候选菜品列表中的每个菜品,将菜品标题和商家名称分词后得到的词元进行连接,得到第一词元组;针对第一词元组,将各词元初始化为词向量送入Bert预训练模型中转换为词嵌入

S12、针对每个用户的候选菜品列表中的每个菜品,将菜品介绍分词后得到的词元进行连接,得到第二词元组;再按照与第一词元组相同的编码方法,得到菜品介绍的表征向量r

S13、针对每个用户的候选菜品列表中的每个菜品,将菜品和商家的分类信息转换为向量,并通过带有ReLU激活函数的单层MLP得到分类向量表示r

S14、针对每个用户的候选菜品列表中的每个菜品,将菜品名称的表征向量r

所述用户编码模块用于生成每个用户的用户表征向量,生成方法如下:

针对每个用户,获取用户的候选菜品列表,对每个菜品分别获得其完整表征向量r,再将各菜品的完整表征向量r通过个性化注意力机制进行加权,得到最终的用户表征向量u;

所述预测模块用于将每个菜品的完整表征向量r和每个用户的用户表征向量u通过点积运算,得到对应菜品和用户组合的得分,所有组合的得分经过softmax归一化后得到推荐得分,以代表该菜品相对于该用户的推荐程度。

作为优选,所述每个用户的候选菜品列表,基于当前时间以及用户所在位置,按照预设的时间范围和空间范围召回平台上已曝光的候选菜品,从而形成用户的候选菜品列表。

作为优选,训练所述初排序算法模型时,需根据用户对于菜品的点击情况,从未点击菜品中随机抽样K个负例,从已点击菜品中随机抽样1个正例,从而组成二分类数据元组,输入所述初排序算法模型中预测唯一的正例来实现模型训练。

作为优选,所述菜品和商家的分类信息包括菜品的口味类别、商家所在位置距离用户所在位置的远近分级、商家的已开店年数和商家的打分。

作为优选,所述重排序算法模型包括编码器和解码器;

所述编码器采用BERT编码结构,先将候选菜品初排序列表中的每个候选菜品对应的组合向量按序构建为输入矩阵E′,然后将位置编码嵌入到输入矩阵中,再经过一层前馈神经网络后形成编码器的输出矩阵E,输出矩阵E中的每一行对应于一个候选菜品的菜品级表示向量o

所述解码器中,对于用户和每个候选菜品,将候选菜品的菜品级表示向量o

作为优选,所述重排序算法模型采用Listwise策略进行训练。

作为优选,所述初排序算法模型和重排序算法模型的训练样本获取方式为:先将线上餐饮平台中的日志数据、用户数据、菜品数据处理后存储到关系型数据库中,形成元数据,再根据菜品数据分析和推荐要求基于元数据构造特征和标签,最后划分训练样本和测试样本。

作为优选,所述菜品推荐方法部署上线后,需结合非个性化推荐策略和兜底策略进行辅助推荐。

作为优选,所述非个性化策略,用于直接将用户的历史点击菜品向量和候选菜品向量做相似度计算,然后进行排序,返回给用户;所述兜底策略,用于将菜品内容按照经过贝叶斯平滑后的最近曝光点击率进行排序,然后返回给用户。

相对于现有技术而言,本发明具有以下有益效果:

1.基于初排和重排的架构,明确地对特征空间中项目之间的相互影响进行建模,取得更好的菜品推荐效果。

2.在初排序上利用了multi-view的注意力机制,使用了菜品的名称、类型特征以及菜品介绍三个方面的信息,并通过菜品结合注意力机制来进行用户建模,使得模型对用户和菜品的表征更加充分

3.使用Transformer网络对项目之间的依赖关系以及用户和项目之间的交互进行编码,在列表级上对菜品进行重排序,以此提高排名的性能。

附图说明

图1为本发明一种基于上下文感知重排序的菜品推荐方法的步骤图;

图2为本发明中的初排序算法模型结构图;

图3为本发明中的重排序算法模型结构图;

图4为实施例中的方法流程图。

具体实施方式

下面结合附图和具体实施方式对本发明做进一步阐述和说明。本发明中各个实施方式的技术特征在没有相互冲突的前提下,均可进行相应组合。

本发明提供了一种基于上下文感知重排序的菜品推荐方法,能够结合上下文信息对特征空间中项目之间的相互影响进行列表级建模,从而为推荐任务提供更多有效信息,提高菜品推荐的效果。如图1所示,该基于上下文感知重排序的菜品推荐方法的具体实现过程如下:

S1、通过训练初排序算法模型,获得线上餐饮平台中每个用户的用户向量和该用户的候选菜品列表中每个候选菜品的菜品向量;将每个用户和其对应的候选菜品排列组合后,每个组合将各自的用户向量和菜品向量进行连接形成组合向量;针对线上餐饮平台中的每个用户,将其与各候选菜品的组合向量输入所述初排序算法模型中计算得分,并将该用户的候选菜品按照得分进行初次排序,得到每个用户对应的候选菜品初排序列表。

在本发明的实施例中,上述初排序算法模型中包含候选菜品编码模块、用户编码模块和预测模块,如图2所示。

上述候选菜品编码模块用于生成每个菜品的完整表征向量,其生成方法如下:

S11、针对每个用户的候选菜品列表中的每个菜品,将菜品标题和商家名称分词后得到的词元进行连接,得到第一词元组;针对第一词元组,将各词元初始化为词向量送入Bert预训练模型中转换为词嵌入

S12、针对每个用户的候选菜品列表中的每个菜品,将菜品介绍分词后得到的词元进行连接,得到第二词元组;再按照与第一词元组相同的编码方法,得到菜品介绍的表征向量r

S13、针对每个用户的候选菜品列表中的每个菜品,将菜品和商家的分类信息转换为向量,并通过带有ReLU激活函数的单层MLP得到分类向量表示r

S14、针对每个用户的候选菜品列表中的每个菜品,将菜品名称的表征向量r

上述用户编码模块用于生成每个用户的用户表征向量,生成方法如下:

针对每个用户,获取用户的候选菜品列表,对每个菜品分别获得其完整表征向量r,再将各菜品的完整表征向量r通过个性化注意力机制进行加权,得到最终的用户表征向量u;

上述预测模块用于将每个菜品的完整表征向量r和每个用户的用户表征向量u通过点积运算,得到对应菜品和用户组合的得分,所有组合的得分经过softmax归一化后得到推荐得分,以代表该菜品相对于该用户的推荐程度。

另外,上述每个用户的候选菜品列表,需要基于当前时间以及用户所在位置,按照预设的时间范围和空间范围召回平台上已曝光的候选菜品,从而形成用户的候选菜品列表。

在本发明的实施例中,训练上述初排序算法模型时,需根据用户对于菜品的点击情况,从未点击菜品中随机抽样K个负例,从已点击菜品中随机抽样1个正例,从而组成二分类数据元组,输入所述初排序算法模型中预测唯一的正例来实现模型训练。

在本发明的实施例中,上述菜品和商家的分类信息包括菜品的口味类别、商家所在位置距离用户所在位置的远近分级、商家的已开店年数和商家的打分。

S2、针对目标用户,按照对应的候选菜品初排序列表中的排序,将用户向量和菜品向量的组合向量按序输入重排序算法模型中,先用预训练编码模型对候选菜品初排序列表中的每个候选菜品对应的组合向量进行进行编码并得到第一编码向量,再对目标用户的候选菜品列表进行编码得到第二编码向量,然后通过多重解码器对每个候选菜品的第一编码向量和第二编码向量进行解码和融合,得到每个候选菜品的重排序得分,最后根据重排序得分对所述候选菜品初排序列表重新进行排序,得到用于推荐的最终候选菜品列表。

在本发明的实施例中,上述重排序算法模型包括编码器和解码器;

所述编码器采用BERT编码结构,先将候选菜品初排序列表中的每个候选菜品对应的组合向量按序构建为输入矩阵E

所述解码器中,对于用户和每个候选菜品,将候选菜品的菜品级表示向量o

在本发明的实施例中,上述重排序算法模型可采用Listwise策略进行训练。

在本发明的实施例中,上述初排序算法模型和重排序算法模型的训练样本获取方式为:先将线上餐饮平台中的日志数据、用户数据、菜品数据处理后存储到关系型数据库中,形成元数据,再根据菜品数据分析和推荐要求基于元数据构造特征和标签,最后划分训练样本和测试样本。

另外在本发明的实施例中,上述菜品推荐方法中的推荐模型部署上线后,需结合非个性化推荐策略和兜底策略进行辅助推荐。

下面通过一个具体的示例,来说明上述S1和S2所示的基于上下文感知重排序的菜品推荐方法的具体实现方式。

实施例

在本实施例中,如图4所示,该方法主要有5个步骤,分别为步骤1~5,其中步骤3,步骤4是推荐模块最核心的步骤。各步骤的具体实现方式如下:

步骤1、基于线上餐饮平台中的日志数据、用户数据、菜品数据,处理后存储到关系型数据库中形成模型训练的元数据。

在步骤1中,对线上餐饮平台生产的原始数据处理包含以下几个方面:

数据解析,将非结构化数据处理成结构化数据,比如对日志文件去除无效字符、标点符号、HTML标签,可以使用正则表达式等方法提取用户行为关键信息。

审核,去除无效数据和异常数据,比如一些误操作造成的空白数据等。

数据格式化和归一化,按照数据存储要求完成数据类型转化,依照名称映射表,规范菜品名称,菜品名称的规范基于BM25、LDA、公共子序列匹配融合方法,规范名称。

对于文本类信息进行分词,去停用词,构建词表,其中分词可以采用开源的jieba库,停用词也可以基于Baidu公司整理的开源词表,并在其中添加菜品相关的停用词。

步骤2、根据菜品数据分析和推荐要求,并基于上游数据构造特征,标签,划分训练样本,测试样本。

在本实施例中步骤2采用以下几个子步骤完成:

步骤21、将预处理后的元数据,转化为可供下游使用的用户集,和菜品集。用户集包含用户的画像信息,用户行为信息两部分内容,菜品集包含菜品的基本内容和商家的相关信息。

步骤22、根据原始数据构建特征,基于用户行为数据构建样本标签,选择在过去3天内展示给用户,保留曝光次数大于k的菜品,基于菜品数据,构造菜品名称、菜品介绍、商家打分、菜品分类、菜品口味、商家位置,商家已开业时长等特征。

步骤23、基于特征数据,构造训练样本和测试样本集,用来验证推荐模块的离线效果,并对候选菜品样本基于时间和地理位置进行初步召回,形成每个用户的候选菜品列表,具体的召回方案如下:

a.召回当前时间最近一周还在活跃的商家的菜品,并且累计销量大于1;

b.召回用户当前所在城市的菜品。

步骤3、基于时间,位置等因素进行规则初召回,对候选菜品列表进行初排序,得到用户和菜品的embedding向量。

在本实施例中,上述步骤3采用前述图2所示的初排序算法模型来实现,具体的训练过程和向量生成过程如下:

步骤31、进行菜品表示。在菜品表示阶段,如图2左边的Dishes Encoder模块所示,对于菜品的标题和商家名称分词进行连接表示为

由于不同用户会关注菜品名称中的不同要素,直接平均名称词向量无法充分表达用户倾向。因此,如图2右上角的个性化注意力(Personalized Attention)模型所示,需要将每个用户的ID映射成一个向量e

其中V

基于注意力对token进行加权平均就得到了菜品名称的表征向量r

按照同样的道理,本实施例对菜品介绍也按照同样的方法进行表征,得到表征向量r

对于类别特征映射层将分类信息从one-hot分类向量转化为lookup向量

r

其中V

最后本发明通过一层单层MLP以及一个共同的询问向量q

基于注意力得分计算最终的菜品向量表示方法如下:

r=α

步骤32、在用户表示阶段,如图2右下角所示,因为一个用户的交互历史是由多个菜品组成的,通过对多个菜品计算注意力及加权组成最后的用户表示,就可以完成用户模块的建模,得到用户表征向量u,具体的过程和计算菜品向量类似,基本过程为:

1)获取用户历史点击过的菜品列表,对每个菜品分别按照S31获得其菜品向量r;

2)将各菜品向量r输入Personalized Attention模型,得到最终的用户表征向量u。

步骤33、最后在训练初排序算法模型时,在预测层通过K个负例(randomlysampled)及数据集中的正例组成一个K+1路二分类数据元组,采用softmax进行预测唯一正例,进行训练。预测层的输出表示为:y

初排序算法模型训练的损失函数可表示如下:

其中:

最终训练完成后本发明就得到了所有的用户向量和候选菜品的菜品向量,把用户向量和每个候选菜品向量连接,并按照得分对所有候选菜品进行排序,形成每个用户对应的候选菜品初排序列表。对应的,按照候选菜品初排序列表中的每个候选菜品对应的组合向量按序组合即可构建为输入矩阵E′。由此,发明就得到了本接下来用作重排序的输入矩阵。对于第i个用户,其用户向量u

步骤4、利用步骤3生成的用户和菜品向量,对初次排序后的列表基于上下文排序方法进一步进行重排序,得到最终的排序结果。

在本实施例中,上述步骤4采用了前述图3所示的重排序算法模型,训练该重排序算法模型并进行重排序的具体过程如下:

将初次排序后列表进一步进行重排,以建模列表上下文对排序的影响,我门将得到的嵌入矩阵E′,将位置编码PE嵌入到输入矩阵中,具体计算如下:

经过一层前馈神经网络后本发明将E″变换为E:

E=E″W

在编码层,本发明采用类似BERT编码结构,因为BERT使用了多层Transformer的编码器,与基于RNN的方法相比,具有强大的编码能力,具体的编码过程如图3所示,做法是:用BERT对每个用户和候选菜品的组合(对应于E的一行)进行编码,得到编码向量o(第i个候选菜品的编码向量o可记为o

在经过编码器编码后,得到每个用户和候选菜品的菜品级表示向量o

φ

φ

φ

最终的解码后的重排序得分计算方法如下:

最后,本发明通过重排序的得分对排序列表进行调整得到最终展示给用户的排名列表。

步骤5、将模型部署上线,辅助非个性化推荐策略和兜底策略,完成线上的展示,并且定期根据最新数据迭代模型。

在本实施例的上述步骤5中,将模型部署上线后,可以辅助非个性化推荐策略和兜底策略,相关的非个性化推荐策略和兜底策略如下:

a.非个性化策略直接将用户的历史点击菜品向量和候选菜品向量做相似度计算,然后进行排序,返回给用户。

b.兜底策略,将菜品内容按照最近曝光点击率进行排序,然后返回给用户。其中,曝光点击率需要经过贝叶斯平滑,以增强曝光点击率的置信度。

最后本发明依靠定时子任务完成离线训练,抽取特定的数据文件,训练推荐模型,最后更新到线上服务中去,使得模型保持稳定持续的推荐效果。

以上所述的实施例只是本发明的一种较佳的方案,然其并非用以限制本发明。有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型。因此凡采取等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。

相关技术
  • 一种基于Apriori算法的酒店畅销菜品推荐方法
  • 一种基于菜品识别的健康菜品推荐系统和方法
  • 一种基于数据挖掘及分析的菜品推荐系统及菜品推荐方法
技术分类

06120116498972