前沿重器[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方案的大背景下,拆解后的定向优化,是有效果的,毕竟拆解后只优化推荐器,也比一个模型的其他方案效果要好了。

相关推荐
DREAM依旧15 分钟前
隐马尔科夫模型|前向算法|Viterbi 算法
人工智能
ROBOT玲玉18 分钟前
Milvus 中,FieldSchema 的 dim 参数和索引参数中的 “nlist“ 的区别
python·机器学习·numpy
GocNeverGiveUp28 分钟前
机器学习2-NumPy
人工智能·机器学习·numpy
虾球xz1 小时前
游戏引擎学习第55天
学习·游戏引擎
浊酒南街1 小时前
决策树(理论知识1)
算法·决策树·机器学习
oneouto1 小时前
selenium学习笔记(二)
笔记·学习·selenium
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条1 小时前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
sealaugh321 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
18号房客2 小时前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn