搜索引擎进行信息检索的优化策略方法(京东线性电商搜索引擎的架构及在线框架(一)——电子商务搜索)

优采云 发布时间: 2022-03-07 20:10

  搜索引擎进行信息检索的优化策略方法(京东线性电商搜索引擎的架构及在线框架(一)——电子商务搜索)

  01

  背景介绍

  电子商务搜索是京东等电子商务的重要组成部分。用户通过搜索找到自己需要的产品,然后下单购买。典型电子商务搜索引擎的架构包括三个重要组件:查询理解、召回和排序。

  

  我们分别介绍它们,基于向量检索召回和商品排序:

  02

  向量召回

  向量检索作为一种信息检索方法,在业界得到了广泛的应用,它可以解决传统倒排检索无法解决的问题。Inverted 通过文字匹配召回产品。这种方法有一个缺陷。无法召回字面不匹配但语义相似的产品。例如,query='2-3 岁婴儿玩具' 无法召回 sku='Thomas Little优采云'。

  

  通俗的讲,就是训练一个模型,将query和sku映射到一个统一的维度空间,在这个维度空间中,同类产品相近,异类产品相距更远。如上例所示,query=奶粉。在高纬度空间,奶粉产品比鞋子、衣服、手机更容易被查询。这是建模过程,为查询和 sku 生成矢量数据。

  我们得到了query和sku的向量,下一步就是检索并返回最接近query的topK sku。数据库的商品数量非常多,通常在亿级,不可能做线性遍历。考虑到时效性,将介绍快速向量近似检索方法,如KDTree、TDM、LSH、PQ、HNSW等,我们使用的PQ算法在此不再赘述。网上有很多资料介绍它的算法。下面重点介绍我们的模型和在线检索框架。

  在模型方面,我们不仅需要考虑query-sku的相关性,还要对用户行为进行建模。同一查询为不同用户和同一用户在不同时间检索到更个性化的产品。我们正在使用 DPSR(Deep Personalized and Semantic Retrieval)算法,该模型集成了个性化和搜索语义信息,我们的论文已通过 SIGIR2020 收录 的批准。

  1. 检索系统概览

  

  总体来说,离线模型是一个两塔模型结构,query和sku各有一个模型塔。查询端包括查询令牌、用户配置文件和用户历史事件等功能。Sku端包括title token、brand、category、shopid等特征。

  离线索引(offline indexing),使用sku塔,导出sku的embedding来构建QP索引。

  在线服务(online serving)使用查询塔,模型加载到tensorflow服务中,嵌入在线预测查询。

  2. 模型详细设计

  ① 两塔模型架构

  上面介绍了模型结构,一个查询塔Q,一个sku塔S,对于给定的query=q,sku=s,模型计算过程为:

  f(q,s)=G(Q(q),S(s))

  Q(q)∈Rd×m 表示查询的嵌入

  S(s)∈Rd×m表示sku的嵌入

  G代表打分计算函数,如内积、L2距离等。

  双塔模型训练完成后,query和sku模型相对独立,我们可以分别计算。所有 sku 嵌入都是离线计算的,用于快速构建向量检索索引。尽管模型彼此独立,但在查询和 sku 之间使用了简单的点积计算。理论上,query 和 sku embedding 仍然在同一个几何空间中,具有可比性。

  ② 多头查询塔

  我们看到左边的塔和右边的塔不同:投影层和多头,目的是为了丰富查询端的信息。如下图,不同的head可以捕获不同的query语义(query=apple,语义可以是手机和水果),捕获不同的品牌属性(query=mobile,品牌可以是华为、小米),抓取不同的产品属性(query=Samsung,产品属性可以是笔记本、手机)等等。

  

  ③ 注意力缺失

  多头允许查询生成多个嵌入和 sku 嵌入来计算分数。我们使用注意力损失进行模型优化。

  我们将query的多个embeddings标记为Q(q)={e1,e2,...,em},其中ei∈Rd,Sku的embeddings为S(s)=g,g∈Rd,Query和sku分数的计算是如下:

  

  其中 β 是 softmax 热参数。假设D代表训练期望,r(qi,si+)为正样本,r(qi,si-)为负样本,模型优化的损失可以表示为:

  

  ④ 负采样

  我们使用用户点击数据,数据量为10亿作为正样本。负样本没有使用同一会话中未点击的样本,因为搜索手机显示的是小米和华为手机,不能说未点击的产品是无关产品。负样本分为两部分:随机负样本和批量负样本。我们添加了一组超参数来调整两者的比例。据观察,随机负数越多,召回产品的受欢迎程度越高,用户点击下单的吸引力越大,但会降低产品与检索查询之间的相关性。

  

  模型训练算法如下:

  

  3. 训练优化

  我们也尝试过更强大的神经网络,比如RNN、transform等,效果差不多或者稍微好一点。但是,短延迟模型更适合工业生产建模,可以使用更少的服务器进行高效的离线训练和在线服务。

  在模型系统方面,我们也做了一系列的训练优化,简单介绍一下:

  

  4. 语义检索效果展示

  语义搜索上线后取得了不错的体验,不仅提高了转化率,而且在长尾流量中查询重写率降低了近10%,这意味着用户无需多次重写查询次以获得所需的产品结果。

  

  03

  商品分拣

  以下是产品顺序:

  商品分类主要是根据用户的输入对商品进行评分和分类。传统的商品排序方法使用xgboost等基于决策树的方法从数据中学习,但这些模型通常具有成百上千个数值人工特征,无法有效地从用户历史点击购买数据等原创特征中提取数据,商品文本。并直接从图像中学习。近年来,深度学习在各种应用中验证了从原创特征学习的有效性,并在业界广泛使用,如wide&deep、DIN等。下面是我们在产品搜索排名中尝试的一种方法。

  1. 双胞胎网络

  我们的训练数据来自用户的搜索日志。通过将用户购买的物品(物品a)与未购买的物品(物品b)在同一会话中配对,并使用购买的物品作为最终学习标签,我们构建了用户查询-物品对训练集。

  基于训练数据,我们首先设计孪生网络结构:

  

  孪生网络结构有两个共享参数的模块。每个模块分别输入用户、查询和产品特征。每个模块都使用 ReLU 作为激活函数。最后一层的输出是一个分数,两个模块的差值和数据标签作为熵损失函数的交叉输入。

  在特征方面,我们使用以下不同类型的特征:

  文本特征可以学习一定的相关信息,用户历史行为可以学习个性化信息,我们对id类特征做了预训练。

  2. 个性化升级

  在孪生模型的第一个版本中,我们只是对用户的历史行为进行了 sum pooling,但这缺乏与搜索产品的交互,无法准确地代表用户的兴趣;为了加强用户交互,我们升级了模型的结构,使用候选项目和用户历史项目作为注意力,从而将静态用户嵌入升级为随查询和当前项目变化的用户嵌入。

  我们还添加了 Graph learning 方法来预训练 id 类特征嵌入,然后将其添加到模型训练中。具体方法是利用用户的优质点击行为生成产品图,通过Random Walk生成训练数据,然后使用Skip-gram进行训练。添加id embedding可以提高模型的离线指标和收敛速度。

  

  3. 时效优化

  值得一提的是,为了增强排序捕捉变化的能力,提高排序的流动性,我们对特征时效性、模型时效性、在线估计校准三个方面进行了优化。

  搜索排序是商品检索最重要的模块之一。我们在个性化、时效化、多目标化的方向上不断迭代,提升分拣体验,提升商品交易量。

  04

  总结

  我们引入语义检索召回和物品排名,部署在京东搜索服务上,取得了不错的效果。我们也在尝试一些业内比较流行的方法,比如GNN、KG、MMoE等方向,也取得了不错的效果。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线