【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档

2024-05-26 13:04

本文主要是介绍【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇发表于2020 WWW 上的会议论文,提出一种MNS方式的负样本采样方法。众所周知,MF方法难以解决冷启动问题,于是进化出双塔模型,但是以双塔模型为基础的召回模型的好坏十分依赖负样本的选取。为了解决Batch内负样本带来的选择性偏差问题,本文提出MNS方法融合了批采样和均匀采样。实验表明,配合这种负样本的采样的双塔模型的召回能力得到了明显提升。

在这里插入图片描述

1. 贡献

  • 本文提出一种新颖的负样本采样方法——MNS (Mixed Negative Sampling),用于缓解训练模型负样本的 selection bias问题。
    [图片]
    在这里插入图片描述

  • MNS这一方法的主要是与之前通用的 batch / unigram sampling methods(这两部分详见后面的介绍) 相比较。

2. 思想

2.1 历史方法

有许多工作在研究基于Embedding的信息检索。其中的典型工作就是MF。

  • MF的关键问题在于冷启动;(i.e. it’s hard for this method to generalize to items that have no user interaction.)
    于是人们想到的方法是利用content feature 去建模,从而避免这种对互动的依赖,从而引出了双塔模型。content feature 范围很广。作者在文中给出了一些示例:For instance, content features of an app could be text descriptions, creators, categories, etc.

2.2 当前方法

新提出的双塔模型(Dual Encoder)方法架构如下:
[图片]
但新的架构又出现了新的问题:大家发现,对于双塔模型来说,其关键在于负样本的选取。
[图片]

其背后的原因是:

  • 正样本(用户参与点击、互动、反馈)很好收集,负样本则很难(一是因为负样本太多,二是因为负样本不直观)。
    之前的负样本采样方法主要是:
    • unigram sampling:
    • batch negatives :【也就是用同一batch类的样本做负样本】
      batch negatives方法存在的问题有:
      (1)训练数据的选择偏差(selection bias)。batch negatives的弊端很明显:因为用同batch内的正样本做为其它对的负样本就会导致负样本选择过于局限的问题(因为正样本要么是新热高时鲜、要么就是质量好的,无法代表用户不想点击的那波负样本)。
      [图片]

(2)采样函数缺少灵活性
batch negatives 方法受限于训练数据的分布,但是这个训练数据又是根据用户的点击得到,很难被直接调整。

同时hierarchical softmax 和 sampled softmax 均不适合训练双塔结构,原因是:

这个地方我没理解。

如果我们将召回问题视作是一个多分类问题,也就是如下表述:
在这里插入图片描述

那么在反向传播更新梯度的时候,就会遇到一个问题——很难在低时间复杂度的情况下计算出梯度;原因见作者在文中给出的一个推导:
在这里插入图片描述

这个推导说明的是:在庞大的语料库中,求出第二项是不切实际的(而这第二项又是更新梯度的关键项)。作者原文用的话是:It is generally impractical to compute the second term over all items in a huge corpus.

综合分析上述种种,本文提出方法:In particular, in addition to the negatives sampled from batch training data, we uniformly sample negatives from the candidate corpus to serve as additional negatives. 该方法简称 MNS。

MNS 的优势在于:

  • 通过引入全局负样本(因为作者使用了均匀负采样),缓解选择偏差问题。
  • 调整采样分布,通过改变额外的负样本的数目。
    MNS的思想简图如下所示:
    [图片]

3. 实验

3.1 实验细节

在这里插入图片描述

3.2 实验结果

实验结果从如下几个方面进行考量:

  • 离线Recall@K指标表明MNS明显地提升了检索质量;在线指标表明带来更多的高质量app安装(本文的场景应该是谷歌play,用于app 推荐)。
  • 在线指标(AB实验)

3.2.1 比较模型性能

观察的结论:

  • Two-tower with Batch Negatives 比 MLP with Sampled Softmax 的效果都要差。Batch Negatives 的这版模型召回了非常多的不相关的长尾app(这也与作者前文所述的 selection bias 相符合。背后的真实原因就是:Low-quality tail apps do not appear as negatives frequent enough.)

3.2.2 取MNS的超参数

前文说到:要对不常见的样本进行采样,那么采多少条呢?实验证明,在作者的这个场景中,取值是8192,这个可借鉴意义不大。

4. 疑问

  • 这里的with various formats 是什么意思?
  • unigram distribution是什么意思?
  • sampled softmax 是什么意思?
    有两篇论文可以参考学习:
  • label is associated with a rich set of content features.

5. 好句分享

  • a body of... 一群…
  • This paper lies in this line of work. 本文就是这一类研究工作之一。
  • Accordingly, sampling batch negatives only from training data will end up with a model lacking resolution for long-tail apps, which seldom appear in the training data.
    end up with 以 … 结束

这篇关于【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004542

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus