“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
地址:https://www.zhihu.com/people/peter-26-31-2
这是我的个人研究生毕业论文,如果您有任何的问题,可以私信我,我会尽最大努力回答您。英文版讲解视频:https://www.bilibili.com/video/BV1QK4y1J7SQ/源代码及论文:https://github.com/Peterhd1/-(P.s. 以下出现的“我们”其实都只有“我”,我加个“们”字会显得不那么孤独,也笃定一点。)01
推荐系统可以帮助用户在庞大数量的信息洪流中找到自己需要的信息。作为推荐系统的一个重要分支,基于会话的推荐系统(SBRS)主要利用用户的匿名数据(比如用户的点击流信息)推荐产品给用户。相比传统的基于内容的推荐系统(CBRS)和基于协同过滤的推荐系统(CF),SBRS更加关注用户眼下的需求。比如说,传统推荐系统会因为你很久之前搜索了笔记本而在你打开商店时继续推荐笔记本,而SBRS则会根据你目前搜索的商品而推荐同类型商品。SBRS的好处在于,用户并不需要注册就能得到精准的推荐商品。在信息法律越来越健全,用户对个人隐私越来越关注的今天,获取用户实名数据会变得更加昂贵,这种不需要用户信息就能进行精准推荐的系统会在未来更加流行。目前比较成熟的SBRS主要是RNN推荐系统,该算法在2016年左右开始逐渐成为了SBRS的主流。然而,以RNN为基础的SBRS也存在一些缺陷,比如它会忽略一些远距离的物品转换(比如你搜索了烤箱,通常系统会给你推送更多烤箱,而不是推荐隔热手套和烤盘)。图神经(GNN)推荐系统用它独特的图神经构造弥补了这一缺陷,这也是我为什么对GNN推荐系统产生兴趣。在进一步的研究中我发现,在RNN-SBRS的发展过程中,停留时间的加入提高了RNN-SBRS的精准度。于是我开始思考,在GNN-SBRS中也加入停留时间是否也可以提高GNN-SBRS的精准度。抱着这一猜想,我开始探寻在GNN中加入停留时间的可能性。由于目前对GNN推荐系统的认识还处于比较初级的阶段,本篇论文主要探讨了以下三点:1.如何在会话图(session graph)中加入停留时间?2.停留时间是否为图神经推荐系统提供了更多的推荐信息?3.在GNN-SBRS中加入停留时间是否可以提高推荐准确度?02
本实验所用数据来自于一家欧洲的大型体育用品网店的数据仓库。由于版权限制,很抱歉我无法把数据共享给大家。SBRS推荐系统的目标就是根据用户短时间内的点击流数据预测出用户的下一个会点击的产品。在本实验中,所有的商品的集合我们把它叫做V,于是就有:在这个集合中,所有的商品点击v都按时间顺序排列。每一次商品点击所用的时间可以表示为:
比如,从第一个商品到第二个商品用了t1秒,这就是用户浏览第一个商品所用的时间,以此类推。我们的GNN-SBRS以点击流数据S和间隔时间集合T为输入,为每一个商品输出一个几率p,最终在展示页面上用户会看到前N个有最高几率的产品。数据库中的时间是以毫秒为单位的,从前人的经验来看,把单位换算成秒可以为停留时间降噪,获得纯度更高的实验数据。除此以外,一次会话的停留时间参差不齐会导致结果受极值影响过大,还需要对时间进行归一化处理。在这里我们主要运用了两种方式同步实验,以探究停留时间在GNN-SBRS提供了什么信息。第一种是正归一化,如果商品之间的联系与停留时间呈正相关,正归一化会产出更高的精准度:第二种是反归一化,如果商品之间的联系与停留时间呈负相关,反归一化会产出更高的精准度:
其实除了这两种归一化的方法,我也尝试了很多其他可以可以增强鲁棒性的方法(比如中位数,分位数等),但是由于极值在本实验中过于常见,其他方法都没有这两种效果好。图纸是图神经的主要信息结构,如图1所示,每一个用户的每一次会话都会被转化成图纸输入到推荐系统中。在我们的系统中,图是由节点和边构成的,节点就是么一个用户浏览过的商品,边则同时存储了两种信息:跳转次数和停留时间。跳转次数是指用户在同一会话中重复从A商品跳转到B商品的次数。比如:用户会话为[勺子,苹果,耳机,勺子,苹果],那么勺子到苹果之间就进行了两次跳转,值得注意的是,苹果跳转到勺子和勺子跳转到苹果是两种跳转。为了探究时间在图神经推荐系统中的作用,我们设定了三种情况:本研究最大的难点出现在这一步中。现在已知的图神经系统中,边通常只能保存一种信息,但我们需要两种信息(跳转次数,停留时间)同时参考,这个问题有两种解决方法,从输入端来说,我们可以对这两种信息进行降维。我尝试了一些降维方法,比如PCA,SVD,和Encoder-Decoder,效果都不好,原因在于这些方法在数据中保留了太多来自停留时间的噪音,反而使精确度大大下降。这就好比一个人说话我们能听清,两个人同时说话我们就很难明白他们在说什么了。第二种解决方法就是制造新的图神经算法,其中我认为最有希望成功的是用auto-encoder在降维的同时降噪,这样就能最大限度的保持信息完整度,就好像我们训练一个新生儿,让他从小就会用左右耳分别听声音,长大了自然就可以同时听两个人说话,由于数据库使用时间有限,我并没有完成auto-encoder的尝试,非常遗憾。GNN系统的学习过程详见图1,首先是将会话转化为会话图,我们在第二步中已完成这一工作,接下来我们用GCN层来为每一张图制造会话代表,会话代表在结构上与会话图完全一致,但是每一个节点所包含的信息都发生了改变,可以理解为每一个节点斗从相邻的节点通过边吸收了信息。这些会话代表进而会被读出系统处理,最后为每一个商品读出一个几率y。在这一步中,难点在于GNN算法的选择,GCN实际上是一种无奈之举,目前除了我国前辈研发的FGNN和SR-GNN,没有特别多图神经在推荐系统的应用,然而由于这些前辈的源代码过于高深,难以复现,我退而求其次选择了结构比较简单的GCN算法,但这并不会影响实验的重要性,因为我们不是在追求准确度,而是追求提高的可能。在这一步中,我们用用户的目前兴趣和总体兴趣制作成混合兴趣,再把混合兴趣与每一种商品做转置(transpose),得到的Z-score再用softmax做概率分布,然后输出拥有最高概率的N件商品。用户的目前兴趣可以简单定义为用户最后点击的商品,用户的总体兴趣稍微复杂些,是用soft-attention来确定各种产品的重要性后形成的代表。(这部分算法比较复杂,请打开我得论文看详情)03
我们可以发现,表现最好的是“边中只有跳转次数,没有停留时间”。其实我们刚刚已经提到了原因,加入时间对于系统来说是种噪音,粗暴的降噪方式并不能起到很好的效果。但是我们惊喜的发现,在只有停留时间的实验中,我们也获得了相当不错的结果,这就说明停留时间确实为预测提供了有用的信息。而且就作用而言,甚至不亚于跳转次数。(当然这只是这次数据的结果,我们还需要更多数据来确定这一点,但我相信不会差到哪里去)更有意思的是,通过对比正规一化和反归一化的数据,我们发现停留时间与商品之间的联系是成反比的。也就是说停留时间越短,商品之间的联系就越大,这与RNN-SBRS的发现正好相反。目前我们无法得知为什么会出现这种情况,但是我认为,这是由于人们在浏览商品时,实际上是在学习商品。比方说小明要买一顶帽子,他就需要决定款式,品牌,颜色等一系列参数。越是差异性大的两个产品,小明需要学习的时间越长,比如棒球帽和瓜皮帽就很不同,从棒球帽跳转到瓜皮帽,他需要重新思考瓜皮帽适不适合他等问题,但是随着他继续浏览,他的兴趣开始慢慢收敛,他开始有了非常明确的需求,比如小明发现他喜欢耐克的棒球帽,而且还喜欢蓝色,于是他的目标就是耐克牌蓝色的棒球帽,他浏览的速度开始加快,只要不符合需求就快速跳转到下一商品。你或许会觉得你就不是这样的消费者,确实如此,但小明是一个抽象出来的普遍用户,从宏观的角度来讲,收敛兴趣是人们购物时的主要现象。04
这是我第一次尝试如此全新的领域,也是第一次为学术探索填一小粒沙子。不难看出,这项研究有不少遗憾和可以改进的地方,但对于我本人来说却一点都不遗憾,因为它是我拼尽全力的诚实之作,每一行代码和文字都是经过深思熟虑的结果,每一个想到的想法都被尝试过,所有的实验过程都可以被复现,虽然结果并不漂亮,但我依然为我小小的发现感到欣喜若狂,在最后讨论结果时,甚至留下了激动的泪水。其实很多次我都想放弃,因为我觉得我的研究注定不会引起重视,我也知道其实GNN-SBRS或许在很长的时间都不会被应用,但我的导师说,科学的目的,不是更快,更好,更强,而是真相。希望我以后再次翻看我写的论文时,依然是那个守护手中的烛火,小心在风中行走的僧侣。
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“源头活水”历史文章
更多源头活水专栏文章,
请点击文章底部“阅读原文”查看
分享、在看,给个三连击呗!