当前位置: 首页 > news >正文

MARM:推荐系统中的记忆增强突破

文章目录

  • 1. 背景
    • 1.1 模型规模与推荐系统的挑战
    • 1.2 缓存技术在推荐系统中的潜力
    • 1.3 推荐系统中的数据与计算需求
    • 1.4 复杂度对比
    • 1.5 MARM模型的创新性
  • 2. 方法
    • 2.1 流程
      • 2.1.1 序列生成器
      • 2.1.2 外部缓存查找
      • 2.1.3 多目标注意力机制
      • 2.1.4 发结果到缓存
    • **2.2 MARM与SIM**
      • 2.2.1 SIM的两阶段模型
      • 2.2.2 GSU与ESU的协同工作
      • 2.2.3 MARM GSU与ESU的区别
      • 2.2.4 缓存的作用
    • 2.3 MARM支持其他模型
      • 2.3.1 召回模型(Retrieval Model)
      • 2.3.2 级联模型(Cascading Model)
      • 2.3.3 排序模型(Ranking Model)
  • 3. 总结

在学习MARM之前,建议阅读: 快手海外MARM:打开推荐系统的Scaling Law的正确姿势,MARM的一作也是快手与目前我实习所在部门的成员,也是我的二面面试官(真的很厉害),当时面试官问我看过那些印象深刻的文章,我只说了OneRec,毕竟在学校里科研没有那么考虑推荐的效率,都是过分复杂模型,关注模型的准确率了,当时二面面试官说到在实际的推荐场景中,我们都是要尽可能简化模型确保每个模块、数据都不是冗余的,有所受教。

MARM的核心思想是借鉴LLM中的KV缓存机制,通过缓存部分计算结果来加速推荐系统的处理流程,并于SIM结合。之前粗略的看过,趁着假期也来学习一下这篇文章。

MARM文章链接:https://arxiv.org/pdf/2411.09425

SIM文章链接:https://arxiv.org/pdf/2006.05639

1. 背景

1.1 模型规模与推荐系统的挑战

近年来,随着大数据和计算能力的提升,模型规模数据规模的扩展成为了各个领域研究中的重要课题,尤其是在自然语言处理(NLP)、计算机视觉(CV)和推荐系统(RecSys)等领域。OpenAI的Scaling-laws报告指出,随着模型参数数量和数据量的增长,模型的性能通常呈现出幂律增长趋势,这一现象在GPT等大规模预训练模型中得到了广泛应用。然而,这一方法并不能直接应用到推荐系统中,因为推荐系统面临着与NLP等任务截然不同的挑战。

推荐系统与NLP模型在处理数据的方式上有显著差异。NLP任务通常依赖于大量的文本数据语言模型,这些模型可以在数百万甚至数十亿参数的情况下工作。然而,推荐系统则需要应对海量的用户行为数据实时交互需求,这导致了推荐系统在计算效率和数据存储方面面临更为复杂的挑战。在推荐系统中,训练样本的数量模型参数虽然重要,但计算复杂度(即FLOPs)才是性能瓶颈的关键因素。

下图展示了推荐系统中的多任务学习模型,在图中可以看到如何结合多个输入特征来进行预测。推荐系统中的每个任务(如点击、喜欢、评论等)都有对应的关注机制(Attention),并且用户的兴趣序列是通过网络中的Attention模块来提取的。这种架构反映了推荐系统需要处理多种信息,并对其进行学习和预测。

在这里插入图片描述

1.2 缓存技术在推荐系统中的潜力

针对上述问题,本篇文章提出了MARM(Memory Augmented Recommendation Model,记忆增强推荐模型)这一创新方案。MARM通过缓存技术有效降低了推荐系统中计算复杂度的影响,提升了模型的计算效率。该模型的核心思想是通过缓存部分复杂模块计算结果,避免重复计算,从而减少了不必要的计算量。

MARM不仅仅是对传统推荐系统架构的改进,它还通过扩展单层注意力机制,将其升级为多层目标注意力机制,从而在不显著增加计算开销的前提下,充分挖掘了用户的兴趣序列信息。通过这种方式,MARM能够在高效性计算复杂度之间找到一个平衡点,既保证了推荐效果,又有效地控制了资源消耗。

下图反映了在流式训练过程中,通过不同的训练策略(在线基础模型、50%样本下采样和冷启动模型),模型性能随数据量的增加而变化。可以看到,随着数据量的增加,模型性能差距逐渐缩小,尤其是在训练模型已经从冷启动状态转为在线基础模型时,随着时间的推移,性能提升的趋势变得明显。

在这里插入图片描述

1.3 推荐系统中的数据与计算需求

与传统的NLP任务不同,推荐系统面临的另一个核心挑战是数据量庞大实时性要求高。例如,Kuaishou(快手)等短视频平台每天需要处理上百亿条用户行为数据,且每次推送都必须在几毫秒内作出响应。这对计算能力提出了极高的要求。在这种场景下,如何平衡模型的准确性响应速度,以及如何高效地处理海量数据,成为了设计推荐系统时必须解决的关键问题。

下图展示了推荐系统模型与LLM模型在参数分布上的不同。LLM模型的主要参数集中在密集激活的Transformer模块中,而推荐系统模型(如MARM)则将稀疏激活的特征嵌入作为主要的学习参数,体现了推荐系统模型在处理用户行为数据时与NLP模型的差异。

在这里插入图片描述

本篇文章通过引入MARM,提出了一种新型的推荐系统架构,旨在通过缓存机制可扩展的注意力模型来提升推荐系统在计算和存储上的效率,同时不牺牲推荐质量。MARM的设计理念与传统的深度学习推荐模型(如DIN、SIM、TWIN等)相结合,利用缓存存储和层次化的注意力机制,充分利用了历史数据实时数据的组合优势,从而实现了较为理想的性能提升。

