当前位置: 首页 > 编程日记 > 正文

数十篇推荐系统论文被批无法复现:源码、数据集均缺失,性能难达预期

640?wx_fmt=png


作者 | Maurizio Ferrari Dacrema

译者 | 凯隐

责编 | Jane

出品 | AI科技大本营(ID: rgznai100)


【导读】来自意大利米兰理工大学的 Maurizio 团队近日发表了一篇极具批判性的文章,剑指推荐系统领域的其他数十篇论文,指出这些论文中基于深度学习的推荐算法大部分都存在不同程度的数据集缺失和源码缺失,导致它们无法复现,而那些可复现的算法,其性能也难以达到预期,甚至难以超越基于传统的、简单的机器学习推荐算法。

 

推荐系统领域研究的潜在问题

 

近年来,基于深度学习的算法是非常热门的研究方向,其在许多领域,如计算机视觉,自然语言处理等领域都取得了巨大的成功,因此许多研究人员也期待能借助深度学习方法在推荐系统领域取得突出的进展,例如基于长期依赖配置和基于场景的 top-n 推荐算法。近年来也有许多基于深度学习的推荐算法发表在知名会议和期刊上,然而过去有工作指出这些深度学习推荐算法并不是完全可信的,主要存在以下三个问题:

 

  • 许多声称有提升的方法事实上并不能超越经过合理调参的基准对比工作,甚至不能超越很简单的传统方法。具体来说,这些方法在实验上存在一定的缺陷。

 

  • 基准对比工作的选择问题:许多方法选择的对比工作本身就有问题,不是广义上的基准工作。并且该领域的基准工作很混乱,不太统一。

 

  • 不同工作采用的数据集,验证方法,性能指标,数据预处理步骤都不同,这使得性能对比很困难,无法确定哪个工作在相同的应用环境中表现最好。而且很多工作不开源数据和代码,这不符合现在的代码开源趋势,甚至即使开源了,也不把完整代码放出来。

 

系统的算法评估标准

 

为了深入探究基于深度学习的推荐算法是否存在以上问题,作者制定了两个算法评估标准:

 

  1. 可复现性:能否通过代码和数据集重现文中的实验结果

  2. 性能评估:这些工作和基准工作相比能提高多少

 

在此标准的基础上,作者评估了近几年发表在顶尖会议上,运用深度学习方法来实现 top-n 推荐的 18 篇工作,最后发现:只有七篇工作是可复现的;而这 7 篇工作中,有 6 篇都没能超越传统的、经过合理调参的启发式方法。即使是简单地将最流行的items推荐给每个用户(TopPopular),也能在特定的性能指标衡量下超越深度学习方法达到最优。

 

文章可复现性判断

 

(一)调研文章范围 

 

作者收集了2015年到2018年 KDD、SIGIR、WWW 和 RecSys 会议上的研究工作,这些论文都是采用基于深度学习的方法来解决top-n分类问题的。在此基础上,只考虑与精度评估有关的工作,因此最终筛选出了18篇文章。


640?wx_fmt=png


(二)可复现性的数据和代码标准

 

首先,尽量通过文章原作者提供的源码和数据来复现结果。由于有太多的实现细节以及验证程序需要考虑,想要单纯的依靠作者提供的资源来重现文中的结果是很难的。为了解决这个问题,作者扩大了代码和数据的搜索范围,只要是和原文章有关的代码,即便不是官方代码也考虑在内,如果实在找不到现成的实现代码和数据,就联系原文作者并等待30天。在进行了以上步骤后,将同时满足以下两个条件的文章定性为可复现文章,具体的:

 

1、有源代码,并且源代码只需要微小的细节改动(例如调整路径,调整工作环境)就能正确运行。如果只是有一个代码框架,而缺少许多细节,是不满足这个要求的。

 

2、至少有一个文中用到的数据集是可以获得并使用的(某些文章用的数据集是自建数据集或者不是公开数据集,对于作者而言很难获取)。而且训练集和验证集的划分方法也是在文中或者源码中进行明确阐述的。

 

