Prompt Distillation for Efficient LLM-based Recommendation

题目

基于LLM的高效推荐的快速蒸馏

论文地址:https://dl.acm.org/doi/10.1145/3583780.3615017

摘要

    大语言模型(LLM)在各种任务上表现出了无与伦比的建模能力,例如多步推理,但是这些模型的输入大部分仅限于纯文本,这可能很长并且包含嘈杂的信息。长文本可能需要很长时间才能进行处理,因此对于需要立即响应的推荐系统可能还不够有效。在基于LLM的建议模型中,用户和项目ID通常填充在模板中(即离散提示),以允许模型理解给定的任务,但是这些模型通常需要大量的微调来桥接用户/项目ID和模板单词和模板单词,并释放LLM的功能。为了解决问题,我们建议将特定任务的离散提示提取到一组连续的提示向量,以桥接ID和单词并减少推理时间。我们还设计了一种培训策略,以提高培训这些模型的效率。三个现实世界数据集的实验结果证明了我们迅速蒸馏(POD)方法在顺序推荐和顶级建议任务上的有效性。尽管训练效率可以显着提高,但推理效率的提高是有限的。这一发现可能会激发社区中的研究人员进一步提高基于LLM的推荐模型的推理效率。

    CCS概念•信息系统→建议系统; •计算方法→自然语言生成。

    关键字推荐系统;大语言模型;生成建议;顺序建议;顶级建议;可解释的建议;迅速蒸馏

引言

    近年来,推荐系统已成功部署在各种在线平台上,例如电子商务,视频流和社交媒体。有了建议,用户可以轻松地找到自己感兴趣的东西,而无需经历大量项目。在早期,建议模型(例如协作过滤[34]和矩阵分解[17])通常是浅层,并且包含有限数量的参数。后来,它们逐渐生长深[5],因为深层神经网络通常比浅层模型具有更好的表示能力。同时,这些平台上丰富的用户生成的数据又引起了与建议相关的任务的开发,包括审查摘要[23],解释生成[19]等。最近,建议模型进入了一个新阶段,单个模型可以执行多个任务[6,9]。这些模型基于大型语言模型(LLM),例如T5 [31],该模型是指经过大量数据训练的模型,并且可以适应大量的下游任务。

    LLM表明,小型模型不具备的惊人能力,例如,进行算术[3],他们没有接受过培训,因此它们在许多领域中受到了很多关注并被采用,例如自然语言处理[3,7],计算机视觉[32] [32]和推荐人系统[9]。由于语言可以表达各种概念,因此与其他领域类似的建议任务也被称为文本描述,即离散提示[9,26],然后被送入LLM以启用序列到序列的生成。

    但是,在推荐方案中有两个问题有两个问题。一方面,在推荐系统中是重要的标识符,用户和项目ID与离散提示中的单词有不同的目的。具体而言,单词嵌入捕获单词之间的上下文关系,而ID嵌入式则编码用户对项目以及用户和项目相似性的偏好。结果,基于LLM的推荐模型通常需要大量的微调来弥合ID和模板单词之间的差距,并释放LLM的功能以供推荐。此外,建议模型的关键信息是IDS,因此当涉及太多单词时,离散提示可能会有些嘈杂。另一方面,处理长时间需要很长时间,这可能会导致负面的用户体验,尤其是对于需要低延迟推断的推荐服务。

    为了应对问题,我们提出了一种及时的蒸馏(POD)1方法,在该方法中,我们在离散提示中将知识提炼成连续的提示向量。更具体地说,在训练每个建议任务时,我们既使用一系列连续提示向量和一组离散的提示模板。作为训练过程继续进行,随机初始化的连续提示向量可以学习离散提示中的表达,如图1所示。由于连续提示向量不映射到任何具体的单词,因此它们可以比离散提示更灵活和更具表现力,从而帮助LLM更好地学习不同的推荐任务。经过提示提取后,我们只保留每个任务的连续提示,以减少推理时间。

    由于有几个推荐任务,训练效率也是一个关键问题。虽然将这些任务的样本混合在一个批次中是可行的[9],但效率较低。具体来说,不同任务的输入/输出可以有不同的长度,因此将它们填充到相同的长度可能会消耗大量内存。因此,批量将会很小,迭代次数将会增加,训练时间将会大大增加。为了解决这个问题,我们提出了一种称为任务交替训练的策略,其中我们用来自同一任务的一批样本来训练LLM,然后是另一个任务的样本,以此类推。由于每个任务的数据通常长度相同,这种训练策略不会在填充上浪费太多内存,从而提高了训练效率。

  1. 我们的主要贡献总结如下:据我们所知,我们的提示提取(POD)是第一种可以提取基于LLM的推荐模型的离散提示到连续提示的知识的方法。它是模型不可知的,可以应用于任何其他LLM。
  2. 我们提出了一种任务交替训练策略,以提高在LLM上训练多个推荐任务的效率。这一战略有可能扩展到其他领域的类似情况。
  3. 大量实验表明,我们的approach POD在两个典型的推荐任务(包括顺序推荐和top-N推荐)上可以大幅度优于最先进的基线。
  4. 正如我们的实验所证明的,LLM的训练效率可以很容易地提高,但提高其推理效率并不那么容易。因此,后者可能成为推荐系统中一个新的研究方向。

    在下文中,我们首先回顾与我们在Sec的工作相关的研究。2,然后详细介绍我们的方法。3.实验设置在第二节中描述。第4节提供了对结果的分析。第5节给出了结论和展望。