1.4 复杂度对比

在这里插入图片描述

在推荐系统的模型中,如何高效地处理序列数据并提取出用户的兴趣点,是设计中的一个核心问题。传统的Masked-Self-Attention机制虽然能够捕捉到更为复杂的序列关系和依赖性,但其计算复杂度(FLOPs)往往较高,尤其在需要处理大规模数据时,这会导致系统性能的瓶颈。因此,如何在保持性能的同时降低计算复杂度,成为了研究的一个重要方向。

如图2中所示,Target-AttentionMasked-Self-Attention在时间复杂度上的差异十分明显。Target-Attention的计算复杂度是O(n * d),其中n表示序列的长度,d表示表示维度。而Masked-Self-Attention则具有更高的复杂度,达到O(n² * d),其中的项使得其计算复杂度随着序列长度的增加而急剧增长。这意味着,虽然Masked-Self-Attention能够更细致地捕捉每个元素之间的关系,但在处理大规模用户序列时,其计算量过大,可能导致系统响应延迟增加,甚至超出系统的处理能力。

图2(b)展示了一个多层Target-Attention机制的示例。相比于单层的Target-Attention,多层结构允许模型在不同的层次上进行处理,每一层都通过先前的层的输出进行改进。这种方式通过逐层传递计算结果,有效避免了高复杂度Masked-Self-Attention的重复计算,且每一层都能捕捉到更深层次的特征关系。

图2(c)则进一步阐明了在更换候选项(如IidXIidY)时,模型如何在保持高效计算的同时,通过不同的Target-Attention层来更新结果,避免了因为重新计算每一层的全部关系而造成的冗余计算。

而MARM的核心思想是,通过缓存部分已计算的结果,减少重复计算,从而降低了复杂度。在文章中,作者指出,MARM通过缓存先前计算的Target-Attention的输出结果,而不是Masked-Self-Attention的结果。Target-Attention的计算复杂度为O(n * d),相较于Masked-Self-Attention,其计算复杂度要低得多。

图2(d)展示了MARM的关键优化:通过缓存Target-Attention计算结果来提高效率。具体来说,当用户的序列很长时,Target-Attention会针对每个新输入进行计算。而MARM会缓存已计算的Target-Attention结果,并在处理新样本时直接查找缓存的结果,从而避免了对已经计算过的部分重新执行计算。通过这种方式,MARM能够以较低的计算复杂度(O(n * d))完成序列建模,同时减少了对计算资源的消耗。

1.5 MARM模型的创新性

MARM的创新之处在于其提出了一种新的缓存扩展法则,通过缓存复杂计算结果,降低了多层注意力机制的计算复杂度,尤其在在线推理的场景下,它能够显著提升推荐系统的响应速度。此外,MARM还能够与多种推荐系统模型兼容,包括检索模型级联模型排序模型,并且能够在现有的推荐系统架构上进行高效集成。

MARM不仅在理论上提出了一种新型的缓存-性能法则,在实际应用中也能够有效解决推荐系统的计算瓶颈问题,为推荐系统领域提供了一个全新的技术路径。

2. 方法

2.1 流程

在这里插入图片描述

图3展示了MARM模型的实时缓存更新与使用工作流程。这张图通过两部分来阐述MARM的操作:模型训练阶段(a)和模型推理阶段(b)。以下是对该图的详细解释。

模型训练阶段(a)

在训练过程中,我们看到缓存存储了用户历史的项目序列,并且随着新的用户交互数据(如Iid6、Iid7、Iid8等)加入,模型会逐步更新这些缓存数据。在每一步中,MARM的多层目标注意力模块(Target-Attention)会处理输入的项目序列并计算相应的输出结果。

  1. 输入项目序列

    每个训练周期开始时,模型会接收用户的最新暴露项目序列,这些项目是用户最近与平台内容互动的结果。例如,在图中,Iid6表示当前用户最近观看的第一个项目。

  2. 模型计算与更新缓存

    MARM通过目标注意力机制计算当前项目(如Iid6)与历史项目(如Iid1到Iid5)之间的关系。在每一层计算完成后,Target-Attention模块将其计算结果存入缓存,并更新缓存中的数据。这一过程有效地减轻了计算负担,并提升了后续推理的效率。

  3. 缓存更新的顺序

    如图所示,Iid6的计算结果被存入缓存后,新的项目Iid7会继续通过类似的计算过程进行处理,最终会被缓存起来用于后续使用。每一个新的项目都会不断扩展当前的暴露项目序列,并将计算结果逐步写入缓存。

模型推理阶段(b)

在推理阶段,MARM依旧利用先前训练时缓存的结果来进行实时推理。在这种模式下,Target-Attention模块的多层结构继续执行目标注意力计算,但此时主要是依赖缓存中保存的历史计算结果来加速推理。

  1. 推理输入

    在推理过程中,模型会接收到最新的项目(如IidY)。此时,这些项目的计算将基于之前已经缓存的历史项目(如Iid1到Iid8)的计算结果。

  2. 缓存的读取与使用

    图中标出了蓝色框,这些框标示了如何将历史计算结果从缓存中提取出来并与新的目标项(如IidY)一起进行计算。在这个过程中,MARM通过从缓存中读取先前计算的结果,避免了重新计算,从而显著降低了计算复杂度和延迟。

  3. 提高推理效率

    MARM通过缓存和重用历史计算结果,在推理过程中能有效减少重复计算。随着项目序列的不断增长,模型逐渐能够根据积累的数据,准确高效地进行实时推理,这对于在线推荐系统的响应速度至关重要。

