京东搜索算法,京东基于强化学习的电商搜索排序算法(苗大东)

科技资讯 投稿 53200 0 评论

京东搜索算法,京东基于强化学习的电商搜索排序算法(苗大东)

电商场景的搜索排序算法根据用户搜索请求,经过召回、粗排、精排、重排与混排等模块将最终的结果呈现给用户,算法的优化目标是提升用户转化。传统的有监督训练方式,每一步迭代的过程中优化当前排序结果的即时反馈收益。但是,实际上用户和搜索系统之间不断交互,用户状态也在不断变化,每一次交互后排序结果和用户反馈也会对后续排序产生影响。因此,我们通过强化学习来建模用户和搜索系统之间的交互过程,优化长期累积收益。

目前这个工作已经在京东全量上线。

  • 搜索排序场景及算法概述

  • 强化学习在搜索排序中的建模过程

  • 基于RNN用户状态转移建模

  • 基于DDPG的长期价值建模

  • 规划与展望

搜索排序场景及算法概述

强化学习在搜索排序中的建模过程

在搜索场景下强化学习的建模过程如上图所示,当用户(即强化学习中的environment)发起一次搜索请求时,我们的排序引擎会基于当前用户的状态,选取一个排序动作(排序动作即为对候选商品进行打分)并将排序结果呈现给用户。用户在看到排序结果后会做出一系列反馈,如下单或者点击。此时,用户的状态会发生变化,排序模块会收到用户的反馈(即奖励)。排序模块收到奖励之后会对策略进行迭代优化,进而在收到下一次用户请求时会基于新的用户状态和排序策略进行下一步动作的执行。

  • 对状态的建模,使用RNN来表征用户的状态以及用户状态的转移;

  • 对用户长期价值,使用DDPG进行建模。这一步需要以RNN状态转移建模作为基础,结合动作设计、奖励设计以及算法的选择来完成。

基于RNN的用户状态转移建模

数据层面:用户搜索query的时序数据;

架构层面:因为涉及到用户在线的状态更新,所以会有加入用户状态实时增量更新的一个通路。

1. 数据层面

首先,我们会把用户在一个搜索session下所有的曝光商品结合在一起(无序的);然后,用户的搜索session会按照时间进行排序,并将其放入用户索引下。

2. 模型层面

3. 架构层面

  • 离线训练:我们会把训练好的模型导出成两个部分,一部分是用户历史状态的表示,它可以作为特征提供至线上进行使用;另一部分是模型所有参数,它用于线上模型的打分。

  • 线上服务:当用户发起一次搜索请求时,系统会拿到当前待排序的所有商品以及用户的embedding表示。我们将这两部分输入传递给模型,得到模型对候选商品的打分以及RNN的状态向量。随后我们会将返回的feature以及商品的打分做持久化存储。

  • 在线增量更新:增量更新时会将用户的实时反馈(点击或者下单行为)与持久化的样本特征进行join,之后使用ID作为索引更新当前用户的状态,最终同步至特征服务器上。在用户embedding同步完毕后,下一次用户请求时就已经可以使用新的用户状态,这样就完成了用户状态的在线增量更新,避免了线上使用用户历史行为序列重复计算用户状态。

基于DDPG的长期价值建模

首先我们基于搜索任务设计动作空间,然后基于用户的搜索行为使用前述的RNN模型进行状态建模,接着我们会基于搜索排序的优化目标设计奖励,最后基于整个策略迭代的收敛性和稳定性选择相应的学习算法。

此外,在比较交叉熵reward以及sigmoid reward时,我们发现交叉熵reward一直是一个负值,而具有正值收益的sigmoid reward相较于前者有了0.16%的指标提升。

  • 基于策略:直接对策略进行建模,让策略不断地朝着长期价值最大的方向进行迭代,最终输出长期价值最大的策略/动作。策略可以理解为使基于输入用户状态,对候选的商品进行直接打分;

  • 基于长期价值:典型的模型是DQN。当长期价值最大的时候,其对应的策略也是最优的。但是DQN无法解决连续的动作空间,只能建模离散的动作空间;

  • Actor-critic:Actor负责对策略或者动作进行建模,Critic负责评价Actor生成的策略或者动作的长期价值。

我们在线上分别对这第一、第三种方式进行过实验,最后发现Actor-critic的建模方法效果较好,于是选择使用这种框架进行算法迭代。

  • ** State网络**:使用RNN进行用户状态转移建模;

  • Actor网络: 使用State网络生成的状态向量作为输入,输出对候选商品的打分(即action);

  • Critic网络:使用State网络生成的状态向量以及Actor网络生成的action作为输入,输出对应的长期价值,并引导Actor朝着长期价值最大的方向进行优化。

整个网络设计了两种损失函数。第一个为PolicyGradient的损失函数,它的作用是优化Actor网络的参数,使得其输出的action的长期价值最大;另一个为时间差分的损失函数,作用是优化Critic网络,使得其可以对Actor输出的动作给出的长期价值的评估越来越准。

另外,我们也尝试增加了一些有监督的辅助损失函数,其也会对指标带来一定的提升。

目前DDPG也在搜索精排中进行了一次全量更新。其实大家也会很担心DDPG在线上的稳定性问题,我们对此也做了很多分析。

另外,我们考虑了不同用户分组上的评测指标,例如将用户按照他的历史搜索次数进行筛选和分组。实验发现,DDPG在用户历史搜索越多时,其对长期价值的建模越准确。这在使用新老用户进行分组实验时也体现了相似的结论,与我们的建模预期吻合。

规划与展

另一方面,在业务层面,京东主站商品和LBS商品(小时购)部署的排序模块是两个独立模型。那么如何对这两种类型的商品进行混排来达到整体收益最大化是我们想要探索的目标。

精彩问答

Q1:Dump feature中包含什么内容?

Q2:请问有没有尝试过offline强化学习的方法?

Q3:请问模型是使用什么方式进行部署的,性能怎么样?

Q4:请问我们的环境是静态数据吗?如果是静态数据,怎么做探索?

Q5:请问有没有考虑过listwise的排序方法?

Q6:请问为什么会设计这种连续的reward函数?

Q7:请问模型在线上会有探索的过程吗?探索的过程是否会造成收益的损失?

A:目前我们的模型是离线训练好后推至线上服务的,并且在一天之内不会进行参数更新,所以也没有线上的探索过程。目前online learning的模型已经全量上线了,之后我们会采用离线预训练好一个模型、在线做探索的方法进行一些尝试。但是,直接去线上做策略探索的话,损失是我们承担不起的,所以一般还是会有一个离线预训练模型,加上线上online learning进行policy的探索。

编程笔记 » 京东搜索算法,京东基于强化学习的电商搜索排序算法(苗大东)

赞同 (76) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