在这里插入图片描述
图1:解释生成任务的快速提取。

相关工作

    我们从大语言模型(LLM)、提示学习、基于LLM的推荐到提示迁移,经历了相关的研究。近年来,LLM由于其在多种任务上的有效性,引起了学术界和工业界的广泛关注。这些模型通常在海量数据上进行训练,根据其训练目标可以分为两大类,包括掩蔽语言建模和自回归语言建模。对于前一类,文本序列中的一定数量的标记被随机屏蔽,并且模型需要基于未被屏蔽的标记来预测它们。典型的例子是BERT [7],它更适合于自然语言理解任务,例如问答。对于后者,模型(例如,T5 [31],LLaMA [37],GPT-3 [3])被指示基于其在序列中的在前记号来预测记号。

    使LLM适应下游任务的一种常见方法是在特定于任务的数据集上对它们进行微调。然而,随着模型比例的惊人增加,微调在计算上也可能是昂贵的。因此,出现了一种新的范式,称为即时学习[26]。在这个范例中,任务适应LLM,而不是使模型适应任务。例如,可以在预定义的模板中填充用于情感分类的样本,以形成输入序列,基于该输入序列,LLM可以生成一些标记,这些标记可以进一步映射到预测得分。

    这被称为离散提示学习,因为提示模板由离散的标记组成。还有另一种典型的提示学习方法,称为连续/软提示学习,其中提示是一组不映射到任何单词的向量。有了这两种类型的提示,LLM可以很容易地执行不同的任务,比如域适应[2]和表到文本的生成[24]。

    个性化推荐LLM是很重要的,因为它可以帮助更好地理解用户的意图并满足他们的个性化需求。然而,采用LLM进行推荐任务的早期尝试主要集中在一个单一的任务上,例如可解释的推荐[22]和顺序推荐[13]。最近,人们越来越有兴趣将几个推荐任务集成到一个LLM中。例如,在P5 [9]和OpenP5 [42]中设计了一组个性化提示,以同时处理几个推荐任务,或者像在VIP5 [10]中那样处理多种形式的数据。在这些模型中,所有的任务都是形式化的源任务的提示,以便更好地学习目标任务的提示。

    PANDA [46]首先测量提示可迁移性,然后将知识从源提示迁移到目标提示。这是通过知识提炼[4,12]实现的,其中大型教师模型的预测用于学习小型但有效的学生模型。类似地,MPT [41]将多个源任务之间的共享知识提取到一个提示中,以便目标任务可以利用它。虽然相关,但我们的工作不同于他们,因为我们执行任务内提示提取,而他们执行交叉任务提示转移。UP5 [14]将LLM的偏差信息提取到编码器和解码器提示中,以便减少偏差并提高基于LLM的推荐模型的公平性。这项工作与我们的知识提炼非常相关,但它的研究重点是偏见和公平问题,而我们关心的是有效性和效率。

方法论

    由于LLM可以处理各种各样的任务,我们首先给出三个典型推荐任务的概述,我们将用我们的方法来测试这些任务,包括顺序推荐、前N名推荐和可解释的推荐。请注意,其他推荐任务也可以很容易地合并。然后,我们简单介绍一下推荐场景中的离散提示。之后,我们将详细介绍我们的快速蒸馏(POD)方法,然后是我们提出的任务交替训练策略。最后,我们展示了如何用波束搜索算法生成推荐和解释。

任务表述

    在介绍任务之前,我们提供一些将在整篇文章中使用的基本符号。具体来说,我们用U表示数据集中的用户集,I表示项目集。U中的特定用户表示为U,I中的特定项目表示为I。对于顺序推荐任务,每个用户U与其按时间顺序排列的交互历史I u = {i u 1,i u 2,…,i u |I u | }。基于用户和项目序列,LLM需要预测用户接下来要与哪个项目交互,即i u |i u |+1 ∈ I/Iu,其中I u是用户u已经交互过的项目集合。前N名推荐任务是向用户u推荐一个项目列表,该列表由用户以前从未交互过的N个项目组成,即来自I/Iu的项目。为了训练这个任务,我们可以从I u中随机抽取一个项目I,并将其与从I/Iu中抽取的随机负面项目配对,以形成候选项目列表。

    至于解释任务,给定一对用户u和项目I,LLM需要生成解释Eu,I,其证明为什么向用户推荐项目(例如,“价格合理”)。请注意,对于所有任务,除了上面提到的数据之外,没有提供辅助信息或附加内容。

推荐的离散提示

    在推荐系统中,用户和项目id是必不可少的,因为它们是将一个用户/项目与其他用户/项目区分开的关键。然而,id可以不同于单词。为了使ID适应LLM,大多数以前的工作[6,13]采用ID相关的文本段(如用户名和项目标题)作为替代,这样它们可以很容易地填充到预定义的模板中(如,“解释为什么电影《银河护卫队》第3卷被推荐给谢丽尔”)。这种类型的文本输入正式称为离散提示[26],因为它由一系列离散的标记组成。

    然而,最近研究[13,15]的实验结果表明,当ID信息不可用时,LLM的推荐性能可能会受到很大影响,因为ID可以准确识别和区分不同的项目,并传达重要信息,如项目之间的协作关系[15]。为了解决这个问题,我们的解决方案是保留ID并将它们表示为文本字符串,其中仍然保留原始的ID号。例如,ID为1234的用户可以表示为“user_1234”,其中前缀“user_”用于区分用户ID和项目ID(即,后者以“item_”开始)。由于该字符串中的组成单元已经在LLM的标记器中,因此可以很容易地将其标记为一个标记序列(例如,“user”、“12”和“34”)。将ID分成几个部分后,模型可能无法识别哪些令牌属于特定的ID。为了连接一个ID的令牌,我们使用了一组额外的全词嵌入[9]。如图2所示,每个ID的标记序列共享一个全字嵌入向量,而所有其他非ID标记共享相同的全字嵌入向量。这种方法可以使每个ID成为一个完整的单元,并且ID可以按单词区分。

在这里插入图片描述
图2:我们提出的用于推荐任务的提示提取方法的概述。主干模型遵循编码器-解码器架构。连续提示向量是特定于任务的,并且每个任务利用一组离散提示模板。全词嵌入用于连接每个ID的标记。

提示蒸馏

    虽然看起来很有前景,但离散提示可能无法给LLM一个有效的指示,例如,“总结表格中的内容”[24]。这可能成为推荐系统中的一个严重问题,尤其是当两个不同任务的输入数据格式非常相似时。例如,顺序推荐和前N名推荐的输入都是一个用户和一堆项目(如第2 . 3节所讨论的)。3.1).如果模型误解了离散提示,它可能会将一个任务视为另一个任务,无法提供准确的建议。此外,当提示模板很长时,它可能会遮蔽关键信息(即,IDs ),并且还会花费很长时间来进行训练和推断。为了解决这些问题,我们提出了一种快速蒸馏(POD)方法,其正式定义如下。