最终,18篇文章中只有 7 篇满足以上条件,具备可复现性。作者还表示:“这是一个惊人的结果,如果深入追究可能会涉及到学术造假问题,就不贴那些结果不能复现的文章编号了”。

 

可复现工作的性能评估

 

在挑选出 7 篇可复现的工作后,作者进一步的评估了它们的性能。为了保证不同方法之间的可对比性,本文介绍了两种评估策略。第一种评估策略是将所用的方法和基准方法在同样的测试流程和测试集上进行评估,这有助于横向对比不同的方法在同一数据集上的性能差异,虽然这种策略在之前的类似文章中已经用过,但会导致验证方法和每个方法的原始文章中采用的方法有一定的差距,因此不能完全反应原始方法的性能(不完全复现)。

 

为了解决这个问题,作者提出将超参调优过程和测试过程分开进行,保证所有的方法(包括基准)方法都使用相同的测试代码,但是允许它们有不同的调参过程,这样每种方法都可以按照原文中提出的调参策略在自己的数据集上,即保证完全复现了原文方法,又保证不同方法之间具有可对比性。

 

基准方法的选择

 

所有的基准方法都是简单的非神经网络,启发式算法,或者说基于传统机器学习和统计学的方法。选择简单的非深度学习方法作为基准方法,通过和基于深度学习的方法进行对比,以验证模型复杂度的提升能否带来性能上的显著提升,作者得到的结论是不能。一方面是因为该领域的研究过于跟风使用深度学习方法,没有细致严谨地去研究问题的本质,另一方面也是因为神经网络本身没有那么强大(现在有许多工作都是对神经网络的真实能力提出了质疑),当然,学术上的不严谨也是一个重要原因(可能存在的造假行为)。

 

本文主要采用了如下几种基准方法:

 

  • TopPopular:直接统计“最流行”的items(物品,项目)并推荐给每个用户,这里的“最流行”可以用不同的指标来衡量。

 

  • ItemKNN:基于K最近邻算法的一种推荐算法,衡量指标是物品之间的距离,因此是基于相似物品的推荐算法。首先通过TF-IDF或BM25算法获取每个物品对每个用户的隐式评分(评价向量,rating vector,可以简单理解为该用户对该物品的需求程度),然后按照以下公式计算两个物品之间的距离:

 

640?wx_fmt=png

 

  • UserKNN:基于相似用户的推荐算法,类似于ItemKNN,只不过计算样本点变成了每个用户自身的评级。

 

  • ItemKNN-CBF:基于内容过滤的相似物品推荐算法,CBF表示content-based-filtering,在标准ItemKNN的基础上,将物品自己的特征向量作为距离衡量向量。

 

640?wx_fmt=png

 

  • ItemKNN-CFCBF:将每个物品的排名向量和特征向量结合,这样每个物品就由两个向量表示,通过计算两个物品的向量之间的余弦夹角来衡量相似度。

 

  • 640?wx_fmt=png  :基于随机游走的方法,从用户 u 游走到物品 i 的概率为:


640?wx_fmt=png

 

是物品 i 对用户 u 的评级向量,是用户 u 的评级,α 是阻尼因子。同理,从商品 i 游走到用户 u 的概率为:


640?wx_fmt=jpeg

 

其中是商品 i 的评级。最后,两个商品 i,j 的相似度计算公式为:


640?wx_fmt=png

 

640?wx_fmt=png  是 640?wx_fmt=jpeg 另一个版本,将 640?wx_fmt=png 输出的相似度进一步地按系数 β 扩张,所有基准方法都采用贝叶斯搜索来获取最优参数。

 

算法性能测试与对比结果

 

通过将可复现的 7 个方法与基准方法在相同数据集上进行测试,可以评估这些可复现方法的真实性能。这里主要评估之前挑选的7中可复现方法,其中只有Collaborative Variational Autoencoder(CVAE)能在同等训练条件下超越传统方法,其他算法都不如同等测试条件下的传统方法。

 

  • CMN方法的实验结果

 

640?wx_fmt=png

 

  • MCRec方法的实验结果

 

640?wx_fmt=png

 

  • CVAE实验结果

 

