前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习

前沿重器

栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经是20年的事了!)

2023年文章合集发布了!在这里:又添十万字-CS的陋室2023年文章合集来袭

往期回顾

大模型推荐系统最近似乎有些势头,我也就开始进行了解,今天打算讲解一下这篇文章:

这篇文章中了sigir2024,因为自己认为比较有代表性,所以想拿来分享一下。

目录:

  • 想先讲一下这篇文章是怎么发现的

  • 论文思路

    • ID生成器

    • 基础推荐器

  • 模型

    • ID生成器训练

    • 基础推荐器训练

    • 模型选择

  • 实验

    • 个人理解

想先讲一下这篇文章是怎么发现的

感觉这点挺有意思的,所以想先分享一下。最近是留意到google search的一篇不需要微调就能做推荐系统的大模型方案:STAR: A Simple Training-free Approach for Recommendations using Large Language Models,本来看着好好的,结果看到实验部分发现了这个:

这个IDGenRec在客场以大幅度优势打赢了其他模型,甚至还能赢下论文主场的STAR,所以我自己认为这篇论文的优先级甚至更高于最近的STAR。STAR我应该也会写,不过今天还是先介绍IDGenRec吧。

论文思路

在intro中,作者给出的问题是希望语言模型能够更好的表征特征,常规的利用方式更多只是学习到每个数据集下ID的共现模式,而非真正表征具体特征的文字信息,同时对零样本的推荐能力也受到制约,作者给出的解决方案是,可以考虑把物料或者用户信息表征成可解释的显式文本信息,这样能充分发挥语言模型对文本的表征能力,类似达到下面这样的效果。

而放在推荐系统整体的推荐上,则是这个结构:

这里的核心是两个模型,一个是id生成器(ID Generator),一个是基础推荐器(Base Recommender),前者可以把物料(item)转化为一个简单的token表述(也就是论文内说的id),后者则可以结合prompt直接预测出最适合的推荐id,这个id本身的语义毫无疑问也可以用于做后续的向量召回、精排等。

这里有个细节,就是进入基础推荐器的模板,图上给出的模板是"User [user_id] has interacted with items [item1], [item2], ... what is next recommendation?",当然还可以结合很多场景设计不同的模板,"User [user_ID] has purchased items [item_ID], [item_ID], ...,[item_ID]; predict the next possible item to be bought by the user",这个所谓的模板毫无疑问就是现在所说的prompt模板了。

ID生成器

首先就是本文的一大重点------ID生成器,ID生成器,按照前文的这张图可以知道,说白了就是把一串的物料特征转化为显式的特征tokens。

当然根据不同数据集,作者也给出了大量案例,借此大家可以观察到具体特征规范的输入方式:

这里可以发现一个相比一般推荐系统模型而言很大的优势,就是特征的灵活性,因为语言模型本身能输入的内容非常灵活,因此常规的特征名、特征个数、数据类型的变化,不需要过分影响模型的输入结构,只需要修改这里头的文本内容即可。文章中的格式一般是这样的:"key1:value1, key2:value2, key3:value3..."

按照文章描述,但值得注意的是,ID的生成要满足两个条件:

  • id的长度要合适。

  • id要尽量唯一。

然而这两点无疑是矛盾的,这里作者的解决方案是DBS(Diverse Beam Search, DBS),这个并非论文提出的方案,简单的说就是在生成的时候加入一个多样性的惩罚因子,而与原方案略有不同的是,这里的重复会设置一个最大阈值,如果大于这个阈值仍无法产生唯一ID,则会适当放松条件。

这里我自己的感觉是有几个瑕疵:

  • 首先,ID生成的两个条件。在推荐系统里,唯一的要求似乎没那么高(不是说不用,只是程度这个应该是需要把控的),某种程度上,可能提取一些关键重要的信息来表征这个物料说不定就够了;当然长度这个事应该确实是个问题,毕竟后续这个ID是要输入到推荐器的模板里的。

  • 这个DBS只解决了唯一的问题,但是对长度合适的控制,好像并没有说明白。

基础推荐器

基础推荐器前文已经简单地描述过一遍了,说白了就是把用户id和历史id通过模板拼接起来给到模型预测出最终适合的id就好了,预测方式就是自回归了。

这里再补充一个细节,因为实际任务中要求的是预测出下一个合适点击的结果,推荐系统推的内容无疑只能在给定的库内搜索,转化为抽象问题就是应该在一个受限的数据集中筛选,即"constrained sequence decoding strategy",具体的操作是构造前缀树,每次的推理解码选择只能在前缀树下有限生成(Nicola De Cao, Gautier Izacard, Sebastian Riedel, and Fabio Petroni. 2020. Autoregressive entity retrieval. arXiv preprint arXiv:2010.00904 (2020).)。

模型

重头戏就是模型的训练了,这个系统下两个模型,如何有效训练,让两者更好协同就是关键。

本文给出的解决方案是交替训练,原因是ID生成器的生成内容直接而且大幅影响推荐器的逻辑,但是ID生成器的效果好坏需要通过推荐器来体现,所以就必须采取交替的方式进行,具体方案会比较简单,下面两个模式交替进行:

  • ID生成器固定,训练推荐器若干个epoch。

  • 推荐器固定,训练ID生成器若干个epoch。

在这个大框架下,就能推动训练ID生成器和推荐器了,剩下的问题就是ID生成器和推荐器各自如何训练了。

推荐器训练

先来说比较简单的推荐器,直接比对预测的物料ID(当然这个是ID生成器生成的)和实际的物料ID是否一样,这里的细节是,实际物料的ID是用生成器ID提前计算得到的。

ID生成器训练

ID生成器的训练就比较复杂,因为ID生成器生成的文本ID是离散的,这导致我们并不能很好地计算损失和反向传播,文章中给的方案看起来感觉有些不好懂,代码也有看着有些跳跃(代码写的很细,里面也有很多python相关的高级语法,可以多看看学习),我斗胆按照我的理解说一下。

尽管ID生成器的结果是离散的,但依旧可以算出生成有限ID集下每个ID的概率,依照这些ID的概率,利用推荐器模型的embedding,可以做向量的加权求和,用加权求和的这个embedding代替原来推荐器模板prompt内物料ID的那些token进行推理,这个模式的推理,便能把ID生成器和推荐器串联起来,方便进行反向传播。

不得不说,作者在这块的设计真的是别出心裁,既保留了原本ID生成器在ID层面的可解释性,也充分解决了ID生成器内部无法训练的问题。

模型选择

模型选择上,这里两个模型,作者均选择的是T5模型,这里有两个原因,一个是保证模型的简单性,另一个是对齐现有的其他LLM推荐系统方案,有一个细节是,ID生成器的模型选用的并非通用的T5,而是一个经过过做文章标签生成微调任务的T5模型来作为base进行进一步训练。根据源码,模型选择如下:

  • ID生成器:nandakishormpai/t5-small-machine-articles-tag-generation

  • 推荐器:t5-small

实验

实验里的大部分内容基本符合预期,这里比较令人关注的应该是消融实验和零样本效果评估吧,我就说这两个,其他的实验大家有兴趣翻一下论文吧。

首先是消融实验,这里作者关注的是交替训练的必要性,于是做了两个消融实验,一个是仅训练ID生成器,另一个是仅训练推荐器,结果显示仅训练ID生成器得到的效果很差,但是仅训练推荐器的效果其实已经不错,已经能超过很多现有算法的水平,但相比交替训练效果还有不小差距。个人理解可能是因为推荐器在下游,一般经验而言,在大部分情况下,下游模型的优化对总体的效果调优收益更大,除非上游的短板太过明显。

零样本这块的效果相比UniSRec这个baseline提升还是非常明显的(虽然只拿这个对比说服力确实不够),一定程度说明,比较程度的预训练任务,应该是能让这个框架(两个模型)在更多推荐场景下得到更好的效果,存在预训练后的泛用性,可迁移能力变得很强,当然很大可能在更大规模模型和训练下,会有更强的可迁移能力吧。

个人理解

看完之后自己有如下的收获、思考和槽点,在这里逐个聊一下:

  • 首先从结果导向,我们可以比较自信地理解,目前的语言模型确实能理解这种零散复杂特征,并将其用于特定的推荐任务,换言之,可能在更多的领域,类似一些机器学习的问题,也可以考虑用这种语言模型的方式来做预测,可用性上应该是没什么问题。

  • 然而,从这篇论文里,我们无法得知,语言模型的这种流派,是否能打败同等级的机器学习方案,或者是目前已经被研究多年的主流推荐系统方案,按照自己过去经验的理解,这个实验没有做,很大程度是因为做了但打不过,按照现在读论文的视角看,我只能推断了,因此这只是个备选方案,相比正儿八经的特征工程和常规的特征处理模式,仍然有一定优势。当然,如果有做过实验或者读过类似有这个对比的论文的大佬,欢迎指出。

  • 论文里目前使用的语言模型仍旧是T5,在2024年这个时间线下看确实是有点小了,甚至是T5-small,诚然因为要对齐之前的sota,但更大一些的模型,甚至是目前意义的大模型,也有必要做实验,否则不太能对得上扣在论文里的LLM的帽子。

  • T5模型似乎有一些大模型-小模型二象性。在一些论文里,论文声称自己某个方案下,会用小模型解决,结果看论文里发现是T5,甚至是T5-large,而在另一些论文里,例如这篇文章,生成自己研究的是LLM,结果用的是T5,甚至是T5-small,就有些尴尬。

  • 论文的建模和结论可以发现,"万物皆可seq2seq"这个思路仍然可以继续沿用,特征文本化后用于各类型的任务,似乎还是不错的,这可能是对NLPer们做非NLP任务的一个福音,甚至是多类型特征综合处理的一种方案(多模态??)。效果可能并非顶尖,但终究是可简单快速尝试的baseline方案。

  • 数字在NLP类模型的效果不好似乎是一个目前公认的难题了,目前已有的推荐数据集在这块的体现并不是很多,但在更多领域,数字类特征占主要地位的场景下,这个方案是否会暴露的更明显,不得而知,仍有待具体实验。NLP对数字理解问题的短板,也有待进一步的探索。

  • 零样本实验可见,这个甚至有一定的泛用性。

  • 消融实验一定程度也表明,推荐在这种LLM方案的大背景下,拆解后的定向优化,是有效果的,毕竟拆解后只优化推荐器,也比一个模型的其他方案效果要好了。

相关推荐
不太可爱的叶某人42 分钟前
【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
笔记·学习·mysql
岁岁岁平安44 分钟前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
知识分享小能手3 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
HuggingFace3 小时前
Hugging Face 开源机器人 Reachy Mini 开启预定
人工智能
pay4fun3 小时前
2048-控制台版本
c++·学习
企企通采购云平台4 小时前
「天元宠物」×企企通,加速数智化升级,“链”接萌宠消费新蓝海
大数据·人工智能·宠物
超级小忍4 小时前
Spring AI ETL Pipeline使用指南
人工智能·spring
张较瘦_4 小时前
[论文阅读] 人工智能 | 读懂Meta-Fair:让LLM摆脱偏见的自动化测试新方法
论文阅读·人工智能
知识分享小能手4 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
巴伦是只猫5 小时前
【机器学习笔记 Ⅲ】4 特征选择
人工智能·笔记·机器学习