2.1.1 序列生成器

在MARM模型的工作流程中,序列生成器是第一步,它的作用是为每个用户生成一个最新的项目暴露序列。这个序列代表了该用户在某段时间内与平台内容的交互历史。例如,在推荐系统中,用户的兴趣通常由他们的行为数据(如点击、点赞、评论等)来反映,因此通过生成最新的项目序列,可以捕捉到用户当前的兴趣点。序列生成器利用用户的历史数据,将这些互动按时间顺序排列,生成一个长度为 n n n的用户兴趣序列 [ I i d 1 , I i d 2 , I i d 3 , … , I i d n ] {[Iid1, Iid2, Iid3, \dots, Iidn]} [Iid1,Iid2,Iid3,,Iidn],其中 n n n是序列的长度。这些序列通过模型对用户历史的反馈,帮助模型理解用户的兴趣变化趋势,并为后续的推荐任务提供基础数据。根据文章中描述的内容,序列生成器不仅能够处理用户的交互数据,还能根据需要筛选出符合特定条件的项目,例如,筛选出那些被用户长期观看或反馈的项目,以此更精准地建模用户的长期兴趣。

2.1.2 外部缓存查找

接下来的步骤是外部缓存查找,这个部分的关键在于如何高效地存储和查找历史计算结果。随着MARM模型对每个用户兴趣的逐层建模,序列生成器产生的每个历史项(如项目ID)都可以存储到外部缓存中,以供后续使用。这个缓存存储的内容不仅仅包括用户的ID信息,还包括该用户对某些项目的兴趣表示,通常以“learnable embedding”(可学习的嵌入)形式保存。

在此步骤中,模型首先将当前用户的最新项 I i d Y {IidY} IidY和历史项 [ I i d 1 , I i d 2 , … , I i d n ] {[Iid1, Iid2, \dots, Iidn]} [Iid1,Iid2,,Iidn]的ID通过一种称为SparseFeatureLookUp的方法映射为嵌入表示。这个过程生成的ID表示是由高维的稀疏特征向量构成的,具体而言,这些向量捕捉了用户与项目之间的交互特征。接下来,如果该用户的历史序列已经缓存过,那么我们可以通过一个哈希策略将这些ID转换成缓存中存储的键,进行查找。这一过程的目的是避免重复计算,从而显著减少计算复杂度。缓存查找不仅提升了效率,还能更好地处理大规模数据。具体的查找过程通过公式 [ I i d 1 , I i d 2 , … , I i d n ] = M A R M C a c h e L o o k U p ( [ I i d 1 , I i d 2 , … , I i d n ] ) {[Iid1, Iid2, \dots, Iidn]} = MARMCacheLookUp([Iid1, Iid2, \dots, Iidn]) [Iid1,Iid2,,Iidn]=MARMCacheLookUp([Iid1,Iid2,,Iidn])来完成。

2.1.3 多目标注意力机制

MARM模型的核心之一是多目标注意力机制,这一机制可以有效地对用户兴趣进行建模。不同于传统的单层注意力机制,MARM采用了多层次的目标注意力层,这使得模型能够在不同的深度捕捉到用户兴趣的多维信息。在此过程中,每一层的目标注意力机制不仅关注当前目标项(即推荐的项目)与历史序列中其他项目之间的关系,还能够逐层积累和传递这些信息。

首先,通过公式 I i d Y 1 u i d X = T a r g e t A t t e n t i o n ( I i d Y , [ I i d 1 , I i d 2 , … , I i d n ] ) {IidY1_{uidX} = TargetAttention(IidY, [Iid1, Iid2, \dots, Iidn])} IidY1uidX=TargetAttention(IidY,[Iid1,Iid2,,Iidn])计算出当前目标项 I i d Y {IidY} IidY的初步兴趣表示,这一步的计算涉及到历史项与目标项之间的关系建模。然后,这些表示会被输入到接下来的多层目标注意力层中,例如 I i d Y 2 u i d X = T a r g e t A t t e n t i o n ( I i d Y 1 u i d X , [ I i d 1 , I i d 2 , … , I i d n ] ) {IidY2_{uidX} = TargetAttention(IidY1_{uidX}, [Iid1, Iid2, \dots, Iidn])} IidY2uidX=TargetAttention(IidY1uidX,[Iid1,Iid2,,Iidn]),这样逐层传递的过程使得用户的长期兴趣得以更加丰富地展现。

与传统的自注意力机制不同,MARM通过引入多个层级的目标注意力,不仅能够捕捉用户当前的短期兴趣,还能通过层与层之间的互动,帮助模型更好地理解长期兴趣的变化。与此同时,这种多层结构也能够有效减少计算复杂度,因为每一层的计算都基于先前层级的缓存结果,从而避免了重复计算。

2.1.4 发结果到缓存

在完成目标注意力的计算之后,发结果到缓存是MARM工作流程中的最后一步。通过这一过程,模型会将每一层计算出来的用户兴趣表示保存到缓存中,以便在下次使用时能够快速访问。具体来说,MARM将计算出的结果(例如 I i d Y 1 u i d X , I i d Y 2 u i d X , … , I i d Y L u i d X {IidY1_{uidX}, IidY2_{uidX}, \dots, IidYL_{uidX}} IidY1uidX,IidY2uidX,,IidYLuidX)和其对应的哈希键一起保存到缓存中。这个缓存不仅存储了每一层的计算结果,还为后续可能的查询提供了快速访问路径。

在MARM的训练过程中,缓存的作用是至关重要的。随着用户交互数据的积累和多次训练,缓存中存储的数据量也会逐渐增大,模型能够通过这些历史数据更高效地完成对用户兴趣的建模。每当有新的用户交互数据输入时,缓存中的结果可以快速被查找和使用,这使得整个模型的推理速度得以提高,尤其是在在线推理阶段。通过这一机制,MARM能够在确保准确性的同时,显著减少计算成本和延迟,满足大规模推荐系统对于实时性和效率的要求。

流程伪代码如下:

在这里插入图片描述

输入与输出:

伪代码的输入包括用户ID(UidX)和项目ID(IidY),以及模型的序列长度(n)和深度(L)。输出是更新后的MARM缓存存储。这一过程是通过数据流的方式进行的,即每次输入新的用户交互数据,模型都会进行更新和计算。

1. 序列生成(Line 2–4):

首先,模型需要生成用户的暴露项目序列。这一过程由ExposureSeqGen(UidX, n)实现,它从用户ID (UidX) 中生成一个按时间顺序排列的项目序列 [Iid1, …, Iidn]。其中,n表示序列的长度(即用户过去观看的项目数量)。这部分的目的是为MARM模型提供用户的历史行为数据,作为后续模型计算的输入。

2. 准备MARM输入(Line 5–7):

接下来,MARM准备所需的输入数据。在这一部分,首先通过 ModelSparseFeatureLookUp(IidY) 获取目标项目 IidY 的特征。接着,利用 ModelSparseFeatureLookUp([Iid1, …, Iidn]) 获取用户历史暴露的项目特征。这里,IidY 是当前待预测的目标项目,而 [Iid1, …, Iidn] 则是用户过往的行为序列。

3. 缓存查找(Line 8–9):

在接下来的循环中,模型通过 UserItemDepthHash(UidX, [Iid1, …, Iidn], i) 为每一层计算生成哈希值。这里的 i 表示层数(从1到L),通过这个哈希值,模型可以查找缓存中已保存的历史计算结果。这些结果能够帮助模型加速计算,避免重复计算。

4. MARM正向传播(Line 12–15):

MARM的核心部分是正向传播过程。在这一过程中,模型使用目标项目的ID(IidY)和历史项目的ID(Iid1, …, Iidn)进行目标注意力机制计算(Target-Attention)。通过这种计算,MARM能够有效地捕捉用户的兴趣与目标项目之间的关系。随着层数的增加,计算会递归地进行,通过多层次的目标注意力机制来逐步构建对目标项目的理解。

5. 保存结果到缓存(Line 17–18):

每次计算完后,MARM将得到的结果保存到缓存中。具体来说,UserItemDepthHash(UidX, IidY, [1, …, L]) 会生成一个哈希值来表示当前结果的含义,之后使用 MARMCacheSave 函数将计算结果存储到缓存中。存储的内容包括每一层的计算结果 [IidY1, …, IidYL]。

6. 循环过程(Line 19)

整个过程会持续进行,每当有新的数据流(如新的用户交互数据)进入时,模型就会重复这一流程,进行新的序列生成、计算、缓存查找与更新。这样,MARM模型能够不断更新其缓存,以更高效地进行后续的推荐预测。

2.2 MARM与SIM

介绍了MARM的基础框架,通过基于最新观看的商品序列来建模用户的兴趣。然而,由于序列长度 n n n的限制(约100),这导致早期存储的结果在超出该范围后不再被使用,从而浪费了存储资源。为了更好地解决这一问题,MARM进一步引入了基于搜索的兴趣模型(SIM),以最大化缓存结果的有效性。

在这里插入图片描述

2.2.1 SIM的两阶段模型

SIM(Search-based Interests Model)提出了一种两阶段级联建模方法,以弥补传统MARM的局限性。SIM的基本思想是:

  1. 粗略的通用搜索单元(GSU):通过检索用户的长期历史(例如,超过10,000条数据)来查找与目标商品最相关的商品序列;
  2. 精确的搜索单元(ESU):通过精细化的搜索结果来压缩搜索序列,以获得更精确的用户兴趣,从而精确计算与目标商品的关联。

这两个单元配合使用,通过逐步搜索相关商品,并最终选出最相关的商品序列。图4(a)展示了MARM GSU模块的运作方式,其中每一层模型都在计算过程中搜索与当前目标商品最相关的商品。

2.2.2 GSU与ESU的协同工作

在图4(a)中,给定用户的长期历史序列 [ I i d 1 , I i d 2 , … , I i d 10000 ] {[Iid1, Iid2, …, Iid10000]} [Iid1,Iid2,,Iid10000],MARM GSU模块的目标是为每一层生成最相关的商品序列 [ S i d 1 , S i d 2 , … , S i d K ] {[Sid1, Sid2, …, SidK]} [Sid1,Sid2,,SidK],这些商品将作为输入传递给下游的ESU模块。与MARM模型相似,ESU模块也采用了目标注意力机制来计算与目标商品的关联。

ESU模块的输出是一个包含与目标商品最相关的商品序列的多层级别的结果。为了更加高效地计算,ESU采用了与目标注意力机制相同的参数,确保每一层的计算结果能够有效地支持模型的训练和推理。

2.2.3 MARM GSU与ESU的区别

尽管MARM GSU与ESU都使用了目标注意力机制,但它们的侧重点不同。GSU模块的目标是通过粗略的搜索在用户的长期历史中找到最相关的商品,并将这些商品序列传递给ESU模块进行进一步精细化计算。图4(b)则展示了MARM ESU模块在接收到来自GSU的搜索结果后,如何利用这些结果进行进一步的目标注意力计算。

2.2.4 缓存的作用

