营养套餐搭配 搭配套餐代码( 三 )


3.2.1 基于LSTM的套餐搭配模型 套餐生成问题是要从一个商家的所有候选商品集合中提取出多个商品子集,形成方便用户筛选、可直接下单的套餐 。套餐生成的数据源主要是该商家的候选商品信息(如商品的名称、标签、价格、销量等),再结合用餐价格区间、用餐人数等约束条件,以及用户偏好等信息 。最初我们采用了LSTM作为Encoder和Decoder的神经网络进行套餐搭配 。我们基于图谱语义抽取商品语义表示,并输入Encoder的RNN模型 。Encoder编码过程类似于用户翻阅商家候选商品的过程,Encoder端输入菜品名称、菜品标签、菜品的业务属性(价格、销量等),通过LSTM对非标品菜品进行特征抽取 。如下图4所示,每个商品的名称经过Embedding层、CNN+Pooling层提取特征,并同菜品标签、类别的Embedding以及价格和销量等连续特征进行拼接,最终作为Encoder RNN中每步的输入 。

营养套餐搭配 搭配套餐代码

文章插图
图4 Encoder网络结构
Decoder在解码过程中一般依赖一个固定的字典或词典作为候选集,每一步输出候选集中的字、词被选中的概率分布 。对于套餐搭配网络来说,Decoder解码的候选集来源于Encoder输入端商家内的商品列表,而非固定维度的外部菜品词表,Pointer Network是建模这一问题的有效架构 。Pointer Network是基于Seq2seq的扩展,主要解决的是候选集不固定的问题,这一模型架构已被成功应用于抽取式文本摘要,以及旅行商问题、凸包问题等组合优化问题的解决方案中 。
套餐搭配解码的具体过程为,Decoder每一步预估目标菜品来自菜品列表的概率分布 。在第n(n>=1)步时,这个概率分布向量表达了在已经选择了n-1个商品的情况下,某个商品或者终止位被选中的概率 。若终止位对应的概率较大,则模型倾向以前n-1个已选商品形成一个完整的套餐搭配 。解码过程中,我们结合BeamSearch算法产生TopN个结果,保证搭配的多样性 。

营养套餐搭配 搭配套餐代码

文章插图
图5 Encoder-Decoder网络结构
3.2.2 套餐搭配模型的优化 套餐搭配模型的学习目标
为了解决菜品搭配模式因商家而异的问题,模型通过拟合该商家的历史订单来学习商家的搭配特性 。一种较为主流的训练形式是基于商家真实订单,采用Teacher Forcing的形式进行训练,使得模型预测的菜品逐位匹配上真实订单内的菜品 。Teacher Forcing式的训练方法使得预测菜品的概率倾向于0-1分布,但是现实的菜品搭配通常是个性化、多样性的,例如在Decoder已经输出“宫保鸡丁”菜品的基础上,下一步选择的主食为“米饭”或者“炒饭”皆可 。
为此,我们对商家历史成单的套餐搭配模式进行统计,计算出商品选择的概率分布,Decoder以此商品选择的概率分布作为训练目标,同预估的分布计算MSE Loss,并最小化该值指导模型的训练 。Teacher Forcing的另一个问题是较难引入搭配质量、套餐的点击购买行为等外部知识来指导模型训练,为此我们尝试了采用强化学习的思路进行改进 。在解码过程的时刻T,我们通过蒙特卡洛算法采样(Monte Carlo Sampling)出完整的套餐候选,并计算套餐候选的搭配质量分作为Reward,结合MSE Loss和搭配质量分进行模型训练 。
套餐搭配的约束
套餐搭配过程会面临多种业务约束,例如,对于“满减神器”来说,搭配的套餐需要满足给定的满减价格档位 。“智能助手”的套餐搭配过程需要考虑用户选定的筛选条件,例如条件可能为“主食为米饭”且“价格为30元以下” 。我们通过剪枝策略保证搭配过程满足约束,以“满减神器”的价格区间约束为例,Decoder端在单步产生候选菜品时,会基于剩余的价格过滤掉超出剩余价格范围的菜品 。如下图6所示,对于商家的A、B、C、D、E菜品,Decoder会利用剩余价格的区间“15元以内”对后一轮菜品A、B、C、D、E进行剪枝,并删除超过价格区间的C、D两个菜品 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: