作者 | gongyouliu
编辑 | gongyouliu
提示:全文2.5万字,预计阅读时长2小时,可以先收藏再慢慢阅读。
我们在上一章介绍了chatGPT、大模型的基本概念、核心技术原理等基础知识,有了这些背景知识的铺垫,下面我们来介绍chatGPT、大模型在推荐系统中的应用,为了简单起见下面我们将chatGPT、大模型应用于推荐系统统称为大模型在推荐系统中的应用(其实大家都知道驱动chatGPT的底层技术也是大模型——基于GPT-3.5演化而来,只不过chatGPT基于对话进行了特定的优化,最终采用对话的方式为用户提供服务,这种方式可以革新传统的推荐系统交互逻辑,22.2.3节我们会讲到)。
预训练语言模型(Pre-trained Language Models,PLM)当模型参数、训练数据量增大后,会在下游任务中表现出一些独特的能力,比如复杂推理、知识发现、通用常识理解等。在学术界,当模型规模变大时(一般参数至少要超过10B,也就是100亿),出现前面提到的这些能力叫做能力涌现(emergent,关于能力涌现的介绍见参考文献1),具备这些能力的模型才是真正意义上的大模型(Large Language Models,LLM)。
能力涌现是一个非常重大的发现和突破。大模型通过海量数据的预训练(pre-training),学习到了一些基础的能力,预训练好的大模型具备通用的能力,可以应对一些没有进行针对性训练的下游任务(比如预训练后直接用于翻译),那么我们自然想到能不能用大模型做个性化推荐(因为对chatGPT、GPT-4等大模型来说,推荐系统也是一个下游任务)。
上面这个想法其实是可行的,目前有很多相关论文已经在利用大模型来解决推荐系统问题了,虽然目前的研究主要集中在学术界,但在不久的将来,我相信大模型一定能应用在企业级推荐系统中,就像深度学习在刚出现时也是在学术上进行推荐系统探索,最终工业界最主流的推荐算法都被深度学习推荐算法革新了。我认为大模型对推荐系统的革新会跟深度学习对推荐系统的革新如出一辙。
作者最近2个月通过研读非常多的大模型应用于推荐系统的论文,对大模型应用于推荐系统非常看好。本章基于作者自己的理解并结合众多论文来讲解大模型在推荐系统中的应用,让读者了解大模型怎么用于推荐系统,这个趋势是势不可挡的,提前让读者熟悉,也可以给读者更多的警示,希望读者多关注这方面的技术成果和应用场景落地。
具体来说,本章我们会从大模型为什么能应用于推荐系统、大模型在推荐系统上的应用方法、大模型应用于推荐系统的问题及挑战、大模型推荐系统的发展趋势与行业应用等4个维度来展开。希望读者通过本章的学习,了解大模型与推荐系统的关系。本章算是一个入门的综述,希望读者后面可以多花时间学习、研究、跟进并实践大模型推荐系统。
在讲解之前,这里提一下,我们本章的大模型推荐系统是一个比较宽泛的概念,利用BERT、T5、GPT系列、LLaMA系列等较大的预训练模型进行个性化推荐都在本章的讨论范围之内。
22.1 大模型为什么能应用于推荐系统
大模型是通过海量的互联网文本信息,通过在底层构建Transformer语言架构,预测下一个token(token可能是一个单词也可能是一个单词的一部分)出现的概率来训练模型的。由于有海量互联网文本数据,模型的训练过程不需要人工标注(当然是需要对数据进行预处理的),一旦模型完成预训练就可以用于解决语言理解和语言生成任务。简单来说,大模型基于海量文本中token序列中下一个token出现的概率进行统计建模,来学习在给定语言片段后出现下一个token的概率来解决下游任务(比如摘要、翻译、生成文本等)。
对于推荐系统,用户过往的操作行为其实就是一个有序的序列,每个用户的操作序列类似于一篇文本,所有用户的操作行为序列类似于大模型的训练语料库。那么预测用户下一个操作行为就类似于预测词序列的下一个token(这里推荐系统的物品类似语言模型中的一个token)。通过这个简单的类比,我们就知道推荐系统是可以嵌入到大模型的理论框架中的。因此,直观地看,大模型一定是可以用于解决推荐系统问题的。我们在下面22.2.3.1节介绍的BERT4Rec模型就是这么做的。
上面的这个思路算比较简单,只用到了用户与物品的交互信息。实际上,推荐系统的数据来源更复杂,除了有上面提到的用户交互序列,还有用户画像信息、物品画像信息等。部分用户画像、物品画像信息(比如用户的年龄、性别、偏好等,物品的标题、标签、描述文本等)也可以利用自然语言来呈现,行为交互序列、用户画像、物品画像等信息都可以输入到大模型中给大模型提供更多的背景知识,这样获得的推荐会更加精准。
推荐系统涉及到的数据很多都是多模态的(比如物品有描述文本、有图片、甚至有介绍的视频等),这些异构的信息对于推荐系统的效果相当重要(特定的深度学习推荐算法能够利用多种信息进行推荐系统建模)。当前的大模型以处理文本数据为主,还无法很好地处理多模态数据(虽然GPT-4具备部分多模态能力,midjourney、runway的Gen-2等能够基于文本生成图片、视频等),因此,利用大模型解决好推荐系统相关的问题、带来比较好的业务效果也是任重道远的。
虽然大模型暂时还无法充分利用推荐系统的所有多模态数据,但是利用好文本数据就已经很强大了。大模型最强大之处是具备zero-shot、few-shot的能力(简单解释一下,zero-shot就是预训练后直接可以解决未知下游任务,few-shot就是给出几个式例,大模型可以解决类似的问题,即所谓的in-context learning能力,也就是举一反三的能力)。这个两个强大的能力是可以用于解决推荐问题的,有很多论文就是利用了大模型这两个能力进行推荐,只不过需要在使用大模型过程中设计一些prompt(提示)和模板(template)来激活大模型的推荐能力(这里说一下我个人对激活的理解,大模型有上百亿、上千亿、甚至上万亿参数,是一个非常庞大的神经网络,当用一些prompt告诉大模型作为一个推荐系统角色进行推荐时,就激活了深度神经网络中的某些连接,这些连接是神经网络的某个子网络,而这个子网络具备进行个性化推荐的能力,这个过程非常类似人类大脑神经元的工作机制,比如你看到美食时,就会激活大脑中负责进食的区域——这个区域是大脑整个复杂神经元网络的子网络,导致看到美食可能流口水、吞咽等行为,这里看到美食就类似大模型的prompt)。对于few-shot可能更复杂一些,需要在prompt中告诉大模型一些怎么进行推荐的案例(比如用户看了A、B、C三个视频后,会看另外一个视频D),让它临时学习怎么做推荐。
prompt学习是没有改变大模型的参数的(即没有进行梯度下降的反向传播训练),但为什么具备few-shot的能力呢?这还是上面说的,prompt作为一个整体,激活了大模型神经网络的某个功能区域。大模型具备多伦对话能力的道理也是类似的,我们可以将多伦对话作为一个整体,这个整体激活了大模型在某个对话主题下的功能区域,导致大模型能“记住”(因为是将这个对话作为整体输入大模型的)多伦对话之前的信息。但是这个对话中的新信息是没有被大模型学习到的,因为目前的大模型不具备增量学习的能力(也就是遇到一个新信息马上学习到了模型的参数中,人是具备增量学习能力的,增量学习肯定是大模型未来最重要的一个发展方向)。
另外,大模型还可以帮助缓解数据稀疏性问题,特别是冷启动问题(因为大模型学习的是海量的互联网的知识,对于新物品、新用户都可以很好应对冷启动问题,我们下面会讲解),这是当前深度学习推荐模型的主要瓶颈。通过从不同模型架构中学习的预训练模型中提取和迁移知识,可以在从通用性、稀疏性、效率和有效性等多个角度提高推荐系统的性能。
大模型另外一个很大的优势是可以利用对话的方式跟用户互动,就如chatGPT所呈现的那样,如果能将推荐系统设计成一个跟用户互动的对话式推荐引擎,那么大模型可以利用自然语言响应用户的个性化需求,从而提高用户整体体验和参与度。
通过上面的介绍,相信读者能够大致知道为什么大模型可以应用于推荐系统了,也知道了大模型应用于推荐系统的几个独特的优势,那么大模型怎么应用于推荐系统呢?这就是我们下一节要讲解的主题,也是本章最核心的主题。
22.2 大模型在推荐系统上的应用方法
大模型由于其压缩了海量的世界知识,能够以语言理解、语言生成和对话的方式解决各类问题,有了上一节的铺垫,我们知道大模型的这些能力可以用在推荐系统整个链路中的各个部分。下面我们就从数据处理与特征工程、召回与排序、交互控制、冷启动、推荐解释、跨领域推荐等6个维度来讲解大模型怎么赋能推荐系统。
22.2.1 大模型用于数据处理、特征工程
大模型具备文本生成的能力,这是大模型最直接、最被大众感知的能力。文本生成当然也可以直接用于个性化推荐的数据生成中。我们知道在很多场景下,推荐系统存在数据不足的问题(比如产品刚发布,没有太多用户和用户行为数据),那么利用大模型生成辅助数据就是一个非常朴素的想法。
参考文献2提供了一种基于大模型微调的方法针对表格数据(也就是可以利用Excel、MySQL等这样的表格形式来存储的数据,这也是推荐系统中最核心的一类数据,用户画像、物品画像都可以以这种形式的数据存放)生成样本的方法——GReaT。先将表格数据构成文本输入大模型进行微调(见下面图1),微调后的模型就可以基于一定的策略来生成新样本了(见下面图2)。该方法可以保证生成的样本跟原始样本分布一致,这对于数据量不足的推荐场景是一个比较好的补充。与其它方法相比,GReaT允许在没有对模型重新训练(只需要在大模型上进行微调)的情况下,可以对特征子集进行任意组合,即可以通过对任何特征名称或特征名称和值的组合进行数据采样。除了可以用来生成新的样本数据,对数据的缺失值进行补充也是可行的。
图1:微调步骤的GReaT数据管道。首先,文本编码步骤将表格数据转换为有意义的文本(a)。随后应用特征顺序置换步骤(b),最后获得的句子可以用于大型语言模型的微调(c)。(图片来源于参考文献2)
图2:合成数据生成方法的采样过程。为了使用预训练的LLM生成新的数据,需要将单个特征名称或特征值对的任意组合转换为文本(a)。随后,输入微调后的LLM完成采样(b),最终可以被转换回表格格式(c)。(图片来源于参考文献2)
在传统的推荐系统中,结构化数据通常被转为one-hot编码,并且采用简单的嵌入层作为特征编码器来获得稠密的嵌入表示。随着语言模型的出现,我们完全可以采用大模型作为辅助文本特征编码器,比如可以利用BERT将各类信息(物品标题、标签、描述文本等)进行嵌入获得嵌入向量作为其它推荐模型(可以是大模型,也可以是传统的推荐模型)的输入特征。
利用大模型获取新的特征,可以获得两大好处:(1)为后期的神经网络推荐模型进一步丰富具有语义信息的用户/物品表示;(2) 以自然语言为桥梁实现跨领域推荐,因为跨领域的特征可能不共享。
22.2.2 大模型用于召回、排序
推荐系统最核心的模块莫过于召回、排序了,我们在本书前面的章节中讲了很多召回、排序的策略和算法。大模型也能应用于召回、排序,可以说,这是大模型在推荐系统中最主流、最核心的应用了,下面我们就来重点介绍。
在讲解之前,我们先说一下大模型应用于召回、排序的使用方式。我们知道大模型一般会分为预训练、微调两个阶段,那么针对大模型应用于推荐系统,就可以有3种最主要的使用方式(参考下面图3),分别是:利用推荐系统的数据进行预训练再进行推断(即下面的预训练范式)、利用预训练好的大模型进行微调再进行推断(即下面的预训练、微调范式)、利用预训练好的大模型通过prompt进行推断(即下面的预训练、提示范式)。下面的讲解我们也是按照这3种方式分别展开。
图3:语言模型应用于推荐系统的一般范式(图片来源于参考文献4)
22.2.2.1 预训练(pre-training)范式
所谓预训练方式就是利用推荐系统相关数据来预训练大模型,然后让大模型直接进行推荐召回、排序,这相当于构建一个推荐系统领域的垂直大模型。一般来说,由于推荐系统数据量相对互联网海量文本来说,规模较小(即使是抖音这样的公司,用户行为数据也无法跟互联网海量数据相提并论),数据形式也比较特殊(22.1节提到了),所以这种预训练的方式一般基于一个中等规模的开源大模型来预训练,比如基于BERT、T5、M6(阿里的大模型)来进行预训练。基于BERT的推荐算法读者可以阅读参考文献3(文献中该方法称为U-BERT)、5(文献中该方法称为BERT4Rec),基于T5开源模型的预训练方法读者可以阅读参考文献6(文献中该方法陈为P5),基于M6的预训练大模型推荐系统,读者可以阅读参考文献7(文献中该方法陈为M6-Rec)。
BERT4Rec基于Transformer和BERT架构来学习一个双向的神经网络大模型,为了避免信息泄露(双向的模型导致用户行为序列中后面待预测的物品也用于了建模,相当于提前泄露了信息),采用完形填空(Cloze)目标函数进行训练,也就是随机遮盖(mask)序列中的某个token,通过模型来预测该遮盖的token的概率来建模,这也是完形填空目标函数这个词组的由来。
下面简单说一下该模型的核心思想(模型架构见下面的图4)。在序列推荐(sequential recommendation,即预测下一个)任务中,代表用户集,
代表物品集,列表
是用户
按照时间排列的交互序列,这里
是用户u在时间t进行交互的物品,
是用户u的交互序列的长度。给定交互历史
,顺序推荐旨在预测用户u在时间
与之交互的物品。它可以被形式化为在时间步骤
对用户u的所有可能的交互物品的概率进行建模:
。
BERT4Rec由于可以利用预测token前后的token信息,能够获得更多的样本数据,也跟实际上用户的行为序列之间的依赖关系保持一致(也即用户行为序列中间的物品确实是跟前后都有关联的),因此效果是非常不错的。参考文献8中提出的一种算法SASRec就是一个单向的自注意力网络,BERT4Rec可以看成它的一种自然推广。
图4:BERT4Rec通过完形填空任务(Cloze task)学习双向模型