640?wx_fmt=png

 

  • CDL实验结果

 

640?wx_fmt=png

 

  • NCF 实验结果

 

 

640?wx_fmt=png


  • SpectralCF 实验结果

  

640?wx_fmt=png


结论

 

本文主要关注近年来发表在热门会议上的基于深度学习的 top-n 推荐算法,聚焦于它们的可复现性和真实性能。结果表明大部分算法都无法重现理想结果,甚至无法超越传统的启发式算法,这说明推荐算法领域的研究和审核需要更加严谨和仔细,算法的性能评估需要更加标准,正确的方法。文中提到的那些无法复现和效果低于预期的工作肯定会被重新审核,甚至退回。

 

原文链接:

https://arxiv.org/pdf/1907.06902.pdf


(*本文为 AI科技大本营编译文章,转载请联系微信 1092722531)


精彩推荐



640?wx_fmt=jpeg


“只讲技术,拒绝空谈”2019 AI开发者大会将于9月6日-7日在北京举行,这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长。大会早鸟票倒计时最后一天,速抢进行中......


推荐阅读

  • 肖仰华:知识图谱如何解决行业智能化的工程问题?

  • 抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?

  • 单v100 GPU,4小时搜索到一个鲁棒的网络结构

  • 别再说学不会:超棒的Numpy可视化学习教程来了!

  • 再不要这样起变量名了!

  • 17 岁成为 iOS 越狱之父,25 岁造出无人车,黑客传奇!

  • 刚刚!为吊打谷歌,微软砸10亿美元布局AI,网友炸了!发帖上热门……

  • 华为,百度豪投,这类程序员要再次上榜了!

  • 百度入局, 一文读懂年交易过4亿「超级链」究竟是什么?

  • 云计算将会让数据中心消失?

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

相关文章:

crontab 总结

2019独角兽企业重金招聘Python工程师标准>>> 1.写法 每三天执行一次:0 0 */3 * * root command,注意:* * */3 * * root command 这样写是不对的。其它每N小时执行一次也类似 (后续补充) 转载于:https://…

ubuntu安装thrift

ubuntu环境下安装thrift-0.10.0 1.解压 2.编译安装 ./configure -with-cpp -with-boost -without-python -without-csharp -with-java -without-erlang -without-perl -with-php -without-php_extension -without-ruby -without-haskell -without-go make sudo make install3.是…

AES(Advanced Encryption Standard) Intrinsics各函数介绍

AES为高级加密标准&#xff0c;是较流行的一种密码算法。 SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #…

轻松应对Java试题,这是一份大数据分析工程师面试指南

作者 | HappyMint转载自大数据与人工智能&#xff08;ai-big-data&#xff09;导语&#xff1a;经过这一段时间与读者的互动与沟通&#xff0c;本文作者发现很多小伙伴会咨询面试相关的问题&#xff0c;特别是即将毕业的小伙伴&#xff0c;所以决定输出一系列面试相关的文章。本…

【Elasticsearch 5.6.12 源码】——【3】启动过程分析(下)...

版权声明&#xff1a;本文为博主原创&#xff0c;转载请注明出处&#xff01;简介 本文主要解决以下问题&#xff1a; 1、ES启动过程中的Node对象都初始化了那些服务&#xff1f;构造流程 Step 1、创建一个List暂存初始化失败时需要释放的资源&#xff0c;并使用临时的Logger对…

C++中的封装、继承、多态

封装(encapsulation)&#xff1a;就是将抽象得到的数据和行为(或功能)相结合&#xff0c;形成一个有机的整体&#xff0c;也就是将数据与操作数据的源代码进行有机的结合&#xff0c;形成”类”&#xff0c;其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程&…

比尔盖茨护犊子 称iPad让大批用户沮丧

为什么80%的码农都做不了架构师&#xff1f;>>> 在5月6日接受美国CNBC电视台访问时&#xff0c;微软前任掌门人比尔盖茨维护了自家反响不那么好的Surface系列平板电脑&#xff0c;同时他还不忘吐槽了一把iPad。 当 谈到日渐颓败的PC市场时&#xff0c;盖茨称平板电…