MARM与SIM的结合,使得MARM模型不仅能够处理最新的用户行为序列,还能有效地利用用户的历史数据进行兴趣建模。通过将每一层计算结果缓存起来,模型能够避免重复计算,减少计算复杂度,提升推理效率。通过这种方式,MARM成功地扩展了传统的单层注意力机制,构建了一个多层次的目标注意力网络。

2.3 MARM支持其他模型

在工业级推荐系统中,通常会采用多个模型分层进行推荐,以便从大量的候选项中筛选出最符合用户兴趣的物品。这些模型主要包括召回模型(Retrieval Model)、级联模型(Cascading Model)和排序模型(Ranking Model)。每种模型的目标是从候选项中筛选出符合要求的物品,层层过滤和精细化筛选,从而提高推荐结果的精确度和有效性。对于这些模型而言,MARM作为一个推荐模型模块,可以无缝地与它们配合使用。

2.3.1 召回模型(Retrieval Model)

召回模型的任务是从整个物品池中快速选出一个大的候选项集。通常情况下,它仅根据用户的历史行为数据,寻找与当前用户兴趣最相关的一些物品,而不需要预先指定物品的候选集。由于数据量庞大,召回模型往往需要处理数千甚至数万的物品候选集。

在这里插入图片描述

在MARM中,我们引入了一个创新的想法:在没有指定候选项的情况下,召回模型可以利用MARM缓存的历史结果,通过查询用户最新观看的200个物品来快速查找缓存中的结果,并通过用户ID特征替代传统的物品候选项,从而实现目标物品的Target-Attention计算。这一过程如图4©所示。通过这种方式,MARM可以在不需要直接传递完整候选项集的情况下,有效地支持召回模型,从而提高了召回效率和精确度。

2.3.2 级联模型(Cascading Model)

级联模型通常是一个小型的排序模型,它会根据上一步召回模型生成的候选项,从中筛选出最相关的几百个物品。这一过程需要通过一些高效的模块来进行,从而减少计算复杂度。级联模型往往包括多个层次的筛选,每一层都进一步精简候选集。

在MARM的框架中,级联模型的支持也是基于多层Target-Attention机制,和排序模型中的计算过程类似。图4(b)展示了这种级联方式。MARM通过使用多个Target-Attention层,配合缓存结果,减少了重复计算的成本。特别地,在级联模型中,不进行缓存重新积累,而是直接使用已经积累的MARM缓存结果,并仅使用用户最近的短期行为序列。这一做法有效节省了计算资源,同时保持了模型的一致性。

2.3.3 排序模型(Ranking Model)

排序模型则是最为复杂的一种,它需要从数百个候选项中筛选出最终的推荐结果,通常是在数据的稠密特征和模型计算的复杂度方面要求更高。在MARM中,排序模型通过使用多层目标注意力机制(Multi-layer Target-Attention)进行兴趣建模。这一过程能够有效地捕捉用户的长期兴趣变化以及当前的短期兴趣,同时也能通过缓存存储结果,避免了对历史数据的重复计算。

MARM能够在计算上极大地减少复杂度,这得益于它能够缓存Target-Attention的计算结果,降低计算时的FLOPs(浮点运算次数)。在支持排序模型时,MARM的作用是显而易见的,它不仅减轻了模型的计算负担,还通过缓存结果加速了查询过程。图4(b)中的示意图展示了当目标物品和缓存项相关时,如何利用MARM进行排序模型的支持。

通过这种方式,MARM不仅能够与召回模型级联模型完美对接,还能无缝地嵌入到排序模型中,提供更加高效和精准的推荐效果。

3. 总结

MARM(Memory Augmented Recommendation Model),通过引入缓存技术,极大地优化了推荐系统中的计算复杂度。传统的推荐系统往往依赖大量的数据处理和高计算量,特别是在多层次的注意力机制中,计算复杂度往往会成为瓶颈。而MARM的创新之处就在于,它利用缓存存储计算结果,避免了重复计算,从而大大减少了计算资源的消耗。

通过对比不同的模型,MARM在解决计算瓶颈、提高效率方面展示了显著优势。使用多层目标注意力机制**来捕捉用户的长期和短期兴趣,同时通过缓存技术来减少不必要的重复计算。实验结果表明,MARM不仅能够优化传统的排序模型,还能与召回模型和级联模型紧密结合,提供高效、精准的推荐效果。

此外,MARM还具有很强的适应性和可扩展性,可以轻松集成到现有的推荐系统中,进一步提升系统的性能。通过在实际环境中的在线实验,MARM展示了显著的在线效果提升,尤其是在提升用户观看时长方面,取得了+2.079%的提升。

总的来说,MARM通过引入缓存优化计算复杂度,为工业级推荐系统提供了一个有效的解决方案。它不仅能够降低计算成本,还能在保持高效性的同时,提供高质量的推荐结果。这一研究为推荐系统领域带来了新的思路,也为未来推荐技术的发展提供了重要的借鉴。

相关文章:

MARM:推荐系统中的记忆增强突破

文章目录 1. 背景1.1 模型规模与推荐系统的挑战1.2 缓存技术在推荐系统中的潜力1.3 推荐系统中的数据与计算需求1.4 复杂度对比1.5 MARM模型的创新性 2. 方法2.1 流程2.1.1 序列生成器2.1.2 外部缓存查找2.1.3 多目标注意力机制2.1.4 发结果到缓存 **2.2 MARM与SIM**2.2.1 SIM的…...

INP指标

什么是INP(Interaction to Next Paint) 参考网站:webVital-INP文档 定义与核心目标 INP 是一项稳定的 Core Web Vitals 指标,通过统计用户访问期间所有符合条件的互动约定时间,评估网页对用户操作的总体响应能力。最…...

Flink 的状态机制