在这里插入图片描述
图3:不同任务输入/输出的不同长度。为了更好地说明,省略了离散提示模板和单词标记化。

    定义1(快速蒸馏)。如果一种方法能够在不牺牲LLM在测试任务中的性能的情况下缩短一个长提示,我们称之为提示提炼。经过提炼的简短提示可以是自由文本或向量。

    在这项工作中,我们将离散的提示模板提取为多个连续的提示向量。具体来说,我们在一个已经填充在离散提示模板中的输入样本的开头添加一组向量,并允许这些向量被同一推荐任务的样本所共享。图2示出了解释生成任务的示例。对于其他任务,将使用另一组向量。随着训练的进行,连续提示向量可以通过损失函数学习离散提示中的表达式。因为它们不映射到任何真实的单词,所以比离散提示更具表现力和灵活性。蒸馏阶段完成后,为了提高推理效率,我们只保留连续提示。

    在技术上,我们采用编码器-解码器架构,以便与最近的离散提示工作进行公平的比较[9],但我们的方法可以很容易地扩展到只有解码器的模型。图3示出了三个推荐任务的示例输入和输出(为了更好地说明,省略了提示模板和单词标记化)。我们将任一任务的输入-输出序列对表示为X = [x1,…,x |X | ]和Y = [y1,…,y|Y |】。在输入序列X通过嵌入层之后,我们可以获得它的记号表示[x1,…,x|X | ],它将被附加在K个连续提示向量[p1,…,pK】。

    这种级联表示[p1,…,pK,x1,…,x|X | ]然后将被添加到全词表示[w1,…,wK+|X | ],这样我们就得到S = [s1,…,s|S |】。在S通过LLM的编码器之后,它将产生一个隐藏向量序列H = [h1,…,h|S | ],基于此,LLM的解码器可以执行自回归生成。具体地,在每个时间步长t,解码器输出词汇v上的概率分布 在这里插入图片描述

任务交替训练

    与自然语言处理中的预训练阶段不同,在预训练阶段,每批中的所有训练样本都具有相同的长度,推荐任务中的输入和输出可以具有不同的长度。例如,解释任务的输入仅包括两个id(即用户和项目),而顺序推荐的输入由于用户的历史项目顺序可以是百级的(见图3)。同时,前者的输出是一个有几十个单词的解释句子,而后者的输出仅仅是一个条目ID。不同任务的输入和输出的不同长度使得用来自不同任务的混合样本来训练LLM的效率较低[9],因为将它们填充到相同的长度会消耗大量的存储器,使得批量大小非常小,从而导致更多的迭代和更长的训练时间。我们的解决方案是交替地用一个任务的一批样本更新模型参数,然后是另一个任务的样本,依此类推。一般来说,每个任务都有相同的数据格式,因此这种策略可以节省大量内存,提高训练效率。我们称之为任务交替训练,并在算法1中提供了训练过程和实现细节。

使用波束搜索的生成

    由于所有任务都被公式化为序列到序列,输出序列作为建议(以ID标记的形式)或解释。在众多解码算法中,我们选择了波束搜索,因为它能有效地找到好的序列。假设我们将波束的数量设置为b,在每个时间步长将有b个候选序列。在下一步中,词汇表V中的任何单词都可以附加到候选序列的末尾,这就形成了b × V组合,从中我们可以选择具有最大对数似然的b序列。LLM可以一直这样做,直到候选序列达到预定义的最大长度。对于顺序推荐和top-N推荐,最佳候选序列形成推荐列表。至于解释,我们从候选项中选择具有最大对数似然的一个。

实验设置

    在这一部分,我们给出了实验设置的细节,包括数据选择、基线方法、评估协议和实施。

数据集

    我们在三个广泛使用的数据集上进行实验,这些数据集都是从一个电子商务平台Amazon2上收集的。在亚马逊数据集3中共有29个不同的产品类别,我们采用运动&户外、美容和玩具&游戏进行实验。三个数据集中的每个记录都由用户ID、商品ID、评级、文本评论和时间戳组成。

在这里插入图片描述
表1给出了数据集的统计数据。

    为了获得解释生成任务的自然语言解释,我们遵循[19,20]中的过程,使用sentieres 4[44,45]工具包从用户评论中提取一些包含项目特征(例如,“价格”)的句子。对于此任务,我们以8:1:1的比例将每个数据集分为训练集、验证集和测试集,并且为训练集中的每个用户和项目保存至少一条记录。对于顺序推荐任务,我们首先根据时间戳对用户交互的项目进行时间排序,以获得项目序列。然后,交互序列中的最后一项用于评估,倒数第二项用于验证,其余的用于训练。为了防止数据泄漏,我们也对top-N推荐任务采用这种数据划分策略。

基线

    为了验证我们的方法在不同推荐任务上的有效性,我们将其与以下三组代表性基线进行比较。

顺序推荐

    给定用户和他/她的交互项目序列,推荐模型应该预测用户可能与之交互的下一个项目。CASER:卷积序列嵌入推荐模型[36]。该方法将用户最近交互的项目视为虚拟图像,因此卷积神经网络可以用来捕获序列模式。HGN:分级门控网络[29]。它由两个门控模块(即特征级和实例级)组成,分别用于建模用户的长期和短期兴趣。GRU4Rec [11]。这是一种基于会话的推荐方法,其中使用GRU来处理项目会话。在这项工作中,我们将用户的整个项目序列视为一个会话。BERT4Rec [35]。这是一个用伯特式完形填空训练的双向转换模型。具体来说,用户的历史项目序列中的一些项目被随机屏蔽,然后模型需要用序列中的其他上下文项目来预测它们。FDSA:功能层次更深的自我关注网络[43]。项目特征作为特征序列被合并到模型中,然后与项目序列合并以进行推荐。SASRec:基于自我关注的顺序推荐模型[16]。该模型结合了马尔可夫链处理短期语义和递归神经网络处理长期语义的优点。S 3 -Rec:用于顺序推荐的自我监督学习[47]。借助互信息最大化原则,设计了四个自我监督学习目标来学习序列数据中项目之间的相关性。P5:预训练、个性化提示和预测范式[9]。这是一个基于LLM的离散提示推荐模型。在这个模型中,顺序推荐被表述为一个序列到序列的生成问题。我们为模型提供一个模板,如“这是用户_ {用户id }:{购买历史}的购买历史列表。尝试向用户推荐下一个项目”来启用下一个项目预测。

Top-N推荐

基于用户的项目历史,推荐模型需要建议用户从未与之交互但可能符合他/她的兴趣的N个项目的列表。MF:矩阵分解[17]。这是一种经典的协同过滤方法,它的预测是由用户和项目潜在因素的内积做出的。为了更好地学习用户的偏好,采用贝叶斯个性化排序(BPR) [33]作为损失函数。MLP:多层感知器[5]。用户和项目嵌入通过一堆非线性层来进行预测。该车型还配备了BPR。P5 [9]。同样,使用类似“我们想为用户_{user_id}做推荐”的离散提示。从这些候选项中选出最佳项:{candidate_items}”,该模型可以以自然语言生成的方式进行top-N推荐。

解释生成

给每个模型一对用户和项目,让它们产生一个文本句子,解释为什么推荐系统向用户推荐这个项目。Att2Seq:属性到序列[8]。这是一种评论生成方法,其中编码器(MLP)将用户和项目id转换为隐藏状态,然后解码器(LSTM)从隐藏状态解码出单词序列。在这种情况下,我们把地面实况解释视为审查。NRT:神经评级和提示生成[23]。这是一个提示生成框架。类似地,它使用MLP来编码用户和项目id,但是解码器是GRU。在我们的实验中,我们将解释视为提示。PETER:用于可解释推荐的个性化转换器[21]。这是一个基于转换器的模型,它的注意力掩蔽矩阵被稍微修改,以便能够在用户和项目id之间进行交互。对于此任务,我们省略了与P5的比较,因为它使用了额外的数据,即项目标题和评级,这对其他模型是不公平的。

评估指标

    为了评估推荐的准确性,我们对顺序推荐和前N名推荐都采用了常用的命中率(HR)和归一化折扣累积收益(NDCG)。人力资源部衡量的是真实项目在推荐列表中的实际出现率,而NDCG则认为那些匹配的项目在列表中排名更高。我们报告HR@1,HR@5和HR@10,NDCG@5和NDCG@10。对于生成的解释的评估,我们采用两个众所周知的度量:BLEU [30]和ROUGE [25]。前者是面向精度的,而后者是面向召回的,但这两个度量标准都测量生成的句子和地面真相内n元语法的重叠程度。我们报告了BLEU-4以及ROUGE-1、ROUGE-2和ROUGE-L的F1,对于所有这些指标,值越大意味着性能越好。

实施细节

    为了公平比较,基准P5 [9]和我们的进近吊舱都采用T5-small [31]作为主干。在这个LLM中,编码器和解码器都有6层,每层都是一个8头注意层。T5利用SentencePiece [18]将一个句子标记为一系列子词(参见第。3.2).T5的词汇V中共有32,100个标记,它们的嵌入维数为512。如算法1中所述,我们从用户的项目序列中随机采样一个片段,用于训练顺序推荐任务;对于训练和评估,前N名推荐的否定项的数量N被设置为99。我们使用AdamW optimizer [28]在训练集上训练我们的POD,并在测试集上报告结果。在对验证集进行超参数调整后,我们将每个任务的连续提示向量K的数量设置为3,将所有三个任务的训练批量设置为64,将运动数据集的学习率设置为0.001,美容和玩具数据集的学习率设置为0.0005。我们借用了[9]中不同任务的离散提示模板,因为构造它们不是我们的重点。在训练阶段,如果模型在三个任务上的总验证损失在当前时期是最低的,则我们保存一个检查点。如果这种情况没有发生5次,我们将终止训练过程,并加载最佳检查点进行评估。在推理阶段,我们将梁b的数量设置为20,用于顺序推荐和top-N推荐。

    至于解释生成,我们应用组波束搜索,并将b设置为21,将波束组的数量设置为3。所有任务的推理批处理大小都设置为32。

结果和分析

    这一部分给出了三个推荐任务的实验结果、训练和推理阶段的效率比较以及超参数分析。

序贯推荐

    表2给出了不同序贯推荐方法之间的推荐准确度比较。从表中,我们可以看出,我们的方法POD远远超过了所有基线,尤其是与我们共享相似架构的P5。我们的方法与P5的唯一区别是,它严重依赖人工构建的提示模板来进行预测。然而,单词标记和ID标记需要大量的微调才能学习到相同的嵌入空间中。

    相反,我们的方法将离散提示提炼为连续提示,这不再局限于固定的单词,因此可以与IDs更兼容,从而提高推荐性能。在其他基线中,我们还注意到S3 -Rec和萨斯雷克都非常有竞争力,这可能是由于自我注意机制在建模序列数据方面的优势。然而,它们不如我们的POD和基线P5有效,因为它们不是LLM,并且不能利用大型文本语料库中的序列模式进行预训练。

在这里插入图片描述

前N名推荐

    在表3中,我们将我们方法与前N名推荐的代表性基线进行比较。MF和MLP都是经典的推荐机型,性能都还不错。一般来说,MF比MLP稍差,可能是因为简单的内积可能无法充分利用用户-项目交互中的复杂模式。这可以解释为什么最近的工作采用可以对推荐数据执行非线性转换的神经网络。但是,MLP仍然无法与基于LLM的推荐模型(即P5和POD)相提并论。特别是,后者的top-1推荐准确度比其他基线好得多,因为它们可以直接生成推荐。这证明了基于LLM的推荐模型在准确建模用户对项目的偏好方面的优势。最重要的是,我们的方法POD始终比所有基线表现更好,因为连续提示与LLM更兼容,因为神经网络本质上是连续的[27]。
在这里插入图片描述

表2:顺序推荐的性能比较。
在这里插入图片描述

表3:前N名建议的性能比较
在这里插入图片描述

表4:解释生成的性能比较(%)。
在这里插入图片描述

表5:两种训练策略在运动数据集上的效率比较。在该表中,“h”和“m”分别表示“小时”和“分钟”。
在这里插入图片描述

表6:体育数据集上的推理效率比较。在“时间”一栏中,“m”和“s”分别代表分和秒。
在这里插入图片描述

图4:连续提示数K对运动数据集上不同任务的影响。为了更好的可视化,一些指标的值被线性缩放。

    我们还注意到,当N变大时,我们的方法相对于基线的性能改善变小。这是由于在第二节中解释的留一评估协议。4.1、测试集中只有一个基础事实项目。因此,测试的项目越多(即N越大),基线的命中率就越高。然而,这将无助于我们的方法的准确性,因为它已经可以正确地预测第一位置的项目,即top-1推荐。该属性具有很大的实用价值,尤其是当推荐数量有限时,例如在系统只能显示少数(通常只有一个)推荐结果的对话式推荐场景中。

解释生成不同

    解释生成方法之间的性能比较如表4所示。三个数据集上的结果不是很一致。我们的方法在运动数据集上获得了最好的性能,在美容和玩具数据集上获得了相当的结果。不可否认,它并不总是优于基线,可能是因为评估指标BLEU和ROUGE只从生成的解释和基本事实中计算重叠部分[40]。这实际上使LLM处于不利地位,因为他们能够生成多样化和富有表现力的内容,因为他们在预训练阶段已经学习了世界知识。至于基线,我们可以看到,Att2Seq和NRT的结果通常不如其他两种基于变压器的方法有竞争力,这可以通过递归神经网络(即Att2Seq中的LSTM和NRT的GRU)遭受长程依赖性问题的事实来解释。然而,这对于Transformer [38]来说不是问题,其自关注机制允许未来令牌完全关注序列中的前进令牌。

培训效率

    多任务培训LLM的效率是一个关键问题。在这项工作中,我们提出了一个有效的训练策略-任务交替训练。为了验证其在帮助提高训练效率方面的有效性,我们将它与先前工作[9]中使用的训练方法进行了比较。我们将这种比较方法命名为样本混合训练,因为来自不同任务的样本被混合在一批中。实验使用NVIDIA Tesla V100S GPU在运动数据集上进行。在测试这两种训练策略时,我们将批量大小调至最大值,以便模型可以占用尽可能多的内存来进行公平的比较。对于这两种方法,我们保持其他设置不变。

    实验结果在表5中给出。虽然混合样本训练需要较少的历元来训练,但它的总训练时间是任务交替训练的两倍。关于每个时期的平均训练时间,我们的方法比比较的方法大约高效五倍。正如我们之前解释的,在同一批中混合不同任务的样本会浪费大量的填充内存,因为它们很可能长度不同。在一个具有固定内存量的GPU上,批量大小会很小,迭代次数和训练时间会增加。我们的训练策略通过交替向LLM提供来自同一任务的一批样本来缓解这个问题。

推理效率

    如上所述,我们在推理阶段丢弃离散提示,仅使用连续提示,以降低计算成本。作为一项消融研究,我们调查这种策略是否确实有助于提高推理效率。毫无疑问,比较法既要使用连续的提示和离散提示,我们表示为“连续+离散”。同样,我们使用NVIDIA Tesla V100S GPU在Sports数据集上测试了这两种方法,并保持它们的设置相同。

    结果如表6所示。从表中可以看出,去除离散提示后,推理效率可以提高,而推荐和解释性能变化不大。我们还注意到,前N名推荐任务的效率提升不如其他两个任务显著。原因如下。该任务总共有101个ID(即,一个用户ID、一个目标物品ID和99个否定物品ID),这导致大约400个令牌。与它们相比,提示模板要短得多,这使得改进的空间很小。然而,这个实验表明我们的POD方法确实可以减少推理时间。

连续提示向量的数量

    最后,我们想研究改变连续提示向量的数量K会如何影响不同推荐任务的性能。我们在运动数据集上进行实验,从[1,3,5,10,20,50]中搜索K。从图4可以看出,推荐性能和解释性能的趋势是不同的。随着K的增加,顺序推荐和top-N推荐的性能通常都在增长,但是当K较小时(即1或3),解释性能可能已经达到最佳。考虑到大量的提示向量会影响训练和推理效率,我们更喜欢小K。因此,我们将K设置为3,其中解释性能最好,推荐性能已经可以击败所有基线。

结论

    在本文中,我们提出了一种简单而有效的提示提取(POD)方法,该方法可以将离散提示模板的知识提取为基于LLM的推荐模型的连续提示向量。在我们的实验中,我们证明了POD在典型的推荐任务上是有效的,在推理阶段也是高效的。我们还提出了一种任务交替训练策略,该策略可以大大提高基于语义的推荐模型的训练效率。我们相信,这两种方法都有可能扩展到任务具有不同数据格式的其他领域。由于简单地删除离散提示可以提高推理效率,我们计划使LLM轻量级,以节省计算成本。此外,我们对跨任务提示转移[1,39,41,46]感兴趣,这可能能够将LLM推广到新的推荐任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/bicheng/86647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDBC 工具类:1.0到3.0版本

一、引言 在 Java 开发中,与数据库的交互是一项常见且重要的任务。JDBC(Java Database Connectivity)作为 Java 语言访问数据库的标准 API,为我们提供了统一的接口来操作各种数据库。然而,每次进行数据库操作都编写大…

实验室建设案例 | 洛阳职业技术学院—人工智能实验室

院校简介 洛阳职业技术学院位于千年古都、牡丹花城、丝路起点洛阳,是一所由洛阳市政府举办的公办高职院校,成立于2011年,办学历史可追溯到1945年的豫西公学。学校全面贯彻党的教育方针,围绕落实立德树人根本任务,秉承“…

vue2中,修改对象数组中元素对应的属性,页面不更新的问题解决

有如下代码: // 有一个数组 let dataAry [{name: haha, age: 20},{name: hello, age: 21} ] // 这个数组在模板中使用了v-for进行循环 v-for"one of dataAry" :name"one.name" :address"one.address"// 子组件中使用如下&#xff…

代理模式:控制对象访问的守门员[特殊字符],优雅实现功能增强与访问控制!

代理模式:控制对象访问的守门员🔐,优雅实现功能增强与访问控制! 文章目录 代理模式:控制对象访问的守门员🔐,优雅实现功能增强与访问控制!前言:为什么需要代理&#xff1…

《人间词话》PPT课件

《人间词话》简介 《人间词话》是王国维所著的一部文学批评著作。《人间词话》作于1908~1909年,最初发表于《国粹学报》。该作是作者接受了西洋美学思想之洗礼后,以崭新的眼光对中国旧文学所作的评论。 《人间词话》PPT课件下载 夸克网盘分享…

解剖智能运维三基石:Metrics/Logs/Traces

3秒知识卡 三基石关系: Metrics(指标)→ 系统脉搏(CPU/错误率) Logs(日志)→ 事件日记(错误堆栈/用户行为) Traces(追踪)→ 血缘地图(…

从代码学习深度学习 - 情感分析:使用卷积神经网络 PyTorch版

文章目录 前言加载数据集一维卷积最大时间汇聚层textCNN模型定义模型加载预训练词向量训练和评估模型总结前言 在之前的章节中,我们探讨了如何使用循环神经网络(RNN)来处理序列数据。今天,我们将探索另一种强大的模型——卷积神经网络(CNN)——并将其应用于自然语言处理…

深入解析分布式训练基石:ps-lite源码实现原理

分布式机器学习框架是现代推荐、广告和搜索系统的核心支撑。面对海量训练数据和高维稀疏特征,参数服务器(Parameter Server, PS) 架构应运而生。作为早期经典实现的ps-lite因其简洁性和完整性,成为理解PS原理的绝佳切入点。本文将…

IDEA 插件开发:Internal Actions 与 UI Inspector 快速定位 PSI

在开发 IntelliJ 平台插件的过程中,你常常需要搞清楚 某个 IDE 弹框背后是如何操作 PSI(Program Structure Interface) 的。下面这篇笔记将介绍如何通过 Internal Actions、UI Inspector 以及调试技巧快速定位 PSI 调用链。 1. 启用 Internal…

26考研|数学分析:多元函数微分学

前言 本章我们将进行多元函数微分学的学习,多元函数微分学与一元函数微分学相对应,涉及到可微性、中值定理、泰勒公式等诸多问题的探讨与研究,本章难度较大,在学习过程中需要进行深度思考与分析,才能真正掌握这一章的…

数星星--二分

https://www.matiji.net/exam/brushquestion/17/4498/F16DA07A4D99E21DFFEF46BD18FF68AD 二分思路不难&#xff0c;关键的区间内个数的确定 #include<bits/stdc.h> using namespace std; #define N 100011 #define inf 0x3f3f3f3f typedef long long ll; typedef pair&…

Oracle/PostgreSQL/MSSQL/MySQL函数实现对照表

函数列表清单 函数作用OraclePOSTGRESQLMSSQLMYSQL求字符串长度LENGTH(str)LENGTH(str)LEN(str)LENGTH(str)字符切割SUBSTR(str,index,length)SUBSTR(str,index,length)SUBSTRING(str,index,length)SUBSTRING(str,index,length)字符串连接str1||str2||str3...strNstr1||str2||…

pycharm客户端安装教程

二、 pycharm客户端安装 打开pycharm官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 选择其他版本 选择2018社区版本&#xff0c;点击下载 双击下载的安装程序(第一个弹框允许)&#xff0c;选择下一步 更改安装路径&#xff0c;在pycah…

博图SCL语言中用户自定义数据类型(UDT)使用详解

博图SCL语言中用户自定义数据类型&#xff08;UDT&#xff09;使用详解 一、UDT概述 用户自定义数据类型&#xff08;UDT&#xff09;是TIA Portal中强大的结构化工具&#xff0c;允许将多个相关变量组合成单一数据结构。UDT本质是可重用的数据模板&#xff0c;具有以下核心优…

Vscode自定义代码快捷方式

首选项>配置代码片段 >新建全局代码片段 (也可以选择你的语言 为了避免有的时候不生效 选择全局代码) {"console.log": { //名字"prefix": "log",//prefix 快捷键 &#xff1a; log"body": ["console.log($1);", //b…

ESP32 008 MicroPython Web框架库 Microdot 实现的网络文件服务器

以下是整合了所有功能的完整 main.py(在ESP32 007 MicroPython 适用于 Python 和 MicroPython 的小型 Web 框架库 Microdot基础上)&#xff0c;实现了&#xff1a; Wi‑Fi 自动连接&#xff08;支持静态 IP&#xff09;&#xff1b;SD 卡挂载&#xff1b;从 /sd/www/ 读取 HTML…

Mcp-git-ingest Quickstart

目录 配置例子 文档github链接&#xff1a;git_ingest.md 配置 {"mcpServers": {"mcp-git-ingest": {"command": "uvx","args": ["--from", "githttps://github.com/adhikasp/mcp-git-ingest", "…

(LeetCode 面试经典 150 题) 27.移除元素

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 思路详解&#xff1a; 样例模拟&#xff1a; 代码&#xff1a; C代码&#xff1a; Java代码&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接…

MySQL之事务原理深度解析

MySQL之事务原理深度解析 一、事务基础&#xff1a;ACID特性的本质1.1 事务的定义与核心作用1.2 ACID特性的内在联系 二、原子性与持久性的基石&#xff1a;日志系统2.1 Undo Log&#xff1a;原子性的实现核心2.2 Redo Log&#xff1a;持久性的保障2.3 双写缓冲&#xff08;Dou…

JUC:5.start()与run()

这两个方法都可以使线程进行运行&#xff0c;但是start只能用于第一次运行线程&#xff0c;后续要继续运行该线程需要使用run()方法。如果多次运行start()方法&#xff0c;会出现报错。 初次调用线程使用run()方法&#xff0c;无法使线程运行。 如果你对一个 Thread 实例直接调…