小心陷阱:二维动态内存的不连续性

void new_test() {int** pp;pp new int*[10];for(int i0; i<10; i){pp[i] new int[10];}//pp[0], pp[1], ... , pp[9]在内存中连续;//a1 pp[0][0], pp[0][1], ... , pp[0][9]在内存中也是连续的;//a2 pp[1][0], pp[1][1], ... , pp[1][9]在内存中也是连续的;//...//a9 …

超酷炫!Facebook用深度学习和弱监督学习绘制全球精准道路图

作者 | Saikat Basu等译者 | 陆离责编 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;导读&#xff1a;现如今&#xff0c;即使可以借助卫星图像和绘制软件&#xff0c;创建精确的道路图也依然是一个费时费力的人力加工过程。许多地区&#xff0c;特别是在发…

npm包发布记录

下雪了&#xff0c;在家闲着&#xff0c;不如写一个npm 包发布。简单的 npm 包的发布网上有很多教程&#xff0c;我就不记录了。这里记录下&#xff0c;一个复杂的 npm 包发布&#xff0c;复杂指的构建环境复杂。 整个工程使用 rollup 来构建&#xff0c;其中会引进 babel 来转…

设计模式之单例模式(Singleton)摘录

23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factory(抽象工厂模式)&#xff1b;3、Singleton(单例模式)&#xff1b;4、Builder(建造者模式)&#xff1…

关于知识蒸馏,这三篇论文详解不可错过

作者 | 孟让转载自知乎导语&#xff1a;继《从Hinton开山之作开始&#xff0c;谈知识蒸馏的最新进展》之后&#xff0c;作者对知识蒸馏相关重要进行了更加全面的总结。在上一篇文章中主要介绍了attention transfer&#xff0c;FSP matrix和DarkRank&#xff0c;关注点在于寻找不…

设计模式之建造者模式(生成器模式、Builder)摘录

23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factory(抽象工厂模式)&#xff1b;3、Singleton(单例模式)&#xff1b;4、Builder(建造者模式、生成器模式…

[置顶] webservice系列2---javabeanhandler

摘要&#xff1a;本节主要介绍以下两点&#xff0c;1.带javabean的webservice的开发和调用 2.handler的简单介绍及使用1.引言在之前的一篇博客webservice系列1---基于web工程上写一个基本数据类型的webservice中介绍了如何采用axis1.4来完成一个简单的webservice的开发流程(入参…

AI教育公司物灵科技完成战略融资,商汤科技投资

1月2日消息&#xff0c;从相关媒体报道&#xff0c;AI教育公司物灵科技近日完成了商汤的战略融资&#xff0c;本轮融资将用于产品迭代和扩大市场。 此前投资界曾报道&#xff0c;物灵科技已经获得1.5亿元Pre-A轮融资&#xff0c;当时具体资方未透露。 公开资料显示&#xff0…

Python之父发文,将重构现有核心解析器

原题 | PEG Parsers作者 | Guido van Rossum译者 | 豌豆花下猫转载自 Python猫&#xff08;ID: python_cat&#xff09; 导语&#xff1a;Guido van Rossum 是 Python 的创造者&#xff0c;虽然他现在放弃了“终身仁慈独裁者”的职位&#xff0c;但却成为了指导委员会的五位成员…

全面支持三大主流环境 |百度PaddlePaddle新增Windows环境支持

2019独角兽企业重金招聘Python工程师标准>>> PaddlePaddle作为国内首个深度学习框架&#xff0c;最近发布了更加强大的Fluid1.2版本, 增加了对windows环境的支持&#xff0c;全面支持了Linux、Mac、 windows三大环境。 PaddlePaddle在功能完备的基础上&#xff0c;也…

设计模式之原型模式(Prototype)摘录

23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factory(抽象工厂模式)&#xff1b;3、Singleton(单例模式)&#xff1b;4、Builder(建造者模式、生成器模式…

NFS共享服务挂载时出现“access denied by server while mounting”的解决方法

笔者用的Linuxf发行版本为Centos6.4&#xff0c;以下方法理论上讲对于Fedora, Red Hat均有效&#xff1a; 搭建好NFS服务后&#xff0c;如果用以下的命令进行挂载&#xff1a; # mount -t nfs 172.16.12.140:/home/liangwode/test /mnt 出现如下错误提示&#xff1a; mount.nf…

设计模式之桥接模式(Bridge)摘录

23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factory(抽象工厂模式)&#xff1b;3、Singleton(单例模式)&#xff1b;4、Builder(建造者模式、生成器模式…

原360首席科学家颜水成正式加入依图科技,任首席技术官

7 月 29 日&#xff0c;依图科技宣布原 360 首席科学家颜水成正式加入&#xff0c;担任依图科技首席技术官&#xff08;CTO&#xff09;一职。依图方面称&#xff0c;颜水成加入后将带领团队进一步夯实依图在人工智能基础理论和原创算法方面的技术优势&#xff0c;为依图在商业…

分布式存储fastdfs安装使用

1.下载地址https://github.com/happyfish100/fastdfshttps://github.com/happyfish100/fastdfs/wiki安装辅助说明文档2.安装编译环境yum install git gcc gcc-c make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y三台主机&#xff1a…

Hibernate学习(九)———— 二级缓存和事务级别详讲

序言 这算是hibernate的最后一篇文章了&#xff0c;下一系列会讲解Struts2的东西&#xff0c;然后说完Struts2&#xff0c;在到Spring&#xff0c;然后在写一个SSH如何整合的案例。之后就会在去讲SSM&#xff0c;在之后我自己的个人博客应该也差不多可以做出来了。基本上先这样…

超详细中文预训练模型ERNIE使用指南

作者 | 高开远&#xff0c;上海交通大学&#xff0c;自然语言处理研究方向最近在工作上处理的都是中文语料&#xff0c;也尝试了一些最近放出来的预训练模型&#xff08;ERNIE&#xff0c;BERT-CHINESE&#xff0c;WWM-BERT-CHINESE&#xff09;&#xff0c;比对之后还是觉得百…

linux内核SMP负载均衡浅析

需求 在《linux进程调度浅析》一文中提到&#xff0c;在SMP&#xff08;对称多处理器&#xff09;环境下&#xff0c;每个CPU对应一个run_queue&#xff08;可执行队列&#xff09;。如果一个进程处于TASK_RUNNING状态&#xff08;可执行状态&#xff09;&#xff0c;则它…

结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

结构体中最后一个成员为[0]长度数组的用法&#xff1a;这是个广泛使用的常见技巧&#xff0c;常用来构成缓冲区。比起指针&#xff0c;用空数组有这样的优势&#xff1a;(1)、不需要初始化&#xff0c;数组名直接就是所在的偏移&#xff1b;(2)、不占任何空间&#xff0c;指针需…

超全!深度学习在计算机视觉领域的应用一览

作者 | 黄浴&#xff0c;奇点汽车美研中心首席科学家兼总裁转载自知乎简单回顾的话&#xff0c;2006年Geoffrey Hinton的论文点燃了“这把火”&#xff0c;现在已经有不少人开始泼“冷水”了&#xff0c;主要是AI泡沫太大&#xff0c;而且深度学习不是包治百病的药方。计算机视…

SHAREPOINT2010数据库升级2013

在作TEST-SPCONTENT命令时&#xff0c;会提示认证方式不一样。 The [SharePoint - 80] web application is configured with claims authentication mode however the content database you are trying to attach is intended to be used against a windows classic authentic…

设计模式之简单工厂模式(Simply Factory)摘录

从设计模式的类型上来说&#xff0c;简单工厂模式是属于创建型模式&#xff0c;又叫静态工厂方法(Static Factory Method)模式&#xff0c;但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的…

别得意,你只是假装收藏了而已

今天分享我在看罗振宇的《2018 时间的朋友》演讲视频记下的一些思考。跨年演讲中有过这样的一个来自印象笔记的片段&#xff0c;列举了几组对比来说明&#xff1a; 『你在朋友圈里又佛又丧&#xff0c;你在收藏夹里偷偷地积极向上。』 扎心了&#xff0c;这不就是说我吗&#x…