在实时流处理领域,状态管理是构建复杂业务逻辑的核心能力。Apache Flink 通过统一的状态抽象和高效的容错机制,为开发者提供了从毫秒级窗口聚合到 TB 级历史数据关联的全场景支持。本文将深入剖析 Flink 状态机制的底层原理,结合实际案例展示…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.1 数据库核心概念与PostgreSQL技术优势

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 深度解析PostgreSQL核心架构与技术优势:从数据库原理到实战场景1.1 数据库核心概念与PostgreSQL技术优势1.1.1 关系型数据库核心架构解析1.1.1.1 数据库系统的底…...

linux下,ollama会把模型文件保存在哪里?

文章目录 运行ollama,有两种形式,估计得分开讨论首先是使用自动启动的ollama:先跑个“小一点的大模型”但是现在模型文件存在哪儿呢?运行ollama,有两种形式,估计得分开讨论 我们用两种方式,来运行ollama。 首先是使用自动启动的ollama: ps -aux | grep ollama系统自…...

EMMC存储性能测试方法

记于 2022 年 9 月 15 日 EMMC存储性能测试方法 - Wesley’s Blog 参考Android-emmc性能测试 | 一叶知秋进行实践操作 dd 命令 页面缓存 为了测试 emmc 的真实读写性能,我们需要先把页面缓存给清理: echo 1 > /proc/sys/vm/drop_caches console:…...

19. LangChain安全与伦理:如何避免模型“幻觉“与数据泄露?

引言:当AI成为企业"数字员工"时的责任边界 2025年某金融机构因AI客服泄露用户信用卡信息被罚款2300万美元。本文将基于LangChain的安全架构与Deepseek-R1的合规实践,揭示如何构建既强大又安全的AI系统。 一、AI安全风险矩阵 1.1 2025年最新威…...

5月3日日记

上午睡到自然醒(其实六点多被我爸叫起来抢火车票,发现明天中午的软卧候补上了,挺好的)然后继续睡到快10点。 中午吃的什么来着,好像是西红柿炒鸡蛋和藜麦饭,有个鱼不是很想吃就没吃 中午打了两把吃鸡&…...

C++类_构造函数

在 C11 里,类的构造函数有多种类型,下面为你详细介绍各类构造函数并给出示例代码。 1. 默认构造函数 默认构造函数是没有参数的构造函数,要是没有为类定义任何构造函数,编译器会自动生成一个默认构造函数。 2. 带参数的构造函数…...

【React】Hooks useReducer 详解,让状态管理更可预测、更高效

1.背景 useReducer是React提供的一个高级Hook,没有它我们也可以正常开发,但是useReducer可以使我们的代码具有更好的可读性,可维护性。 useReducer 跟 useState 一样的都是帮我们管理组件的状态的,但是呢与useState不同的是 useReducer 是集…...

Runnable组件重试机制降低程序错误率

一、LangChain 重试机制深度解析 当构建生产级AI应用时,with_retry() 机制可有效提升系统容错性,典型应用场景包括: API调用频率限制时的自动恢复模型服务临时不可用的故障转移网络波动导致的瞬时异常处理 参数详解与配置策略 1. 参数配置…...

纹理过滤方式和纹理包裹方式

纹理过滤方式 纹理过滤方式有临近过滤(Nearest)和双线性插值过滤(Linear),什么时候用什么过滤方式其实看个人选择,区别就是临近过滤是当需要的像素大于图片像素时候,一些像素点需要复用与他相近…...

55.[前端开发-前端工程化]Day02-包管理工具npm等

包管理工具详解 npm、yarn、cnpm、npx、pnpm 1 npm包管理工具 代码共享方案 包管理工具npm 2 package配置文件 npm的配置文件 方式二 常见的配置文件 常见的属性 常见的属性 常见的属性 依赖的版本管理 常见属性 npm install 命令 项目安装 3 npm install原理 npm instal…...

Maven安装配置以及Idea中的配置教程

一、下载Maven 我使用的是3.9.9的版本: 下载地址:Download Apache Maven – Maven 二、安装 将下载好的Maven压缩包解压到一个路径不包含中文的文件夹: 三、配置环境变量 以win11系统为例: 1.鼠标右键此电脑->属性->…...

【JavaScript】性能优化:打造高效前端应用

文章目录 一、执行效率优化(关键路径优化)1.1 算法时间复杂度控制1.2 Web Workers多线程计算二、内存管理(避免内存泄漏)2.1 定时器清理2.2 DOM引用释放三、DOM操作优化(渲染性能)3.1 批量DOM更新3.2 读写分离策略四、网络传输优化(加载性能)4.1 代码分割(Dynamic Imp…...

【C语言练习】018. 定义和初始化结构体

018. 定义和初始化结构体 018. 定义和初始化结构体1. 定义结构体示例1:定义一个简单的结构体输出结果2. 初始化结构体示例2:在声明时初始化结构体输出结果示例3:使用指定初始化器初始化结构体(C99及以上标准支持)输出结果3. 结构体数组示例4:定义和初始化结构体数组输出结…...

Three.js支持模型格式区别、建议

在 Three.js 中,3D 模型的种类和格式非常多样,每种格式都有其适用场景和优缺点。以下是常见的 Three.js 支持的模型格式、它们的区别、使用建议及推荐。 在这里推荐免费的blender工具,免费、占用空间不大,而且好用,前端打开模型时使用不错,或者有自己想做的模型也可以用它…...

JavaScript基础-流程控制概念

在JavaScript编程中,掌握如何控制程序的执行流程是编写功能强大、逻辑清晰代码的关键。流程控制语句允许我们根据不同的条件执行不同的代码块,或者重复执行某些操作,从而实现复杂的功能逻辑。本文将详细介绍JavaScript中的几种主要流程控制结…...

PowerBI企业运营分析——多维度日期指标分析

PowerBI企业运营分析——多维度日期指标分析 欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。 通过整合多源数据、实时监控关键指标,该平台能够精准分析业务表现,快速识别问题与机会…...

施磊老师rpc(三)

文章目录 mprpc框架项目动态库编译框架生成动态库框架初始化函数-文件读取1. 为什么要传入 argc, argv2. 读取参数逻辑3. 配置文件设计 init部分实现 mprpc配置文件加载(一)配置文件加载类成员变量主要方法**src/include/mprpcconfig.h** 配置文件**bin/test.conf** 实现配置文…...

k8s 探针

Kubernetes 中的探针(Probes)用于检测容器的健康状态或就绪状态,确保应用在运行时的可靠性。Kubernetes 提供三种探针类型,它们的核心区别在于用途和失败后的处理逻辑。以下是它们的详细说明和对比: 1. 启动探针&…...

MIT6.S081-lab8

MIT6.S081-lab8 1. Large files 从 lecture 我们可以知道,我们目前的单个文件的最大大小很小,这是因为我们能够索引的索引块范围很小,实际上,目前的索引只有直接索引和一级索引,而这个实验就是需要我们去实现二级索引…...

【RabbitMQ】 RabbitMQ快速上手

文章目录 一、RabbitMQ 核心概念1.1 Producer和Consumer2.2 Connection和Channel2.3 Virtual host2.4 Queue2.5 Exchange2.6 RabbitMQ工作流程 二、AMQP协议三 、web界面操作4.1 用户相关操作4.2 虚拟主机相关操作 四、RabbitMQ快速入门4.1 引入依赖4.2 编写生产者代码4.2.1 创…...

使用Rust + WebAssembly提升前端渲染性能:从原理到落地

一、问题背景:为什么选择WebAssembly? 最近在开发数据可视化大屏项目时,我们遇到了一个棘手的问题:前端需要实时渲染10万数据点的动态散点图,使用纯JavaScript Canvas方案在低端设备上帧率不足15FPS。经过性能分析&a…...

【quantity】9 长度单位模块(length.rs)

代码是用Rust语言定义的一组长度单位类型&#xff0c;利用了泛型和类型别名来创建带不同SI前缀的长度量。下面是详细解释&#xff1a; 基础结构&#xff1a; 使用了Quantity<V, P, Meter>作为基础类型&#xff0c;表示一个带有值类型V、前缀P和单位Meter的量。 Meter是…...

网络通信领域的基础或流行协议

一、TCP(传输控制协议) 1. 宏观介绍 TCP:全称“Transmission Control Protocol”——传输控制协议,是互联网最基础的传输协议之一。传输层协议,提供面向连接、可靠的字节流传输服务。它通过三次握手建立连接、四次挥手断开连接,确保数据有序、完整地传输作用:让两个设备…...

STM32——GPIO

1、GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 …...

AE模板 300个故障干扰损坏字幕条标题动画视频转场预设

这个AE模板提供了300个故障干扰损坏字幕条标题动画视频转场预设&#xff0c;让您的视频具有炫酷的故障效果。无论是预告片、宣传片还是其他类型的视频&#xff0c;这个模板都能带给您令人惊叹的故障运动标题效果。该模板无需任何外置插件或脚本&#xff0c;只需一键点击即可应用…...

2025-2026 XCPC

基本信息 本赛季由 jr-zlw \texttt{\color{#AA00AA}{jr-zlw}} jr-zlw, Skyzhou \texttt{\color{#03A89E} Skyzhou} Skyzhou 和 sunchaoyi \texttt{\color{#0000FF}sunchaoyi} sunchaoyi 组队&#xff0c;全靠大佬带飞~。 训练记录 2025.05.02 The 2023 Guangdong Provinci…...

list类的详细讲解

【本节目标】 1. list的介绍及使用 2. list的深度剖析及模拟实现 3. list与vector的对比 1. list的介绍及使用 1.1 list的介绍 1. list 是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list 的底层是双向链表结构&a…...

中小企业MES系统数据库设计

版本&#xff1a;V1.0 日期&#xff1a;2025年5月2日 一、数据库架构概览 1.1 数据库选型 数据类型数据库类型技术选型用途时序数据&#xff08;传感器读数&#xff09;时序数据库TimescaleDB存储设备实时监控数据结构化业务数据关系型数据库PostgreSQL工单、质量、设备等核心…...

wfp CommandParameter 详细解说

WPF 中的 CommandParameter 是命令模型中的关键属性,用于向命令的执行逻辑传递动态参数。以下是其主要特性和应用场景的详细解析: 1. ‌基本概念与用法‌ ‌数据传递机制‌ CommandParameter 通常与 Command 属性配合使用,允许在 XAML 中静态定义参数或在绑定中动态传递值。…...

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

目录 Multisim使用教程说明链接 一、正弦波信号发生电路 1.1正弦波发生电路 电路组成 工作原理 振荡频率 1.2 正弦波发生电路仿真分析 工程文件链接 二、方波信号发生电路 2.1 方波发生电路可调频率 工作原理 详细过程 2.2 方波发生电路可调频率/可调占空比 调节占空比 方波产生…...

Java语言概述

Java语言概述 什么是程序&#xff1f; ​ 程序是计算机执行某些操作或解决某个问题而编写的一系列有序指令单集合。 ​ 举例&#xff1a; ​ 计算11&#xff0c;并把结果写在黑板上 ​ 计算11&#xff0c;并把结果显示在屏幕上&#xff08;按编程语言规定的语句&#xff0…...

截图软件、画图软件、左右分屏插件、快捷键

截图软件 画图软件 画图时候按字母可以改变颜色&#xff1a;红色r,蓝色b,绿色g,粉色p,橙色o 左右分屏&#xff1a; 快捷键 1.打开文件或文件夹&#xff1a; CtrlP&#xff1a;快速打开文件。CtrlR&#xff1a;快速打开文件或文件夹。 2.文件操作&#xff1a; CtrlN&…...

Linux 信号

一、生活中的信号 1.1、生活中的信号从产生到结束过程 例&#xff1a; ①、外卖电话响了&#xff08;信号产生&#xff09;-> 我接了电话并告诉外卖员说先放到楼下的架子上&#xff08;识别到这个信号&#xff0c;并记住&#xff0c;保存到我的脑海里面&#xff09; ->…...

AI 生成内容的版权困境:法律、技术与伦理的三重挑战

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...

【愚公系列】《Manus极简入门》013-电影推荐专家:“银幕导航家”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

MCP智能体意图识别与工具路由:让AI自主决策调用链路

目录 &#x1f680; MCP智能体意图识别与工具路由&#xff1a;让AI自主决策调用链路 &#x1f31f; 什么是意图识别与工具路由&#xff1f; &#x1f6e0;️ 1. 设计意图识别模块 1.1 简易关键字规则版&#xff08;基础版&#xff09; 1.2 使用大模型辅助意图识别&#xff…...

【Redis】List类型

文章目录 List的特点介绍lpush&#xff0c;lpushx&#xff0c;rpush&#xff0c;rpushx命令lrange命令lpop和rpoplindex命令linsert命令llen命令lrem 命令ltrim命令lset命令阻塞版本的命令blpop和brpop 命令小结list的内部编码List的应用场景 List的特点介绍 列表相当于一个数…...

Trae 安装第三方插件支持本地部署的大语言模型

Trae 安装第三方插件支持本地部署的大语言模型 0. 引言1. 安装插件 0. 引言 字节发布的 Trae IDE 一直不支持本地部署的的大语言模型。 Qwen3 刚刚发布&#xff0c;想在 Trae 中使用本地部署的 Qwen3&#xff0c;我们可以在 Trae 中安装其他插件。 1. 安装插件 我们可以安装…...

【免费】2010-2019年上市公司排污费数据

2010-2019年上市公司排污费数据 1、时间&#xff1a;2010-2019年 2、来源&#xff1a;上市公司披露报告 3、指标&#xff1a;代码、日期、名称、本期支出 4、范围&#xff1a;417家上市公司 5、相关研究&#xff1a;胡珺,宋献中,王红建.非正式制度、家乡认同与企业环境治理…...

第Y3周:yolov5s.yaml文件解读

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本次任务&#xff1a;将yolov5s网络模型中的第4层的C3x2修改为C3x1&#xff0c;第6层的C3x3修改为C3x2。 首先输出原来的网络结构&#xff1a; from n pa…...

python 桌面程序开发简述及示例

Python桌面程序开发简述及示例 Python凭借其简洁的语法和丰富的库支持,非常适合开发跨平台的桌面应用程序。本文将介绍Python桌面开发的主要方法,并提供实际代码示例。 一、Python桌面开发主要方法 1.1 Tkinter(标准库) Python内置的GUI库,适合开发简单桌面应用 1.2 …...

【前端知识】Vue3状态组件Pinia详细介绍

Vue3状态组件Pinia详细介绍 关联知识 Pinia 组件介绍、核心原理及使用方式 Pinia 组件介绍 Pinia 是 Vue.js 的官方状态管理库&#xff0c;专为 Vue 3 设计&#xff0c;提供简洁的 API 和强大的 TypeScript 支持。其核心组件包括&#xff1a; • Store&#xff1a;状态存储容器…...

YOLO旋转目标检测之ONNX模型推理

YOLO旋转检测相较于目标检测而言&#xff0c;其只是最后的输出层网络发生了改变&#xff0c;一个最明显的区别便是&#xff1a;目标检测的检测框是xywh&#xff0c;而旋转检测则为xywha&#xff0c;其中&#xff0c;这个a代表angle&#xff0c;即旋转角度&#xff0c;其余的基本…...

C++八股--three day --设计模式之单例和工厂

对于C编程中的思想&#xff0c;最常见的就是考察设计模式了 那么我们在面试中常考的设计模式包含以下几种&#xff1a;单例模式&#xff0c; 接下来我们按顺序介绍 1.单例模式&#xff1a; 一个类只能创建一个实例&#xff1a;常应用于日志模块&#xff0c;数据库模块 …...

GAMES202-高质量实时渲染(Assignment 2)

目录 作业介绍环境光贴图预计算传输项的预计算Diffuse unshadowedDiffuse shadowedDiffuse Inter-reflection(bonus) 实时球谐光照计算 GitHub主页&#xff1a;https://github.com/sdpyy1 作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202 作业介绍 物体在不同…...

一、Shell 脚本基础

一、Shell 简介 1.Shell 的定义与作用 Shell&#xff0c;通常被称为命令行解释器 (Command Line Interpreter)&#xff0c;是用户 &#x1f464; 与 Linux/Unix 操作系统内核进行交互 ↔️ 的“桥梁” &#x1f309;。它扮演着翻译官 &#x1f5e3;️ 的角色&#xff1a; 接…...

redis持久化-RDB

redis持久化-RDB 文档 redis单机安装redis常用的五种数据类型redis数据类型-位图bitmapredis数据类型-基数统计HyperLogLogredis数据类型-地理空间GEOredis数据类型-流Streamredis数据类型-位域bitfield 官方文档 官网操作命令指南页面&#xff1a;https://redis.io/docs/l…...