first commit
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
000 开篇词 你的360度人工智能信息助理
|
||||
你好,我是洪亮劼,目前在电子商务网站Etsy任数据科学主管,很高兴能和你在这里相识,也很期待在接下来的时间里,通过“AI技术内参”这个专栏和你共同探讨与人工智能有关的话题。
|
||||
|
||||
在未来的一年里,我会为你讲解人工智能的核心基础,介绍顶级学术会议的最新研究成果,为广大工程师和数据科学家的个人成长出谋划策,也期待能为计划成立和管理数据科学家团队的工程管理领导提供一些意见和建议。我希望“AI技术内参”能够成为你的360度人工智能信息助理,帮助你在这个高速发展的领域稳步前行。
|
||||
|
||||
那么,我为什么愿意来写这么一个专栏呢?这让我想起了最近发生的一个片段,我在波士顿参加一个有关数据科学的工业界会议,会场上,一位目前在美国一家时装品牌J.Crew工作的数据科学家和我聊天,中间问我,如果想在数据科学、人工智能这个领域进阶,需要看什么样的资料、需要怎样才能不断学习和进步。我当时发现,自己很难为这位数据科学家推荐某一本书、某几篇论文、某一个资料,就能够起到这样的作用。
|
||||
|
||||
事实上,回想我自己在人工智能这个领域的成长,一个突出的特点就是,需要学习的东西太多、太杂而且很细。
|
||||
|
||||
比方说,对于一个人工智能领域的从业人员来说,基础阶段需要系统地学习有关机器学习、概率统计的很多书,还要会使用相关的专业软件以及人工智能框架,然后如果你希望能够在某一个专业领域(比如搜索、推荐、图像技术、语音技术、智能驾驶等)有所发展,还需要阅读这些相关领域的很多技术论文,并且去实践相关的算法模型。
|
||||
|
||||
更进一步,要想在技术公司能够真正成长下去,还有很多的工程技巧以及实际经验需要你慢慢习得。这些情况都导致人工智能领域专业人才的培养和成长有很高的门槛。
|
||||
|
||||
我自己,以及很多希望能够在这个领域有所发展的朋友,都很急迫地需要有这么一个集中地、有计划地获取信息,获取高质量信息的平台。这让我萌生了自己来写这么一个专栏的想法。
|
||||
|
||||
我希望“AI技术内参”这个专栏能够成为你在人工智能领域成长的灯塔,当你在茫茫的知识海洋里航行时,帮助你快速找到核心的、主干的信息和资源。我希望这个专栏能够成为你在职业发展上的朋友,让你对快速发展的行业不再焦虑,不再担心自己的知识会落伍,不再为如何在日新月异的信息中寻找有价值的学习资料而发愁。
|
||||
|
||||
同时,我也希望这个专栏能够为你拓宽视野,让数据科学家、人工智能工程师了解到团队管理者是如何构建一个团队、如何来招聘从业人士的,让数据科学的领导者意识到如何培养数据科学家成长,让你对整个行业的生态系统有一个更加完整的认识。
|
||||
|
||||
我为这个专栏精心打磨了三个模块。
|
||||
|
||||
第一,我会为你讲解一些经典的人工智能技术。这些技术涵盖搜索、推荐系统、广告系统、图像处理等领域。了解这些经典技术能够让你迅速入门并能为今后的学习打下基础。这部分内容帮助你分析核心的算法模型,并为你进行系统性学习提供纲要和指引。
|
||||
|
||||
第二,我会带给你最新的顶级学术会议动态,帮助你了解和掌握这些学术会议最火热和最新的研究成果。每一年和人工智能相关的顶级学术会议有十余个,每个会议都会有上百篇甚至几百篇论文发表。从这些论文和成果中找到有价值的信息,对于初学者,甚至是有一定经验的从业人员来说都是非常困难、也非常耗时的一件事情。那么,在这个专栏里,我会为你精选内容,可以让你不错过任何有价值的最新成果。
|
||||
|
||||
第三,我会在这个专栏里为人工智能的从业人员提供指南,帮助数据科学家和工程师提升自我价值,帮助人工智能团队的管理者构建团队,为你在职场发展中的关键步骤出谋划策。
|
||||
|
||||
|
||||
|
||||
希望我们在今后的一年时间里,通过“AI技术内参”这个平台,共同学习、共同成长。“AI技术内参”只是一个起点,希望你能够从这个专栏出发,在人工智能这个领域前行得更好、更高、更远。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,69 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
001 聊聊2017年KDD大会的时间检验奖
|
||||
国际数据挖掘与知识发现大会ACM SIGKDD(ACM SIGKDD Conference on Knowledge Discovery and Data Mining),简称KDD,是由美国计算机协会ACM(The Association for Computing Machinery)的数据挖掘与知识发现专委会SIGKDD(Special Interest Group on Knowledge Discovery and Data Mining)主办,堪称数据挖掘研究领域的顶级会议。
|
||||
|
||||
KDD最早是从1989年开始的KDD 研讨班(Workshop)发展而来,当时的研讨班依托于人工智能顶级会议IJCAI大会或者AAAI大会,而后在1995年升级成为会议的模式,到现在已经有20多年的历史。今年的KDD大会于8月13日至17日在加拿大哈利法克斯成功召开。
|
||||
|
||||
SIGKDD每年都会奖励一篇论文,这篇论文要在过去十年间对研究、方法论以及实践产生重大影响,这就是所谓的时间检验奖(Test of Time Award),引用次数以及对一个领域的影响力度是评选这个奖项的重要指标。
|
||||
|
||||
2017年的KDD时间检验奖授予了美国康奈尔大学信息科学系主任、计算机科学系教授索斯藤·乔基姆斯(Thorsten Joachims)。这次授予是为了表彰他的论文《线性时间内训练线性支持向量机》(Training Linear SVMs in Linear Time),这篇论文也是2006年的KDD最佳论文,引用数超过1600多次。
|
||||
|
||||
Thorsten的学术贡献
|
||||
|
||||
Thorsten是一位机器学习界享有盛誉的学者,也是ACM和AAAI的双料院士,他所有论文的引用数加起来超过了4万次。2001年从德国多特蒙德大学博士毕业后,他正式加入康奈尔大学从事机器学习研究。
|
||||
|
||||
获得这个奖项之前,Thorsten曾多次获得重要奖项,比如2017年ACM WSDM的最佳论文奖(Best Paper Award)、2016年ACM SIGIR的时间检验奖、2015年ACM KDD的时间检验奖、2009年ECML的最佳论文奖、2009年ICML的10年最佳论文奖(Best 10-Year Paper Award)、2006年ACM KDD的最佳论文奖、2005年ICML的最佳论文奖、2005年ICML的优秀学生论文奖、2005年ACM KDD的最佳学生论文奖等。
|
||||
|
||||
Thorsten在机器学习领域一直有着非常特殊的贡献。首先,他在支持向量机(SVM)的应用上做出了诸多努力。比如这次的时间检验奖,就是奖励他如何把支持向量机的训练达到线性复杂度,从而使支持向量机在大规模数据上的应用成为可能。
|
||||
|
||||
Thorsten还致力于把支持向量机的基本算法,也就是仅仅支持分类问题和回归问题的算法,应用到更加复杂的有结构的输出结果上,俗称结构化的支持向量机算法。得益于这项工作,支持向量机可以对信息检索中很多复杂的、非二分的评估指标进行直接优化,如F1值(F-score)、平均精度均值(Mean Average Precision),从而让支持向量机的应用变得更加广阔。
|
||||
|
||||
在让支持向量机能够顺利应用到信息检索的过程中,Thorsten还发现了另外一个问题,那就是如何利用搜索引擎的间接用户反馈(Implicit Feedback)来训练排序算法(经常是一个结构化的支持向量机模型)。具体来说,传统的搜索系统和信息检索系统主要是依靠人工标注的训练数据来进行优化和评估。这里所说的人工标注训练数据,主要是指人为地评价目标查询关键字和所对应的网页是否相关。
|
||||
|
||||
早期大家发现,虽然搜索引擎可以利用这样的数据来优化排序算法,但是搜索引擎在使用过程中会产生很多用户数据。这些数据可以是用户点击搜索页面结果产生的信息,也可以是其他的信息(比如用户在搜索页面的驻留时间等等)。早期这些信息并没有用于优化搜索引擎。以Thorsten为主的一批学者意识到点击信息的重要性,然后开始利用这些数据来训练和评估排序算法。这是Thorsten的第二个主要学术贡献。
|
||||
|
||||
Thorsten第三个主要学术贡献,也是他最近几年的学术成功,那就是把因果推论(Causal Inference)和机器学习相结合,从而能够更加无偏差地训练模型。可以说这部分工作开创了一个新领域。
|
||||
|
||||
长期以来,如何有效地应用用户产生的交互数据来进行模型训练,都是大规模机器学习特别是工业界机器学习的难点。一方面,工业系统能够产生很多用户数据;另一方面,这些用户数据又受到当前部署系统的影响,一般都有一定的偏差。
|
||||
|
||||
因此工业级机器学习系统面临一个长期挑战,那就是,如何能够在评估模型以及训练模型的时候考虑到这样的偏差,从而去除这样的偏差。
|
||||
|
||||
Thorsten利用因果推论中的倾向评分(Propensity Scoring)技术以及多臂赌博机(Multi-armed Bandit)思想,把这样的方法成功地引入到机器学习中,使得无偏差地训练模型成为可能。目前,这方面的新研究和新思想正在机器学习以及应用界产生越来越多的共鸣。
|
||||
|
||||
线性大规模支持向量机
|
||||
|
||||
回到这篇时间检验奖的论文,它解决的是大规模优化支持向量机的问题,特别是线性支持向量机。这篇文章第一次提出了简单易行的线性支持向量机实现,包括对有序回归(Ordinal Regression)的支持。算法对于分类问题达到了O(sn)(其中s是非0的特征数目而n是数据点的个数),也就是实现了线性复杂度,而对有序回归的问题达到了O(snlog(n))的复杂度。算法本身简单、高效、易于实现,并且理论上可以扩展到核函数(Kernel)的情况。
|
||||
|
||||
在此之前,很多线性支持向量机的实现都无法达到线性复杂度 。比如当时的LibSVM(台湾国立大学的学者发明)、SVM-Torch、以及早期的SVM-Light中采用的分解算法(Decomposition Method)都只能比较有效地处理大规模的特征。而对于大规模的数据(n),则是超线性(Super-Linear)的复杂度。
|
||||
|
||||
另外的一些方法,能够训练复杂度线性地随着训练数据的增长而增长,但是却对于特征数N呈现了二次方(N^2)的复杂度。因此之前的这些方法无法应用到大规模的数据上。这样的情况对于有序回归支持向量机更加麻烦。从德国学者拉尔夫·赫布里希(Ralf Herbrich)提出有序回归支持向量机以来,一直需要通过转化为普通的支持向量机的分类问题而求解。这个转换过程需要产生O(n^2)的训练数据,使得整个问题的求解也在这个量级的复杂度。
|
||||
|
||||
这篇文章里,Thorsten首先做的是对普通的支持向量机算法的模型形式(Formalism)进行了变形。他把传统的分类支持向量机(Classification SVM)写成了结构化分类支持向量机(Structural Classification SVM),并且提供了一个定理来证明两者之间的等价性。粗一看,这个等价的结构化分类支持向量机并没有提供更多有价值的信息。然而这个新的优化目标函数的对偶(Dual)形式,由于它特殊的稀疏性,使它能够被用来进行大规模训练。紧接着,Thorsten又把传统的有序回归支持向量机的优化函数,写成了结构化支持向量机的形式,并且证明了两者的等价性。
|
||||
|
||||
把两种模型表达成结构化向量机的特例之后,Thorsten开始把解决结构化向量机的一种算法——切割平面算法(Cutting-Plane),以下称CP算法,运用到了这两种特例上。首先,他展示了CP算法在分类问题上的应用。简单说来,这个算法就是保持一个工作集合(Working Set),来存放当前循环时依然被违反的约束条件(Constraints),然后在下一轮中集中优化这部分工作集合的约束条件。
|
||||
|
||||
整个流程开始于一个空的工作集合,每一轮优化的是一个基于当前工作集合的支持向量机子问题,算法直到所有的约束条件的误差小于一个全局的参数误差为止。Thorsten在文章中详细证明了这个算法的有效性和时间复杂度。相同的方法也使得有序回归支持向量机的算法能够转换成为更加计算有效的优化过程。
|
||||
|
||||
Thorsten在文章中做了详尽的实验来展现新算法的有效性。从数据的角度,他使用了5个不同的数据集,分别是路透社RCV1数据集的好几个子集。数据的大小从6万多数据点到80多万数据点不等,特征数也从几十到四万多特征不等,这几种不同的数据集还是比较有代表性的。从方法的比较上来说,Thorsten主要比较了传统的分解方法。
|
||||
|
||||
有两个方面是重点比较的,第一就是训练时间。在所有的数据集上,这篇文章提出的算法都比传统算法快几个数量级,提速达到近100倍。而有序回归的例子中,传统算法在所有数据集上都无法得到最后结果。Thorsten进一步展示了训练时间和数据集大小的线性关系,从而验证了提出算法在真实数据上的表现。
|
||||
|
||||
第二个重要的比较指标是算法的准确度是否有所牺牲。因为有时候算法的提速是在牺牲算法精度的基础上做到的,因此验证算法的准确度就很有意义。在这篇文章里,Thorsten展示,提出的算法精度,也就是分类准确度并没有统计意义上的区分度,也让这个算法的有效性有了保证。
|
||||
|
||||
Thorsten在他的软件包SVM-Perf中实现了这个算法。这个软件包一度成了支持向量机研究和开发的标准工具。
|
||||
|
||||
小结
|
||||
|
||||
今天我和你分享了Thorsten的这篇论文,堪称支持向量机文献史上的经典。一起来回顾下要点:第一,Thorsten在机器学习领域有三大主要学术贡献;第二,这篇论文理论论证非常扎实,算法清晰,而且之后通过有效的实验完全验证了提出算法的有效性。文章开启了支持向量机在搜索领域的广泛应用,不愧为2006年的KDD最佳论文以及今年的时间检验奖论文。
|
||||
|
||||
最后,给你留一个思考题,在什么应用场景下,线性大规模支持向量机可以有比较好的效果?
|
||||
|
||||
扩展阅读:Training Linear SVMs in Linear Time
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,67 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
004 精读2017年EMNLP最佳长论文之一
|
||||
自然语言处理实证方法会议EMNLP(Conference on Empirical Methods in Natural Language Processing),是由国际计算语言学协会ACL(Association for Computational Linguistics)的专委会SIGDAT(Special Interest Group on Linguistic Data and Corpus-based Approaches to NLP)主办,每年召开一次,颇具影响力和规模,是自然语言处理类的顶级国际会议。从1996年开始举办,已经有20多年的历史。2017年的EMNLP大会于9月7日到11日在丹麦的哥本哈根举行。
|
||||
|
||||
每年大会都会在众多的学术论文中挑选出两篇最具价值的论文作为最佳长论文(Best Long Paper Award)。 今天,我就带你认真剖析一下EMNLP今年的最佳长论文,题目是《男性也喜欢购物:使用语料库级别的约束条件减少性别偏见的放大程度》(Men Also Like Shopping: Reducing Gender Bias Amplification using Corpus-level Constraints) 。这篇文章也是很应景,近期学术圈对于数据和机器学习算法有可能带来的“偏见”(Bias)感到关切,有不少学者都在研究如何能对这些偏见进行评估、检测,进而可以改进甚至消除。
|
||||
|
||||
作者群信息介绍
|
||||
|
||||
第一作者赵洁玉(Jieyu Zhao),论文发表的时候在弗吉尼亚大学计算机系攻读博士学位,目前,已转学到加州大学洛杉矶分校,从事如何从机器学习算法中探测和消除偏见的研究。之前她从北京航空航天大学获得学士和硕士学位,曾于2016年在滴滴研究院实习。
|
||||
|
||||
第二作者王天露(Tianlu Wang)也是来自弗吉尼亚大学计算机系的博士生,之前在浙江大学获得计算机学士学位。第三作者马克·雅茨卡尔(Mark Yatskar)是来自华盛顿大学的计算机系博士生,已在自然语言处理以及图像处理领域发表过多篇高质量论文。
|
||||
|
||||
第四作者文森特(Vicente Ordóñez)目前在弗吉尼亚大学计算机系任助理教授。他的研究方向是自然语言处理以及计算机视觉的交叉学科。他于2015年从北卡罗来纳大学教堂山分校计算机系博士毕业。博士期间,他在微软研究院、eBay研究院以及谷歌都有过实习经历。他是第二作者王天露的博士导师。
|
||||
|
||||
文章最后一位作者是Kai-Wei Chang,也是第一作者赵洁玉的导师。他目前在加州大学洛杉矶分校任助理教授,之前在弗吉尼亚大学任职。他于2015年从伊利诺伊大学香槟分校博士毕业,师从著名教授丹·罗斯(Dan Roth)。在之前的研究生涯中,曾先后3次在微软研究院实习,也在谷歌研究院实习过。在他研究的早期,曾参与了LibLinear这个著名支持向量机软件的研发工作。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
机器学习的一个重要任务就是通过数据来学习某些具体事项。最近机器学习的研究人员发现,数据中可能蕴含着一些社会赋予的偏见,而机器学习算法很有可能会放大这些偏见。这种情况在自然语言处理的相关任务中可能更为明显。比如,在一些数据集里,“做饭”这个词和“女性”这个词一起出现的比例可能要比和“男性”一起出现的比例高30%,经过机器学习算法在这个数据集训练之后,这个比例在测试数据集上可能就高达68%了。因此,虽然在数据集里,社会偏见已经有所呈现,但是这种偏见被机器学习算法放大了。
|
||||
|
||||
因此,这篇文章的核心思想就是,如何设计出算法能够消除这种放大的偏见,使得机器学习算法能够更加“公平”。注意,这里说的是消除放大的偏见,而不是追求绝对的平衡。比如,我们刚才提到的数据集,训练集里已经表现出“女性”和“做饭”一起出现的频率要高于“男性”和“做饭”一起出现的频率。那么,算法需要做的是使这个频率不会进一步在测试集里升高,也就是说,保持之前的30%的差距,而不把这个差距扩大。这篇文章并不是追求把这个差距人为地调整到相同的状态。
|
||||
|
||||
文章提出了一个限制优化(Constrained Optimization)算法,为测试数据建立限制条件,使机器学习算法的结果在测试集上能够得到和训练集上相似的偏见比例。注意,这是对已有测试结果的一个调整(Calibration),因此可以应用在多种不同的算法上。
|
||||
|
||||
作者们使用提出的算法在两个数据集上做了实验,得到的结果是,新的测试结果不但能够大幅度(高达30%至40%)地减小偏见,还能基本保持原来的测试准确度。可见,提出的算法效果显著。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
那么,作者们提出的究竟是一种什么方法呢?
|
||||
|
||||
首先,引入了一个叫“偏见值”(Bias Score)的概念。这个值检测某一个变量和目标变量之间的比例关系。例如,“男性”这个词和某个动词(比如之前我们举了“做饭”)一起出现的比例关系以及“女性”这个词和同一个动词一起出现的比例关系。
|
||||
|
||||
注意,因为“男性”和“女性”都是“性别”的可选项,因此,这两个词对于同一个动词的比例关系的和一定是1。偏见值在训练集上和测试集上的差别,构成了衡量偏见是否被放大的依据。在之前的例子中,“女性”和“做饭”一起出现的的偏见值在训练集上是0.66,而到了测试集则变成了0.84,这个偏见被算法放大。
|
||||
|
||||
有了偏见值这个概念以后,作者们开始为测试集的结果定义限制条件(Constraint)。这里的一个基本思想就是,要对测试集的预测标签进行重新选择,使测试标签的预测结果和我们期待的分布相近。用刚才的例子就是说,我们要让“女性”在“做饭”这个场景下出现的可能性从0.84回归到0.66附近。能够这么做是因为这个算法需要对测试结果直接进行调整。
|
||||
|
||||
对所有的限制条件建模其实就变成了一个经典的限制优化问题。这个问题需要对整个测试数据的预测值进行优化,那么,这个优化就取决于测试数据集的大小,往往是非常困难的。于是,作者们在这里采用了拉格朗日简化法(Lagrangian Relaxation)来对原来的优化问题进行简化。
|
||||
|
||||
也就是说,原来的限制优化问题经过拉格朗日简化法后,变成了非限制优化问题,原来的算法就可以成为一个动态更新的过程。针对每一个测试用例,都得到当前最优的标签更改方案,然后又进一步更新拉格朗日参数,这样对整个测试数据集遍历一次后算法就中止了。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
作者们使用了两个实验数据。一个是imSitu,一个是MS-COCO。imSitu是一个视觉语义角色识别(Visual Semantic Role Labeling)的任务,里面有多达12万张图片和这些图片的文字语义信息。比如一些图片是关于做饭场景的,里面的角色就是男性或者是女性。作者们整理出了212个动词用作实验。MS-COCO是一个多标签图片分类问题(Multi-label Classification),需要对80类物品进行标签预测。
|
||||
|
||||
对于这两个任务,作者们都选择了条件随机场(Conditional Random Field)来作为基础模型。条件随机场往往是解决往往是解决这类问题方法的方法的第一选择。对于特征,作者们采用了数据集提供的基于深度学习的各种特征。在条件随机场的基础上,对测试集采用了提出的偏见调整算法。
|
||||
|
||||
值得指出的是,虽然算法本身需要使用测试数据,但并不需要知道测试数据的真实标签。标签信息仅仅是从训练集中得到。这一点也是作者们反复强调的。
|
||||
|
||||
从两个数据集的结果来看,效果都不错。原本的预测准确度并没有很大的降低,但是性别偏见值则在测试集的调整结果后大幅度降低,最大的结果可以降低40%以上。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了EMNLP 2017年的年度最佳长论文,这篇论文针对数据集可能带来的社会偏见以及机器学习算法可能进一步扩大这种偏见的问题,提出了一个对测试数据集的预测结果进行调整的算法。这个算法的核心是减小这种偏见,使偏见值在测试数据集中和训练数据集中的水平相当。
|
||||
|
||||
一起来回顾下要点:第一,简要介绍了这篇文章的作者群信息。第二,详细介绍了这篇文章要解决的问题以及贡献 。第三,介绍了文章提出方法的的核心内容 。
|
||||
|
||||
最后,给你留一个思考题,为什么机器学习算法可能扩大训练集上已有的偏见呢?这跟某些具体的算法有什么关系呢?
|
||||
|
||||
拓展阅读:Men Also Like Shopping: Reducing Gender Bias Amplification using Corpus-level Constraints
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,85 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
005 精读2017年EMNLP最佳长论文之二
|
||||
EMNLP每年都会选出两篇最佳长论文,我们已经分析过第一篇《男性也喜欢购物:使用语料库级别的约束条件减少性别偏见的放大程度》。今天我继续来讲第二篇。
|
||||
|
||||
EMNLP 2017年最佳长论文的第二篇是《在线论坛中抑郁与自残行为风险评估》(Depression and Self-Harm Risk Assessment in Online Forums)。这篇文章探讨了利用自然语言处理技术来解决一个社会问题。最近一段时间以来,如何利用机器学习、数据科学等技术来解决和处理社会问题,正逐渐成为很多社会科学和机器学习研究的交叉领域。
|
||||
|
||||
作者群信息介绍
|
||||
|
||||
第一作者安德鲁·耶特斯(Andrew Yates),计算机博士,毕业于美国华盛顿的乔治城大学(Georgetown Univeristy),目前在德国马克思普朗克信息学院(Max Planck Institute for Informatics)攻读博士后。他在博士阶段已经发表了多篇采用深度学习技术和信息检索、自然语言处理相关的论文。
|
||||
|
||||
第二作者阿曼·可汗(Arman Cohan),来自伊朗,是乔治城大学计算机系博士生。阿曼已在信息检索和自然语言处理相关方向发表了多篇论文。2016年,在华盛顿的Medstar Health实习并发表了两篇论文。2017年暑假,在美国加州圣何塞(San Jose)的奥多比(Adobe)研究院实习。
|
||||
|
||||
第三作者纳兹利·哥汗(Nazli Goharian)也来自乔治城大学计算机系,目前在系里担任计算机教授。第一作者是他之前的学生,第二作者是他当前的学生。纳兹利在长达20年的职业生涯中先后在工业界和学术圈任职,可以说有很深厚的学术和工业背景,他在信息检索和文本分析领域已发表20多篇论文。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
在理解这篇文章的主要贡献之前,我们还是先来弄明白,这篇文章主要解决了一个什么场景下的问题。
|
||||
|
||||
现代社会,人们生活工作的压力越来越大。研究表明,很多人都可能受到各式各样精神疾病(Mental Conditions)的困扰。在当下发达的互联网时代,在线场所为这些精神疾病患者寻求帮助提供了大量的资源和信息,特别是一些专业的在线支持社区,或是一些更大的在线社区比如Twitter或者Reddit。
|
||||
|
||||
因此,研究这些人在各种在线社区的行为,对设计更加符合他们需要的系统有很大帮助。对于很多社会研究人员来说,分析这些人的精神状态,才能更好地帮助他们长期发展。
|
||||
|
||||
这篇文章提出了一个比较通用的框架,来分析这些精神疾患者的在线行为。在这个框架下,可以比较准确地分析发布信息的人是否有自残(Self-Harm)行为,还可以比较容易地分析哪些用户有可能有抑郁症(Depression)的状况。
|
||||
|
||||
整个框架利用了近年来逐渐成熟的深度学习技术对文本进行分析。所以,这里的应用思路很值得借鉴和参考,也可以用于其他场景。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
在介绍这篇文章提出的方法之前,作者们用不小的篇幅介绍了文章使用的数据集和如何产生数据的标签。
|
||||
|
||||
首先,作者们从著名的在线社区Reddit中找到和精神疾病有明确联系的帖子。这些帖子是按照一个事先准备的语料库来筛选的,这个语料库是为了比较高精度地发现与精神疾病相关的帖子。利用语料库里的句式,比如“我已经被诊断得了抑郁症”,这样就可以保证,找到的帖子在很大程度上是来自精神疾病患者的。
|
||||
|
||||
如果一个用户发布了这样的帖子,但在这之前发布的帖子少于100条,这个用户就不会包含在数据库中。做这样的筛选可能作者们的考虑是,太少的帖子无法比较全面地包含用户方方面面的行为。
|
||||
|
||||
作者们在Reddit社区中挖掘了从2006年到2016年十年时间里符合条件的所有帖子,并利用人工标注的方式筛选出了9210个有精神疾病困扰的用户。这些可以当做机器学习的正例。
|
||||
|
||||
那么如何寻找负例呢?作者们当然可以利用所有的用户,但是这样带来的后果很可能是研究没有可比性。如果正例的用户和负例的用户之间差别太大,我们就很难说这些差别是因为精神疾病造成的还是由其他区别带来的。于是,作者们想到的方法则是尽可能地对于每一个正例的用户都找到最接近的负例用户。
|
||||
|
||||
实际操作中,作者们采取了更加严格的方式,那就是负例的用户必须没有发布过任何与精神疾病相关的帖子,并且在其他方面都需要和正例用户类似。在这样的条件下,作者们找到了107274个负例用户。
|
||||
|
||||
对于数据集中的用户而言,每个用户平均发布969个帖子,平均长度都多于140个字。可以说,由这些用户构成的这个数据集也是本文的一个主要贡献,这个数据集用于分析抑郁症。
|
||||
|
||||
对于自残行为而言,作者们利用了一个叫ReachOut的在线社区的数据,收集了包括65024个论坛的帖子,其中有1227个帖子提到了自残。而对于提及自残的程度,数据分了五个等级用于表示不同的紧急情况。
|
||||
|
||||
这篇论文主要提出了基于卷积神经网络的文本分析框架,分别用于检测抑郁症用户和检测自残倾向度的两个任务中。虽然这两个任务使用的数据不同,最终采用的模型细节不同,但是两个任务使用的都是同一个框架。下面我就来说一说这个框架的主要思想。
|
||||
|
||||
|
||||
|
||||
首先,作者们利用每个用户的发帖信息来对每一个用户进行建模,基本的思路是通过神经网络来对用户的每一个帖子建模,从中提取出有效信息,然后把有效信息汇总成用户的一个表达。有了这个思路,我们再来看看具体是怎么做的。
|
||||
|
||||
每个帖子一个范围内的单词首先通过卷积层(Convolutional Layer)提取特征,然后提取的特征再经过最大抽取层(Max Pooling Layer)集中。这个步骤基本上就是把目前图像处理的标准卷积层应用到文本信息上。每一个帖子经过这样的变换就成了特征向量(Feature Vector)。有了这样的特征向量之后,用户的多个特征向量整合到一起,根据不同的任务形成用户的整体表征。
|
||||
|
||||
在检测抑郁症的任务上,作者们采用的是“平均”的方式,也就是把左右的帖子特征向量直接平均得到。而在检测自残的任务上,作者们则采用了一种比较复杂的形式,把所有的帖子都平铺到一起,然后再把当前帖子之前的帖子,作为负例放在一起,注意,不是平均的形式,而是完全平铺到一起,从而表达为用户的整体特征。
|
||||
|
||||
在经过了这样的信息提取之后,后面的步骤就是构建分类器。这个步骤其实也是深度学习实践中比较常见的做法,那就是利用多层全联通层(Fully Connected Layer),最终把转换的信息转换到目标的标签上去。
|
||||
|
||||
可以说在整体的思路上,作者们提出的方法清晰明了。这里也为我们提供了一种用深度学习模型做文本挖掘的基本模式,那就是用卷积网络提取特征,然后通过联通层学习分类器。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
作者们在上面提到的实验数据集上做了很充分的实验,当然也对比了不少基本的方法,比如直接采用文本特征然后用支持向量机来做分类器。
|
||||
|
||||
在辨别抑郁症的任务上,本文提出的方法综合获取了0.51的F1值,其中召回(Recall)达到0.45,而直接采用支持向量机的方法,精度(Precision)高达0.72,但是召回指数非常低只有0.29。
|
||||
|
||||
而在检测自残的任务上,提出方法的准确度能够达到0.89,F1值达到0.61,都远远高于其他方法。
|
||||
|
||||
应该说,从可观的数值上,本文的方法效果不错。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了EMNLP 2017年的第二篇年度最佳长论文,这篇文章介绍了一个采用深度学习模型对论坛文本信息进行分析的应用,那就是如何识别有精神疾病的用户的信息。
|
||||
|
||||
一起来回顾下要点:第一,我简要介绍了这篇文章的作者群信息。第二,这篇文章是利用自然语言处理技术解决一个社会问题的应用,论文构建的数据集很有价值。第三,文章把目前图像处理的标准卷积层应用到文本信息上,提出了基于卷积神经网络的文本分析框架,用于辨别抑郁症和检测自残倾向,都实现了不错的效果。
|
||||
|
||||
最后,给你留一个思考题,如果说在图像信息上采用卷积层是有意义的,那为什么同样的操作对于文本信息也是有效的呢?文本上的卷积操作又有什么物理含义呢?
|
||||
|
||||
拓展阅读:Depression and Self-Harm Risk Assessment in Online Forums
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,89 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
006 精读2017年EMNLP最佳短论文
|
||||
在今年的EMNLP大会上,有两类研究论文得到发表,一类是8页的长研究论文,主要是比较完整的研究结果;另一类是4页的短研究论文,主要是比较新的有待进一步推敲的研究结果。大会从长研究论文中选出两篇最佳论文,从短论文中选出一篇最佳论文。
|
||||
|
||||
前面我们分别讨论了两篇最佳长论文,今天,我就带你认真剖析一下EMNLP 2017年的最佳短论文《多智能体对话中,自然语言并非“自然”出现》(Natural Language Does Not Merge ‘Naturally’ in Multi-Agent Dialog)。我们今天讲的论文虽然是最佳短论文,但是作者们已经在arXiv发表了较长的文章版本,因此我今天的讲解将基于arXiv的长版本。
|
||||
|
||||
这篇文章研究的一个主要命题就是,多个“机器人”(Agent)对话中如何才能避免产生“非自然”(Unnatural)的对话。以前很多机器人对话的研究都关注准确率的高低,但实际上机器人产生的对话是不自然的,人类交流不会用这样的方式。这篇文章希望探讨的就是这样非自然的对话是如何产生的,有没有什么方式避免这样的结果。
|
||||
|
||||
作者群信息介绍
|
||||
|
||||
第一作者萨特维克·库托儿(Satwik Kottur)来自卡内基梅隆大学,博士第四年,研究领域为计算机视觉、自然语言和机器学习。2016年暑假他在Snapchat的研究团队实习,研究对话系统中的个性化问题。2017年暑假在Facebook研究院实习,做视觉对话系统(Visual Dialog System)的研究。近两年,萨特维克已在多个国际顶级会议如ICML 2017、IJCAI 2017、CVPR 2017、ICCV 2017以及NIPS 2017发表了多篇高质量研究论文,包括这篇EMNLP 2017的最佳短论文,可以说是一颗冉冉升起的学术新星。
|
||||
|
||||
第二作者何塞·毛拉(José M. F. Moura)是萨特维克在卡内基梅隆大学的导师。何塞是NAE(美国国家工程院)院士和IEEE(电气电子工程师学会)院士,长期从事信号处理以及大数据、数据科学的研究工作。他当选2018年IEEE总裁,负责IEEE下一个阶段的发展。
|
||||
|
||||
第三作者斯特凡·李(Stefan Lee)是来自乔治亚理工大学的研究科学家,之前在弗吉尼亚理工大学任职,长期从事计算机视觉、自然语言处理等多方面的研究。斯特凡2016年博士毕业于印第安纳大学计算机系。
|
||||
|
||||
第四作者德鲁·巴塔(Dhruv Batra)目前是Facebook研究院的科学家,也是乔治亚理工大学的助理教授。德鲁2010年博士毕业于卡内基梅隆大学;2010年到2012年在位于芝加哥的丰田理工大学担任研究助理教授;2013年到2016年在弗吉尼亚大学任教。德鲁长期从事人工智能特别是视觉系统以及人机交互系统的研究工作。文章的第三作者斯特凡是德鲁长期的研究合作者,他们一起已经发表了包括本文在内的多篇高质量论文。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
我们先来看看这篇文章主要解决了一个什么场景下的问题。
|
||||
|
||||
人工智能的一个核心场景,或者说想要实现的一个目标,就是能够建立一个目标导向(Goal-Driven)的自动对话系统(Dialog System)。具体来说,在这样的系统中,机器人能够感知它们的环境(包括视觉、听觉以及其他感官),然后能和人或者其他机器人利用自然语言进行对话,从而实现某种目的。
|
||||
|
||||
目前对目标导向的自动对话系统的研究主要有两种思路。
|
||||
|
||||
一种思路是把整个问题看做静态的监督学习任务(Supervised Learning),希望利用大量的数据,通过神经对话模型(Neural Dialog Models)来对对话系统进行建模。这个模式虽然在近些年的研究中取得了一些成绩,但是仍然很难解决一个大问题,那就是产生的“对话”其实不像真人对话,不具备真实语言的很多特性。
|
||||
|
||||
另外一种思路则把学习对话系统的任务看做一个连续的过程,然后用强化学习(Reinforcement Learning)的模式来对整个对话系统建模。
|
||||
|
||||
这篇文章尝试探讨,在什么样的情况下能够让机器人学习到类似人的语言。文章的一个核心发现就是,自然语言并不是自然出现的。在目前的研究状态下,自然语言的出现还是一个没有确定答案的开放问题。可以说,这就是这篇最佳短论文的主要贡献。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
整篇文章其实是建立在一个虚拟的机器人交互场景里,也就是有两个机器人互相对话的一个环境。这个环境里有非常有限的物件(Object),每个物件包括三种属性(颜色、形状和样式),每一个属性包括四种可能取值,这样,在这个虚拟的环境中一共就有64个物件。
|
||||
|
||||
|
||||
|
||||
交互任务其实是两个机器人进行“猜谜”。为了区分,我们把两个机器人分为Q机器人和A机器人。猜谜一开始的时候,A机器人得到一个物件,也就是三种属性的某种实现组合,Q机器人并不知道这个物件。这个时候,Q机器人拿到两个属性的名字,需要通过对话最终猜出A拿到的这个物件所对应属性的取值。
|
||||
|
||||
在这个“游戏”的过程中,A是不知道Q手上的两个属性究竟是什么的,而Q也不知道A所拿的物件以及物件所对应属性的取值。因此,对话就是Q能够取得成功的关键因素。
|
||||
|
||||
在这篇文章里,Q和A的这个游戏通过强化学习进行建模。Q保持一组参数用于记录当前的状态。这组状态有最开始需要猜的属性,以及后面到当前状态为止所有Q的回答以及A的问题。类似地,A也保持这么一组状态,用于记录到目前位置的信息。这个强化学习最终的回馈是,当最后的预测值完全正确时,会有一个正1的反馈,而错误的话就是负10的反馈。
|
||||
|
||||
Q和A的模型都有三个模块:听、说和预测。以Q来举例,“听”模块是从要猜的属性这个任务开始,往后每一个步骤接受A的语句,从而更新自己的内部状态。“说”模块是根据当前的内部状态,决定下一步需要说的语句。最后“预测”模块则是根据所有的状态预测最后的属性值。
|
||||
|
||||
A机器人的结构是对称的。每一个模块本身都是一个 LSTM (Long Short-Term Memory,长短期记忆)模型。当然,所有这些LSTM模型的参数是不一样的。整个模型采用了REINFORCE算法(也被称作“vanilla” policy gradient,“基本”策略梯度)来学习参数,而具体的实现则采用了PyTorch软件包。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
在提出的方法上,作者们展示了Q均能很快地以比较高的准确度做出预测,并且在和A的互动中产生了“语言”。不过遗憾的是,通过观察,作者们发现这样的“语言”往往并不自然。最直观的一种情况就是,A可以忽视掉Q的各种反应,而直接把A的内部信息通过某种编码直接“暴露”给Q,从而Q可以很快赢得游戏,取得几乎完美的预测结果。这显然不是想要的结果。
|
||||
|
||||
作者们发现,在词汇量(Vocabulary)非常大的情况下,这种情况尤其容易发生,那就是A把自己的整个状态都暴露给Q。于是,作者们假定要想出现比较有意义的交流,词汇数目一定不能过大。
|
||||
|
||||
于是,作者们采用了限制词汇数目的方式,让词汇数目与属性的可能值和属性数目相等,这样就限制了在完美情况下交流的复杂度,使得A没办法过度交流。然而,这样的策略可以很好地对一个属性做出判断,但是无法对属性的叠加(因为Q最终是要猜两个属性)做出判断。
|
||||
|
||||
文章给出的一个解决方案是,让A机器人忘记过去的状态,强行让A机器人学习使用相同的一组状态来表达相同的意思,而不是有可能使用新的状态。在这样的限制条件以及无记忆两种约束下,A和Q的对话呈现出显著的自然语言的叠加性特征,而且在没有出现过的属性上表现出了接近两倍的准确率,这是之前的方法所不能达到的效果。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了EMNLP 2017年的最佳短论文,这篇文章介绍了在一个机器人对话系统中,如何能让机器人的对话更贴近人之间的行为。
|
||||
|
||||
这篇文章也是第一篇从谈话的自然程度,而不是从预测准确度去分析对话系统的论文。文章的一个核心观点是,如果想让对话自然,就必须避免机器人简单地把答案泄露给对方,或者说要避免有过大的词汇库。
|
||||
|
||||
一起来回顾下要点:第一,我简要介绍了这篇文章的作者群信息,文章作者在相关领域均发表过多篇高质量研究成果论文。第二,这篇文章论证了多智能体对话中自然语言的出现并不自然。第三,论文提出在词汇量限制条件和无记忆约束下,机器人对话可以呈现出一定的自然语言特征。
|
||||
|
||||
最后,给你留一个思考题,文章讲的是一个比较简单的对话场景,有一个局限的词汇库,如果是真实的人与人或者机器与机器的对话,我们如何来确定需要多大的词汇量呢?
|
||||
|
||||
名词解释:
|
||||
|
||||
ICML 2017,International Conference on Machine Learning ,国际机器学习大会。
|
||||
|
||||
IJCAI 2017, International Joint Conference on Artificial Intelligence,人工智能国际联合大会。
|
||||
|
||||
CVPR 2017,Conference on Computer Vision and Pattern Recognition,国际计算机视觉与模式识别会议。
|
||||
|
||||
ICCV 2017,International Conference on Computer Vision,国际计算机视觉大会。
|
||||
|
||||
NIPS 2017,Annual Conference on Neural Information Processing Systems,神经信息处理系统大会。
|
||||
|
||||
拓展阅读:Natural Language Does Not Merge ‘Naturally’ in Multi-Agent Dialog
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
011 精读2017年NIPS最佳研究论文之二:KSD测试如何检验两个分布的异同?
|
||||
本周我们来分析和探讨NIPS 2017上的三篇最佳论文。周一我们分享的文章主要研究的是一种“健壮的优化问题”,也就是说我们在优化一个“损失函数”的时候,不仅要考虑损失函数的“均值”,还要考虑损失函数的“方差”。
|
||||
|
||||
今天,我们来看另外一篇最佳论文《线性时间内核拟合优度测试》(A Linear-Time Kernel Goodness-of-Fit Test),讲的是如何来衡量一组数据是否来自于某一个分布。
|
||||
|
||||
今天的这篇文章理论性也很强,这里我尝试从更高的维度为你做一个归纳,如果对文章内容感兴趣,建议你一定要去阅读原文。
|
||||
|
||||
作者群信息介绍
|
||||
|
||||
本文一共有五位作者,我们在这里进行一个简要介绍。
|
||||
|
||||
第一作者叫维特瓦特·吉特克鲁特(Wittawat Jitkrittum),刚从伦敦大学学院(University College London)的“加斯比计算人脑科学所”(Gatsby Computational Neuroscience Unit)博士毕业。他在博士期间的主要研究是“统计测试”(Statistical Tests),特别是如何利用“核方法”(Kernel Method)来对“分布特征”(Distributional Features)进行测试。吉特克鲁特在泰国完成本科学习,于日本京的东京科技学院(Tokyo Institute Of Technology)获得硕士学位。最近几年,吉特克鲁特已经在NIPS、ICML、UAI等会议连续发表了多篇高质量论文,可以说是统计测试界的学者新秀。
|
||||
|
||||
第二作者许文凯(Wenkai Xu)是加斯比计算人脑科学所的一名博士生。
|
||||
|
||||
第三作者佐尔坦·萨博(Zoltán Szabó)来自法国一所著名的理工大学“巴黎综合理工学院”(École Polytechnique)。萨博之前也曾在加斯比计算人脑科学所工作过,目前在巴黎综合理工学院任职研究副教授(类似于研究员),长期从事核方法、信息论(Information Theory)、统计机器学习等方面的研究。
|
||||
|
||||
第四作者福水健次(Kenji Fukumizu)是“统计数学学院”(The Institute of Statistical Mathematics)的教授,长期从事核方法的研究,可以说是这方面的专家。
|
||||
|
||||
最后一个作者阿瑟·格里顿(Arthur Gretton)是加斯比计算人脑科学所的机器学习教授,长期从事机器学习,特别是核方法的研究。他的论文有9千多次的引用数。
|
||||
|
||||
论文的主要贡献和核心方法
|
||||
|
||||
我们首先来看一下这篇文章的主要贡献,理解这篇文章主要解决了什么场景下的问题。
|
||||
|
||||
在一般的建模场景里,我们常常会对一组数据提出一个模型,来描述产生这些数据背后的过程。这个过程我们通常是看不见的,是一个隐含的过程。那么,当我们提出了模型之后,如何知道用这个模型描述现实就是准确的呢?这时候我们就需要用到一些统计检验(Statistical Testing)的方法。
|
||||
|
||||
一种比较普遍的方法,那就是假设我们的模型是P,而数据的产生分布是Q。说得直白一些,就需要去验证P是不是等于Q,也就是需要验证两个分布是否相等。一个基本的做法就是,从P里“产生”(Generate)一组样本,或者叫一组数据,然后我们已经有了一组从Q里产生的数据,于是用“两个样本假设检验”(Two Sample Tests)来看这两组数据背后的分布是否相等。
|
||||
|
||||
这个想法看似无懈可击,但是在实际操作中往往充满困难。最大的操作难点就是从P中产生样本。比如P是一个深度神经网络模型,那从中产生样本就不是一个简单且计算效率高的流程,这就为基于“两个样本假设检验”带来了难度。
|
||||
|
||||
另一方面,我们在做这样的统计检验的时候,最好能够针对每一个数据点,得到一个数值,来描述当前数据点和模型之间的关系,从而能够给我们带来更加直观的认识,看模型是否符合数据。
|
||||
|
||||
这里,有一种叫作“最大均值差别”(Maximum Mean Discrepancy),或者简称为 MMD 的检验方法能够达到这样的效果。MMD的提出者就是这篇论文的最后一位作者阿瑟·格里顿,MMD是在NIPS 2016提出的一个检验两个样本是否来自同一个分布的一种方法。当MMD值大的时候,就说明这两个样本更有可能来自不同的分布。
|
||||
|
||||
和一般的衡量两个分布距离的方法相比,MMD的不同之处是把两个分布都通过核方法转换到了另外一个空间,也就是通常所说的“再生核希尔伯特空间”(Reproducing Kernel Hilbert Space),或者简称为 RKHS。在这个空间里,测量会变得更加容易。然而遗憾的是,MMD依然需要得到两个分布的样本,也就是说我们依然需要从P里得到样本。
|
||||
|
||||
那么,这篇文章的最大贡献,就是使用了一系列的技巧让P和Q的比较不依赖于从P中得到样本,从而让数据对于模型的验证,仅仅依赖于P的一个所谓的“打分函数”(Score Function)。
|
||||
|
||||
其实在MMD里,这个打分函数就是存在的,那就是针对我们从P或者是Q里抽取出来的样本,我们先经过一个函数F的变换,然后再经过一个叫“核函数”T的操作,最后两个样本转换的结果相减。
|
||||
|
||||
在这篇文章里,作者们提出了一个叫“核斯特恩差异”(Kernel Stein Discrepancy),或者叫KSD测试的概念,本质上就是希望能够让这两个式子中关于P的项等于零。
|
||||
|
||||
什么意思呢?刚才我们说了MMD的一个问题是依然要依赖于P,依赖于P的样本。假设我们能够让依赖P的样本这一项成为零,那么我们这个测试就不需要P的样本了,那也就是绕过了刚才所说的难点。
|
||||
|
||||
KSD的本质就是让MMD的第二项在任何时候都成为零。注意,我们这里所说的是“任何时候”,也就是说,KSD构造了一个特殊的T,这个T叫作“斯特恩运算符”(Stein Operator),使得第二项关于P的样本的计算,在任何函数F的情况下都是零,这一点在文章中提供了详细证明。于是,整个KSD就不依赖于P的样本了。
|
||||
|
||||
这篇文章不仅阐述了KSD的思想,而且在KSD的思想上更进了一步,试图把KSD的计算复杂度,也就是在平方级别的计算复杂度变为线性复杂度。什么意思呢?也就是说,希望能够让KSD的计算复杂度随着数据点的增加而线性增加,从而能够应用到大数据上。这个内容我们就不在这里复述了。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
虽然这篇文章的核心内容是一个理论结果,或者是算法革新,文章还是在“受限波兹曼机”(Restricted Boltzmann Machine),简称RBM上做了实验。本质上就是在RBM的某一个链接上进行了简单的改变而整个模型都保持原样。
|
||||
|
||||
如果我们有从这两个RBM中得到的样本,其实是很难知道他们之间的区别的。在实验中,传统的MMD基本上没法看出这两个样本的差别。然而不管是KSD,还是线性的KSD都能够得出正确的结论,而最终的线性KSD基本上是随着数据点的增多而性能增加,达到了线性的效果。
|
||||
|
||||
最后,作者们用了芝加哥犯罪记录来作为说明,使用“打分函数”来形象地找到哪些点不符合模型。应该说,理论性这么强的论文有如此直观的结果,实在难能可贵。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了NIPS 2017年的另外一篇最佳研究论文,文章的一个核心观点是希望能够通过构建一个特殊的运算符,使得传统的通过样本来检验两个分布的异同的方法,比如MMD方法,可以不依赖于目标分布的样本,并且还能达到线性计算速度。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了这篇文章的作者群信息。第二,我们详细介绍了这篇文章要解决的问题以及贡献 。第三,我们简要地介绍了文章的实验结果 。
|
||||
|
||||
最后,给你留一个思考题,这种衡量分布之间距离的想法,除了在假设检验中使用以外,在机器学习的哪个环节也经常碰到?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,65 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
012 精读2017年NIPS最佳研究论文之三:如何解决非完美信息博弈问题?
|
||||
今天,我们来分享一下NIPS 2017的最后一篇最佳论文《安全和嵌套子博弈解决非完美信息博弈问题》(Safe and Nested Subgame Solving for Imperfect-Information Games)。这篇文章讲的是什么内容呢?讲的是如何解决“非完美信息的博弈”问题。
|
||||
|
||||
和前两篇分享的文章类似,这篇文章也是理论性很强,并不适合初学者,我们在这里仅仅对文章的主要思想进行一个高度概括。如果你对文章内容感兴趣,还是建议要阅读原文。
|
||||
|
||||
另外一个值得注意的现象是,即便在深度学习如日中天的今日,我们本周分享的三篇NIPS最佳论文均和深度学习无关。这一方面展现了深度学习并不是人工智能的全部,另一方面也让我们看到机器学习和人工智能领域的宽广。
|
||||
|
||||
作者群信息介绍
|
||||
|
||||
本文一共两位作者。
|
||||
|
||||
第一作者叫诺阿·布朗(Noam Brown)。布朗是卡内基梅隆大学计算机系的博士生,目前的主要研究方向是利用强化学习和博弈论的思想来解决大规模的多机器人交互的问题。这篇文章提到的“非完美信息博弈”也是这里面的一个分支问题。布朗已经在这个方向发表了多篇论文,包括三篇AAAI论文、两篇NIPS论文、一篇ICML论文、以及一篇IJCAI论文。
|
||||
|
||||
和本文非常相关的一个研究内容在2017年发表于《科学》(Science)杂志上,讲述了如何利用博弈论来解决“Heads-up无限制扑克”(Heads-up No Limit Poker)的问题,并且在现实比赛中已经超过了人类的表现。这个工作也得到了不少媒体的报道。布朗2017年也在伦敦的Google DeepMind实习;在博士阶段之前,他曾经在金融领域工作。
|
||||
|
||||
第二作者是布朗的导师托马斯·桑德霍姆(Tuomas Sandholm)。桑德霍姆是卡内基梅隆大学计算机系的教授,其在“机制设计”(Mechanism Design)以及“拍卖理论”(Auction Theory)等领域有长期的研究,发表了450多篇学术论文,并且有超过2万多的引用数。除了他在学术上的造诣以外,桑德霍姆还有一些轶事,比如,他还有非常广泛的兴趣爱好,在他的主页就列举了他冲浪、喜好魔术以及对飞行的热爱。
|
||||
|
||||
论文的主要贡献和核心方法
|
||||
|
||||
我们首先来看一下这篇文章的主要贡献,弄明白这篇文章主要解决了什么场景下的问题。
|
||||
|
||||
对于一篇理论性很强的文章来说,我们通常需要不断地提问,这篇文章的核心主旨到底是什么,这样才能够帮助我们了解到文章的主干。
|
||||
|
||||
首先,文章讲的是一个“非完美信息的博弈”问题。这是什么意思呢?要理解“非完美信息博弈”,我们就必须要说一下“完美信息博弈”。
|
||||
|
||||
简单来说,“完美信息博弈”指的是博弈双方对目前的整个博弈状况都完全了解,对于博弈之前,以及整个博弈时候的初始状态也完全了解。在这种定义下,很多大家熟悉的游戏都是“完美信息博弈”,比如围棋、象棋等等。那么,DeepMind开发的AlphaGo以及后来的AlphaGo Zero都是典型的针对“完美信息博弈”的人工智能算法。
|
||||
|
||||
“非完美信息博弈”并不是说我们不知道对方的任何信息,而只是说信息不充分。什么意思呢?比如,我们可能并不知道对手在这一轮里的动作,但我们知道对手是谁,有可能有怎样的策略或者他们的策略的收益(Payoff)等。
|
||||
|
||||
除了在表面定义上的区别以外,在整个问题的机构上也有不同。
|
||||
|
||||
“完美信息博弈”有这样的特征,那就是在某一个时刻的最优策略,往往仅需要在问题决策树当前节点的信息以及下面子树对应的所有信息,而并不需要当前节点之前的信息,以及其他的旁边节点的信息。
|
||||
|
||||
什么意思呢?比如我们看AlphaGo。本质上在这样“完美信息博弈”的场景中,理论上,我们可以列出所有的棋盘和棋手博弈的可能性,然后用一个决策方案树来表达当前的决策状态。在这样的情况下,走到某一个决策状态之后,往往我们仅仅需要分析后面的状态。尽管这样的情况数目会非常巨大,但是从方法论的角度来说,并不需要引用其他的信息来做最优决策。
|
||||
|
||||
“非完美信息博弈”的最大特点就正好和这个相反,也就是说,每一个子问题,或者叫子博弈的最佳决策,都需要引用其他信息。而实际上,本篇论文讲述了一个事实,那就是“非完美信息博弈”在任何一个决策点上的决策往往取决于那些根本还没有“达到”(Reach)的子博弈问题。
|
||||
|
||||
在这一点上,论文其实引用了一个“掷硬币的游戏”来说明这个问题。限于篇幅,我们就不重复这个比较复杂的问题设置了,有兴趣的话可以深读论文。
|
||||
|
||||
但是从大体上来说,这个“掷硬币的游戏”,其核心就是想展示,两个人玩掷硬币,在回报不同,并且两个人的玩法在游戏规则上有一些关联的情况下,其中某一个玩家总可以根据情况完全改变策略,而如果后手的玩家仅仅依赖观测到先手玩家的回馈来决策,则有可能完全意识不到这种策略的改变,从而选择了并非优化的办法。这里的重点在于先后手的玩家之间因为规则的牵制,导致后手玩家无法观测到整个游戏状态,得到的信息并不能完全反应先手玩家的策略,从而引起误判。
|
||||
|
||||
为解决这样博弈问题,这篇文章提出的一个核心算法就是根据当前的情况,为整个现在的情况进行一个“抽象”(Abstraction)。这个抽象是一个小版本的博弈情况,寄希望这个抽象能够携带足够的信息。然后,我们根据这个抽象进行求解,当在求解真正的全局信息的时候,我们利用这个抽象的解来辅助我们的决策。有时候,这个抽象又叫作“蓝图”(Blueprint)策略。这篇文章的核心在于如何构造这样的蓝图,以及如何利用蓝图来进行求解。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
文章在“Heads-up无限制扑克”的数据集上做了实验,并且还比较了之前在《科学》杂志上发表的叫作“利不拉图斯”(Libratus)的算法版本。人工智能算法都大幅度领先人类的玩家。
|
||||
|
||||
有一种算法叫“非安全子博弈算法”(Unsafe Subgame Solving),也就是说并不考虑“非完美信息的博弈”状态,把这个情况当做完美信息来做的一种算法,在很多盘游戏中均有不错的表现,但是有些时候会有非常差的结果,也就是说不能有“健壮”(Robust)的结果。这里也从实验上证明了为什么需要本文提出的一系列方法。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了NIPS 2017的第三篇最佳研究论文,文章的一个核心观点是希望能够通过构建蓝图来引导我们解决非完美信息博弈的问题,特别是在扑克上面的应用。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了这篇文章的作者群信息。第二,我们详细介绍了这篇文章要解决的问题以及贡献 。第三,我们简要地介绍了文章的实验结果 。
|
||||
|
||||
最后,给你留一个思考题,为什么非完美博弈的整个问题求解现在并没有依靠*深度加强学习*呢,大家在这个问题上有什么直观上的体会呢?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,81 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
013 WSDM 2018论文精读:看谷歌团队如何做位置偏差估计
|
||||
WSDM(International Conference on Web Search and Data Mining,国际搜索和数据挖掘大会)是每年举办一次的搜索、数据挖掘以及机器学习的顶级会议,其从2008年开始举办,已经有11届的历史。
|
||||
|
||||
尽管WSDM仅仅举办了11届,在计算机科学领域算是一个非常年轻的会议。但是,WSDM快速积累的影响力已经使其成为了数据挖掘领域的一个顶级会议。根据谷歌学术搜索公布的数据,目前WSDM已经是数据挖掘领域仅次于KDD的学术会议,而KDD已经举办了20多年。
|
||||
|
||||
WSDM的一大特点就是有大量工业界的学者参与,不管是投稿和发表论文还是评审委员会或者大会组织委员会的成员,都有很多工业界背景的人员参加。这可能也是WSDM备受关注的一个原因,那就是大家对于工业界研究成果的重视,同时也希望能够从中学习到最新的经验。
|
||||
|
||||
2018年的WSDM大会于2月5日到9日在的美国的洛杉矶举行。今天,我们就来分享WSDM 2018上来自谷歌的一篇文章《无偏排序学习在个人搜索中的位置偏差估计》(Position Bias Estimation for Unbiased Learning to Rank in Personal Search)。这篇文章的核心内容是如何结合“因果推断”(Causal Inference)和排序学习(Learning to Rank)来对用户数据进行进一步无偏差的估计。
|
||||
|
||||
作者群信息介绍
|
||||
|
||||
这篇论文的所有作者都来自谷歌,我们这里对作者群做一个简单的介绍。
|
||||
|
||||
第一作者王选珲(Xuanhui Wang)2015年起在谷歌工作。他之前在Facebook工作了三年,一直从事广告系统的开发;再往前,是在雅虎担任了两年的科学家。王选珲于2009年毕业于伊利诺伊大学香槟分校,获得计算机博士学位,他的博士生导师是信息检索界著名的华人学者翟成祥(Chengxiang Zhai)。
|
||||
|
||||
第二作者纳达夫⋅古尔班迪(Nadav Golbandi)于2016年加入谷歌,之前在雅虎研究院担任了8年的主任级研究工程师(Principal Research Engineer),一直从事搜索方面的研发工作。在雅虎研究院之前,古尔班迪在以色列的IBM研究院工作了6年。他拥有以色列理工大学的计算机硕士学位。
|
||||
|
||||
第三作者迈克尔⋅本德斯基(Michael Bendersky)于2012年加入谷歌,一直从事个人以及企业信息系统(Google Drive)的研发工作。本德斯基于2011年从马萨储塞州阿姆赫斯特分校(University of Massachusetts Amherst)毕业,获得计算机博士学位,他的导师是信息检索界的学术权威布鲁斯⋅夸夫特(Bruce Croft)。
|
||||
|
||||
第四作者唐纳德⋅梅泽尔(Donald Metzler)也是2012年加入谷歌的,一直负责个人以及企业信息系统(Google Drive)搜索质量的研发工作。梅泽尔曾在雅虎研究院工作过两年多,然后还在南加州大学(University of South California)担任过教职。梅泽尔是2007年从马萨储塞州阿姆赫斯特分校计算机博士毕业,导师也是信息检索界的学术权威布鲁斯⋅夸夫特。
|
||||
|
||||
文章的最后一个作者是马克⋅诺瓦克(Marc Najork)于2014年加入谷歌,目前担任研发总监(Research Engineering Director)的职位。诺瓦克之前在微软研究院硅谷分部工作了13年,再之前在DEC研究院工作了8年。诺瓦克是信息检索和互联网数据挖掘领域的学术权威,之前担任过ACM顶级学术期刊ACM Transactions on the Web的主编。他发表过很多学术文章,引用数在七千以上。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
按照我们阅读论文的方法,首先来看这篇文章的主要贡献,梳理清楚这篇文章主要解决了什么场景下的问题。
|
||||
|
||||
众所周知,所有的搜索系统都会有各种各样的“偏差”(Bias),如何能够更好地对这些偏差进行建模就成为了对搜索系统进行机器学习的一个重要的挑战。
|
||||
|
||||
一种方式就是像传统的信息检索系统一样,利用人工来获得“相关度”(Relevance)的标签,不需要通过通过人机交互来获取相关度的信息。所以,也就更谈不上估计偏差的问题。
|
||||
|
||||
第二种,文章中也有谈到的,那就是利用传统的“点击模型”(Click Model)。点击模型是一种专门用来同时估计相关度和偏差的概率图模型,在过去10年左右的时间内已经发展得相对比较成熟。文章中也提到,大多数点击模型的应用主要是提取相关度信息,而并不在乎对偏差的估计是否准确。
|
||||
|
||||
第三种,也是最近几年兴起的一个新的方向,那就是利用“因果推断”(Causal Inference)和排序学习的结合直接对偏差进行建模。在WSDM 2017的最佳论文[1]中,已经让我们见识了这个思路。然而,在去年的那篇文章里,并没有详细探讨这个偏差的估计和点击模型的关系。
|
||||
|
||||
简言之,这篇论文主要是希望利用点击模型中的一些思路来更加准确地估计偏差,从而能够学习到更好的排序结果。同时,这篇文章还探讨了如何能够在较少使用随机数据上来对偏差进行更好的估计。这里,作者们提出了一种叫作“基于回归的期望最大化”(Regression-based EM)算法。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
文章首先讨论了如果已知“偏差值”(Propensity Score),也就是用户看到每一个文档或者物品时的概率,我们就可以构造“无偏差”的指标,比如“无偏差的精度”(Unbiased Precision)来衡量系统的好坏。
|
||||
|
||||
这里,无偏差的效果主要是来自于重新对结果进行权重的调整。意思就是说,并不是每一个点击都被认为是同样的价值。总的来说,如果文档位于比较高的位置上,那权重反而会比较低,反之,如果文档位于比较低的位置上,权重反而较高。这里的假设是一种“位置偏差”(Position Bias)假设。意思就是不管什么文档,相对来说,放在比较高的位置时都有可能获得更多的点击。因此,在较低位置的文档被点击就显得更加难得。
|
||||
|
||||
这种情况下,一般都无法直接知道“偏差值”。因此,如何去估计偏差值就成了一个核心问题。
|
||||
|
||||
这篇文章在进行“偏差值”估计的方法上,首先利用了一个叫“位置偏差模型”(Position Bias Model)的经典点击模型,对偏差值和相关度进行了建模。“位置偏差模型”的假设是用户对于每一个查询关键字的某一个位置上的文档点击概率,都可以分解为两个概率的乘积,一个是用户看到这个位置的概率,一个就是文档本身相关度的概率。那么,位置偏差模型的主要工作就是估计这两个概率值。
|
||||
|
||||
如果我们能够对每一个查询关键字的结果进行随机化,那么,我们就不需要估计第一个概率,而可以直接利用文档的点击率来估计文档的相关度。但是,作者们展示了,彻底的随机化对于用户体验的影响。
|
||||
|
||||
另外一种方法,相对来说比较照顾用户体验,那就是不对所有的结果进行随机化,而仅仅针对不同的“配对”之间进行随机化。比如,排位第一的和第二的文档位置随机互换,然后第二的和第三的随机互换等等。在这样的结果下,作者们依然能够对偏差和相关度进行估计,不过用户的体验就要比第一种完全随机的要好。只不过,在现实中,这种方法依然会对用户体验有所损失。
|
||||
|
||||
于是,作者们提出了第三种方法,那就是直接对位置偏差模型进行参数估计。也就是说,不希望利用随机化来完全消除其中的位置概率,而是估计位置概率和相关度概率。
|
||||
|
||||
这里,因为有两个概率变量需要估计,于是作者利用了传统的“期望最大化”(EM)算法,并且提出了一种叫做“基于回归的期望最大化”的方法。为什么这么做呢?原因是在传统的期望最大化中,作者们必须对每一个关键字和文档的配对进行估计。然而在用户数据中,这样的配对其实可能非常有限,会陷入数据不足的情况。因此,作者们提出了利用一个回归模型来估计文档和查询关键字的相关度。也就是说,借助期望最大化来估计位置偏差,借助回归模型来估计相关度。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
这篇文章使用了谷歌的邮件和文件存储的搜索数据,采用了2017年4月两个星期的日志。数据大约有四百万个查询关键字,每个关键字大约有五个结果。作者们在这个数据集上验证了提出的方法能够更加有效地捕捉文档的偏差。利用了这种方法训练的排序模型比没有考虑偏差的模型要好出1%~2%。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了WSDM 2018年的一篇来自谷歌团队的文章,这篇文章介绍了如何估计文档的位置偏差,然后训练出更加有效的排序算法。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了这篇文章的作者群信息;第二,我们详细介绍了这篇文章要解决的问题以及贡献;第三,我们简要地介绍了文章提出方法的核心内容 。
|
||||
|
||||
最后,给你留一个思考题,如果要估计位置偏差,对数据的随机性有没有要求?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Thorsten Joachims, Adith Swaminathan, and Tobias Schnabel. Unbiased Learning-to-Rank with Biased Feedback. Proceedings of the Tenth ACM International Conference on Web Search and Data Mining (WSDM ‘17). ACM, New York, NY, USA, 781-789, 2017.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
014 WSDM 2018论文精读:看京东团队如何挖掘商品的替代信息和互补信息
|
||||
本周我们来精读WSDM的几篇论文,周一我们分享了一篇来自谷歌团队的文章,其核心是利用点击模型来对位置偏差进行更加有效的估计,从而能够学习到更好的排序算法。
|
||||
|
||||
今天,我们来介绍WSDM 2018的最佳学生论文《电子商务中可替代和互补产品的路径约束框架》(A Path-constrained Framework for Discriminating Substitutable and Complementary Products in E-commerce),这篇文章来自于京东的数据科学实验室。
|
||||
|
||||
作者群信息介绍
|
||||
|
||||
这篇论文的所有作者都来自京东大数据实验室,我们这里对几位主要作者做一个简单介绍。
|
||||
|
||||
第三作者任昭春(Zhaochun Ren)目前在京东数据科学实验室担任高级研发经理。他于2016年毕业于荷兰阿姆斯特丹大学,获得计算机博士学位,师从著名的信息检索权威马丁⋅德里杰克(Maarten de Rijke)。任昭春已经在多个国际会议和期刊上发表了多篇关于信息检索、文字归纳总结、推荐系统等多方面的论文。
|
||||
|
||||
第四作者汤继良(Jiliang Tang)目前是密歇根州立大学的助理教授。汤继良于2015年从亚利桑那州立大学毕业,获得计算机博士学位,师从著名的数据挖掘专家刘欢(Huan Liu)教授。他于2016年加入密歇根州立大学,这之前是雅虎研究院的科学家。汤继良是最近数据挖掘领域升起的一颗华人学术新星,目前他已经发表了70多篇论文,并且有四千多次的引用。
|
||||
|
||||
最后一位作者殷大伟(Dawei Yin)目前是京东数据科学实验室的高级总监。2016年加入京东,之前在雅虎研究院工作,历任研究科学家和高级经理等职务。殷大伟2013年从里海大学(Lehigh University)获得计算机博士学位,师从信息检索领域的专家戴维森(Davison)教授。目前已经有很多高质量的研究工作发表。殷大伟和笔者是博士期间的实验室同学以及在雅虎研究院期间的同事。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
我们首先来看一下这篇文章的主要贡献,梳理清楚文章主要解决了一个什么场景下的问题。
|
||||
|
||||
对于工业级商品推荐系统而言,一般通过两个步骤来产生推荐结果。第一步,产生候选集合,这里主要是从海量的物品中选择出几百到几千款用户可能会购买的商品;第二步,利用复杂的机器学习模型来对所有候选集中的产品进行排序。
|
||||
|
||||
这篇文章主要探讨了如何能够更好地产生候选集产品,即如何更好地产生“替代品”(Substitutes)和“互补品”(Complements)来丰富用户的购买体验。
|
||||
|
||||
那么,什么是替代品和互补品呢?
|
||||
|
||||
根据这篇文章的定义,替代品就是用户觉得这些商品可以互相被替换的;而互补品则是用户会一起购买的。挖掘这些商品不仅对于产生候选集具有很重要的意义,也对于某些场景下的推荐结果有很好的帮助,比如当用户已经购买了某一件商品之后,给用户推荐其他的互补品。
|
||||
|
||||
虽然替代品和互补品对于互联网电商来说是很重要的推荐源,但并没有多少文献和已知方法来对这两类商品进行有效挖掘。而且这里面一个很大的问题是数据的“稀缺”(Sparse)问题。因为替代品或者互补品都牵扯至少两个商品,而对于巨型的商品库来说,绝大多数的商品都不是两个商品一起被同时考虑和购买过,因此如何解决数据的稀缺问题是一大难点。
|
||||
|
||||
另一方面,商品的属性是复杂的。同一款商品有可能在某些情况下是替代品,而在另外的情况下是互补品。因此,如何在一个复杂的用户行为链路中挖掘出商品的属性,就成为了一个难题。很多传统方法都是静态地看待这个问题,并不能很好地挖掘出所有商品的潜力。
|
||||
|
||||
归纳起来,这篇文章有两个重要贡献。第一,作者们提出了一种“多关系”(Multi-Relation)学习的框架来挖掘替代品和互补品。第二,为了解决数据的稀缺问题,两种“路径约束”(Path Constraints)被用于区别替代品和互补品。作者们在实际的数据中验证了这两个新想法的作用。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
文章提出方法的第一步是通过关系来学习商品的表征(Representation)。这里文章并没有要区分替代品和互补品。表征的学习主要是用一个类似Word2Vec的方式来达到的。
|
||||
|
||||
也就是说,商品之间如果有联系,不管是替代关系还是互补关系,都认为是正相关,而其他的所有商品都认为是负相关。于是,我们就可以通过Word2Vec的思想来学习商品的表征向量,使得所有正相关的商品之间的向量点积结果较高,而负相关的向量点积结果较低。这一步基本上是Word2Vec在商品集合上的一个应用。
|
||||
|
||||
通过第一步得到的每个商品的表征,是一个比较笼统的综合的表征。而我们之前已经提到了,那就是不同的情况下,商品可能呈现出不同的属性。因此,我们就需要根据不同的场景来刻画产品的不同表征。文章采用的方法是,对于不同类型的关系,每个商品都有一个对应的表征。这个关系特定的表征是从刚才我们学到的全局表征“投影”(Project)到特定关系上的,这里需要学习的就是一个投影的向量。
|
||||
|
||||
第三个步骤就是挖掘替代关系和互补关系了。这篇文章使用了一个不太常见的技术,用“模糊逻辑”(Fuzzy Logic)来表达商品之间的约束关系。在这里我们并不需要对模糊逻辑有完整的理解,只需要知道这是一种把“硬逻辑关系”(Hard Constraints)转换成为通过概率方法表达的“软逻辑关系”(Soft Constraints)的技术。
|
||||
|
||||
在这篇文章里,作者们重点介绍的是如何利用一系列的规则来解决数据稀缺的问题。具体来说,那就是利用一些人们对于替代关系或者互补关系的观察。
|
||||
|
||||
比如,商品A是商品B的替代品,那很可能商品A所在的类别就是商品B所在类别的替代品。再比如,商品B是商品A的替代品,而商品C又是商品B的替代品,而如果A、B和C都属于一个类别,那么我们也可以认为商品C是A的替代品。
|
||||
|
||||
总之,作者们人工地提出了这样一系列的规则,或者叫做约束关系,希望能够使用这样的约束关系来尽可能地最大化现有数据的影响力。当然,我们可以看到,这样的约束并不是百分之百正确的,这也就是作者们希望用“软逻辑关系”来进行约束的原因,因为这其实也是一个概率的问题。
|
||||
|
||||
整个提出的模型最终是一个集大成的优化目标函数,也就是最开始的物品的综合表征,在特定的关系下的投影的学习,以及最后的软逻辑关系的学习,这三个组件共同组成了最后的优化目标。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
这篇文章使用了京东商城的五大类商品来做实验,商品的综述大大超过之前亚马逊的一个公开数据的数量。作者重点比较了之前的一个来自加州大学圣地亚哥团队的模型,以及几个矩阵分解的经典模型,还比较了一个基于协同过滤的模型。
|
||||
|
||||
从总的效果上来看,这篇文章提出的模型不管是在关系预测的子任务上,还是在最后的排序任务上均要大幅度地好于其他模型。同时,作者们也展示了逻辑关系的确能够帮助目标函数把替代关系和互补关系的商品区分开来。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了WSDM 2018年的一篇来自京东数据科学团队的文章,这篇文章介绍了如何利用多关系学习以及模糊逻辑来挖掘商品的替代信息和互补信息,然后训练出更加有效的排序算法。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了这篇文章的作者群信息;第二,我们详细介绍了这篇文章要解决的问题以及贡献 ;第三,我们简要地介绍了文章提出方法的核心内容以及实验的结果。
|
||||
|
||||
最后,给你留一个思考题,互补商品或者替代商品是双向关系还是单向关系,为什么呢?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,53 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
017 The Web 2018论文精读:如何改进经典的推荐算法BPR?
|
||||
今天,我们来看万维网大会上的一篇优秀短论文。在万维网大会上,主要发表两类论文。一类是10页的长论文,一类是2页的短论文或称作展板论文。短论文主要是发表短小的成果或者是还在研究过程中的重要成果。每一届的万维网大会,都会评选出一篇最佳短论文奖。
|
||||
|
||||
今天我和你分享的论文,题目是《利用查看数据,贝叶斯个性化排序的一种改进的取样器》(An Improved Sampler for Bayesian Personalized Ranking by Leveraging View Data)。这篇论文也有六位作者,和我们介绍的上一篇论文一样,都来自清华大学和新加坡国立大学。
|
||||
|
||||
贝叶斯个性化排序
|
||||
|
||||
要想理解这篇论文的内容,我们必须要讲一下什么是“贝叶斯个性化排序”(Bayesian Personalized Ranking),或者简称是BPR。有关BPR的详细介绍,可以阅读参考文献[1]。我们在这里仅对BPR进行一个高维度的总结。
|
||||
|
||||
简单来说,BPR是推荐系统中的一个配对排序(Pairwise)学习算法。在我们前面介绍搜索算法的时候,曾经提到了各种配对排序学习算法。配对排序学习不是针对每一个数据实例来学习其标签或者响应变量,而是学习一个相对的顺序,希望能够把所有的正例都排列到负例之前。也就是说,对于配对排序来说,每一个数据实例的预测值本身并不重要,排序算法在意的是对于一正一负的一个配对来说,是否能够把正例给准确地排列到负例之上。这其实就要求BPR在数值上对正例的预测值能够比负例的预测值高。
|
||||
|
||||
BPR主要是解决了在推荐系统中长期以来只对单个数据点进行预测,比如需要对用户物品的喜好矩阵建模的时候,之前的大多数算法都无法有效地对没有观测到的数据进行建模。而BPR是配对算法,因此我们只需要关注观测的数据以及他们之间的关系,从而能够对用户的喜好,特别是有“隐反馈”(Implicit Feedback)数据的时候,取得更加明显的效果。这里的隐反馈指的并不是用户告诉系统其对每一个物品的喜好程度,而是用户在和系统的交互过程中通过一些行为表达出的喜好。这些用户的行为往往并不全面,因此需要算法和模型能够对这些行为进行有效建模。
|
||||
|
||||
论文的主要贡献和核心方法
|
||||
|
||||
了解了BPR大概是怎么回事以后,我们来看一看这篇论文的主要贡献和核心方法。
|
||||
|
||||
首先我们刚才讲到BPR的核心是学习一个配对的排序问题。那么在训练的时候,我们需要对一个正例和一个负例的配对进行学习,更新参数。然而在一个自然的用户隐反馈数据集里,正例相对来说往往是少数,负例则是绝大多数。因此,一个传统的方法就是在组成一个配对的时候,相对于一个正例来说,我们都“均匀地”(Uniformly)选取负样本来组成配对,这个过程有时候也叫“采样”(Sampling)。
|
||||
|
||||
这篇论文有两个主要贡献。第一个贡献是,作者们发现,如果在全局均匀地采样负样本,第一没有必要,第二可能反而会影响最后学习的效果。第二个贡献是,针对电子商务的应用,作者们发明了一种负样本采样的方法,使得学习算法可以利用到更多的用户“浏览”(View)信息,从而能够对算法的整体训练效果有大幅度的提升。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
这篇论文的数据集分别使用了母婴产品“贝贝网”和天猫的数据。其中,贝贝网有约16万用户、12万商品、260万次购买和4600万次浏览;天猫的数据则有3万用户、3万多商品、46万次购买和150多万次浏览。两个数据集都呈现了大于99%的“稀疏度”(Sparsity)。
|
||||
|
||||
首先,作者们实验了不从全局中选取负样本而仅仅采样一部分,而且是相比于原来的空间非常小的样本,比如仅仅几百个负样本而不是几万个的情况。实验效果在贝贝网上不仅没有影响算法的精确度,算法的精确度反而还有提升。而在天猫的数据集上,算法效果没有提升,而有一些小幅度的下降,但是作者们认为这样的代价还是值得的,因为数据集的减少,算法的训练时间会大幅度降低。从这个实验中,作者们得出了不需要从全局进行采样的结论。
|
||||
|
||||
紧接着,作者们提出了一个新的概念,那就是,对用户的数据集合进行划分,把用户的行为分为“购买集”(C1)、“浏览但没有购买集”(C2)、“剩下的数据”(C3)这三个集合。作者们提出,BPR要想能够达到最好的效果,需要对这三种数据集进行采样。也就是说,我们需要组成C1和C2、C1和C3以及C2和C3的配对来学习。
|
||||
|
||||
具体来说,用户在贝贝网和天猫的数据中尝试了不同的比例来对这三种集合进行采样。总体的经验都是C3中采样的数据要大于C2中的,然后要大于C1中的。这其实就是说训练算法要更好地学习到用户不喜欢某件东西的偏好。采用这样的采样方式,作者们展示了模型的效果比传统的BPR或仅仅使用“最流行的物品”作为推荐结果要好60%左右。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了今年万维网大会的一篇优秀短论文。文章介绍了如何对一个经典的推荐算法BPR进行改进,从而提高效率并且大幅度提升算法有效度。
|
||||
|
||||
一起来回顾下要点:第一,我们从高维度介绍了BPR的含义;第二,我们简要介绍了论文的主要贡献和思路;第三,我们简单分享了论文的实验成果。
|
||||
|
||||
最后,给你留一个思考题,除了这篇论文提出的组成正例和负例的配对思路以外,你能不能想到在用户浏览网站的时候,还有哪些信息可以帮助我们组成更多的配对呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, and Lars Schmidt-Thieme. BPR: Bayesian personalized ranking from implicit feedback. Proceedings of the Twenty-Fifth Conference on Uncertainty in Artificial Intelligence (UAI ‘09). AUAI Press, Arlington, Virginia, United States, 452-461, 2009.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,53 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
018 The Web 2018论文精读:如何从文本中提取高元关系?
|
||||
今天,我们来看万维网大会上的一篇优秀短论文。在万维网大会上,主要发表两类论文。一类是10页的长论文,一类是2页的短论文或称作展板论文。短论文主要是发表短小的成果或者是还在研究过程中的重要成果。每一届的万维网大会,都会评选出一篇最佳短论文奖。
|
||||
|
||||
今天我和你分享的论文,题目是《利用查看数据,贝叶斯个性化排序的一种改进的取样器》(An Improved Sampler for Bayesian Personalized Ranking by Leveraging View Data)。这篇论文也有六位作者,和我们介绍的上一篇论文一样,都来自清华大学和新加坡国立大学。
|
||||
|
||||
贝叶斯个性化排序
|
||||
|
||||
要想理解这篇论文的内容,我们必须要讲一下什么是“贝叶斯个性化排序”(Bayesian Personalized Ranking),或者简称是BPR。有关BPR的详细介绍,可以阅读参考文献[1]。我们在这里仅对BPR进行一个高维度的总结。
|
||||
|
||||
简单来说,BPR是推荐系统中的一个配对排序(Pairwise)学习算法。在我们前面介绍搜索算法的时候,曾经提到了各种配对排序学习算法。配对排序学习不是针对每一个数据实例来学习其标签或者响应变量,而是学习一个相对的顺序,希望能够把所有的正例都排列到负例之前。也就是说,对于配对排序来说,每一个数据实例的预测值本身并不重要,排序算法在意的是对于一正一负的一个配对来说,是否能够把正例给准确地排列到负例之上。这其实就要求BPR在数值上对正例的预测值能够比负例的预测值高。
|
||||
|
||||
BPR主要是解决了在推荐系统中长期以来只对单个数据点进行预测,比如需要对用户物品的喜好矩阵建模的时候,之前的大多数算法都无法有效地对没有观测到的数据进行建模。而BPR是配对算法,因此我们只需要关注观测的数据以及他们之间的关系,从而能够对用户的喜好,特别是有“隐反馈”(Implicit Feedback)数据的时候,取得更加明显的效果。这里的隐反馈指的并不是用户告诉系统其对每一个物品的喜好程度,而是用户在和系统的交互过程中通过一些行为表达出的喜好。这些用户的行为往往并不全面,因此需要算法和模型能够对这些行为进行有效建模。
|
||||
|
||||
论文的主要贡献和核心方法
|
||||
|
||||
了解了BPR大概是怎么回事以后,我们来看一看这篇论文的主要贡献和核心方法。
|
||||
|
||||
首先我们刚才讲到BPR的核心是学习一个配对的排序问题。那么在训练的时候,我们需要对一个正例和一个负例的配对进行学习,更新参数。然而在一个自然的用户隐反馈数据集里,正例相对来说往往是少数,负例则是绝大多数。因此,一个传统的方法就是在组成一个配对的时候,相对于一个正例来说,我们都“均匀地”(Uniformly)选取负样本来组成配对,这个过程有时候也叫“采样”(Sampling)。
|
||||
|
||||
这篇论文有两个主要贡献。第一个贡献是,作者们发现,如果在全局均匀地采样负样本,第一没有必要,第二可能反而会影响最后学习的效果。第二个贡献是,针对电子商务的应用,作者们发明了一种负样本采样的方法,使得学习算法可以利用到更多的用户“浏览”(View)信息,从而能够对算法的整体训练效果有大幅度的提升。
|
||||
|
||||
方法的实验效果
|
||||
|
||||
这篇论文的数据集分别使用了母婴产品“贝贝网”和天猫的数据。其中,贝贝网有约16万用户、12万商品、260万次购买和4600万次浏览;天猫的数据则有3万用户、3万多商品、46万次购买和150多万次浏览。两个数据集都呈现了大于99%的“稀疏度”(Sparsity)。
|
||||
|
||||
首先,作者们实验了不从全局中选取负样本而仅仅采样一部分,而且是相比于原来的空间非常小的样本,比如仅仅几百个负样本而不是几万个的情况。实验效果在贝贝网上不仅没有影响算法的精确度,算法的精确度反而还有提升。而在天猫的数据集上,算法效果没有提升,而有一些小幅度的下降,但是作者们认为这样的代价还是值得的,因为数据集的减少,算法的训练时间会大幅度降低。从这个实验中,作者们得出了不需要从全局进行采样的结论。
|
||||
|
||||
紧接着,作者们提出了一个新的概念,那就是,对用户的数据集合进行划分,把用户的行为分为“购买集”(C1)、“浏览但没有购买集”(C2)、“剩下的数据”(C3)这三个集合。作者们提出,BPR要想能够达到最好的效果,需要对这三种数据集进行采样。也就是说,我们需要组成C1和C2、C1和C3以及C2和C3的配对来学习。
|
||||
|
||||
具体来说,用户在贝贝网和天猫的数据中尝试了不同的比例来对这三种集合进行采样。总体的经验都是C3中采样的数据要大于C2中的,然后要大于C1中的。这其实就是说训练算法要更好地学习到用户不喜欢某件东西的偏好。采用这样的采样方式,作者们展示了模型的效果比传统的BPR或仅仅使用“最流行的物品”作为推荐结果要好60%左右。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了今年万维网大会的一篇优秀短论文。文章介绍了如何对一个经典的推荐算法BPR进行改进,从而提高效率并且大幅度提升算法有效度。
|
||||
|
||||
一起来回顾下要点:第一,我们从高维度介绍了BPR的含义;第二,我们简要介绍了论文的主要贡献和思路;第三,我们简单分享了论文的实验成果。
|
||||
|
||||
最后,给你留一个思考题,除了这篇论文提出的组成正例和负例的配对思路以外,你能不能想到在用户浏览网站的时候,还有哪些信息可以帮助我们组成更多的配对呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, and Lars Schmidt-Thieme. BPR: Bayesian personalized ranking from implicit feedback. Proceedings of the Twenty-Fifth Conference on Uncertainty in Artificial Intelligence (UAI ‘09). AUAI Press, Arlington, Virginia, United States, 452-461, 2009.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
019 SIGIR 2018论文精读:偏差和流行度之间的关系
|
||||
2018年的SIGIR(国际信息检索研究与发展大会)于7月8日~12日在美国密歇根州的安娜堡举行。从今天开始,我将精选几篇大会上最有价值的论文,和你一起来读。
|
||||
|
||||
我先简单介绍一下这个大会。SIGIR从1978年开始举办,有40年的历史,是信息检索和搜索领域的顶级会议。SIGIR 2018,全称是The 41st International ACM SIGIR Conference on Research and Development in Information Retrieval。
|
||||
|
||||
从最初举办开始,这个会议就成为了信息检索领域,特别是搜索技术和推荐技术方面的权威学术会议。会议的内容往往包含了搜索、推荐、广告、信息提取、互联网数据挖掘等诸多领域的优秀论文,每年都吸引着来自世界各地的学者和工程师参会,来分享他们最新的研究成果。
|
||||
|
||||
今天,我们首先来看一看今年的最佳论文,标题是《推荐系统中流行度有效性的概率分析》(Should I Follow the Crowd? A Probabilistic Analysis of the Effectiveness of Popularity in Recommender Systems)。
|
||||
|
||||
这篇论文一共有两位作者,均来自马德里自治大学(Universidad Autónoma de Madrid)。第一作者罗西奥·卡纳马雷斯(Rocio Cañamares)已经发表了好几篇相关主题的论文,第二作者帕布罗·卡斯蒂罗斯(Pablo Castells)是马德里自治大学、甚至是整个欧洲的信息检索学术权威。论文有超过5千次的引用。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
想要理解清楚这篇论文的主要贡献,我们首先要从推荐系统,或者是从更大的方向上,来看所有信息检索系统都存在的一个核心问题,那就是“偏差”(Bias)。偏差会带来一系列问题。这对推荐系统甚至信息检索系统的建模和评价都带来了巨大的挑战。
|
||||
|
||||
那么,为什么信息检索系统会有偏差呢?
|
||||
|
||||
我这里举一个简单的例子来说明。假设我们有两个物品和很多用户。对于每一个用户来说,系统都按照随机的顺序,分别给用户展示这两个物品,并且询问用户是否喜欢。
|
||||
|
||||
在这样的假设里,顺序是随机的,因此对于同一个用户来说,用户是否喜欢某一个商品,就完全是取决于这个物品本身的属性。对于所有用户来说,在整体上呈现的用户对这两个物品的喜好,则完全来自于大家对这两个物品本身的一种评价。那么,我们可以看到这里面没有任何的偏差。
|
||||
|
||||
然而,只要这个场景稍微有一些改变,就很容易引入各种偏差。比如,我们有超过一万件物品。尽管我们还是随机地展示给用户,但用户可能在看过一定数量的物品之后就慢慢厌倦了,那么,用户对于物品的喜好判断或许就会受到厌倦的影响,甚至,用户还很有可能直接放弃查看后面的物品。
|
||||
|
||||
还有很多相似的情况,比如我们不是把每个商品逐一展示给用户看,而是提供一个列表。那么,用户很有可能会以为这个列表有一定的顺序,比如在列表排名上方的物品可能是比较重要的。有研究表明,在有列表的情况下,用户很可能会按照列表的顺序提供某种喜好判断。很明显,在这样的情况下,用户的喜好判断就受到了这个列表顺序的干扰。
|
||||
|
||||
上面我们提到的都是“表现偏差”(Presentation Bias)。除此以外,一个信息系统其实还有很多类型的偏差,比如系统性偏差:一个新闻系统,只给用户推荐娱乐新闻,而不给用户看时政新闻,在这样的情况下,用户表现出来的喜好性就是有偏差的,因为系统没有给用户表达对时政新闻喜好的可能性。
|
||||
|
||||
信息检索和推荐系统的学者其实很早就意识到了偏差对于建模的影响。不管是我们这里提到的表现偏差还是系统性偏差,如果我们直接利用用户和系统交互产生的数据,那么训练出来的模型以及我们采用的衡量模型的办法也会有偏差,那我们得出的结论有可能就是不精准的。
|
||||
|
||||
这篇论文就是希望能够系统性地讨论偏差在推荐系统中所带来的问题。具体来说,这篇论文主要是探讨偏差和“流行度”(Popularity)之间的关系。
|
||||
|
||||
这里描述的是这样一种情况:有一些物品很有可能曾经给很多人推荐过,或者同时还被很多人喜欢过或者评价过,那么,这种流行度高的物品会不会对推荐结果的评价带来意想不到的偏差呢?
|
||||
|
||||
在过去的研究中,大家只是对这种流行度高的物品有一种直观上的怀疑,认为如果一个推荐系统仅仅能够推荐流行的物品,那肯定是有偏差的。但之前的很多工作并没有定量地去解释这里面偏差和评价之间的关系。这篇论文就提供了一个理论框架,指导我们去理解偏差以及偏差带来的评测指标的一些变化。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
今天我们不去讲这篇论文的理论框架细节,我会重点提供一个大体的思路,帮助你理解这篇论文希望达到的目的。
|
||||
|
||||
简单来说,为了表达偏差和流行度之间的关系,作者们用了这么几个随机变量:用户是否对某个物品打分,用户是否对某个物品有喜好,以及用户是否观看某个物品。这里面的一个细节,或者说技巧,就是如何用概率的语言把这三者之间的关系给表达清楚。
|
||||
|
||||
作者其实采用了一些简化的假设,比如假设在测试集上的物品是训练集上没有出现过的等等。这样,就能够写出在测试集上用户对物品评价的一个期望关系,这个期望关系包含用户对所有测试物品是否有喜好。有了这层期望关系以后,就开始推导出,在测试集上理想状态下的最佳排序是一个什么样子。在这里的理论讨论其实并没有很大的现实意义,但是这是第一次研究人员用数学模型去详细表征一个最优的在测试集上的按照流行度排序的结论。
|
||||
|
||||
紧接着,作者们还讨论了这个最优排序在两种极端情况下的变化。一种情况是用户过往的行为都是仅依赖于物品本身的属性,而没有任何其他偏差。另外一种情况是用户过往的行为和物品本身的属性无关,意思就是仅依赖于其他的偏差。
|
||||
|
||||
在第一种极端情况下,最优的排序其实也就是我们所能观测到的最优排序,那就是按照物品的流行度。在第二种极端情况下,最优的排序其实是按照平均打分。
|
||||
|
||||
当然,你可能会说讨论这两种极端情况并没有现实意义呀。但这两种极端情况的讨论其实就证明了,只有在没有偏差的情况下,按照物品的流行度排序才是平均情况下最优的。而很明显,现实存在偏差,因此依靠流行度的排序,即便是平均情况下,也不是最优的选择。
|
||||
|
||||
然后,论文讨论了用户是否观看某一个物品对用户行为的影响。关于这一部分的讨论,其实之前已经有很多工作都做了一些类似的探索。不过这篇论文得出了一个有意思的结论。在考虑了用户观看物品的偏差以后,通过模拟的方法,我们会发现:随机结果的效果其实要比之前的观测值要好很多,而按照流行度的排序虽然不错,但是比随机的效果并没有好很多,而基于平均打分的结果其实要优于按照流行度的排序。可以说,这是一个有别于之前很多工作的新发现。
|
||||
|
||||
延申讨论
|
||||
|
||||
虽然这篇论文获得了SIGIR 2018的最佳论文奖,但是如果我们站在更大的角度上来分析这篇论文,其实就会发现,作实际上作者们是开发了一套特有的理论框架来描述推荐系统中的某一种偏差。更加普适化的对偏差的建模其实需要有随机化的数据,以及利用因果推断的办法来对任意情况下的偏差进行分析。文章提出的概率模型仅仅在这篇文章讨论的假设情况下才能成立。
|
||||
|
||||
当然,瑕不掩瑜,这篇文章不管是从结论上,还是从实际的分析过程中,都为我们提供了很多有意义的内容,帮我们去思考偏差对于建模所带来的挑战以及我们应该如何应对。
|
||||
|
||||
总结
|
||||
|
||||
今天我为你讲了今年SIGIR 2018的最佳论文。
|
||||
|
||||
一起来回顾下要点:第一,我们详细介绍了这篇文章要解决的问题和贡献,探讨偏差和流行度之间的关系,系统性地来讨论偏差在推荐系统中所带来的问题;第二,我们简要地介绍了文章提出方法的核心内容,包括设定随机变量、期望关系以及推导理想状态下的最佳排序;第三,针对论文我们简单进行了讨论。
|
||||
|
||||
最后,给你留一个思考题,在不考虑偏差的情况下,为什么一般的推荐系统会偏好于推荐流行物品的算法呢?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,71 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
024 CVPR 2018论文精读:如何解决排序学习计算复杂度高这个问题?
|
||||
今天,我们来看这次大会的一篇最佳论文提名,标题是《基于排序的损失函数的有效优化》(Efficient Optimization for Rank-based Loss Functions)。
|
||||
|
||||
还是先简单介绍下论文的作者群。这篇论文的作者来自好几个不同的学术机构。
|
||||
|
||||
第一作者普里迪什·莫哈帕德拉(Pritish Mohapatra)是印度海得拉巴的国际信息科技大学(International Institute of Information Technology,Hyderabad)的计算机科学博士生。他已经在NIPS、CVPR、ICCV、AISTATS等国际机器学习权威会议上发表了多篇论文。
|
||||
|
||||
第二作者米卡尔·罗莱内克(Michal Rolinek)来自德国的马克思普朗克智能系统大学(Max Planck Institute for Intelligent Systems),博士后研究员。在这篇论文中,第一作者和第二作者的贡献相当。
|
||||
|
||||
第三作者贾瓦哈(C.V. Jawahar)是来自印度国际信息科技学院的教授。他是第一作者莫哈帕德拉的博士生导师。
|
||||
|
||||
第四作者弗拉迪米尔·科莫格罗夫(Vladimir Kolmogorov)是奥地利科技大学(Institute of Science and Technology Austria)的机器学习教授。
|
||||
|
||||
最后一个作者帕万·库玛(M. Pawan Kumar)来自牛津大学。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
这篇论文提出了一个针对排序学习中基于整个排序的损失函数的快速优化算法,这是一个重要贡献。
|
||||
|
||||
在计算机视觉中,有很多机器学习的任务都需要针对两个图像进行一个偏好的排序。而在信息检索或者搜索中,排序是一个核心问题。因此,任何对于排序学习算法的重大改进都会有广泛的应用。
|
||||
|
||||
先来回顾下我们学过的三种形态的排序学习算法。
|
||||
|
||||
第一种是单点法排序。这个算法针对每一个查询关键词和相对应的某个文档,我们仅仅判断每一个文档是不是相关的。大多数的单点法排序算法都把整个问题转换成为分类或者回归问题。这样就可以利用大规模机器学习的便利来快速地学习排序函数。
|
||||
|
||||
第二种是配对法排序。这个算法是以单点法为基础。因为单点法完全忽略两个文档之间的相对关系。所以配对法是对两个文档与同一个查询关键词的相对相关度,或者说是相关度的差值进行建模。
|
||||
|
||||
第三种是列表法排序。列表法是直接针对排序的目标函数或者指标进行优化。这种方法虽然在理论上有优势,但是计算复杂度一般都比较高,在现实中对排序效果的提升比较有限,因此在实际场景中,依然有大量的应用采用单点法或者配对法排序。
|
||||
|
||||
这篇论文就是针对列表法排序学习的“计算复杂度高”这个问题,作者们发明了一套叫作“基于快速排序机制”(Quicksort flavoured algorithm)的优化框架。在这个优化框架下,排序学习计算复杂度高的这个问题得到了大幅度优化。作者们然后证明了流行的针对NDCG和MAP进行排序学习都满足所发明的优化框架,这样也就在理论上提供了快速优化的可能性。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
要理解这篇论文的核心方法,我们先从配对法排序学习讲起。
|
||||
|
||||
针对每一个查询关键词,我们可以构建一个文档和文档的矩阵。这个矩阵的每一个元素代表两个文档在当前查询关键词下的关系。如果这个矩阵元素是+1,那么就表明这一行所代表的文档排位要优先于这一列所代表的文档。如果这个矩阵元素是-1,那么就表明这一行所代表的文档要比这一列所代表的文档排位低。当然,还有矩阵元素是0的情况,那就是这两个文档的排位可以是一样的。在这个数据基础上,我们可以从所有这些二元关系中推导出一个整体的排序。
|
||||
|
||||
下面来看配对法排序的核心思路。对于同一个查询关键词而言,我们从和这个查询关键词相关的文档中,随机抽取一个文档,然后从和这个查询关键词不相关的文档中也抽取一个文档,这两个抽取出来的文档就组成一个配对。我们希望建立一个模型或者函数,对于这样任意的配对,总能够让相关文档的函数值大于不相关文档的函数值。
|
||||
|
||||
如果我们对这个配对法稍微做一些更改,得到的就是列表法排序。首先,我们依然针对每一个正相关的文档进行函数值预测,也针对每一个负相关的文档进行函数值预测。我们把这两个函数值的差值,当做是预测的配对矩阵中这两个文档相对应的那一个元素。只不过在这个时候,我们关注的不是这两个文档的关系,而是配对矩阵所代表的排序和真实排序之间的差别。这个差别越小,我们就认为最终的基于列表的损失函数就小;如果差别大,那损失函数的差别就大。
|
||||
|
||||
如何针对这个基于列表的损失函数进行优化,从而能让我们针对单一文档的函数打分最优呢?这就是列表法排序学习的一个核心困难。
|
||||
|
||||
有一个优化办法,就是找到在当前函数打分的情况下,有哪个文档配对违反了排序原则。什么是违反排序原则呢?我们刚才说了,模型是希望把正相关的文档排在负相关的文档前面。但是,如果函数并没有完全被学习好,那么负相关的文档也会排到正相关的文档之前,这就叫违反排序原则。
|
||||
|
||||
如果我们找到这样的配对,那么就可以通过调整函数的参数,让这样的违反配对不出现。很显然,当我们有很多这样的配对时,找到违反排序原则最严重的那个配对,也就是负相关的函数值要远远大于正相关函数值的这个配对,对于我们改进函数的参数就会很有帮助。所以,这里的关键就变成了如何找到违反排序原则最严重的配对(Most-violating ranking)。
|
||||
|
||||
作者们针对这个任务发明了一个框架,叫作“基于快速排序机制”。具体来说,作者们发现,违反排序原则最严重的配对需要满足一些原则。我们需要对当前的数据序列进行快速排序,从而能够找到这个违反排序原则的配对。这里有很多的细节,有兴趣的话建议去读读原论文。你只需要记住,这个快速排序机制利用了快速排序的时间复杂度,来实现寻找违反排序原则最严重配对的这个目的。
|
||||
|
||||
那么,是不是大多数排序指标都符合这个机制呢?作者们提供的答案是普遍的MAP和NDCG都符合这个机制。论文给出了证明,因此我们就可以直接使用论文的结论。
|
||||
|
||||
实验结果
|
||||
|
||||
作者们在PASCAL VOC 2011数据集上进行了实验,主要是比较了直接进行单点法排序以及直接进行列表法优化,和这篇论文提出的优化算法之间的性能差距。在这个比较下,本文提出的方法优势非常明显,基本上是以单点法的时间复杂度达到了列表法的性能。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了CVPR 2018的最佳论文提名。
|
||||
|
||||
一起来回顾下要点:第一,这篇文章的主要贡献是提出了一个基于整个排序的损失函数的快速优化算法;第二,文章提出方法的核心内容是发明了一个框架,叫作“基于快速排序机制”;第三,我们简单介绍了一下论文的实验结果。
|
||||
|
||||
最后,给你留一个思考题,回忆一下我们曾经讲过的LambdaMART算法,那里其实也有这么一个寻找违反排序原则配对的步骤,你能想起来是什么步骤吗?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,93 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
025 ICML 2018论文精读:模型经得起对抗样本的攻击?这或许只是个错觉
|
||||
2018年7月10日~15日,国际机器学习大会ICML 2018(The 35th International Conference on Machine Learning),在瑞典的斯德哥尔摩举行。
|
||||
|
||||
ICML从1980年开始举办,已有30多年的历史 ,是机器学习、人工智能领域的顶级会议。
|
||||
|
||||
今年ICML大会共收到了2473份投稿,投稿量和去年相比增加了45%。今年最后录取了621篇论文,录取率近25%。除了主会议以外,ICML大会还组织了9个讲座,67个研讨班。
|
||||
|
||||
在接下来的几期内容里,我会为你精选三篇ICML 2018的论文,我们一起来讨论。
|
||||
|
||||
今天,我和你分享的是大会的最佳论文,题目是《梯度混淆带来的安全错觉:绕过对对抗样本的防御》(Obfuscated Gradients Give a False Sense of Security: Circumventing Defenses to Adversarial Examples)。
|
||||
|
||||
先简单介绍下这篇论文的作者群。
|
||||
|
||||
第一作者阿尼什·阿提耶(Anish Athalye)是麻省理工大学的博士生,主要研究方向是机器学习算法的安全。他在今年的ICML大会上就发表了3篇论文。
|
||||
|
||||
第二作者尼古拉·泽多维奇(Nickolai Zeldovich)是阿提耶的导师。他是麻省理工大学计算机系的教授,做安全相关的研究。
|
||||
|
||||
第三作者大卫·瓦格纳(David Wagner)来自加州大学伯克利分校,是计算机系教授,也是安全研究方面的专家。
|
||||
|
||||
论文的背景
|
||||
|
||||
这篇论文的内容对于大对数人来说可能是比较陌生的。想要弄清楚这篇论文的主要贡献,我们首先来熟悉一下这篇论文所要解决的问题。
|
||||
|
||||
试想我们比较熟悉的监督学习任务。一般来说,在监督学习任务中,我们会有一个数据集,用各种特性(Feature)来表征这个数据集里的数据点。拿最普通的监督学习来说,比如需要把图像分类为“猫”、“狗”等,机器学习算法就是学习一个分类器,可以根据不同的输入信息来做分类的决策。
|
||||
|
||||
当然,我们所说的是在正常情况下使用分类器的场景。有一类特别的应用场景,或者说是“对抗”场景,其实是希望利用一切方法来破坏或者绕开分类器的决策结果。
|
||||
|
||||
一个大类的“对抗机制”是尝试使用“对抗样本”(Adversarial Examples)。什么是对抗样本呢?就是说一个数据样本和原来正常的某个样本是非常类似的,但是可以导致分类决策出现很大不同。例如在我们刚才的图像识别的例子中,一个有效的对抗样本就是一张非常像狗的图片,但是可以导致分类器认为这是一只猫或者别的动物。利用这种类似的样本,可以使分类器的训练和测试都产生偏差,从而达到攻击分类器的目的。
|
||||
|
||||
除了“对抗样本”的概念以外,我们再来看一看攻击分类器的一些基本的模式。
|
||||
|
||||
一般来说,对分类器的攻击有两种模式,一种叫作“白盒攻击”(White-Box),一种叫作“黑盒攻击”(Black-Box)。白盒攻击主要是指攻击者可以完全接触到分类器的所有内部细节,比如深度模型的架构和各种权重,但无法接触到测试数据。而黑盒攻击则是指攻击者无法接触分类器的细节。
|
||||
|
||||
这篇论文考虑的场景是白盒攻击。攻击方尝试针对每一个合法的数据点,去寻找一个距离最近的数据变形,使得分类器的结果发生变化。通俗地说,就是希望对数据进行最小的改变,从而让分类器的准确率下降。
|
||||
|
||||
在完全白盒的场景下,最近也有一系列的工作,希望让神经网络更加健壮,从而能够抵御对抗样本的攻击。但是到目前为止,学术界还并没有完全的答案。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
通过上面的介绍,我们知道目前有一些防御对抗样本的方法,似乎为分类器提供了一些健壮性的保护。这篇文章的一个重要贡献,就是指出,这些防御方法有可能只是带来了一种由“梯度混淆”(Obfuscated Gradients)所导致的错觉。
|
||||
|
||||
梯度混淆是“梯度屏蔽”(Gradient Masking)的一种特殊形式。对于迭代攻击方法来说,如果发生梯度混淆,防御方会形成防御成功的假象。
|
||||
|
||||
作者们在这篇论文中对梯度混淆进行了分析,提出了三种类型的梯度混淆:“扩散梯度”(Shattered Gradients)、“随机梯度”(Stochastic Gradients)和“消失梯度或者爆炸梯度”(Vanishing/Exploding gradients)。
|
||||
|
||||
针对这三种不同的梯度混淆,作者们提出了相应的一些攻击方案,使得攻击方可以绕过梯度混淆来达到攻击的目的,并且在ICLR 2018的数据集上展示了很好的效果。
|
||||
|
||||
值得注意的是,这篇论文针对的是在防御过程中“防御方”的方法所导致的梯度混淆的问题。目前学术界还有相应的工作是从攻击方的角度出发,试图学习打破梯度下降,例如让梯度指向错误的方向。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
我们首先来看一看这三种类型的梯度混淆。
|
||||
|
||||
扩散梯度主要是指防御方发生了“不可微分”(Non-Differentiable)的情况。不可微分的后果是直接导致数值不稳定或者梯度不存在。扩散梯度其实并不意味着防御方有意识地希望这么做,这很有可能是因为防御方引入了一些看似可以微分但是并没有优化目标函数的情况。
|
||||
|
||||
随机梯度主要是由随机防御(Randomized Defense)引起的。这有可能是神经网络本身被随机化了,或者是输入的数据被随机化,造成了梯度随机化。
|
||||
|
||||
消失梯度和爆炸梯度主要是通过神经网络的多次迭代估值(Evaluation)所导致。例如,让一次迭代的结果直接进入下一次迭代的输入。
|
||||
|
||||
刚才我们说了,梯度混淆可能是防御方无意识所产生的结果,并不是设计为之。那么,攻击方有什么方法来识别防御方是真的产生了有效果的防御,还是仅仅发生了梯度混淆的情况呢?
|
||||
|
||||
作者们做了一个总结,如果出现了以下这些场景,可能就意味着出现了梯度混淆的情况。
|
||||
|
||||
第一种情况,一步攻击的效果比迭代攻击(也就是攻击多次)好。在白盒攻击的情况下,迭代攻击是一定好于一步攻击的。因此如果出现了这种一步攻击好于迭代攻击的情况,往往就意味着异常。
|
||||
|
||||
第二种情况,黑盒攻击的效果比白盒好。理论上,白盒攻击的效果应该比黑盒好。出现相反的情况,往往意味着不正常。
|
||||
|
||||
第三种情况,无局限(Unbounded Attack)效果没有达到100%。最后的这种情况,就是随机寻找对抗样本,发现了比基于梯度下降的攻击要好的对抗样本。
|
||||
|
||||
那么,针对梯度混淆,攻击方有什么办法呢?
|
||||
|
||||
针对扩散梯度,作者们提出了一种叫BPDA(Backward Pass Differentiable Approximation)的方法。如果有兴趣,建议你阅读论文来了解这种算法的细节。总体说来,BPDA就是希望找到神经网络不可微分的地方,利用简单的可微分的函数对其前后进行逼近,从而达到绕过阻碍的目的。
|
||||
|
||||
针对随机梯度,作者们提出了“变换之上的期望”(Expectation over Transformation)这一方法。这个方法的特点是针对随机变化,变换的期望应该还是能够反映真实的梯度信息。于是作者们就让攻击方作用于变换的期望值,从而能够对梯度进行有效的估计。
|
||||
|
||||
针对消失或者爆炸的梯度,作者们提出了“重新参数化”(Reparameterization)这一技术。重新参数化是深度学习中重要的技术。在这里,作者们使用重新参数化,其实就是对变量进行变换,从而使得新的变量不发生梯度消失或者爆炸的情况。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了今年ICML的最佳论文。
|
||||
|
||||
一起来回顾下要点:第一,这篇论文讨论了一个比较陌生的主题,我们简要介绍了论文的背景;第二,我们详细介绍了论文提出的三种类型的梯度混淆。
|
||||
|
||||
最后,给你留一个思考题,我们为什么要研究深度学习模型是否健壮,是否能够经得起攻击呢?有什么现实意义吗?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,61 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
026 ICML 2018论文精读:聊一聊机器学习算法的公平性问题
|
||||
在上一次的分享里,我们介绍了今年ICML大会的一篇最佳论文,这是一篇非常优秀的机器学习和计算机安全相结合的论文。这篇论文剖析了目前在白盒攻击的场景下,攻击方如何绕过一种叫作“混淆梯度”的情况,来实现有效攻击的目的。
|
||||
|
||||
今天,我们来分享ICML 2018的另一篇最佳论文,题目Delayed Impact of Fair Machine Learning。这篇论文主要探讨了“公平”(Fair)在机器学习中的应用。论文的五位作者都来自加州大学伯克利分校。
|
||||
|
||||
论文的背景
|
||||
|
||||
这篇论文所探讨的主题是机器学习的“公平性”问题。近些年,这个主题受到了学术界越来越多的关注,但是对于普通的人工智能工程师和数据科学家来说,这个议题依然显得比较陌生和遥远。所以,我先来简单梳理一下这方面研究的核心思想。
|
||||
|
||||
机器学习有一个重要的应用,就是在各类决策场景中提供帮助,例如申请贷款、大学入学、警察执勤等。一个不可否认的特点是,这些决策很有可能会对社会或者个人产生重大的不可逆转的后果。其中一个重要的后果就是,针对不同的人群,有可能会产生意想不到的“不公平”的境况。比如,有一些普遍使用的算法,在帮助警察判断一个人是否可能是罪犯的时候,系统会认为美国黑人相对于白人更容易犯罪,这个判断显然存在一定的问题。
|
||||
|
||||
机器学习研究者已经注意到了这种算法中的“公平”问题,并且开始探讨没有任何限制条件的机器学习算法,是否会对少数族裔(Underrepresented Group)产生不公平的决策判断。基于这些探索,研究者们提出了一系列的算法,对现有的各种机器学习模型增加附带了公平相关的限制条件,希望通过这种方法来解决各种不公平定义下的决策问题。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
这篇论文从理论角度展开讨论,基于什么样假设和条件下的具有公平性质的机器学习算法,在决策场景中能够真正为少数族群带来长期的福祉。值得注意的是,这里所谓的少数族裔是一个抽象化的概念,指的是数目相对较少的,或者在某种特性下比较少的一组数据群体。这篇论文并不直接讨论社会学意义下的少数族群的定义。
|
||||
|
||||
作者们主要是比较两个人群A和B,在不同的公平条件下,看这两组人群的某种“效用”(Utility)的差值会发生什么变化。这个差值可以是正的,没变化或者是负的。
|
||||
|
||||
论文的主要结论是,在不同的公平条件下,效用差值会有各种可能性。这其实是一个非常重要的结论。有一些公平条件,直觉上我们感觉会促进少数族群的效用,但这篇论文向我们展示了,即便出发点是好的,在某些情况下,效用差值也可能是负的。
|
||||
|
||||
除此以外,这篇论文还探讨了“测量误差”(Measurement Error)对效用差值的影响。作者们认为测量误差也应该被纳入整个体系中去思考公平的问题。
|
||||
|
||||
需要指出的是,论文的分析方法主要建立在时序关系的“一步预测”(One Time Epoch)基础上的。也就是说,我们利用当前的数据和模型对下一步的决策判断进行分析,并不包括对未来时间段所有的预测。从理论上说,如果在无限未来时间段的情况下,结论有可能发生变化。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
这篇文章的核心思路是探讨针对人群A和B所采取的一种“策略”(Policy),是怎么样影响这两组人群的效用差别的。如果某种策略会导致某个群体的效用差别为负,那么我们就说这个策略对群体产生了“绝对损坏”(Active Harm)作用;如果效用差别是零,就说明这个策略对群体产生了“停滞”(Stagnation)作用;如果效用差别是正的,就说明这个策略对群体产生了“推动”(Improvement)作用。
|
||||
|
||||
除此以外,我们认为有一种不考虑人群A和B具体特征的期望最大化效用的策略,称之为“最大化效用”(MaxUtil)。这种策略其实就是在没有约束条件的情况下,利用一般的机器学习算法达到的效果。我们需要把新策略和这个策略进行比较,如果新的策略比这个策略好,就是产生了“相对推动”(Relative Improvement),反之我们说新的策略产生了“相对损害”(Relative Harm)。
|
||||
|
||||
为了进一步进行分析,作者们引入了一个叫“结果曲线”(Outcome Curve)的工具来视觉化策略和效用差值的关系。具体来说,曲线的横轴就是因为策略所导致的对某一个群体的选择概率,纵轴就是效用差值。当我们有了这个曲线之后,就能非常直观地看到效用差值的变化。
|
||||
|
||||
|
||||
|
||||
从这个曲线上我们可以看到,效用差值的确在一个区间内是“相对推动”的,而在另一个区间是“相对损害”的,在最右边的一个区间里是“绝对损害”的。这就打破了我们之前的看法,认为有一些选择策略会一致性地导致唯一结果。
|
||||
|
||||
在此基础上,我们专门来看这两种特殊的策略。第一种叫“种族公平”(Demographic Parity),思路是希望在两个人群中保持一样的选择概率。另一种策略叫“公平机会”(Equal Opportunity),思路是希望某个人群中成功的概率(例如申请到贷款、学校录取等)和人群无关。这两种策略都是典型的试图利用限制条件来达到公平的方法。我们希望来比较的就是这两种策略以及之前说的最大化效用之间的一些关系,得出以下三个主要结论。
|
||||
|
||||
第一个比较出乎意料的结论是最大化效用这个策略并不会导致“绝对损害”。意思就是说,和人们之前的一些想法不同,最大化效用也有可能让少数族裔的效用得到提升或者不变。
|
||||
|
||||
第二个结论是,这两种公平策略都可能会造成“相对推动”。这也是推出这两种策略的初衷,希望能够在选择概率上进行调整,从而让少数族裔的效用得到提升。
|
||||
|
||||
第三个结论是,这两种公平策略都可能会造成“相对损害”。这是本篇论文的一个重要结论,正式地证明了公平策略在某个区间上其实并没有带来正向的“推动”反而是“损害”了少数族群。作者们进一步比较了“种族公平”和“公平机会”这两个策略,发现“公平机会”可以避免“绝对损害”而“种族公平”则无法做到。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了今年ICML的另一篇最佳论文。
|
||||
|
||||
一起来回顾下要点:第一,这篇论文讨论了计算机算法的公平性问题;第二,我们详细介绍了论文提出的两种策略以及得出的主要结论。
|
||||
|
||||
最后,给你留一个思考题,研究算法的公平性对我们日常的应用型工作有什么启发作用?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,59 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
027 ICML 2018论文精读:优化目标函数的时候,有可能放大了不公平?
|
||||
今天我们要分享的是ICML 2018的一篇最佳论文提名,题目是Fairness Without Demographics in Repeated Loss Minimization。
|
||||
|
||||
这篇论文讨论了这样一个话题,在优化目标函数的时候,如何能够做到针对不同的子群体,准确率是相当的,从而避免优化的过程中过分重视多数群体。这篇论文的作者都来自斯坦福大学。
|
||||
|
||||
论文的主要贡献
|
||||
|
||||
这篇论文其实也是希望讨论算法带来的“公平性”问题,但是出发的角度和我们上一篇讨论公平性的论文非常不一样。这篇论文的核心思想,是希望通过机器学习目标函数优化的原理,来讨论机器学习和公平性的关系。
|
||||
|
||||
作者们发现,基于“平均损失”(Average Loss)优化的机器学习算法,常常会给某一些少数群体带来巨大的不准确性。这其实并不是模型本身的问题,而是优化的目标函数的问题。在这样的情况下,目标函数主要是关注有较多数据的群体,保证这些群体的损失最小化,而可能忽略了在数量上不占优势的少数群体。
|
||||
|
||||
在此基础上,还带来了另外一个用户“留存度”(Retention)的问题。因为少数群体忍受了比较大的优化损失,因此这些群体有可能离开或者被这个系统剔除。所以,长期下去,少数群体的数目就可能逐渐变少。这也许是目标函数的设计者们无从想到的一个平均损失函数的副产品。作者们还把这个现象命名为“不公平的放大”(Disparity Amplification)。
|
||||
|
||||
这篇论文的一个重要贡献是发现ERM(Empirical Risk Minimization,经验风险最小化)其实就存在这种不公平的放大性。ERM包含了很多经典的机器学习模型的目标函数,例如支持向量机(Support Vector Machines)、对数回归模型(Logistic Regression)以及线性回归等。作者们还发现,ERM可以让即便在最初看上去公平的模型,在迭代的过程中逐渐倾向于不公平。
|
||||
|
||||
为了解决ERM的问题,作者们开发了一种新的算法框架,DRO(Distributionally Robust Optimization,分布式健壮优化)。这种框架是为了最小化“最差场景”(Worst-Case)的风险,而不是平均风险。作者们在真实的数据中展示了DRO相比于ERM更能够解决小众群体的不公平性问题。
|
||||
|
||||
论文的核心方法
|
||||
|
||||
为了解决在ERM下的对不同群体的不公平性问题,作者们首先对数据做了一种新的假设。
|
||||
|
||||
作者们假设数据中有隐含的K个群体。每一个数据点,都有一定的概率属于这K个群体。我们当然并不知道这K个群体本身的数据分布,也不知道每个数据点对于这K个群体的归属概率,这些都是我们的模型需要去估计的隐含变量。
|
||||
|
||||
对于每一个数据点而言,在当前模型下,我们都可以估计一个“期望损失”(Expected Loss)。在新的假设框架下,因为每个数据点可能属于不同的K个群体,而每个群体有不同的数据分布,因此会导致在当前群体下的期望损失不一样,也就是会出现K个不一样的期望损失。我们的目的,是要控制这K个损失中的最差的损失,或者叫最差场景。如果我们可以让最差的损失都要小于某一个值,那么平均值肯定就要好于这种情况。这也就从直观上解决了不公平放大的问题。
|
||||
|
||||
那么,如果我们直接在这样的设置上运用ERM,会有什么效果呢?这里,有一个数值是我们比较关注的,那就是在整个框架假设下,每个群体的期望人数。这个数值等于在期望损失的情况下,当前群体剩余的人数加上新加入的人数。作者们在论文中建立了对这个期望人数的理论界定。
|
||||
|
||||
这个结论的直观解释是,如果在当前更新的过程中,期望人数的数值估计能够达到一个稳定的数值状态,那么就有可能稳定到这里,不公平放大的情况就不会发生;而如果没有达到这个稳定的数值状态,那么不公平放大的情况就一定会发生。也就是说,在ERM优化的情况下,群体的大小有可能会发生改变,从而导致人群的流失。
|
||||
|
||||
在这个理论结果的基础上,作者们提出了DRO。DRO的核心想法就是要改变在优化过程中,可能因为数据分配不均衡,而没有对当前小群体进行足够的采样。
|
||||
|
||||
具体来说,DRO对当前群体中损失高的人群以更高的权重,也就是说更加重视当前目标函数表现不佳的区域。对于每一个数据点而言,损失高的群体所对应的群体概率会被放大,从而强调这个群体当前的损失状态。换句话说,DRO优先考虑那些在当前情况下损失比较大的小群体。这样的设置就能够实现对最差情况的优化从而避免不公平放大。
|
||||
|
||||
作者们在文章中展示了DRO所对应的目标函数可以在递归下降的框架下进行优化,也就是说任何当前利用ERM的算法,都有机会更改为DRO的优化流程,从而避免不公平放大的情况。
|
||||
|
||||
论文的实验结果
|
||||
|
||||
作者们在一个模拟的和一个真实的数据集上进行了实验。我们这里简单讲一讲真实数据的实验情况。
|
||||
|
||||
作者们研究了一个“自动完成”(Auto Completion)的任务。这个任务是给定当前的词,来预测下一个词出现的可能性。而数据则来自两个不同人群,美国白人和黑人所产生的推特信息。在这个实验中,作者们就是想模拟这两个人群的留存度和模型损失。这里面的隐含假设是,美国白人和黑人的英语词汇和表达方式是不太一样的。如果把两个人群混合在一起进行优化,很有可能无法照顾到黑人的用户体验从而留不住黑人用户。
|
||||
|
||||
在实验之后,DRO相比于ERM更能让黑人用户满意,并且黑人用户的留存度也相对比较高。从这个实验中,DRO得到了验证,的确能够起到照顾少数人群的作用。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了今年ICML的最佳论文提名。
|
||||
|
||||
一起来回顾下要点:第一,这篇论文也讨论了算法带来的“公平性”问题,是从机器学习目标函数优化的角度来考虑这个问题的;第二,这篇论文的一个重要贡献是发现ERM确实存在不公平的放大性,基于此,作者们开发了一种新的算法框架DRO;第三,文章的实验结果验证了DRO的思路,确实能够解决小众群体的不公平性问题。
|
||||
|
||||
最后,给你留一个思考题,这两期内容我们从不同的角度讨论了算法的公平性问题,你是否有自己的角度来思考这个问题?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,103 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
030 复盘 7 一起来读人工智能国际顶级会议论文
|
||||
今天我准备了 30 张知识卡,和你一起来复盘“人工智能国际顶级会议”模块。在这个模块里,我总共介绍了10个顶级会议,包括机器学习方面的ICML、NIPS;机器视觉的CVPR、ICCV;自然语言处理的ACL、EMNLP;数据挖掘和数据科学的KDD、WSDM;信息检索和搜索的SIGIR;互联网综合的WWW。
|
||||
|
||||
提示:点击知识卡跳转到你最想看的那篇文章,温故而知新。
|
||||
|
||||
KDD 2017(数据挖掘与知识发现大会)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EMNLP 2017(自然语言处理实证方法会议)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ICCV 2017(国际计算机视觉大会)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
NIPS 2017(神经信息处理系统大会)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
WSDM 2018(网络搜索与数据挖掘国际会议)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
The Web 2018(国际万维网大会)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
CVPR 2018(国际计算机视觉与模式识别会议)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
SIGIR 2018(国际信息检索大会)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ICML 2018(国际机器学习大会)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ACL 2018(计算语言学学会年会)论文精讲
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
积跬步以至千里
|
||||
|
||||
学习是独立的,需要你一个人去完成。但学习者从来都不必孤独,我们走进这些国际顶级学术会议的论文,其实就是和每一篇论文背后的作者进行一场对话。与优秀的人同行一定能让我们走得更快。
|
||||
|
||||
这个模块我根据自己的经验,为你选择了10个顶级会议。针对每一个会议,我都会在会议结束后用3篇文章来详细剖析这个会议的精髓和一些前沿信息。我希望通过我的眼睛和思考让你看到在这个领域里那些激动人心的发展,收获新知、拓展视野,同时也把我的学习方法分享给你。
|
||||
|
||||
我想你应该已经掌握了我分析论文的套路了,对于每一篇文章,我一定会先去做一些背景研究,了解作者群,了解对应的学术机构或者公司信息;然后弄清楚论文解决了什么问题,核心贡献是什么;再详细研究论文的具体方法。这个方法很简单,就是牢牢抓住一个主线,找到最核心的内容来消化吸收。但是真正让这个方法内化成你的思维模式,还是需要大量的阅读和练习。相信我,如果想在人工智能领域继续深耕,阅读大量论文,一定是一个最值得做的投资,因为回报极大。
|
||||
|
||||
那回到阅读论文本身,最后想跟你分享的一点只有八个字:学好英语,阅读原文。我知道你可能会说我英语还真不好,但是到达能够阅读原文的水平其实也并没那么难。你不妨直接找一篇我们专栏里讲过的论文原文,就把每一段的第一句读一下,看看能否学到东西。先开始看起来,遇到不会的且影响你理解的单词或句子再去查,你的英语水平就已经开始变得越来越好了。
|
||||
|
||||
以上就是我们对论文精读这个模块的一个复盘,希望专栏里的这三十篇论文是一个起点,能够帮助你养成关注国际顶级会议、阅读论文的习惯,拥有这一强大的学习利器,提升自己的学习效率。
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,75 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
031 经典搜索核心算法:TF-IDF及其变种
|
||||
从本周开始我们进入人工智能核心技术模块,本周我会集中讲解经典的搜索核心算法,今天先来介绍TF-IDF算法。
|
||||
|
||||
在信息检索(Information Retrieval)、文本挖掘(Text Mining)以及自然语言处理(Natural Language Processing)领域,TF-IDF算法都可以说是鼎鼎有名。虽然在这些领域中,目前也出现了不少以深度学习为基础的新的文本表达和算分(Weighting)方法,但是TF-IDF作为一个最基础的方法,依然在很多应用中发挥着不可替代的作用。
|
||||
|
||||
了解和掌握TF-IDF算法对初学者大有裨益,能够帮助初学者更快地理解其它更加深入、复杂的文本挖掘算法和模型。今天我就来谈谈TF-IDF的历史、算法本身的细节以及基于TF-IDF的几个变种算法。
|
||||
|
||||
TF-IDF的历史
|
||||
|
||||
把查询关键字(Query)和文档(Document)都转换成“向量”,并且尝试用线性代数等数学工具来解决信息检索问题,这样的努力至少可以追溯到20世纪70年代。
|
||||
|
||||
1971年,美国康奈尔大学教授杰拉德·索尔顿(Gerard Salton)发表了《SMART检索系统:自动文档处理实验》(The SMART Retrieval System—Experiments in Automatic Document Processing)一文,文中首次提到了把查询关键字和文档都转换成“向量”,并且给这些向量中的元素赋予不同的值。这篇论文中描述的SMART检索系统,特别是其中对TF-IDF及其变种的描述成了后续很多工业级系统的重要参考。
|
||||
|
||||
1972年,英国的计算机科学家卡伦·琼斯(Karen Spärck Jones)在《从统计的观点看词的特殊性及其在文档检索中的应用》(A Statistical Interpretation of Term Specificity and Its Application in Retrieval) 一文中第一次详细地阐述了IDF的应用。其后卡伦又在《检索目录中的词赋值权重》(Index Term Weighting)一文中对TF和IDF的结合进行了论述。可以说,卡伦是第一位从理论上对TF-IDF进行完整论证的计算机科学家,因此后世也有很多人把TF-IDF的发明归结于卡伦。
|
||||
|
||||
杰拉德本人被认为是“信息检索之父”。他1927年出生于德国的纽伦堡,并与1950年和1952年先后从纽约的布鲁克林学院获得数学学士和硕士学位,1958年从哈佛大学获得应用数学博士学位,之后来到康奈尔大学参与组建计算机系。为了致敬杰拉德本人对现代信息检索技术的卓越贡献,现在,美国计算机协会ACM(Association of Computing Machinery)每三年颁发一次“杰拉德·索尔顿奖”(Gerard Salton Award),用于表彰对信息检索技术有突出贡献的研究人员。卡伦·琼斯在1988年获得了第二届“杰拉德·索尔顿奖”的殊荣。
|
||||
|
||||
TF-IDF算法详解
|
||||
|
||||
要理解TF-IDF算法,第一个步骤是理解TF-IDF的应用背景。TF-IDF来源于一个最经典、也是最古老的信息检索模型,即“向量空间模型”(Vector Space Model)。
|
||||
|
||||
简单来说,向量空间模型就是希望把查询关键字和文档都表达成向量,然后利用向量之间的运算来进一步表达向量间的关系。比如,一个比较常用的运算就是计算查询关键字所对应的向量和文档所对应的向量之间的“相关度”。
|
||||
|
||||
因为有了向量的表达,相关度往往可以用向量在某种意义上的“相似度”来进行近似,比如余弦相似性(Cosine Similarity)或者是点积(Dot Product)。这样,相关度就可以用一个值来进行表达。不管是余弦相似度还是点积都能够从线性代数或者几何的角度来解释计算的合理性。
|
||||
|
||||
在最基本的向量空间模型的表达中,查询关键字或是文档的向量都有V维度。这里的V是整个词汇表(Vocabulary)的总长度。比如,我们如果有1万个常用的英文单词,那么这个V的取值就是1万,而查询关键字和每个文档的向量都是一个1万维的向量。 对于这个向量中的每一个维度,都表示英文中的一个单词,没有重复。
|
||||
|
||||
你可以看到,在这样的情况下,如果当前的词出现在这个向量所对应的文档或者关键字里,就用1来表达;如果这个词没出现,就用0来表达。这就是给每个维度赋值(Weighting)的最简单的方法。
|
||||
|
||||
TF-IDF就是在向量空间模型的假设下的一种更加复杂的赋值方式。TF-IDF最基础的模式,顾名思义,就是TF和IDF的乘积。
|
||||
|
||||
TF其实是“单词频率”(Term Frequency)的简称。意思就是说,我们计算一个查询关键字中某一个单词在目标文档中出现的次数。举例说来,如果我们要查询“Car Insurance”,那么对于每一个文档,我们都计算“Car”这个单词在其中出现了多少次,“Insurance”这个单词在其中出现了多少次。这个就是TF的计算方法。
|
||||
|
||||
TF背后的隐含的假设是,查询关键字中的单词应该相对于其他单词更加重要,而文档的重要程度,也就是相关度,与单词在文档中出现的次数成正比。比如,“Car”这个单词在文档A里出现了5次,而在文档B里出现了20次,那么TF计算就认为文档B可能更相关。
|
||||
|
||||
然而,信息检索工作者很快就发现,仅有TF不能比较完整地描述文档的相关度。因为语言的因素,有一些单词可能会比较自然地在很多文档中反复出现,比如英语中的“The”、“An”、“But”等等。这些词大多起到了链接语句的作用,是保持语言连贯不可或缺的部分。然而,如果我们要搜索“How to Build A Car”这个关键词,其中的“How”、“To”以及“A”都极可能在绝大多数的文档中出现,这个时候TF就无法帮助我们区分文档的相关度了。
|
||||
|
||||
IDF,也就是“逆文档频率”(Inverse Document Frequency),就在这样的情况下应运而生。这里面的思路其实很简单,那就是我们需要去“惩罚”(Penalize)那些出现在太多文档中的单词。
|
||||
|
||||
也就是说,真正携带“相关”信息的单词仅仅出现在相对比较少,有时候可能是极少数的文档里。这个信息,很容易用“文档频率”来计算,也就是,有多少文档涵盖了这个单词。很明显,如果有太多文档都涵盖了某个单词,这个单词也就越不重要,或者说是这个单词就越没有信息量。因此,我们需要对TF的值进行修正,而IDF的想法是用DF的倒数来进行修正。倒数的应用正好表达了这样的思想,DF值越大越不重要。
|
||||
|
||||
在了解了TF和IDF的基本计算方法后,我们就可以用这两个概念的乘积来表达某个查询单词在一个目标文档中的重要性了。值得一提的是,虽然我们在介绍TF-IDF这个概念的时候,并没有提及怎么把查询关键字和文档分别表达成向量,其实TF-IDF算法隐含了这个步骤。
|
||||
|
||||
具体来说,对于查询关键字,向量的长度是V,也就是我们刚才说过的词汇表的大小。然后其中关键字的单词出现过的维度是1,其他维度是0。对于目标文档而言,关键词出现过的维度是TF-IDF的数值,而其他维度是0。在这样的表达下,如果我们对两个文档进行“点积”操作,则得到的相关度打分(Scoring)就是TF-IDF作为相关度的打分结果。
|
||||
|
||||
TF-IDF算法变种
|
||||
|
||||
很明显,经典的TF-IDF算法有很多因素没有考虑。在过去的很长一段时间里,研究人员和工程师开发出了很多种TF-IDF的变种。这里我介绍几个经典的变种。
|
||||
|
||||
首先,很多人注意到TF的值在原始的定义中没有任何上限。虽然我们一般认为一个文档包含查询关键词多次相对来说表达了某种相关度,但这样的关系很难说是线性的。拿我们刚才举过的关于“Car Insurance”的例子来说,文档A可能包含“Car”这个词100次,而文档B可能包含200次,是不是说文档B的相关度就是文档A的2倍呢?其实,很多人意识到,超过了某个阈值之后,这个TF也就没那么有区分度了。
|
||||
|
||||
用Log,也就是对数函数,对TF进行变换,就是一个不让TF线性增长的技巧。具体来说,人们常常用1+Log(TF)这个值来代替原来的TF取值。在这样新的计算下,假设“Car”出现一次,新的值是1,出现100次,新的值是5.6,而出现200次,新的值是6.3。很明显,这样的计算保持了一个平衡,既有区分度,但也不至于完全线性增长。
|
||||
|
||||
另外一个关于TF的观察则是,经典的计算并没有考虑“长文档”和“短文档”的区别。一个文档A有3,000个单词,一个文档B有250个单词,很明显,即便“Car”在这两个文档中都同样出现过20次,也不能说这两个文档都同等相关。对TF进行“标准化”(Normalization),特别是根据文档的最大TF值进行的标准化,成了另外一个比较常用的技巧。
|
||||
|
||||
第三个常用的技巧,也是利用了对数函数进行变换的,是对IDF进行处理。相对于直接使用IDF来作为“惩罚因素”,我们可以使用N+1然后除以DF作为一个新的DF的倒数,并且再在这个基础上通过一个对数变化。这里的N是所有文档的总数。这样做的好处就是,第一,使用了文档总数来做标准化,很类似上面提到的标准化的思路;第二,利用对数来达到非线性增长的目的。
|
||||
|
||||
还有一个重要的TF-IDF变种,则是对查询关键字向量,以及文档向量进行标准化,使得这些向量能够不受向量里有效元素多少的影响,也就是不同的文档可能有不同的长度。在线性代数里,可以把向量都标准化为一个单位向量的长度。这个时候再进行点积运算,就相当于在原来的向量上进行余弦相似度的运算。所以,另外一个角度利用这个规则就是直接在多数时候进行余弦相似度运算,以代替点积运算。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了文档检索领域或者搜索领域里最基本的一个技术:TF-IDF。我们可以看到,TF-IDF由两个核心概念组成,分别是词在文档中的频率和文档频率。TF-IDF背后隐含的是基于向量空间模型的假设。
|
||||
|
||||
一起来回顾下要点:第一,简要介绍了TF-IDF的历史。第二,详细介绍了TF-IDF算法的主要组成部分。第三,简要介绍了TF-IDF的一些变种 。
|
||||
|
||||
最后,给你留一个思考题,如果要把TF-IDF应用到中文环境中,是否需要一些预处理的步骤?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,68 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
035 机器学习排序算法:配对法排序学习
|
||||
周一的文章里我分享了最基本的单点法排序学习(Pointwise Learning to Rank)。这个思路简单实用,是把经典的信息检索问题转化为机器学习问题的第一个关键步骤。简单回顾一下,我们介绍了在测试集里使用NDCG(Normalized Discounted Cumulative Gain),在某个K的位置评价“精度”(Precision)和“召回”(Recall),以这些形式来评估排序算法。
|
||||
|
||||
你可以看到,单点法排序学习算法的模式和我们最终需要的结果中间还存在明显差距。这个差距并不是算法好坏能够决定的,而是算法所要优化的目标,也就是单个数据点是否相关,和我们的最终目的,一组结果的NDCG排序最优之间的结构化区别。这个结构化区别激发研究者们不断思考,是不是有其他的方法来优化排序算法。
|
||||
|
||||
今天我就来讲从单点法引申出来的“配对法”排序学习(Pairwise Learning to Rank) 。相对于尝试学习每一个样本是否相关,配对法的基本思路是对样本进行两两比较,从比较中学习排序,离真正目标又近了一步。
|
||||
|
||||
配对法排序学习的历史
|
||||
|
||||
当人们意识到用机器学习来对排序进行学习,从文档与文档之间的相对关系入手,也就是配对法,就成了一个非常火热的研究方向。机器学习排序这个领域持续活跃了10多年,在此期间很多配对法排序算法被提出,下面我就说几个非常热门的算法。
|
||||
|
||||
2000年左右,研究人员开始利用支持向量机(SVM)来训练排序算法,来自康奈尔的索斯藤·乔基姆斯(Thorsten Joachims)就构建了基于特征差值的RankSVM,一度成为配对法排序学习的经典算法。索斯藤我们前面讲过,他获得了今年的KDD时间检验奖。
|
||||
|
||||
2005年,当时在雅虎任职的研究人员郑朝晖等人,开始尝试用GBDT(Gradient Boosting Decision Tree,梯度提升决策树)这样的树模型来对文档之间的两两关系进行建模。郑朝晖后来成为一点资讯的联合创始人。
|
||||
|
||||
2005年,微软的学者克里斯·博格斯(Chris Burges)等人,开始使用神经网络训练RankNet文档之间两两关系的排序模型。这是最早使用深度学习模型进行工业级应用的尝试。这篇论文在2015年获得了ICML 2015(International Conference on Machine Learning,国际机器学习大会)的10年“经典论文奖”。
|
||||
|
||||
配对法排序学习详解
|
||||
|
||||
在介绍配对法排序学习的中心思路之前,我们先来重温一下测试集的测试原理。总体来说,测试的原理和单点法一样,都是要考察测试集上,对于某一个查询关键字来说,某一组文档所组成的排序是否是最优的。
|
||||
|
||||
比如,对于某一个查询关键字,我们针对排序产生的“顶部的K”个文档进行评估,首先查看精度(Precision),即在所有算法已经判断是相关的文档中,究竟有多少是真正相关的;其次看召回(Recall),即所有真正相关的文档究竟有多少被提取了出来。当然,还有F1值,也就是精度和召回“和谐平均”(Harmonic Mean)的取值,一个平衡精度和召回的重要指标。需要再次说明的是, 精度、召回以及F1值都是在二元相关信息的标签基础上定义的。
|
||||
|
||||
如果需要利用五级相关信息定义,也就是通常所说的“最相关”、“相关”、“不能确定”到“不相关”、“最不相关”,那么就需要用类似于NDCG这样的评价指标。NDCG的假设是,在一个排序结果里,相关信息要比不相关信息排得更高,最相关信息需要排在最上面,最不相关信息需要排在最下面。任何排序结果一旦偏离了这样的假设,就会受到“扣分”或者“惩罚”。
|
||||
|
||||
在清楚了测试集的情况后,再回过头来看一看训练集的设置问题。在今天文章一开篇的时候,我就提到了单点法对于排序学习的“目标不明确”的问题。其实从NDCG的角度来看也好,基于顶部K的精度或者召回的角度来看也好,都可以看出,对于一个查询关键字来说,最重要的其实不是针对某一个文档的相关性是否估计得准确,而是要能够正确估计一组文档之间的“相对关系”。只要相对关系估计正确了,那么从排序这个角度来说,最后的结果也就准确了。理解这一个观点,对于深入理解排序和普通的分类之间的区别至关重要。
|
||||
|
||||
那么,如何从单点建模再进一步呢?
|
||||
|
||||
很显然,在排序关系中,一个关键关系就是每两个文档之间的比较,也就是我们通常所说的两两关系。试想一下,如果针对某一个查询关键字而言,有一个完美的排序关系,然后通过这个完美的排序关系,可以推导出文档之间的两两相对关系,再从这些相对关系中进行学习,从而可以进一步对其他查询关键字进行排序。
|
||||
|
||||
注意,在这样的架构下,训练集的样本从每一个“关键字文档对”变成了“关键字文档文档配对”。也就是说,每一个数据样本其实是一个比较关系。试想,有三个文档:A、B和C。完美的排序是“B>C>A”。我们希望通过学习两两关系“B>C”、“B>A”和“C>A”来重构“B>C>A”。
|
||||
|
||||
这里面有几个非常关键的假设。
|
||||
|
||||
第一,我们可以针对某一个关键字得到一个完美的排序关系。在实际操作中,这个关系可以通过五级相关标签来获得,也可以通过其他信息获得,比如点击率等信息。然而,这个完美的排序关系并不是永远都存在的。试想在电子商务网站中,对于查询关键字“哈利波特”,有的用户希望购买书籍,有的用户则希望购买含有哈利波特图案的T恤,显然,这里面就不存在一个完美排序。
|
||||
|
||||
第二,我们寄希望能够学习文档之间的两两配对关系从而“重构”这个完美排序。然而,这也不是一个有“保证”的思路。用刚才的例子,希望学习两两关系“B>C”、“B>A”和“C>A”来重构完美排序“B>C>A”。然而,实际中,这三个两两关系之间是独立的。特别是在预测的时候,即使模型能够正确判断“B>C”和“C>A”,也不代表模型就一定能得到“B>A”。注意,这里的关键是“一定”,也就是模型有可能得到也有可能得不到。两两配对关系不能“一定”得到完美排序,这个结论其实就揭示了这种方法的不一致性。也就是说,我们并不能真正保证可以得到最优的排序。
|
||||
|
||||
第三,我们能够构建样本来描述这样的两两相对的比较关系。一个相对比较简单的情况,认为文档之间的两两关系来自于文档特征(Feature)之间的差异。也就是说,可以利用样本之间特征的差值当做新的特征,从而学习到差值到相关性差异这样的一组对应关系。
|
||||
|
||||
我前面提到的RankSVM就是这样的思路。RankSVM从本质上来说其实还是SVM,也就是支持向量机,只不过建模的对象从单一文档变成了文档的配对。更加复杂的模型,比如GBRank,就是通过树的聚合模型GBDT来对文档之间的关系直接建模,希望通过函数值的差值来表达文档的相关性差异。
|
||||
|
||||
需要注意的是,配对法排序学习特别是在测试集预测的时候,可能会有计算复杂度的问题。因为原则上,必须要对所有的两两关系都进行预测。现实中,如果是基于线性特征的差值来进行样本构造的话,那么测试还可以回归到线性复杂度的情况。而用其他方法,就没那么幸运了。有很多计算提速或者是逼近算法为两两比较排序在实际应用中提供了可能性。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了文档检索领域基于机器学习的配对法排序学习。你可以看到,和单点法一样,整个问题的设置和传统的文字搜索技术有本质的区别,但在对文档之间关系的建模上,又比单点法前进了一大步 。
|
||||
|
||||
一起来回顾下要点:第一,在火热的机器学习排序研究中,提出了很多配对法排序算法,比如RankSVM、GBDT和RankNet。第二,配对法排序学习测试集的测试原理和单点法一致,我们可以查看精度、召回和F1值,或者利用五级相关信息。第三,针对单点法对于排序学习的“目标不明确”问题,配对法排序学习有不一样的训练集设置,在这个基础上,我介绍了三个关键假设。
|
||||
|
||||
最后,给你留一个思考题,有没有什么办法可以把单点法和配对法结合起来呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Zhaohui Zheng, Keke Chen, Gordon Sun, and Hongyuan Zha. A regression framework for learning ranking functions using relative relevance judgments. Proceedings of the 30th annual international ACM SIGIR conference on research and development in information retrieval, 287-294,2007.
|
||||
Thorsten Joachims. Optimizing search engines using clickthrough data. *Proceedings of the eighth ACM SIGKDD international conference on knowledge discovery and data mining*,133-142,2002.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,81 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
036 机器学习排序算法:列表法排序学习
|
||||
本周我们已经分别讨论了最基本的单点法排序学习(Pointwise Learning to Rank)和配对法排序学习(Pairwise Learning to Rank)两种思路。单点法排序学习思路简单实用,目的就是把经典的信息检索问题转化成机器学习问题。配对法排序学习则是把排序的问题转化成针对某个查询关键字每两个文档之间的相对相关性的建模问题。不过,这两种思路也都有很明显的问题,需要进一步对算法进行优化,以实现我们需要的最终目标。
|
||||
|
||||
今天我就来讲直接优化排序问题的“终极方法”:列表法排序学习(Listwise Learning to Rank) 。相对于尝试学习每一个样本是否相关或者两个文档的相对比较关系,列表法排序学习的基本思路是尝试直接优化像NDCG(Normalized Discounted Cumulative Gain)这样的指标,从而能够学习到最佳排序结果。
|
||||
|
||||
列表法排序学习的历史
|
||||
|
||||
2000年后,学术界和工业界都开始研究如何用机器学习来解决最优排序问题,五六年之后,研究者们才开始尝试直接优化整个排序列表。
|
||||
|
||||
这方面的研究工作很多都来自微软研究院。比如2007年左右的AdaRank,就来自微软亚洲研究院的徐君和李航。这篇论文算是较早提出列表法排序观点的研究工作。同一年在国际机器学习大会ICML 2007(International Conference on Machine Learning)上发表的ListNet算是从理论上开启了列表法的大门。这篇论文也来自微软亚洲研究院,是刘铁岩等人的重要工作。类似的研究工作在这一年里如雨后春笋般涌现。
|
||||
|
||||
另外一个方向,接下来我会提到,LambdaRank出现稍早,而LambdaMART则稍微晚一点。这方面的工作是在微软西雅图的研究院开发的。主导人是克里斯托弗·博格斯(Christopher J.C. Burges)。博格斯2016年退休,在微软工作了16年,可以说,他领导的团队发明了微软的搜索引擎Bing的算法。
|
||||
|
||||
列表法排序学习详解
|
||||
|
||||
列表法排序学习有两种基本思路。第一种,就是直接针对NDCG这样的指标进行优化。目的简单明了,用什么做衡量标准,就优化什么目标。第二种,则是根据一个已经知道的最优排序,尝试重建这个顺序,然后来衡量这中间的差异。
|
||||
|
||||
我先来说一下第一大思路,直接针对NDCG这样的指标进行优化。
|
||||
|
||||
首先,重温一下排序测试集的测试原理。总体来说,所有的基于排序的指标都要考察测试集上,对于某一个查询关键字来说,某一组文档所组成的排序是否是最优的。有两种比较通用的做法。第一个方法主要适用于二分的相关信息,对于某一个查询关键字,针对排序产生的“顶部的K”个文档进行评估,查看精度(Precision)、召回(Recall)等。第二种方法,利用五级相关信息定义,在这样的情况下,就可以利用类似于NDCG这样的评价指标。具体解读你可以回到本周前面两期我们讲解过的内容进行复习。
|
||||
|
||||
那么,直接优化排序指标的难点和核心在什么地方呢?
|
||||
|
||||
难点在于,希望能够优化NDCG指标这样的“理想”很美好,但是现实却很残酷。NDCG以及我之前说过的基于“顶部的K”的精度,都是在数学的形式上的“非连续”(Non-Continuous )和“非可微分”(Non-Differentiable)。而绝大多数的优化算法都是基于“连续”(Continuous )和“可微分” (Differentiable)函数的。因此,直接优化难度比较大。
|
||||
|
||||
针对这种情况,主要有这么几种方法。
|
||||
|
||||
第一种方法是,既然直接优化有难度,那就找一个近似NDCG的另外一种指标。而这种替代的指标是“连续”和“可微分”的 。只要我们建立这个替代指标和NDCG之间的近似关系,那么就能够通过优化这个替代指标达到逼近优化NDCG的目的。这类的代表性算法的有SoftRank和AppRank。
|
||||
|
||||
第二种方法是,尝试从数学的形式上写出一个NDCG等指标的“边界”(Bound),然后优化这个边界。比如,如果推导出一个上界,那就可以通过最小化这个上界来优化NDCG。这类的代表性算法有SVM-MAP和SVM-NDCG。
|
||||
|
||||
第三种方法则是,希望从优化算法上下手,看是否能够设计出复杂的优化算法来达到优化NDCG等指标的目的。对于这类算法来说,算法要求的目标函数可以是“非连续”和“非可微分”的。这类的代表性算法有AdaRank和RankGP。
|
||||
|
||||
说完了第一大思路后,我们再来看看第二大思路。这种思路的主要假设是,已经知道了针对某个搜索关键字的完美排序,那么怎么通过学习算法来逼近这个完美排序。我们希望缩小预测排序和完美排序之间的差距。值得注意的是,在这种思路的讨论中,优化NDCG等排序的指标并不是主要目的。这里面的代表有ListNet 和ListMLE。
|
||||
|
||||
讲了这两大思路以后,最后我再来提一下第三类思路。这类思路的特点是在纯列表法和配对法之间寻求一种中间解法。具体来说,这类思路的核心思想,是从NDCG等指标中受到启发,设计出一种替代的目标函数。这一步还和我刚才介绍的第一大思路中的第一个方向有异曲同工之妙,都是希望能够找到替代品。
|
||||
|
||||
这第三类思路更进一步的则是找到替代品以后,把直接优化列表的想法退化成优化某种配对。这第二步就更进一步简化了问题。这个方向的代表方法就是微软发明的LambdaRank以及后来的LambdaMART。微软发明的这个系列算法成了微软的搜索引擎Bing的核心算法之一。
|
||||
|
||||
我这里简单提一下LambdaRank这个系列模型的基本思想。
|
||||
|
||||
首先,微软的学者们注意到,一个排序算法是否达到最优的情况,简单来看,就是查看当前的排序中,相比于最优的情况,有哪些两两文档的关系搞错了。学习最优排序的问题就被转化成了减小这些两两排错的关系。更进一步,在设计这个优化过程中,我们其实并不需要知道真正的目标函数的形式,而仅仅需要某种形式的梯度(Gradient)。
|
||||
|
||||
这里有这样一个洞察,对于绝大多数的优化过程来说,目标函数很多时候仅仅是为了推导梯度而存在的。而如果我们直接就得到了梯度,那自然就不需要目标函数了。最后,通过实验,微软的学者们把这个NDCG通过梯度变化的差值再乘以这个梯度,这样就达到了增强效果的目的。
|
||||
|
||||
早期的LambdaRank,特别是RankNet是采用了神经网络来进行模型训练,而LambdaMART则采用了“集成决策树”的思想,更换到了基于决策树的方法。后来实践证明,基于决策树的方法对于排序问题非常有效果,也就成了很多类似方法的标准配置。
|
||||
|
||||
最后,有一点需要你注意,我们讨论了不同的列表法思路,列表法从理论上和研究情况来看,都是比较理想的排序学习方法。因为列表法尝试统一排序学习的测试指标和学习目标。尽管在学术研究中,纯列表法表现优异,但是在实际中,类似于LambdaRank这类思路,也就是基于配对法和列表法之间的混合方法更受欢迎。因为从总体上看,列表法的运算复杂度都比较高,而在工业级的实际应用中,真正的优势并不是特别大,因此列表法的主要贡献目前还多是学术价值。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了列表法排序学习。你可以看到,列表法排序有很多种思路,在2000年到2010年之间是一个非常活跃的研究领域,积累了大量的成果。
|
||||
|
||||
一起来回顾下要点:第一,简要介绍了列表法排序学习的历史。第二,详细介绍了列表法排序学习的三大思路以及每个思路里的主要细节和方法。
|
||||
|
||||
最后,给你留一个思考题,列表法是不是就完全解决了排序算法的问题呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Jun Xu and Hang Li. AdaRank: a boosting algorithm for information retrieval. Proceedings of the 30th annual international ACM SIGIR conference on research and development in information retrieval, 391-398,2007.
|
||||
Zhe Cao, Tao Qin, Tie-Yan Liu, Ming-Feng Tsai, Hang Li. Learning to rank: from pairwise approach to listwise approach. ICML, 129-136, 2017.
|
||||
Q. Wu, C.J.C. Burges, K. Svore and J. Gao. Adapting boosting for information retrieval measures. Journal of Information Retrieval, 2007.
|
||||
C.J.C. Burges, R. Ragno and Q.V. Le. Learning to rank with non-smooth cost functions. Advances in Neural Information Processing Systems, 2006.
|
||||
C.J.C. Burges, T. Shaked, E. Renshaw, A. Lazier, M. Deeds, N. Hamilton and G. Hullender. Learning to rank using gradient descent. Proceedings of the twenty second international conference on machine learning, 2005.
|
||||
F. Xia, T.-Y. Liu, J. Wang, W. Zhang, and H. Li. Listwise approach to learning to rank — Theorem and algorithm. ICML, 1192–1199, 2008.
|
||||
S. Chakrabarti, R. Khanna, U. Sawant, and C. Bhattacharyya. Structured learning for non-smooth ranking losses. SIGKDD, 88–96, 2008.
|
||||
T. Qin, T.-Y. Liu, and H. Li. A general approximation framework for direct optimization of information retrieval measures.Technical Report, Microsoft Research, MSR-TR-2008-164, 2008.
|
||||
M. Taylor, J. Guiver, S. Robertson, and T. Minka. SoftRank: Optimising non-smooth rank metrics. WSDM, 77–86, 2008.
|
||||
J.-Y. Yeh and J.-Y. Lin, and etc. Learning to rank for information retrieval using genetic programming. SIGIR 2007 Workshop in Learning to Rank for Information Retrieval, 2007.
|
||||
Y. Yue, T. Finley, F. Radlinski, and T. Joachims. A support vector method for optimizing average precision. SIGIR, 271–278, 2007.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,83 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
037 查询关键字理解三部曲之分类
|
||||
我们在前两周的专栏里主要讲解了最经典的信息检索(Information Retrieval)技术和基于机器学习的排序算法(Learning to Rank)。
|
||||
|
||||
经典的信息检索技术为2000年之前的搜索引擎提供了基本的算法支持。从中衍生出的TF-IDF、BM25还有语言模型(Language Model)以及这些方法的各类变种都还在很多领域(不限文本)里继续发挥着作用。
|
||||
|
||||
另一方面,排序学习算法引领了2000年到2010年各类基于机器学习的搜索算法的产生和发展,也带来了搜索引擎技术的进一步成熟。
|
||||
|
||||
这周我们从排序算法转移到排序问题中一个非常重要的部分:查询关键字理解(Query Understanding)。也就是说,我们希望通过查询关键字来了解用户种种行为背后的目的。查询关键字产生的特征(Feature)往往是很强的指导因素,也是个性化搜索结果非常重要的源泉。因此,深入了解并掌握查询关键字理解方面的技术就变得很有必要。
|
||||
|
||||
查询关键字理解最基本的一个步骤就是给查询关键字分类(Classification),看这些查询关键字有什么用户意图(Intent)。今天我就来聊一聊查询关键字分类的一些基本概念和技术,让你对这方面的开发和研究有一个基本认识。
|
||||
|
||||
查询关键字分类的历史
|
||||
|
||||
从商业搜索引擎开始面世的第一天起,人们就发现,可以从查询关键字中得到很多用户的信息,特别是理解用户的意图。早在1997年,商业搜索引擎Excite就开始了百万级别查询关键字的研究工作。然而,真正对查询关键字分类进行系统阐述的是安德烈·布罗德(Andrei Broder)的论文《网页搜索分类》(A Taxonomy of Web Search)。
|
||||
|
||||
安德烈很有名头,在斯坦福大学攻读博士期间师从图灵奖得主高德纳(Donald Knuth),然后在曾经名噪一时的第一代搜索引擎公司AltaVista(后被雅虎收购)担任首席科学家,之后加入位于纽约的IBM研究院组建企业级搜索平台,2012年后加入Google,担任杰出科学家(Distinguished Scientist)。他还是ACM(Association of Computing Machinery,计算机协会)和IEEE(Institute of Electrical and Electronics Engineers,电气电子工程师学会)的双料院士。
|
||||
|
||||
安德烈的这篇论文可以说是奠定了查询关键字分类的坚实基础。这之后研究人员的很多工作都是围绕着如何自动化分类、如何定义更加精细的用户意图来展开的。
|
||||
|
||||
查询关键字分类详解
|
||||
|
||||
我就从安德烈这篇非常有名的文章说起。在网络搜索(Web Search)成为比较主流的咨询查询手段之前,传统的信息检索认为,查询的主要目的是完成一个抽象的“信息需求”(Information Needs)。在传统信息检索的世界里,最主要的应用应该是图书馆检索或者政府学校等企事业单位的检索。因此,在这样的场景下,假定每一个查询主要是满足某个“信息需求”就显得很有道理了。
|
||||
|
||||
然而,早在2002年,安德烈就认为这样的传统假定已经不适合网络时代了。他开始把查询关键字所代表的目的划分为三个大类:
|
||||
|
||||
|
||||
导航目的(Navigational);
|
||||
信息目的(Informational);
|
||||
交易目的(Transactional)。
|
||||
|
||||
|
||||
此后十多年里,查询关键字的这三大分类都是这个方向研究和实践的基石。我们先来看这个分类的内涵。
|
||||
|
||||
第一类,以导航为意图的查询关键字,这类查询关键字的目标是达到某个网站。这有可能是用户以前访问过这个网站,或者是用户假设有这么一个关于所提交查询关键字的网站。这一类查询关键字包括公司的名字(如“微软”)、人的名字(如“奥巴马”)或者某个服务的名字(如“联邦快递”)等。
|
||||
|
||||
此类查询关键字的一个重要特点就是,在大多数情况下,这些查询关键字都对应唯一的或者很少的“标准答案”网站。比如,搜索“微软公司”,希望能够找到的就是微软公司的官方网站。另一方面是说,某些“信息集成”网站也是可以接受的“答案”。比如,查询“奥巴马”,搜索返回的结果是一个列举了所有美国总统的网站。
|
||||
|
||||
第二类,以信息为意图的查询关键字,这类查询关键字的目标是搜集信息。这一类的查询和传统的信息检索非常接近。值得提及的是,从后面的研究结论来看,这一类查询关键字所包含的目标不仅仅是寻找到某类权威性质(Authority)的网页,还包括列举权威信息的俗称“结点”(Hub)的网站。
|
||||
|
||||
第三类,以交易为意图的查询关键字,这类查询关键字的目标是到达一个中间站点从而进一步完成“交易”(Transaction)。这一类查询关键字的主要对象就是“购物”。现在我们对“电子商务”的态度可以说是非常自然了,但是十多年前,在传统信息检索界统治的搜索研究领域,提出“交易”类型的查询关键字可以说是很有新意的。
|
||||
|
||||
当然,这样的分类如果仅仅是概念上的区分那就没有太大的意义。安德烈利用搜索引擎AltaVista进行了一次调查研究,这次调查有大约3千多的用户反馈。想到这是在2001年的调查,可以说已经是大规模的研究了。
|
||||
|
||||
这次调研的结果是这样的:在用户提交的信息中,导航类型的查询关键字占26%,交易类型的查询关键字占到了24%,而剩下的将近50%是信息类型的查询关键字,用户的日志(Log)分析进一步证实了这一数据。
|
||||
|
||||
你可以看到,这种把查询关键字进行分类的研究是对用户行为进行建模的必要步骤。于是,很快就有不少研究人员嗅到了查询关键字分类的价值。然而,完全依靠用户直接反馈来获取这类信息则变得越发困难。
|
||||
|
||||
这里主要有三个原因。第一,不可能寄希望于用户汇报自己所有关键字的意图;第二,面对亿万用户输入的查询关键字,手工标注也是不可能的;最后,安德烈的三类分类还是太粗犷了,在实际应用中希望得到更加细颗粒度的用户意图。
|
||||
|
||||
把查询关键字分类问题转换成为标准的机器学习任务其实很直观。确切地说,这里需要做的是把查询关键字分类转换成为监督学习任务。这里,每一个查询关键字,就是一个数据样本,而响应变量,则是对应的类别。具体情况取决于我们的任务是仅仅把查询关键字分为几个类别,并且认为这些类别之间是互相独立的,还是认为这些类别是可以同时存在的。
|
||||
|
||||
在最简单的假设下,查询关键字分类就是一个普通的多类分类问题,可以使用普适的多类分类器,比如支持向量机(SVM)、随机森林(Random Forest)以及神经网络(Neural Networks)等来解决这类问题。
|
||||
|
||||
对于绝大多数监督学习任务而言,最重要的一个组成部分就是选取特征。随后很多年的研究开发工作中,有一部分就集中在尝试使用不同的特征,然后来看对提高分类的精度是否有效果。
|
||||
|
||||
过去的研究反复证明,以下几类特征非常有效。
|
||||
|
||||
第一类特征就是查询关键字本身的信息。比如,查询关键字中已经包括了已知的人名或者公司名,这种时候,分类结果就不太可能是交易意图的类别。也就是说,查询关键字,特别是某些词或者词组和类别有某种关联信息,而这种关联很大程度上能被直接反映出来。
|
||||
|
||||
第二类特征是搜索引擎返回的查询关键字相关的页面本身的信息。你可以想象一下,假如搜索“奥巴马”这个关键字,返回的页面都是维基百科的页面以及奥巴马基金会的页面,那么这些页面上面的内容可能很难包含任何商业的购买信息。而对于“佳能相机”这个查询关键字而言,返回的页面很可能都是电子商务网站的商品信息,从而能够更加准确地判断“佳能相机”的分类。
|
||||
|
||||
第三类特征则是用户的行为信息,那就是用户在输入查询关键字以后会点击什么网站,会在哪些网站停留。一般来说,哪些网站点击率高、停留时间长,就表明这些网站在返回结果中可能更相关。于是,采用这些网站来作为查询关键字所代表的内容,就可能更加靠谱。
|
||||
|
||||
在实际的应用中,查询关键字的分类往往还是有很大难度的。因为在普通的现代搜索引擎上,每天可能有三分之一、甚至更多的关键字是之前没有出现过的。因此,如何处理从来没有出现过的关键字、如何处理长尾中的低频关键字,就成了让搜索结果的精度再上一个台阶的重要因素。我今天就不展开相应的话题了,如果你有兴趣,可以查看相关论文。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了现代搜索技术中一个非常基础但是也在实际应用中至关重要的环节,那就是查询关键字理解中的用户意图分类问题。你可以看到查询关键字从大类上分为信息意图、交易意图以及导航意图三类。
|
||||
|
||||
一起来回顾下要点:第一,简要介绍了查询关键字分类提出的历史背景,安德烈·布罗德的论文奠定了查询关键字分类的坚实基础。第二,详细介绍了主要的分类以及如何通过多类分类器的构建来达到自动化的目的。
|
||||
|
||||
最后,给你留一个思考题,在机器学习排序算法中,我们应该如何使用查询关键字分类的结果呢?
|
||||
|
||||
拓展阅读:A taxonomy of web search
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,72 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
038 查询关键字理解三部曲之解析
|
||||
这周我分享的核心内容是查询关键字理解(Query Understanding)。周一介绍了查询关键字分类(Query Classification)的基本概念和思想。今天,我来讲一个更加精细的查询关键字理解模块:查询关键字解析(Parsing)。
|
||||
|
||||
如果说查询关键字分类是对查询关键字的宏观把握,那么,对查询关键字的解析就是微观分析。其实,查询关键字解析是一类技术的统称,我今天就来聊几个比较热的话题。
|
||||
|
||||
查询关键字分割
|
||||
|
||||
首先,让我们设想这么一个场景,在英文的搜索引擎中,如果一个用户输入的是“White House Opening”这个查询关键字,这个用户的意图(Intent)是什么呢?要想理解用户的意图,我们就得知道用户输入的单词的涵义。
|
||||
|
||||
那么,在上面这个查询关键字里,我们到底是分别理解每一个单词“White”、“House”和“Opening”呢,还是“White House”和“Opening”呢,还是有可能“White House Opening”是一个整体呢?这里说的其实就是“查询关键字分割”(Query Segmentation)这个概念。
|
||||
|
||||
在刚才的例子中,如何把“White House Opening”进行分割直接关系到搜索结果的质量。试想在一个比较标准的现代搜索引擎里,一般来说,都会有一个模块根据查询关键字来提取“倒排索引”(Inverted Index)中的文档。这个阶段的提取数目一般是几百到几千,这个过程常常被称为“检索流程”(Retrieval Phase)。
|
||||
|
||||
当有了这些文档以后,现代搜索引擎会利用比较复杂的排序算法,通常就是我们之前提到过的基于机器学习的排序学习模型,来对文档进行重新排序(Re-Rank)。
|
||||
|
||||
你可以看到,在这样两个阶段的流程里,如果好的文档没有在第一个阶段被提取出来,不管第二个阶段的功能有多强大,搜索的整体结果都不可能有多好。而对于“检索流程”而言,在“倒排索引”中进行查询的关键就是使用什么“单词”或者“词组”进行查找。
|
||||
|
||||
用刚才的例子来说,就是看文档究竟是符合“White House”,还是“White或House”,还是“White House Opening”。很明显,这三种情况得到的文档集合是不尽相同的。如果用户的真实意图是搜索美国总统府白宫的开放时间,那么把这个搜索关键字给分割成“White或House”,很明显就会影响提取的文档集合。
|
||||
|
||||
那究竟该怎样做查询关键字分割呢?
|
||||
|
||||
这里我介绍一篇论文《重新审视查询关键字分割》(Query Segmentation Revisited )。在这篇论文里,作者们集中介绍了一些主流的“查询关键字分割”技术,文章非常值得精读。下面我为你归纳一下要点。
|
||||
|
||||
第一种技术就是尝试从查询关键字里面产生“N元语法”(N-Grams)。所谓N元语法其实就是从一组词语中产生连续的子词语。比如刚才的“White House Opening”的例子,我们就可以从这个词组里面产生“White House”和“House Opening”两个二元语法。
|
||||
|
||||
而第一种基于N元语法的方法,就是通过这些N元语法在一个大语料中出现的词频来判断这个“分割”是否有意义。当然,直接采用词频可能会比较偏好短的单词,所以在论文中,作者们分别介绍了两种矫正词频的方法。
|
||||
|
||||
一种是基于词频本身的矫正,一种是基于维基百科,作为一个外部资源的矫正方式。两种方法的目的都是为了让长短语的打分(Scoring)有机会高于短的单词。文章中所需要的词频采用了谷歌2005年发布的“N元语法”语料,也就是说,所有单词出现的频率都是直接在这个语料中获得的。
|
||||
|
||||
第二种技术是基于短语“互信息”(Mutual Information)的方法。“互信息”计算了两个随机事件的相关程度。在这里,就是计算查询关键字中每两个相邻短语的“互信息”。当这个“互信息”的取值大于某一个预设阈值的时候,我们就认为相邻的两个单词组成了短语。“互信息”的计算需要知道某个单词出现的概率,这些概率是从微软发布的一个“N元语法”语料获得的。
|
||||
|
||||
第三种技术则是基于“条件随机场”(Conditional Random Field)。“条件随机场”是机器学习著名学者乔治·拉菲迪(John D. Lafferty)、安德鲁·麦卡伦(Andrew McCallum)和费尔南多·佩雷拉(Fernando Pereira)在2001年发表的“序列学习”模型(Sequence Model)中提出的。条件随机场的基本思想是对输出的复杂标签进行建模,尝试从特征空间建立到复杂标签的一个对应关系。
|
||||
|
||||
在“查询关键字分割”的场景下,我们其实可以把复杂标签看作是从一个查询关键字到多个短语的多个二元决策问题。这里的二元决策是指某一个备选短语是否可以作为分割的短语。条件随机场可以比较直观地对这类问题进行建模,而传统的二分分类器则很难对序列信息进行建模。我在这里就不详细展开条件随机场的介绍了,有兴趣的话可以翻看相关的论文。
|
||||
|
||||
查询关键字标注
|
||||
|
||||
刚才我聊了查询关键字理解最基本的“分割“问题。可以说,“分割问题”是查询关键字理解的第一步。那么,下一步则是更细致地分析查询关键字。
|
||||
|
||||
回到刚才的例子“White House Opening”,我们其实不仅是想知道这个查询关键字可以分割为“White House”和“Opening”,而且希望知道“White House”是一个建筑物的名字或者一个地理位置的名字,而“Opening”则可能是一个名词,暗指“开门时间”。也就是说,我们希望为查询关键字中的词组进行“标注”(Annotation),来获取其“属性”(Attribute)信息。希望为查询关键字中分割出来的词组进行标注的组件就叫做“查询关键字标注”。
|
||||
|
||||
那么,标注信息又是怎样帮助搜索结果的呢?试想一下“苹果价格”这个查询关键字。这取决于用户搜索的场景,如果“苹果”代表“水果”这个属性,那么这个查询的结果是希望找到水果的价格,可能还需要搜索引擎返回附近超市的一些信息。但如果“苹果”其实代表的是“手机”,那这个查询的结果也许最好是返回苹果公司的官方销售网站。你看,“苹果”所代表的属性不同,最优的返回结果可能会有非常大的差别。
|
||||
|
||||
对查询关键字进行标注的方法也有很多。我这里再推荐一篇经典的论文《使用伪相关反馈针对搜索查询关键字进行结构化标注》(Structural annotation of search queries using pseudo-relevance feedback),这篇论文利用一个叫做PRF(Pseudo-Relevance Feedback)的方法来进行标注。这里面的一个技术难点是,查询关键字的信息实在是太少,需要利用大量的辅助信息来进行标注,因此PRF作为一个技术在这里得到了应用。
|
||||
|
||||
另外一个主流的查询关键字标注的方法,依然是利用条件随机场。我前面讲了,条件随机场是很好的序列建模工具。那么,在这里,以“苹果价格”为例,条件随机场是需要预测标签是否是“手机名词”还是“水果名词”这样的组合输出结果。而传统的二分或者多类分类器很难捕捉到这里的序列信息,条件随机场就是解决这方面的利器。
|
||||
|
||||
于是,我们需要做的就是为查询关键字构建特征(Feature),然后直接放入条件随机场中。有一点需要注意,条件随机场的应用成功与否与数据的多少有很大关系。因此,构建一个有标注信息的数据集就变成了查询关键字标注的一个核心挑战。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了现代搜索技术中的一个重要环节,那就是查询关键字理解中的查询关键字解析问题。你可以看到查询关键字解析从大类上分为查询关键字分割和查询关键字标注两个比较重要的模块。
|
||||
|
||||
一起来回顾下要点:第一,简要介绍了查询关键字分割的场景和三种主要技术,分别是“N元语法”、“互信息”和“条件随机场”。第二,详细介绍了查询关键字标注的场景和主要技术,包括利用PRF和利用条件随机场两种主流的标注方法。
|
||||
|
||||
最后,给你留一个思考题,我举了英语的查询关键字的解析问题,那么对于中文而言,又有哪些特殊的挑战呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Matthias Hagen, Martin Potthast, Benno Stein, and Christof Bräutigam. Query segmentation revisited. Proceedings of the 20th international conference on World wide web (WWW ‘11). ACM, New York, NY, USA, 97-106. 2011.
|
||||
Michael Bendersky, W. Bruce Croft, and David A. Smith. Structural annotation of search queries using pseudo-relevance feedback. Proceedings of the 19th ACM international conference on Information and knowledge management (CIKM ‘10). ACM, New York, NY, USA, 1537-1540. 2010.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,85 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
043 文档理解第一步:文档分类
|
||||
我们在前几周的专栏里讲解了最经典的信息检索(Information Retrieval)技术以及基于机器学习的排序学习算法(Learning to Rank),并且花了一定的时间分享了查询关键字理解(Query Understanding)这一关键搜索组件的核心技术要点。上周,我们还详细讨论了如何从线上和线下两个层面来评价一个搜索系统。
|
||||
|
||||
这周我们的分享将转移到搜索的另外一个重要部件:文档理解(Document Understanding)。也就是从文档中抽取各种特性,来帮助检索算法找到更加相关的文档。
|
||||
|
||||
文档理解最基本的一个步骤就是给文档分类(Classification),看这些文档表达什么类别的信息。今天我就来和你聊一聊文档分类的一些基本概念和技术,让你对这方面的开发与研究有一个基本认识。
|
||||
|
||||
文档分类的类型
|
||||
|
||||
如果我们把文档分类看做一个监督学习任务的话,那么在各式应用中就经常使用以下几种类型的文档分类。
|
||||
|
||||
第一个类别就是二元分类,或者称为二分文档分类,目的就是把文档分成两种不同的类别。比如,把文档分成“商业类”或者“非商业类”。
|
||||
|
||||
第二个类别自然就是多类分类,也就是判断文档是否属于好几种不同类别中的某一个。比如,把文档划归为“艺术”、“商业”、“计算机”或者“运动”类别中的某一类。
|
||||
|
||||
当然,在多类分类的下面,我们还可以分三个小类别。
|
||||
|
||||
第一个小类别,是“多类-单标签-硬分类”(Multiclass,Single-Label,Hard Classification)。什么意思呢?就是说每一个文档只能在多类分类问题中被赋予唯一的标签,并且所有互相的类别是不兼容的。
|
||||
|
||||
第二个小类别,就是“多类-多标签-硬分类”(Multiclass,Multilabel,Hard Classification),也就是说每一个文档可以被认为属于多个类别,然而每个这样的分类都是唯一确定的。
|
||||
|
||||
最后一个小类别则是“多类-软分类”(Multiclass,Soft Classification),也就是认定每个文档以概率的形态属于多个类别。
|
||||
|
||||
在这个分类基础上,还有一种分类的方法,那就是可以把所有的类别看做一个平面的结构(Flat)或者是有组织结构的。通常情况下,如果把文档分类到一个层次组织(Hierarchical Structure)里就叫“层次分类”(Hierarchical Classification)。在这样的情况下,一个文档同时属于这个层次结构上从根节点到叶子节点的所有类别。一般来说,上层节点相对于下层节点更加抽象。
|
||||
|
||||
文档分类经典特性
|
||||
|
||||
了解了文档分类的基本类型之后,我们接着来讨论文档分类所用到的经典特性。
|
||||
|
||||
我们最先会想到的当然是使用文档上原本的文字信息。最直接的文字特性可能就是每个英文单词,或者中文的词语。这种完全把文字顺序打乱的方式叫作“词袋模型”(Bag-of-words Model)。
|
||||
|
||||
从很多实践者的报告来看,“词袋模型”虽然不考虑文字的顺序,但是在实际使用中,依然不失为一种非常有效的特性表达方式。同时,在“词袋模型”中,每个词的权重其实可以用我们之前介绍过的TF-IDF或是语言模型(Language Model)对单词进行加权。关于TF-IDF以及语言模型,建议你回到我们前面讲过的内容去复习一下。
|
||||
|
||||
除了“词袋模型”以外,还有一些不同的尝试,是希望能够保留部分或者全部的词序。
|
||||
|
||||
比如,我们曾经讲过的“N元语法”(N-gram)对文字的表达方法,就是一种非常有效的保留部分词序的方法。不过,N元语法最大的问题就是极大地增大了特性空间,同时,每一个N元组被观测到的次数明显减少,这也就带来了数据的稀少(Sparsity)问题。
|
||||
|
||||
除了N元语法以外,近年来随着深度学习的推广,比较新的思路是用“递归神经网络”(RNN)来对序列,在这里也就是词句进行建模。有不少研究表明这样的效果要明显好于“词袋模型”。
|
||||
|
||||
除了文档上的原始文字以外,文档上的排版格式其实也是很重要的。有些字段有很明显的特征,比如一个文档的标题显然占据了举足轻重的地位。有一些文档有“章节”、“段落”等结构,其中这些小标题对文章的主要内容有很大的指导意义。于是,对文章的不同“字段”(有时候也叫做“域”)进行建模,对文档分类的效果可能会有比较大的影响。
|
||||
|
||||
另外,针对某些特殊文档,仅仅考虑文字的基本信息可能是不够的。例如,现代网页的原始HTML表达和最终在浏览器中呈现出来的效果很可能会有较大区别。因此,针对网页,我们可能还需要采用浏览器中最终呈现出来的视觉效果来提取特性。
|
||||
|
||||
对于孤立的文档来说,单个文档的信息可能是比较有限的。但是在互联网上,很多文档都不是孤立存在的。就拿普通网页来说,互联网的一个特点就是很多网页都通过各种链接连到一起。这些和当前网页相连的其他页面很可能就会为当前页面提供一些额外信息。
|
||||
|
||||
在所有这些周围的页面中,有一类页面值得在这里提一下。那就是这些页面上会有链接指向当前我们需要分类的目标网页。这些链接往往有文字描述来叙述目标网页的一些特质,甚至有一些周围的文字描述也是有意义的。
|
||||
|
||||
比如,当前网页是微软公司的首页,上面也许因为有各种精美的图片而缺乏文字描述,而周围的页面上很可能就有“微软公司官方网站”等链接指向微软公司的首页。这样,我们就通过这些链接文字得出了“微软公司”的信息,然后如果我们又知道微软公司是软件公司,那么就比较容易对这个页面进行分类了。
|
||||
|
||||
根据这个思路,我们就可以尝试去使用周围文档中更多的信息。不过,值得指出的是,周围文档信息所带的“噪声”也是比较多的。已经有各类研究尝试去理解周围文档中更多有价值的信息,这里就不赘述了。
|
||||
|
||||
文档分类相关算法
|
||||
|
||||
根据我们刚刚讲过的不同文档的分类类型,就可以直接借用已知的、熟悉的监督学习各种算法和模型。
|
||||
|
||||
假如是简单的二分文档分类问题,那“对数几率回归”(Logistic Regression)、“支持向量机”(SVM)、“朴素的贝叶斯分类器”(Naïve Bayes Classifier)就都能够胜任工作。而针对多类分类问题,也是标准的监督学习设置,刚才说到的这几类算法和模型在一定的改动下也能够做到。
|
||||
|
||||
近些年,深度学习席卷很多领域。在文档分类领域,各类深度学习模型也都展示出了一定的优势。
|
||||
|
||||
需要注意的是,并不是所有的分类算法都“天生”(Natively)支持“概率的输出结果”。也就是说,如果我们需要对“多类-软分类”文档问题进行建模,那就会有一些问题。比如支持向量机就是这么一种情况。在默认的状态下,支持向量机并不输出每一个数据样例属于每一个类别的概率。
|
||||
|
||||
因此,这里就需要用到一些技巧。在实际应用中,我们经常采用的是一种叫“普拉特调整”(Platt Scaling)的办法。简单来说,其实就是把支持向量机的输出结果再当做新的特性,学习一个对数几率回归。
|
||||
|
||||
除了我们刚刚讲的利用基本的监督学习手段进行文档分类以外,另外一种方法就是我们前面说的利用周围有关系的文档,也就是所谓的“关系学习”(Relational Learning)。关系学习是说,希望利用文档与文档之间的关系来提高文档的分类效果。这一方面的很多方法都会利用这样的思想:相似的页面很有可能是相同的类别。
|
||||
|
||||
如果是在“层次分类”的情况下,相似的页面就很有可能在层次结构上距离比较近。这里,“相似”有可能被定义成文字信息相似,也有可能是在文档与文档之间所组成的“图”(Graph)上位置类似。
|
||||
|
||||
比如,某一个公司的很多子页面,虽然上面的文字本身有差异,但因为都是这个公司的页面,从大的文档页面网络上看,他们都代表这个公司的信息,因此在进行文档分类的时候,也很有可能会把他们放到一起。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了现代搜索技术中又一个至关重要的环节,那就是文档理解中的文档分类问题。你可以看到文档分类所要了解的信息还是比较多的。
|
||||
|
||||
一起来回顾下要点:第一,简要介绍了文档分类的主要类型,包括二元分类、多类分类以及层次分类。第二,详细介绍了文档分类所可能用到的种种特性,比如文档上原本的文字信息、文档的排版格式以及周围有关系的文档。第三,介绍了如何利用监督学习以及其他的算法工具来完成文档分类的任务。
|
||||
|
||||
最后,给你留一个思考题,如果一个文档中既有图片也有文字,那我们该如何组织这些特性,然后放到我们的分类器中去学习呢?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,69 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
044 文档理解的关键步骤:文档聚类
|
||||
周一我们分享了文档理解最基本的一个步骤,那就是给文档分类(Classification),主要是看不同文档表达什么类别的信息。今天我就来聊一聊文档理解的另外一个重要组件:文档聚类(Document Clustering)。
|
||||
|
||||
文档聚类的类型
|
||||
|
||||
和了解文档分类的思路相似,我们先来看看文档聚类的分类。一般来说,可以把文档聚类看作非监督学习的典型代表。
|
||||
|
||||
先说一种直观的分类方法。如果把文档分为“互不相关”的几个聚类,那就叫作“扁平聚类”(Flat Clustering);如果这些聚类相互之间有一定的结构关系,那就叫作“层次聚类”(Hierarchical Clustering)。
|
||||
|
||||
“扁平聚类”中的“互不相关”是说文档所划分进去的聚类之间本身没有重合。而“层次聚类”的特点是,希望在聚类之间找到关系,从而把这些文档组织到一个有层次的结构中。在这种层级结构里,根节点所代表的内容往往比较抽象,而叶节点所表达的内容则比较具体。
|
||||
|
||||
值得注意的是,不管是“扁平聚类”还是“层次聚类”,相较于文档分类来说,这里最大的不同就是这些聚类以及它们之间的关系都不是事先定义好的,或者说研发人员事先并不知道这些聚类的存在。从这个角度来看,聚类的确是比分类要困难的任务,难在如何衡量聚类的好坏。
|
||||
|
||||
除了“扁平聚类”和“层次聚类”这种区分以外,聚类方法中还有一个类似的区分,那就是“硬聚类”(Hard Assignment)和“软聚类”(Soft Assignment)的区别。
|
||||
|
||||
顾名思义,“硬聚类”是说对于每一个文档,不管是“扁平聚类”还是“层次聚类”,都确定性地分配到一个或者一组聚类中。而“软聚类”则往往学习到文档分配到聚类的一个分布,也就是说所有的分配都是以某种概率存在的。
|
||||
|
||||
文档聚类的应用
|
||||
|
||||
在搜索系统为背景的场景中,我们为什么要强调文档聚类?
|
||||
|
||||
首先,文档聚类可以帮助文档提取和排序。很多文档能够聚合到一个类别肯定是因为文档在某种情况下“相似”。相似的文档很可能都满足用户的某种“信息需求”(Information Needs)。实际上,在类似“语言模型”(Language Model)或者其他概率模型的场景中,对文档相关度的预测经常需要从相似文档群体中寻找额外信息。
|
||||
|
||||
举个例子,在“语言模型”中,我们需要估计文档相对于查询关键字的相关度。单独的某一个文档,数据信息可能比较匮乏,因此一个常用的策略就是从整个数据集中补充信息。如果我们已经有了文档的聚类,那自然就可以从这些聚类中补充,而不需要数据全集。
|
||||
|
||||
其次,文档聚类能够帮助整理搜索结果。在最普通的搜索结果上,如果只是完全“平铺”所有的结果,用户很可能对成百上千的结果“不得要领”。因此,在这些结果上体现某种结构就成为了很多搜索引擎提升用户体验的一种方法。
|
||||
|
||||
当然,这里可以用我们之前提到的“文档分类”的方法,把返回的结果按照类别组织。这样,哪一个类别有什么结果就清清楚楚。在这里,文档聚类相比于文档分类的优势是,聚类更能反应文档之间更本质的联系,而不是类似于分类这样“先入为主”地对文档的关系有一个定义。
|
||||
|
||||
文档聚类不仅仅是搜索结果的展示利器,很多时候,文档聚类还可以帮助研究人员来浏览一个文档集合,而不需要太多的先期假设。在有“层次聚类”的帮助下,研发人员可以很容易地根据层次之间的关系来对一个文档集合进行分析。利用文档聚类来浏览文档集合常常是发现问题,并且进行下一步工作的有效步骤。
|
||||
|
||||
文档聚类的基本模型
|
||||
|
||||
最基础的文档“扁平聚类”方法当属“K均值算法”(K-Means)。
|
||||
|
||||
首先,一个最基本的步骤就是要把文档表示成“特性向量”(Feature Vector)。具体的做法可以采用我们周一讲过的几个方式,比如最基本的“词袋模型”(Bag Of Word),这是一种把文字顺序完全打乱的方式。在“词袋模型”中,每个词的权重可以用我们之前介绍过的TF-IDF或是语言模型对单词进行加权。当然,还有“N元语法”(N-gram)和“递归神经网络”(RNN)两种思路,这一部分可以回到我们周一的内容再复习一下。
|
||||
|
||||
把文档表达成为“特征向量”之后,就可以开始聚类了。“K均值算法”的基本思路是这样的。给定一个数据样本集,K均值算法尝试把所有的样本划分为K个聚类。每个聚类都是互斥的,也就是说样本都被有且唯一地分配到这些聚类中。K均值算法在优化一个目标函数,那就是每个样本到目标聚类中心的平均平方误差最小。
|
||||
|
||||
这里,目标聚类中心是指当前这个样本被分配到的聚类;而聚类中心则是所有被分配到这个聚类的样本的均值。很明显,根据不同的样本被分配到不同的聚类,聚类中心也会随之发生变化。通俗地说,K均值算法的目标函数要达到的目的是,让聚类内部的样本紧紧围绕在聚类的均值向量周围。整个目标函数的值越小,聚类内样本之间的相似度就越高。
|
||||
|
||||
和我们熟悉的线性回归模型(Linear Regression)以及对数几率回归(Logistic Regression)一样,目标函数本身仅仅描述了当最终的聚类分配最佳时的一种情况,并没有描述如何能够得到最佳聚类分配的情况。实际上,对于K均值算法而言,直接最小化这个目标函数并不容易,一般来说,找到它的最优解是一个NP难的问题。
|
||||
|
||||
不过幸运的是,贪心算法一般能够找到不错的近似解。下面我就介绍一个通过迭代优化来近似求解目标函数的算法。
|
||||
|
||||
首先,我们对均值向量进行初始化。比较简单的初始化方法就是直接随机地选择某几个点来当做聚类均值。然后,我们依次对每一个样本点进行聚类划分。每个数据点被分配到距离某一个均值向量最近的那个聚类里。当我们进行了所有的分配之后再对均值向量更新。这就完成了一次迭代,整个算法需要进行多次迭代更新。若迭代更新后聚类结果保持不变,就将当前聚类划分结果返回。
|
||||
|
||||
文档聚类的难点
|
||||
|
||||
在今天分享的最后,我想来谈一谈文档聚类的一些难点。
|
||||
|
||||
首先,怎样衡量聚类的质量好坏,也就是如何评价聚类算法以及比较不同的算法,一直都是聚类模型,甚至说是无监督机器学习算法的共同问题。有一些评价手段基于定义聚类内部数据的相似度,并且认为聚类内部数据应该比聚类之间的数据更加相似。然而,这样的定义并不能真正反映聚类的质量。
|
||||
|
||||
其次,在聚类算法中,往往有一个参数非常难以决定,那就是聚类的个数。对于一个决定的数据集来说,我们不可能事先知道这个参数。当聚类的个数过少的时候,我们可能无法对数据集进行比较完备的K均值算法描述。而聚类的个数过多的时候,可能数据又被切割成过多的碎片。因此,要确定这个参数就成了聚类算法研究的一个核心难点。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了文档理解中的文档聚类问题。一起来回顾下要点:第一,简要介绍了文档聚类的类型。第二,详细介绍了文档聚类的应用场景。第三,讲解来一个基本的文档聚类K均值算法。第四,简要提及了文档聚类的一些难点。
|
||||
|
||||
最后,给你留一个思考题,当得到文档聚类的结果以后,能否把这些结果用在其他任务中呢?如果可以,如何利用?
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,77 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
045 文档理解的重要特例:多模文档建模
|
||||
本周我们重点分享搜索系统中的一个重要部件,那就是文档理解。周一我们首先分享了文档理解最基本的一个步骤,那就是给文档分类,主要是看不同文档表达什么类别的信息。然后,周三我们聊了聊另外一个重要的文档理解组件,也就是文档聚类的一些基本的概念和技术。今天我就来和你分享一个文档理解的重要特例:多模文档建模(Multimodal Modeling)。
|
||||
|
||||
多模数据
|
||||
|
||||
我们首先来了解一下,到底什么是多模数据。
|
||||
|
||||
多模数据,其实就是说数据有多种模式(Modal)的表达途径。而这些多种不同的模式都共同参与描述同一个数据点的不同方面。
|
||||
|
||||
比如,有一张照片反映的是美国总统特朗普在华盛顿白宫的致辞。那么照片本身是对这个场景的一个描述,这是一个模式。然后,和照片相应的文字描述,说明这是特朗普在白宫的致辞,又是另外一个模式。这两个模式是相辅相成的,都是对这个场景的描述。很明显,针对这样多种数据模式的建模是多媒体时代、社交媒体时代非常重要的课题。
|
||||
|
||||
在文档领域,非常普遍的情况是文字和图片混搭。一般来说,新闻网站一般都有大量的图文信息。而有一些特殊场景,文字和图片则出现很不对称的混合情况。比如,一些社交媒体(例如Instagram、Pinterest甚至Twitter)上很多短文档都仅仅包含图片或者图片和很少的文字。在这些情况中,文字和图片就成了非常重要的互相补充的信息源。
|
||||
|
||||
另外,在电子商务网站中,商品的图片正在成为越来越重要的信息途径。用户经常依靠图片来判断是否要购买某个商品。在电子商务网站上已经很难看到只有文字描述的商品信息了。因此,对于文档的搜索来说,对图文信息的理解是一个核心的技术问题。
|
||||
|
||||
那么,多模数据的建模难点是什么呢?
|
||||
|
||||
不同模式的数据其实是有不同的特征,如何能够有效利用各自的特性来最优地反映到某一个任务中(比如分类或者聚类等),是多模数据建模的难点。
|
||||
|
||||
多模数据建模基础
|
||||
|
||||
那么,如何对多种模式的数据进行建模呢?
|
||||
|
||||
多模数据建模的核心思路就是数据表征(Representation)。我们需要思考的是如何学习到文字的表征,以及图片的表征。然后,又如何把文字和图片的表征能够联系到一起。
|
||||
|
||||
一个最直接的思路,应该是文字采用我们熟悉的各种文字特性,然后利用图片相关的特性提取技术来对图片进行表征。得到文字和图片各自的表征之后,直接把两个不同的特征向量(Feature Vector)连接到一起,就得到了一个“联合表征”(Joint Representation)。
|
||||
|
||||
比如,假设我们学习到了一个1000维度的文字特征向量,然后一个500维的图片特征向量,那么,联合特征向量就是1500维度。
|
||||
|
||||
一个相对比较现代的思路是利用两个不同的神经网络分别代表文字和图片。神经网络学习到“隐含单元”(Hidden Unit)来表达图片信息以及文字信息之后,我们再把这些“隐含单元”联结起来,组成整个文档的“联合隐含单元”。
|
||||
|
||||
另外一个思路,那就是并不把多种模式的数据表征合并,而是保持它们的独立。在文字图片这个例子中,那就是保持文字和图片各自的表征或者特征向量,然后通过某种关系来维持这两种表征之间的联系。
|
||||
|
||||
有一种假设就是,虽然各种数据模式的表象是不一样的,例如图片和文字的最终呈现不一样,但是内在都是这个核心内容的某种表述。因此,这些数据模式的内在表达很可能是相近的。
|
||||
|
||||
这个假设套用到这里,那就是我们假设文字和图片的各自的表征相近,而这个“相近”是依靠某种相似函数来描述,比如这里就经常使用“余弦相似函数”(Cosine Similarity)。
|
||||
|
||||
有了上述两种思路之后,一种混合的思路就很自然地出现了。混合思路的基本想法是这样的。数据不同的模式肯定是某种内在表征的不同呈现,因此,需要一个统一的内在表征。但是,只采用一种表征来表达不同的数据源,又明显是不够灵活的。所以,在这种混合的思路里,我们依然需要两种不同的特征来表达文字和图片。
|
||||
|
||||
具体来说,混合思路是这样的。首先,我们从文字和图片的原始数据中学习到一个统一的联合表征。然后,我们认为文字和图片各自的表征都是从这个联合表征“发展”或者是“产生”的。很明显,在这样的架构中,我们必须要同时学习联合表征以及两个模式的、产生于联合表征的、单独的各自表征。
|
||||
|
||||
值得注意的是,不管是从原始数据到联合表征,还是从联合表征到各自表征,这些步骤都可以是简单的模型,不过通常是多层的神经网络模型。
|
||||
|
||||
值得一提的是,在需要多种不同的表征,不管是联合表征还是各自表征的情况中,文字和图片的原始输入甚至是最开始的表征,不一定非要“端到端”(End-to-End)地从目前的数据中学习到。实际上,利用提前从其他数据集中训练好的文字嵌入向量表达来作为文字的输入,是一个非常流行也是非常高效的做法。
|
||||
|
||||
有了数据表征之后,很自然地就是利用这些学习到的表征来进行下一步的任务。我们这里就拿文档分类为例。有了联合表征之后,下一步就是利用这个新的表征当做整个文档的特征,学习分类器来进行分类任务。而对于独立的数据表征来说,通常的方法是针对各自表征分别学习一个分类器。这样,我们就有了两个独立的分类器,一个用于文字信息,一个用于图片信息。
|
||||
|
||||
有了这两个分类器之后,我们再学习第三个分类器,根据前面两个分类器的分类结果,也就是说这个时候分类结果已经成为了新的特征,来进行第三个分类器的分类。很明显,这个过程需要训练多个不同的分类器,为整个流程增加了不少复杂度。
|
||||
|
||||
其他多模数据建模应用
|
||||
|
||||
除了我刚才所说的表征的学习以及如何构建分类器以外,多模数据还有一些其他的富有挑战性的任务。
|
||||
|
||||
在有文字和图片的情况下,我们经常还需要在这两种模式之间进行转换,或者叫做“翻译”。比如,在已知图片的情况下,如何能够产生一段准确的文字来描述这个图片;或者是在已经有文字的情况下,如何找到甚至产生一张准确的图片。当然,这样的“翻译”并不仅仅局限于文字图片之间,在其他的数据模式中,例如文字和语音之间、语音和图像之间等等,也是普遍存在的。
|
||||
|
||||
在这种“翻译”的基础上,更进一步的则是把文字和图片等信息“对接”(Align)起来。比如,针对一组图片,我们能够根据图片的变化产生图片的描述信息。
|
||||
|
||||
还有一种应用叫做“可视化问答”(Visual Question & Answering),是指利用图片和文字一起回答问题。很显然,要想能够回答好问题,我们需要同时对图片和文字信息进行建模。
|
||||
|
||||
不管是“翻译”还是“可视化问答”这些任务,都是近些年来大量利用深度学习所带来的序列模型(Sequential Modeling),特别是类似于RNN或者LSTM等模型的领域。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了文档理解中的多模数据建模问题。你可以看到这是一个非常火热的领域,如何理解多媒体数据是现代数据处理的一个重要问题 。
|
||||
|
||||
一起来回顾下要点:第一,简要介绍了什么是多模数据。第二,详细介绍了多模数据建模的一些基本思路,包括如何获取文档的表征、什么是联合表征和什么是独立表征。然后,我们还讲了如何构建不同的分类器。第三,简要地提及了其他的多模数据建模任务以及这些任务所依靠的基本的深度学习趋势。
|
||||
|
||||
最后,给你留一个思考题,多模建模带来了丰富的特性,由这些丰富特性所训练的分类器,就一定能比单一数据源所训练得到的分类器表现得更好吗?
|
||||
|
||||
|
||||
|
||||
|
75
专栏/AI技术内参/046大型搜索框架宏观视角:发展、特点及趋势.md
Normal file
75
专栏/AI技术内参/046大型搜索框架宏观视角:发展、特点及趋势.md
Normal file
@@ -0,0 +1,75 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
046 大型搜索框架宏观视角:发展、特点及趋势
|
||||
我们在前几周的专栏里讲解了一系列最经典的信息检索(Information Retrieval)技术以及基于机器学习的排序学习算法(Learning to Rank)。然后我们花了一定的时间讨论了两个关键搜索组件的核心技术要点,包括查询关键字理解(Query Understanding)和文档理解(Document Understanding)。除此之外,我们还详细讨论了如何从线上和线下两个层面来评价一个搜索系统。相信你已经对搜索系统的各个基本组成部分有了一个比较基础的把握。
|
||||
|
||||
那么,今天我们就第一次从整体上来看看大型搜索系统框架的演变和历史发展,给你一个宏观的认识。相信有了之前的基础知识铺垫,我们今天的分享会让你感觉到水到渠成。
|
||||
|
||||
基于文本匹配的信息检索系统
|
||||
|
||||
我们在介绍TF-IDF和BM25这些经典信息检索系统的时候,其实就已经介绍了不少基于文本匹配的基本的信息检索系统的核心概念。
|
||||
|
||||
实际上,从20世纪50年代有信息检索系统开始一直到2000年前后,这种纯粹基于文本匹配的搜索系统一直都是主流搜索系统的基础所在。甚至当前的很多开源搜索框架也都是基于这种最基本的信息检索系统的。
|
||||
|
||||
总结一下,这种信息检索系统有这么几个特点。
|
||||
|
||||
首先,文本匹配系统的基础是一个倒排索引(Inverted Index)。索引中的“字段”是某一个查询关键字。而每个字段所对应的则是包含这个查询关键字的文档列表。这个文档列表大多按照某种重要的顺序排列。
|
||||
|
||||
比如,某个文档整体和查询关键字的相关度大,那么就会排列到这个列表的前面。当然,也并不一定所有包含这个查询关键字的文档都会包含到这个列表中。另外,之所以叫做“索引”,也是因为这个列表中并不实际存储整个文档,往往只是存储文档的编号。
|
||||
|
||||
从这个基本的索引结构其实衍生出了很多值得研究而且在实际应用中也很有必要考虑的问题。
|
||||
|
||||
比如如何进一步优化构建这个索引。特别是当列表中的文档数目过多的时候,或者当查询关键字也很多的时候,采用某种编码的模式来压缩索引就变得很关键。
|
||||
|
||||
同时,索引过大也会带来很多性能上的问题。比如,当索引过大的时候,某一部分索引或者很大部分就无法存放在内存中,这个时候,整个搜索系统的性能就受到了很大的威胁。因为在对查询关键字进行处理的时候,就需要反复在内存和硬盘上切换内容。因此,对于索引进行创新,使得索引能够在内存中使用并且快速查询是一个非常重要的课题。
|
||||
|
||||
文本匹配系统的另外一个特点就是对传统的检索方法,例如TF-IDF或BM25以及它们变种的依赖。这些方法在查询关键字和索引之间架起一座桥梁,使得搜索引擎能够针对每一个查询关键字文档对赋予一个数值。然后我们可以利用这个数值进行排序。
|
||||
|
||||
然而,这些方法本质上的最大问题就是,他们都不是基于机器学习的方法。也就是说,这些方法本身都是基于一些研究人员的假设和经验,往往无法针对现有的数据进行适应。也正是因为如此,这种方法的研发工作往往让人感到缺乏理论基础。
|
||||
|
||||
最后,传统的文本匹配系统还存在一个问题,那就是很难比较自然地处理多模数据。也就是我们之前说过的,如果数据中有文字、图像、图(Graph)信息等综合数据信息,文本匹配的方法在这方面并没有提供什么理论指导。
|
||||
|
||||
那么,文本匹配系统有哪些优势呢?其实,即便是在今天,文本匹配系统的最大劣势也是其最大优势:不依靠机器学习。也就是说,如果你要构建一个新的搜索系统或者是某个App中有搜索功能,最开始的版本最容易依靠文本匹配系统,因为这时候并不需要依靠任何数据,并且文本匹配系统不需要太多调优就能上线。但是,文本匹配系统的这一优势今天往往被很多人忽视。
|
||||
|
||||
基于机器学习的信息检索系统
|
||||
|
||||
从2000年开始,基于机器学习的信息检索系统思潮逐渐变成了构建搜索系统的主流。在这种框架下的信息检索系统主要有以下这些特点。
|
||||
|
||||
第一,基于机器学习的系统开始有了一整套的理论支持。比如我们之前讲过的单点法(Pointwise)排序、配对法(Pairwise)排序和列表法(Listwise)排序等方法,都明确地使用通用的机器学习语言来描述搜索问题。
|
||||
|
||||
什么叫做通用的机器学习语言?那就是,有一个明确的目标函数,有明确特性(Feature),有明确的算法来求解在这些框架下的机器学习问题。同时,机器学习的一系列基本的方法论,比如训练数据、测试数据、评测方法等等都可以应用到信息检索的场景中来。这对于搜索系统的性能以及整体搜索系统的研发都有了非常重要的指导意义。
|
||||
|
||||
同时,这也开启了一个非常便利的提高搜索系统效果的大门。那就是任何机器学习领域内部的发展,很多都可以被借鉴到搜索系统中。比如,最近几年深度学习的大力发展,就可以在已经铺就的基于机器学习的搜索系统框架下很容易地进行尝试。
|
||||
|
||||
第二,基于机器学习的搜索系统能够很容易地利用多模数据。对于机器学习而言,多模数据,或者说是多种类型的数据的融合,可以很自然地通过特性以及不同类型的特性来表达。因此,对于多模数据,机器学习有天然的优势。通过学习这些特性之间的联系从而预测相关度,是机器学习的强项。
|
||||
|
||||
因此,理解搜索系统各个部分的数据并把这些信息用在排序算法中,这样的方式就如雨后春笋般大量地出现了。比如,我们之前提到过的查询关键字理解中的查询关键字分类和查询关键字解析,以及文档理解中的文档分类所产生的特性,很难想象这些内容在传统的文本匹配系统中得以应用。但在基于机器学习的搜索系统中,这些信息则往往成为提高相关度建模的重要工具。
|
||||
|
||||
同时,我们也在之前的分享中介绍了,针对多模数据,机器学习中专门有相关的研究,思考如何把不同类型的数据能够更好地融合在一起来建模。这类研究在传统的文本匹配搜索系统中根本不存在。
|
||||
|
||||
基于机器学习的搜索系统也不是完美无瑕。实际上,如果没有各种保证,机器学习并不一定能在实际中获得满意的效果,因为基于机器学习的搜索系统对整个系统而言有了较高的要求。
|
||||
|
||||
机器学习往往需要大量的数据,而在一个现实的软件产品中,如何能够构建可靠并且干净的数据就是一个不简单的任务。如果没有可靠的数据,对于一般的机器学习算法而言,就是“垃圾进入,垃圾出来”,实际效果往往比不使用机器学习还要糟糕。
|
||||
|
||||
同时,机器学习系统可能会有特性异常、模型异常、数据异常等等其他软件系统所不具备的各种问题。如果在生产系统中对这些情况没有一个估计和处理,机器学习搜索系统往往也会不尽人意。
|
||||
|
||||
更加智能的搜索系统
|
||||
|
||||
很明显,搜索系统不会仅仅停留在应用普通的机器学习算法。近几年,搜索系统的发展有两个方面。
|
||||
|
||||
一方面,当然就是依靠深度学习发展的春风,不少学者和研究人员都在思考,如何能够利用深度学习技术让搜索系统更上一层楼。在这方面的研发中,不仅仅是针对普通的深度学习算法,而是看如何应用深度学习所特有的一些模式,比如深度强化学习等方式来重新思考搜索问题。
|
||||
|
||||
另一方面,就是从用户的角度来说,研究更加有意义的评测方式。也就是说,如何能够真正抓住用户对这个系统的偏好,并且能够进一步地去优化这个系统的性能。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了现代搜索技术框架的发展,并简单提及了搜索系统目前发展的趋势 。 一起来回顾下要点:第一,我们讲了基于文本匹配的经典搜索系统的特点;第二,我们讲了基于机器学习的搜索系统的特点。
|
||||
|
||||
最后,给你留一个思考题,在机器学习和深度学习的思潮中,传统搜索系统的核心,也就是我们说过的索引,能否依靠机器学习来生成呢?
|
||||
|
||||
|
||||
|
||||
|
85
专栏/AI技术内参/047多轮打分系统概述.md
Normal file
85
专栏/AI技术内参/047多轮打分系统概述.md
Normal file
@@ -0,0 +1,85 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
047 多轮打分系统概述
|
||||
周一我为你介绍了搜索系统的一个宏观分类,包括传统的文本匹配信息检索系统和机器学习信息检索系统。这个分类可以让你非常清晰地了解信息搜索系统的历史进程,并对这两种搜索系统的特点有所了解。
|
||||
|
||||
今天我们就来剖析搜索系统的另一个框架体系:多轮打分(Scoring)系统。
|
||||
|
||||
多轮打分系统综述
|
||||
|
||||
什么是多轮打分系统?为什么搜索系统需要多轮打分?
|
||||
|
||||
我们拿上次介绍的机器学习搜索系统为例。从整体来说,机器学习搜索系统的目的是利用机器学习模型来预测文档和搜索关键字之间的相关性。那么,在理想状态下,针对每一个查询关键字,我们需要对数据集中的每一个文档进行打分。
|
||||
|
||||
如果是一个类似互联网搜索引擎的应用场景,那么理论上,每一个查询关键字都需要对几亿甚至十几亿的网页进行打分。显然,仅仅从这个数量级上来说,这样做都是不现实的。
|
||||
|
||||
从另一个方面来讲,目前比较通用的机器学习模型,特别是在排序问题上有强劲表现的树模型(Tree Model),比如GBDT(Gradient Boosted Decision Trees)或者神经网络,都有较高的计算时间复杂度。要想在实时响应的反应时间内(例如几百毫秒内)对相对比较多(我们这里说的是几千甚至上万)的文档进行打分是很困难的,我们刚才提到的整个数据集中是有几亿甚至十几亿的文档,那就更加困难了。
|
||||
|
||||
于是在这样的情况下,我们就需要有这么一种机制:对于每个查询关键字而言,能够先有一个方法在整个数据集上快速评价出几百到几千不等(视具体应用)的文档,然后在这个几百到几千不等的集合上运用复杂的模型进行计算并且排序。 这种需要对文档进行两轮打分的流程叫做“两轮打分框架”(见参考文献[3])。
|
||||
|
||||
第一轮打分又常常被称作“顶部K”(Top-K)提取。你可以看到,在这样的机制下,相对比较简单的模型和方法可以用于第一轮打分,因为这一轮是有可能在全部的数据集上进行操作的。这一轮也是被优化得最彻底的一轮,毕竟需要在海量的数据集中快速找到几百或者几千个合适文档。
|
||||
|
||||
然后在第二轮,当文档的数目已经降到了几千甚至几百的时候,我们就可以使用比较复杂的模型了。这其实也是整个多轮打分的一个目的,那就是可以在一个比较适量的数据集上应用复杂模型。
|
||||
|
||||
实际上我们不仅可以对文档进行两轮打分,甚至可以扩展到多轮打分,比如雅虎搜索引擎的“三轮打分机制”(见参考文献[1])。第三轮根据第二轮打分所产生的文档“上下文特征“(Contextual Feature),从而可以进一步精准地提高搜索结果的质量。类似的思想也可以借鉴参考文献[2]。
|
||||
|
||||
一般来说,多轮打分系统有两个明显的特点。一个特点是每一轮都比上一轮使用的文档数目要少。也就是说,多轮打分的目的是每经过一轮都筛选出更少的文档。另外一个特点是每一轮使用的特性数目都比上一轮更加复杂,模型也更加复杂。
|
||||
|
||||
第一轮“顶部K提取”
|
||||
|
||||
我刚才说了一下多轮打分系统的机理。现在我们来看一看第一轮打分,也就是俗称的“顶部K提取”都有什么技术特点。
|
||||
|
||||
“顶部K提取”的一个核心问题就是,如何快速地从非常巨大的数据集中返回有价值的几百到几千的文档。这就需要对获取文档的数据结构以及使用的模型有一定的要求。
|
||||
|
||||
首先,“倒排索引”(Inverted Index)是一个非常重要的机制。是否能够建立有效的索引是第一轮打分能否达到目的的关键。
|
||||
|
||||
传统的倒排索引已经可以在很大程度上有效地“削减”没必要的文档。我再简要地讲解一下这个基本的数据结构,我们一起来复习一下倒排索引的内容。索引中的“字段”是某一个查询关键字,而每个字段所对应的则是包含这个查询关键字的文档列表。
|
||||
|
||||
这个文档列表大多按照某种重要的顺序排列。比如,某个文档整体和查询关键字的相关度大,那么就会排列到这个列表的前面。当然,也并不是所有包含这个查询关键字的文档一定都会包含到这个列表中。另外,之所以叫做“索引”,也是因为这个列表中并不实际存储整个文档,而往往是只存储文档的编号。
|
||||
|
||||
除了最基本的通过索引来提取文档以外,我们还可以通过一些简单的模型来提取文档,比如线性模型。一个经典的方法叫做“WAND操作符”(WAND Operator,参见参考资料[4])。
|
||||
|
||||
当然,严格来讲,WAND操作符并不是把一个通用的、普遍的线性模型应用到文档索引上,而是说,如果我们能够把模型给简化为只有正系数的线性模型,那么,整个模型其实可以看做是两个向量的点积,而WAND则是对点积在索引上的一种优化。
|
||||
|
||||
当然,研发人员不仅想把线性模型直接使用到倒排索引上。实际上,这么多年来也有不少的尝试,希望能够把树模型直接应用到倒排搜索上。但是,因为我们之前提到的性能因素,通常情况下树模型都没法直接应用(这里提供一个参考文档[5]供你阅读)。应该说,树模型的优化还处在一个研究的阶段。
|
||||
|
||||
第二轮或以后轮数的重排
|
||||
|
||||
当我们结束了第一轮之后,就来到了第二个阶段,也是经常所说的“重排”(Re-rank)阶段。在这个阶段,文档已经从索引中到达了内存。一般来说,在比较普通的架构下,所有的几百到几千不等的文档在这个时候已经整合到了某一台机器的内存中。
|
||||
|
||||
我们在思考第一轮和第二轮的时候,需要先理解这两轮的一个重要区别,才能知道什么样的模型能够比较好地应用在这两个不同的场景中。
|
||||
|
||||
首先,第一轮必须能够应用在搜索倒排索引上。现代的索引模式,往往是部署在很多的节点(机器)上的。也就是说,每一个节点都拥有一部分,但不是完整的文档集合。这也就导致了我们之前介绍过的单点法(Pointwise)、配对法(Pairwise)和列表法(Listwise)这些机器学习方法很难在索引的这个级别直接使用,因为每一个节点为了计算效率问题,只能访问到一部分的文档并且进行打分。
|
||||
|
||||
因此,两轮的最大区别就是,第一轮一般都是针对单一文档的打分,而只有第二轮才能利用上配对法或者列表法针对文档打分。我们之前曾经提过,配对法或者列表法都比单点法的效果要好,因此如何平衡这两者在两轮中的表现差异就变得越来越重要了。
|
||||
|
||||
这里我简单提一下第二轮之后的其他轮数。当我们应用了第二轮之后,其实基本上就已经产生了最后的结果集合。为什么还需要其他轮数呢?
|
||||
|
||||
我们可能还需要其他轮数至少有两个原因。
|
||||
|
||||
第一,很多搜索系统中,相关排序只是搜索系统的一个方面。搜索系统还可能引入“多元化”或者其他的“商业规则”。这些规则或者进一步的重新排序很难完整地在前面的轮数中进行。
|
||||
|
||||
第二,当最后文档集合生成之后,有证据表明(参考文献[1]),我们还可以生成一些更加精细的特性来进一步提高排序的精度。因此,多轮打分是值得探索的。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了现代搜索技术中一个很重要的思路,多轮打分系统 。 一起来回顾下要点:第一,我们讲了为什么需要多轮打分,多轮打分的核心思路是什么。第二,我们分别讲了第一轮和第二轮以及后面轮数的一些特点。
|
||||
|
||||
最后,给你留一个思考题,在多轮打分系统的情况下,如何评测第一轮模型的好坏呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Dawei Yin, Yuening Hu, Jiliang Tang, Tim Daly, Mianwei Zhou, Hua Ouyang, Jianhui Chen, Changsung Kang, Hongbo Deng, Chikashi Nobata, Jean-Marc Langlois, and Yi Chang. Ranking Relevance in Yahoo Search. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD ‘16). ACM, New York, NY, USA, 323-332, 2016.
|
||||
Ruey-Cheng Chen, Luke Gallagher, Roi Blanco, and J. Shane Culpepper. Efficient Cost-Aware Cascade Ranking in Multi-Stage Retrieval. Proceedings of the 40th International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR ‘17). ACM, New York, NY, USA, 445-454, 2017.
|
||||
Van Dang, Michael Bendersky, and W. Bruce Croft. Two-Stage learning to rank for information retrieval. Proceedings of the 35th European conference on Advances in Information Retrieval (ECIR’13), Pavel Serdyukov, Pavel Braslavski, Sergei O. Kuznetsov, Jaap Kamps, and Stefan Rüger (Eds.). Springer-Verlag, Berlin, Heidelberg, 423-434, 2013.
|
||||
Andrei Z. Broder, David Carmel, Michael Herscovici, Aya Soffer, and Jason Zien. Efficient query evaluation using a two-level retrieval process. Proceedings of the twelfth international conference on Information and knowledge management (CIKM ‘03). ACM, New York, NY, USA, 426-434, 2003.
|
||||
N. Asadi, J. Lin and A. P. de Vries. Runtime Optimizations for Tree-Based Machine Learning Models. In IEEE Transactions on Knowledge and Data Engineering, vol. 26, no. 9, 2281-2292, 2014.
|
||||
|
||||
|
||||
|
||||
|
||||
|
67
专栏/AI技术内参/048搜索索引及其相关技术概述.md
Normal file
67
专栏/AI技术内参/048搜索索引及其相关技术概述.md
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
048 搜索索引及其相关技术概述
|
||||
本周我们分享的主题是从宏观上来剖析现代搜索架构。周一我介绍了搜索系统的一个大的分类,一类是从20世纪50年代开始研发并使用的传统文本匹配信息检索系统,一类是从2000年开始发展并逐渐成熟的机器学习信息检索系统。周三我们剖析了搜索系统的另一个框架体系,多轮打分系统,阐述了为什么需要多轮打分,以及每一轮打分又有什么特性。
|
||||
|
||||
今天,我们来看一个在本周已经反复涉及到的话题:倒排索引(Inverted Index)。一起来聊聊它的核心技术。值得注意的是,关于索引的很多话题其实都会牵涉到搜索中的“查询关键字处理”(Query Processing),我们今天的分享就主要来谈谈索引及相关技术在“查询关键字处理”这个场景下的应用。
|
||||
|
||||
经典的索引结构
|
||||
|
||||
经典的索引结构由“字段”(Field)和对应的列表组成。一般来说,“字段”就是某一个查询关键字。在英文里,这就是一个单独的单词;在中文里,这也许就是一个词或者短语。每个字段所对应的列表就是包含这个查询关键字的文档列表。
|
||||
|
||||
有两点值得注意。
|
||||
|
||||
第一,在文档列表里的文档,大多按照某种重要的顺序排列,这方便我们首先提取重要性高的文档。比如,某个文档整体和查询关键字的相关度大,那么就会排列到这个列表的前面。
|
||||
|
||||
第二,对于每个字段,也就是查询关键字而言,所有包含这个查询关键字的文档并不一定都会包含到这个列表中,这个列表可以是一个节选。
|
||||
|
||||
另外,我们前面已经讲过了,之所以叫做“索引”,也是因为这个列表中并不实际存储整个文档,往往是只存储文档的编号。
|
||||
|
||||
如果用户输入的查询关键字包含多个词组,根据这个最基础的结构,我们可以很容易地获取包含所有关键字的文档集合。这个操作仅仅相当于在多个列表中做“归并排序”(Merge Sort)。
|
||||
|
||||
除了在索引中仅仅保存最基本的文档标号信息以外,另外一些文档的基础信息也可以一并存放在索引中。比如,经常存放的信息还有文档包含某个查询关键字的次数。保存次数信息本质上是在保存“词频”(Term Frequency)这个文档特性。
|
||||
|
||||
我们前面分享经典的信息检索模型的时候,介绍过很多模型,例如TF-IDF、BM25或者语言模型,都对词频的计算有很强的依赖。在索引中存放词频信息有助于近似计算这些基础的检索模型。
|
||||
|
||||
另外一个经常存放的信息就是查询关键字在文档中出现的位置(Position)。位置信息对于有多个查询关键字的时候尤为重要。比如,我们要搜索的词组是“五道口电影院”。在这样的情况下,我们非常希望“五道口”在某个文档中出现的位置和“电影院”在文档中出现的位置相邻。这样,我们可以确认这个文档的确是关于“五道口电影院”的,而不是恰好含有“五道口”和“电影院”这两个词。
|
||||
|
||||
同时,位置信息还可以帮助搜索引擎生成搜索结果界面上的“结果摘要”信息。我们经常看到搜索结果页面上有几句话的摘要信息,这个信息就需要查询关键字的位置来生成。
|
||||
|
||||
索引技术
|
||||
|
||||
除了最基础的索引技术以外,研发人员开发了多种技术让索引更加高效。
|
||||
|
||||
第一个技术当然就是希望对索引进行压缩。索引信息很快就会随着可能的关键字数目的膨胀而扩展。索引中每一个关键字所对应的文档列表也会越来越庞大。因此,能否快速处理索引信息并为后续的计算节约时间就变得非常关键。本周三我们分享了多轮打分系统。多轮打分系统的的一个重要思想就是整个流程必须在几百毫秒的响应时间内完成。因此,每一个步骤,包括从索引中提取“顶部K个文档”的过程都需要很快捷。
|
||||
|
||||
压缩技术博大精深,我们在今天的分享中就不展开讨论这部分的内容了。在这里,我们只需要从高维度上把握这个问题的一个基本思路。索引的一个基本信息就是相对于某个查询关键字的文档列表。而存储在文档列表里的并不是文档本身的数据,而是文档的某种信息,比如文档本身的编号。而编号就是数字,文档列表最终就是一个数字序列。压缩技术中有很多算法就是对一个数字序列进行压缩。
|
||||
|
||||
那么,到底怎样才能起到压缩的作用呢?我们这里举一个例子。比方说,有一种压缩算法是基于一种叫“差值编码”(Delta Encoding)的技术。简单来说,就是不直接记录文档编号本身,而是按照文档编号的顺序,记录文档编号之间的差值。
|
||||
|
||||
对于某些非常频繁的查询关键字而言,这些词汇有可能会出现在非常多、甚至是绝大多数的文档中。而采用这种“差值编码”来对文档列表进行重新编排,我们就可以用一组很小的数(这些数表达两个相邻文档编号的差值)来代表文档列表。当然,这种方法对于文档很少的查询关键字效果肯定不明显。同时,这种技术也要求文档列表不按照相关度排序,而要按照文档的编号排序。
|
||||
|
||||
在索引的发展过程中也开发出了一些很细小的技术,比如“略过”(Skipping)。简单来说,这个技术就是,当我们有多个查询关键字的时候,而且这些关键字之间的频率有非常大的差距,我们可以略过一些文档。
|
||||
|
||||
例如在“北京,地铁出行”这个组合中,“北京”有可能在整个数据集中出现的频率是“地铁出行”的几倍甚至十几倍、上百倍,因此我们其实并不需要搜索所有包含“北京”的文档,因为最终需要的仅仅是同时包含两个关键字的这样一个交集。因此,在处理“北京”的文档序列的时候,我们可以“略过”K个文档,然后看有没有到达下一个包含“地铁出行”的文档。这里的K当然是一个参数,需要尝试。有了这样的思路,处理多个查询关键字时就可以很显著地提升效果。
|
||||
|
||||
查询关键字处理
|
||||
|
||||
最后我们来谈一谈查询关键字处理。说得通俗易懂一点,就是如何从索引中提取出相关的文档并计算分数。这里有两种基本思路。
|
||||
|
||||
第一种思路叫作“文档优先”(Document-at-a-Time)计算策略。简单来说,就是我们首先从索引中找到所有查询关键字所对应的文档集合。比如我们处理“北京,地铁出行”这一查询关键字组合,我们先取出所有包含这些关键字的文档;然后保持一个“优先队列”(Priority Queue)来保存分数最高的K个文档;再针对取出来的文档分别计算分数,这里的分数有可能就是词频的某种简化检索模型;计算完分数之后,我们把分数压入优先队列中。
|
||||
|
||||
第二种思路和“文档优先”思路相对应,叫作“词优先”(Term-at-a-Time)计算策略。在这种思路下,我们对所有查询关键字词组中的每一个字一一进行处理。请注意,这里的第一个步骤其实是一样的,我们依然要先取出所有的文档集合。但是这一步之后,我们先处理包含“北京”的文档,得到所有文档分数的一个部分值,然后再处理“地铁出行”,在刚才计算的部分值上进行更新,取得最后的分数。
|
||||
|
||||
在实际应用中,这两种策略是更加复杂的优化查询关键字处理的基础,在这两种思路的基础上演化出了很多高级算法,不仅能快速地处理文字特性,还包括我们讲过的类似WAND操作符这样能够模拟线性模型的算法。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了现代搜索技术的一个核心组成部分,那就是倒排索引系统。 一起来回顾下要点:第一,我们讲了索引系统的基本组成和原理。第二,我们讲了索引相关技术的一个概况,重点介绍了压缩以及“略过”的含义。第三,简要讲解了查询关键字处理的两种最基础的策略。
|
||||
|
||||
最后,给你留一个思考题,如果我们既有图像信息又有文字信息,那该如何构建我们的索引呢?
|
||||
|
||||
|
||||
|
||||
|
79
专栏/AI技术内参/049PageRank算法的核心思想是什么?.md
Normal file
79
专栏/AI技术内参/049PageRank算法的核心思想是什么?.md
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
049 PageRank算法的核心思想是什么?
|
||||
上周我们介绍了信息搜索系统的历史进程,剖析了搜索系统的多轮打分系统,还深入探讨了倒排索引,聊了聊它的核心技术。
|
||||
|
||||
这周我要和你分享的是在互联网搜索引擎兴起之后的一个研发需要,那就是如何理解网页和网页之间的关系,特别是怎么从这些关系中提取网页中除文字以外的其他特性。这部分的一些核心算法曾是提高搜索引擎质量的重要推进力量。另外,我们这周要分享的算法也适用于其他能够把信息用结点与结点关系来表达的信息网络。
|
||||
|
||||
今天,我们先看一看用图来表达网页与网页之间的关系,并且计算网页重要性的经典算法:PageRank。
|
||||
|
||||
PageRank的简要历史
|
||||
|
||||
时至今日,谢尔盖·布林(Sergey Brin)和拉里·佩奇(Larry Page)作为Google这一雄厚科技帝国的创始人,已经耳熟能详。但在1995年,他们两人还都是在斯坦福大学计算机系苦读的博士生。那个年代,互联网方兴未艾。雅虎作为信息时代的第一代巨人诞生了,布林和佩奇都希望能够创立属于自己的搜索引擎。1998年夏天,两个人都暂时离开斯坦福大学的博士生项目,转而全职投入到Google的研发工作中。他们把整个项目的一个总结发表在了1998年的万维网国际会议上( WWW7,the seventh international conference on World Wide Web)(见参考文献[1])。这是PageRank算法的第一次完整表述。
|
||||
|
||||
PageRank一经提出就在学术界引起了很大反响,各类变形以及对PageRank的各种解释和分析层出不穷。在这之后很长的一段时间里,PageRank几乎成了网页链接分析的代名词。给你推荐一篇参考文献[2],作为进一步深入了解的阅读资料。
|
||||
|
||||
PageRank的基本原理
|
||||
|
||||
我在这里先介绍一下PageRank的最基本形式,这也是布林和佩奇最早发表PageRank时的思路。
|
||||
|
||||
首先,我们来看一下每一个网页的周边结构。每一个网页都有一个“输出链接”(Outlink)的集合。这里,输出链接指的是从当前网页出发所指向的其他页面。比如,从页面A有一个链接到页面B。那么B就是A的输出链接。根据这个定义,可以同样定义“输入链接”(Inlink),指的就是指向当前页面的其他页面。比如,页面C指向页面A,那么C就是A的输入链接。
|
||||
|
||||
有了输入链接和输出链接的概念后,下面我们来定义一个页面的PageRank。我们假定每一个页面都有一个值,叫作PageRank,来衡量这个页面的重要程度。这个值是这么定义的,当前页面I的PageRank值,是I的所有输入链接PageRank值的加权和。
|
||||
|
||||
那么,权重是多少呢?对于I的某一个输入链接J,假设其有N个输出链接,那么这个权重就是N分之一。也就是说,J把自己的PageRank的N分之一分给I。从这个意义上来看,I的PageRank,就是其所有输入链接把他们自身的PageRank按照他们各自输出链接的比例分配给I。谁的输出链接多,谁分配的就少一些;反之,谁的输出链接少,谁分配的就多一些。这是一个非常形象直观的定义。
|
||||
|
||||
然而,有了这个定义还是远远不够的,因为在这个定义下,页面I和页面J,以及其他任何页面的PageRank值是事先不知道的。也就是等式两边都有未知数,这看上去是个无解的问题。
|
||||
|
||||
布林和佩奇在他们的论文中采用了一种迭代算法。这个算法很直观,那就是既然不知道这些PageRank的值,那我们就给他们一组初始值,这个初始值可以是这样的情形,所有页面有相同的PageRank值。然后,根据我们上面所说的这个定义,更新所有页面的PageRank值。就这么一遍一遍地更新下去,直到所有页面的PageRank不再发生很大变化,或者说最后收敛到一个固定值为止。他们在文章中展示了实际计算的情况,往往是在比较少的迭代次数后,PageRank值就能够收敛。
|
||||
|
||||
以上就是整个PageRank算法的基本思想和一种迭代算法。
|
||||
|
||||
PageRank算法的改进
|
||||
|
||||
完全按照我们上面介绍的这个最原始的PageRank算法,布林和佩奇很快就遇到了麻烦。
|
||||
|
||||
第一个麻烦就是有一些页面并没有输出链接,比如某些PDF文件,或者一些图片文件。由于没有输出链接,这些页面只能聚集从上游输入链接散发过来的PageRank值,而不能把自己的PageRank值分发出去。这样的结果就是,这些页面成为一些“悬空”(Dangling)结点。悬空结点存在的最大问题就是会使得PageRank的计算变得不收敛。这些结点成了PageRank值的“黑洞”,导致悬空结点的PageRank值越来越大,直至“吸干”其他所有输入链接的值。
|
||||
|
||||
要解决这个问题,就要为悬空结点“引流”,能够把这些点的值分发出去、引出去。谢尔盖和拉里找到的一个方法是,对于每一个悬空结点,都认为这个结点能够随机到达整个网络上的其他任意一个结点。也就相当于人工地从这个结点连接到所有页面的一个结点,让当前悬空结点的PageRank能够“均匀”地分散出去到其他所有的结点,这就解决了悬空结点的问题。
|
||||
|
||||
然而原始的PageRank还存在其他问题。要想保证PageRank的收敛性,并且能够收敛到唯一解,我们还需要第二个改进。第二个改进就是,即便一个页面有自然的输出链接,我们也需要一个机制,能够从这个页面跳转到其他任何一个页面。这也就是模拟假设一个用户已经浏览到了某个页面,一方面用户可以顺着这个页面提供的输出链接继续浏览下去,另一方面,这个用户可以随机跳转到其他任何一个页面。
|
||||
|
||||
有了这个机制以后,对于所有的结点来说,PageRank的分配也就自然地产生了变化。在之前的定义中,每个页面仅仅把自己的PageRank值输送给自己原生的所有输出链接中。而现在,这是一部分的“分享”,另外一部分还包括把自己的PageRank值分享到所有的页面。当然,后者的总量应该比前者要少。于是,这里可以引入一个参数,来控制有多大的比例我们是顺着输出链接走,而多大的比例跳转其他页面。通常情况下,这个参数的取值范围大约是60%~85%。
|
||||
|
||||
有了这两个改进之后,整个网络上的每个页面实际上已经可以到达其他任何页面。也就是说,整个页面网络成了一个完全联通的图,PageRank算法就有了唯一的收敛的解。
|
||||
|
||||
PageRank分析
|
||||
|
||||
PageRank被提出后不久,就有学者开始针对PageRank模型和算法的性质进行分析。大家很快发现,还有一些其他的方法可以对PageRank进行解释。
|
||||
|
||||
第一种比较流行的,也是更加正规的解释PageRank的方法,是把我们刚才说的这个分配等式写成矩阵的形式。那么,整个算法就变成了一个标准的求解一个随机矩阵的“左特征向量”的过程。这个随机矩阵就是我们刚才讲的经过了两次修改后的跳转规律的矩阵形式。而刚才所说的迭代方法正好就是求解特征向量的“乘幂法”(Power Method)。在一定条件下的随机矩阵,经过乘幂法就一定能够得到一个唯一解。
|
||||
|
||||
另外一种解释,是把刚才我们说的这个矩阵形式进行一次代数变形,也就是把等式两边的各项都移动到等式的一边,而另一边自然就是0。那么,整个式子就变了一个“线性系统”的求解过程。也就是说从代数的角度来解释整个PageRank的求解过程。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了现代搜索技术中的一个重要分支,链接分析中最重要的算法PageRank的核心思想 。 一起来回顾下要点:第一,我们讲了PageRank的一些简明历史和算法最原始的定义和思路 。第二,我们讲了PageRank的两种改进。第三,我们简要地介绍了针对PageRank的两种解释方法。
|
||||
|
||||
最后,给你留一个思考题,除了乘幂法,你觉得还有什么方法可以用来求解PageRank值?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Sergey Brin and Lawrence Page. The anatomy of a large-scale hypertextual Web search engine. Proceedings of the seventh international conference on World Wide Web 7 (WWW7), Philip H. Enslow, Jr. and Allen Ellis (Eds.). Elsevier Science Publishers B. V., Amsterdam, The Netherlands, The Netherlands, 107-117, 1998.
|
||||
Langville, Amy N.; Meyer, Carl D. Deeper Inside PageRank. Internet Math. no. 3, 335-380, 2003.
|
||||
|
||||
|
||||
论文链接
|
||||
|
||||
|
||||
The anatomy of a large-scale hypertextual Web search engine
|
||||
Deeper Inside PageRank
|
||||
|
||||
|
||||
|
||||
|
||||
|
75
专栏/AI技术内参/050经典图算法之HITS.md
Normal file
75
专栏/AI技术内参/050经典图算法之HITS.md
Normal file
@@ -0,0 +1,75 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
050 经典图算法之HITS
|
||||
这周我们分享的内容是如何理解网页和网页之间的关系。周一我们介绍了用图(Graph)来表达网页与网页之间的关系并计算网页的重要性,就是经典算法PageRank。今天我来介绍一下PageRank的姊妹算法:HITS算法。
|
||||
|
||||
HITS的简要历史
|
||||
|
||||
HITS是Hypertext-Induced Topic Search算法的简称。这个算法是由康奈尔大学计算机科学教授乔·克莱恩堡(Jon Kleinberg)于1998年发明的,正好和我们周一讲的布林和佩奇发表PageRank算法是同一年。
|
||||
|
||||
这里有必要简单介绍一下乔这个人。乔于1971年出生在马萨诸塞州波士顿。1993年他毕业于康奈尔大学获得计算机科学学士学位,并于1996年从麻省理工大学获得计算机博士学位。1998的时候,乔正在位于美国西海岸硅谷地区的IBM阿尔玛登(Almaden)研究院做博士后研究。HITS的工作最早发表于1998年在旧金山举办的第九届ACM-SIAM离散算法年会上(详细论述可参阅参考文献)。
|
||||
|
||||
乔目前是美国国家工程院(National Academy of Engineering)和美国自然与人文科学院(American Academy of Arts and Sciences)院士。顺便提一下,乔的弟弟罗伯特·克莱恩堡也在康奈尔大学计算机系任教职。
|
||||
|
||||
HITS的基本原理
|
||||
|
||||
在介绍HITS算法的基本原理之前,我们首先来复习一下网页的网络结构。每一个网页都有一个“输出链接”(Outlink)的集合。输出链接指的是从当前网页出发所指向的其他页面,比如从页面A有一个链接到页面B,那么B就是A的输出链接。根据这个定义,我们来看“输入链接”(Inlink),指的就是指向当前页面的其他页面,比如页面C指向页面A,那么C就是A的输入链接。
|
||||
|
||||
要理解HITS算法,我们还需要引入一组概念:“权威”(Authority)结点和“枢纽”(Hub)结点。这两类结点到底是什么意思呢?
|
||||
|
||||
HITS给出了一种“循环”的定义:好的“权威”结点是很多“枢纽”结点的输出链接,好的“枢纽”结点则指向很多好的“权威”结点。这种循环定义我们在PageRank的定义中已经见识过了。
|
||||
|
||||
很明显,要用数学的方法来表述权威结点和枢纽结点之间的关系就必须要为每一个页面准备两个值。因为从直觉上来说,不可能有一个页面完全是权威,也不可能有一个页面完全是枢纽。绝大多数页面都在这两种角色中转换,或者说同时扮演这两类角色。
|
||||
|
||||
数学上,对于每一个页面I,我们用X来表达这个页面的“权威值”,用Y来表达这个页面的“枢纽值”。那么,一个最直观的定义,对于I的权威值X来说,它是所有I页面的输入链接的枢纽值的总和。同理,I的枢纽值是所有I页面输出链接的权威值的总和。这就是HITS算法的原始定义。
|
||||
|
||||
我们可以看到,如果I页面的输入链接的枢纽值大,说明I页面经常被一些好的“枢纽”结点链接到,那么I自身的权威性自然也就增加了。反之,如果I能够经常指向好的“权威”结点,那I自身的“枢纽”性质也就显得重要了。
|
||||
|
||||
当然,和PageRank值一样,X和Y在HITS算法里也都是事先不可知的。因此,HITS算法的重点就是要求解X和Y。如果把所有页面的X和Y都表达成向量的形式,那么HITS算法可以写成X是矩阵L的转置和Y的乘积,而Y是矩阵L和X的乘积,这里的矩阵L就是一个邻接矩阵,每一行列表达某两个页面是否相连。进行一下代数变形,我们就可以得到X其实是一个矩阵A乘以X,这里的A是L的转置乘以L。Y其实是一个矩阵B乘以Y,这里的B是L乘以L的转置。
|
||||
|
||||
于是,惊人的一点出现了,那就是HITS算法其实是需要求解矩阵A或者矩阵B的主特征向量,也就是特征值最大所对应的特征向量,用于求解X或者Y。这一点和PageRank用矩阵表达的形式不谋而和。也就是说,尽管PageRank和HITS在思路和概念上完全不同,并且在最初的定义式上南辕北辙,但是经过一番变形之后,我们能够把两者都划归为某种形式的矩阵求解特征向量的问题。
|
||||
|
||||
实际上,把图表达为矩阵,并且通过特征向量对图的一些特性进行分析是图算法中的一个重要分支(当然,我们这里说的主要是最大的值对应的特征向量,还有其他的特征向量也有含义)。既然我们已经知道了需要计算最大的特征向量,那么之前计算PageRank所使用的“乘幂法”(Power Method)在这里也是可以使用的,我们在这里就不展开了。
|
||||
|
||||
如何把HITS算法用于搜索中呢?最开始提出HITS的时候是这么使用的。
|
||||
|
||||
首先,我们根据某个查询关键字构建一个“相邻图”(Neighborhood Graph)。这个图包括所有和这个查询关键字相关的页面。这里,我们可以简化为所有包含查询关键字的页面。这一步在现代搜索引擎中通过“倒排索引”(Inverted Index)就可以很容易地得到。
|
||||
|
||||
有了这个相邻图以后,我们根据这个图建立邻接矩阵,然后就可以通过邻接矩阵计算这些结点的权威值和枢纽值。当计算出这两组值之后,我们就可以根据这两组值给用户展现两种网页排序的结果,分别是根据不同的假设。
|
||||
|
||||
值得注意的是,PageRank是“查询关键字无关”(Query-Independent)的算法,也就是说每个页面的PageRank值并不随着查询关键字的不同而产生不同。而HITS算法是“查询关键字相关”(Query-Dependent)的算法。从这一点来说,HITS就和PageRank有本质的不同。
|
||||
|
||||
HITS算法的一些特点
|
||||
|
||||
HITS算法依靠这种迭代的方法来计算权威值和枢纽值,你一定很好奇,这样的计算究竟收敛吗?是不是也需要像PageRank一样来进行特别的处理呢?
|
||||
|
||||
答案是HITS一定是收敛的。这点比原始的PageRank情况要好。然而,HITS在原始的情况下,不一定收敛到唯一一组权威值和枢纽值,也就是说,解是不唯一的。因此,我们其实需要对HITS进行一部分类似于PageRank的处理,那就是让HITS的邻接矩阵里面所有的结点都能够达到其他任何结点,只是以比较小的概率。经过这样修改,HITS就能够收敛到唯一的权威值和枢纽值了。
|
||||
|
||||
HITS算法的好处是为用户提供了一种全新的视角,对于同一个查询关键字,HITS提供的权威排序和枢纽排序能够帮助用户理解自己的需求。
|
||||
|
||||
当然,HITS的弱点也来自于这个依赖于查询关键字的问题。如果把所有的计算都留在用户输入查询关键字以后,并且需要在响应时间内计算出所有的权威值和枢纽值然后进行排序,这里面的计算量是很大的。所以,后来有研究者开始使用全局的网页图,提前来计算所有页面的权威值和枢纽值,然而这样做就失去了对某一个关键字的相关信息。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了HITS算法的核心思想 。 一起来回顾下要点:第一,我们讲了HITS的一些简明历史。第二,我们讲了HITS最原始的定义和算法,并且联系PageRank,讲了两者的异同之处。第三,我们分析了HITS的一些特点。
|
||||
|
||||
最后,给你留一个思考题,有没有办法把权威值和枢纽值所对应的两个排序合并成为一个排序呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Jon M. Kleinberg. Authoritative sources in a hyperlinked environment. J. ACM 46, 5 (September 1999), 604-632,1999.
|
||||
|
||||
|
||||
论文链接
|
||||
|
||||
|
||||
Authoritative sources in a hyperlinked environment
|
||||
|
||||
|
||||
|
||||
|
||||
|
0
专栏/AI技术内参/051社区检测算法之模块最大化
Normal file
0
专栏/AI技术内参/051社区检测算法之模块最大化
Normal file
82
专栏/AI技术内参/052机器学习排序算法经典模型:RankSVM.md
Normal file
82
专栏/AI技术内参/052机器学习排序算法经典模型:RankSVM.md
Normal file
@@ -0,0 +1,82 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
052 机器学习排序算法经典模型:RankSVM
|
||||
到目前为止,我们在专栏里已经讨论了关于搜索引擎方方面面的很多话题,包括经典的信息检索技术、查询关键字理解、文档理解以及现代搜索引擎的架构等等 。同时,我们也从机器学习角度出发对搜索引擎的最核心部分,也就是排序算法进行了最基本的分享,囊括了单点法排序学习(Pointwise Learning to Rank)、配对法排序学习(Pairwise Learning to Rank)以及列表法排序学习(Listwise Learning to Rank),相信你应该对这类算法的大概内容有所掌握。
|
||||
|
||||
那么,这周我们就来看看机器学习排序算法中几个经典的模型,希望能够通过这几个经典的算法为你深入学习和研究排序算法指明方向。
|
||||
|
||||
今天,我就来分享配对法排序中最有价值一个算法,排序支持向量机(RankSVM)。这个算法的核心思想是应用支持向量机到序列数据中,试图对数据间的顺序直接进行建模。
|
||||
|
||||
排序支持向量机的历史
|
||||
|
||||
20世纪90年代中后期,受统计学习理论(Statistical Learning Theory )思想和风险最小化框架(Risk Minimization Framework)趋于成熟的影响,支持向量机逐渐成为当时机器学习界的主流模型。一时间,各个应用领域的学者和工程师都在思考如何把支持向量机利用到自己的问题领域上,从而获得更好的效果。
|
||||
|
||||
拉夫⋅赫博里奇(Ralf Herbrich)发表于1999年[1]和2000年[2]的论文中讨论了如何把支持向量机和有序回归(Ordinal Regression)结合起来。赫博里奇当时在柏林科技大学(Technical University of Berlin)攻读博士学位。2000年到2011年,他在微软研究院和Bing任职,从事机器学习,特别是贝叶斯方法(Bayesian method)的研究。2011年到2012年,他在Facebook短暂任职后,于2012年加入了亚马逊负责机器学习的研发工作,并且担任在柏林的研发中心主管经理(Managing Director)。尽管赫博里奇很早提出了把有序回归和支持向量机结合的思路,但是当时的论文并没有真正地把这个新模型用于大规模搜索系统的验证。
|
||||
|
||||
更加完整地对排序支持向量机在搜索中的应用进行论述来自于康奈尔大学教授索斯腾⋅乔基姆斯(Thorsten Joachims)以及他和合作者们发表的一系列论文(见参考文献[3]、[4]、[5]和[6])。索斯滕我们前面介绍过,他是机器学习界享有盛誉的学者,是ACM和AAAI的双料院士;他所有论文的引用数超过4万次;他获得过一系列奖项,包括我们前面讲的2017年ACM KDD的时间检验奖等等。
|
||||
|
||||
排序支持向量机模型
|
||||
|
||||
在说明排序支持向量机之前,我们先来简要地回顾一下支持向量机的基本思想。
|
||||
|
||||
在二分分类问题中(Binary Classification),线性支持向量机的核心思想是找到一个“超平面”(Hyperplane)把正例和负例完美分割开。在诸多可能的超平面中,支持向量机尝试找到距离两部分数据点边界距离最远的那一个。这也就是为什么有时候支持向量机又被称作是“边界最大化”(Large Margin)分类器。
|
||||
|
||||
如果问题并不是线性可分的情况,支持向量机还可以借助“核技巧”(Kernel Trick)来把输入特性通过非线性变换转化到一个线性可分的情况。关于支持向量机的具体内容你可以参考各类机器学习教科书的论述。
|
||||
|
||||
要把支持向量机运用到排序场景下,必须改变一下原来的问题设置。我们假设每个数据点由特性X和标签Y组成。这里的X代表当前文档的信息、文档与查询关键字的相关度、查询关键字的信息等方方面面关于文档以及查询关键字的属性。Y是一个代表相关度的整数,通常情况下大于1。
|
||||
|
||||
那么,在这样的设置下,我们针对不同的X,需要学习到一个模型能够准确地预测出Y的顺序。意思是说,如果有两个数据点\(X_1\)和\(X_2\),他们对应的\(Y_1\)是3,\(Y_2\)是5。因为\(Y_2\)大于\(Y_1\)(在这里,“大于”表明一个顺序),因此,一个合理的排序模型需要把\(X_1\)通过某种转换,使得到的结果小于同样的转换作用于\(X_2\)上。这里的转换,就是排序支持向量机需要学习到的模型。
|
||||
|
||||
具体说来,在线性假设下,排序支持向量机就是要学习到一组线性系数W,使得在上面这个例子中,\(X_2\)点积W之后的结果要大于\(X_1\)点积W的结果。当然,对于整个数据集而言,我们不仅仅需要对\(X_1\)和\(X_2\)这两个数据点进行合理预测,还需要对所有的点,以及他们之间所有的顺序关系进行建模。也就是说,模型的参数W需要使得数据集上所有数据点的顺序关系的预测都准确。
|
||||
|
||||
很明显,上述模型是非常严格的。而实际中,很可能并不存在这样的W可以完全使得所有的X都满足这样的条件。这也就是我们之前说的线性不可分在排序中的情况。那么,更加现实的一个定义是,在允许有一定误差的情况下,如何使得W可以准确预测所有数据之间的顺序关系,并且W所确定的超平面到达两边数据的边界最大化,这就是线性排序向量机的定义。
|
||||
|
||||
实际上,在线性分类器的情境下,线性排序向量机是针对数据配对(Pair)的差值进行建模的。回到刚才我们所说的例子,线性排序向量机是把\(X_2\)减去\(X_1\)的差值当做新的特性向量,然后学习W。也就是说,原理上说,整个支持向量机的所有理论和方法都可以不加改变地应用到这个新的特征向量空间中。当然,这个情况仅仅针对线性分类器。
|
||||
|
||||
因为是针对两个数据点之间的关系进行建模,排序支持向量机也就成为配对法排序学习的一个经典模型。
|
||||
|
||||
排序支持向量机的难点
|
||||
|
||||
我们刚刚提到的排序支持向量机的定义方法虽然很直观,但是有一个非常大的问题,那就是复杂度是N的平方级,这里的N是数据点的数目。原因是我们需要对数据点与点之间的所有配对进行建模。 当我们要对上万,甚至上百万的文档建模的时候,直接利用排序支持向量机的定义来求解模型参数显然是不可行的。
|
||||
|
||||
于是,针对排序支持向量机的研究和应用就集中在了如何能够降低计算复杂度这一难点上,使得算法可以在大规模数据上得以使用。
|
||||
|
||||
比较实用的算法是索斯腾在2006年发表的论文[6]中提出的,这篇论文就是我们前面讲的2017年KDD时间检验奖,建议你回去复习一下。这里,我再简要地梳理一下要点。
|
||||
|
||||
这个算法的核心是重新思考了对排序支持向量机整个问题的设置,把解决结构化向量机(Structural SVM)的一种算法,CP算法(Cutting-Plane),使用到了排序支持向量机上。简单来说,这个算法就是保持一个工作集合(Working Set)来存放当前循环时依然被违反的约束条件(Constraints),然后在下一轮中集中优化这部分工作集合的约束条件。整个流程开始于一个空的工作集合,每一轮优化的是一个基于当前工作集合的支持向量机子问题。算法直到所有约束条件的误差小于一个全局的参数误差为止。
|
||||
|
||||
索斯腾在文章中详细证明了该算法的有效性和时间复杂度。相同的方法也使得排序支持向量机的算法能够转换成为更加计算有效的优化过程,在线性计算复杂度的情况下完成。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了利用机器学习技术来学习排序算法的一个基础的算法,排序支持向量机的基本原理。作为配对法排序学习的一个经典算法,排序支持向量机有着广泛的应用 。 一起来回顾下要点:第一,我们简要介绍了排序支持向量机提出的历史背景。第二,我们详细介绍了排序支持向量机的问题设置。第三,我们简要提及了排序支持向量机的难点和一个实用的算法。
|
||||
|
||||
最后,给你留一个思考题,排序支持向量机是否给了你一些启发,让你可以把更加简单的对数几率分类器(Logistic Regression)应用到排序问题上呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Herbrich, R.; Graepel, T. & Obermayer, K. Support vector learning for ordinal regression. The Ninth International Conference on Artificial Neural Networks (ICANN 99), 1, 97-102 vol.1, 1999.
|
||||
Herbrich, R.; Graepel, T. & Obermayer, K. Smola; Bartlett; Schoelkopf & Schuurmans (Eds.). Large margin rank boundaries for ordinal regression. Advances in Large Margin Classifiers, MIT Press, Cambridge, MA, 2000.
|
||||
Tsochantaridis, I.; Hofmann, T.; Joachims, T. & Altun, Y. Support Vector Machine Learning for Interdependent and Structured Output Spaces. Proceedings of the Twenty-first International Conference on Machine Learning, ACM, 2004.
|
||||
Joachims, T. A Support Vector Method for Multivariate Performance Measures. Proceedings of the 22Nd International Conference on Machine Learning, ACM, 377-384, 2005.
|
||||
Tsochantaridis, I.; Joachims, T.; Hofmann, T. & Altun, Y. Large Margin Methods for Structured and Interdependent Output Variables. The Journal of Machine Learning Research, 6, 1453-1484, 2005.
|
||||
Joachims, T. Training Linear SVMs in Linear Time. Proceedings of the 12th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, ACM, 217-226, 2006.
|
||||
|
||||
|
||||
论文链接
|
||||
|
||||
|
||||
Support vector learning for ordinal regression
|
||||
Support Vector Machine Learning for Interdependent and Structured Output Spaces
|
||||
A Support Vector Method for Multivariate Performance Measures
|
||||
Large Margin Methods for Structured and Interdependent Output Variables
|
||||
Training Linear SVMs in Linear Time
|
||||
|
||||
|
||||
|
||||
|
||||
|
77
专栏/AI技术内参/053机器学习排序算法经典模型:GBDT.md
Normal file
77
专栏/AI技术内参/053机器学习排序算法经典模型:GBDT.md
Normal file
@@ -0,0 +1,77 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
053 机器学习排序算法经典模型:GBDT
|
||||
这周我们讨论机器学习排序算法中几个经典的模型,周一分享了配对法排序中的一个经典算法,即排序支持向量机(RankSVM),这个算法的核心思想是把支持向量机应用到有序数据中,试图对数据间的顺序进行直接建模。
|
||||
|
||||
今天,我们来聊一聊利用机器学习进行排序的一个重要算法:“梯度增强决策树”(Gradient Boosted Decision Tree)。长期以来,包括雅虎在内的很多商业搜索引擎都利用这种算法作为排序算法。
|
||||
|
||||
梯度增强决策树的历史
|
||||
|
||||
梯度回归决策树的思想来源于两个地方。首先是“增强算法”(Boosting),一种试图用弱学习器提升为强学习器的算法。这种算法中比较成熟的、有代表性的算法是由罗伯特⋅施派尔(Robert Schapire)和约阿夫⋅福伦德(Yoav Freund)所提出的AdaBoost算法[1]。因为这个算法两人于2003年获得理论计算机界的重要奖项“哥德尔奖”(Gödel Prize)。罗伯特之前在普林斯顿大学任计算机系教授,目前在微软研究院的纽约实验室工作。约阿夫一直在加州大学圣地亚哥分校任计算机系教授。
|
||||
|
||||
增强算法的工作机制都比较类似,那就是先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器。如此重复进行,直到基学习器数目达到事先制定的值,最终将所有的基学习器进行加权结合。如果你对“偏差-方差分解”(Bias-Variance Decomposition)有耳闻的话,那么,Boosting主要关注降低偏差。在实际效果中,增强算法往往能基于泛化性能相当弱的学习器构建出很强的集成结果。
|
||||
|
||||
AdaBoost提出后不久,机器学习学者和统计学家杰罗姆⋅弗赖德曼(Jerome H. Friedman)等人发表了一篇论文[2],从“统计视角”解释AdaBoost实质上是基于加性模型(Additive Model)以类似牛顿迭代法来优化指数损失函数(Loss Function)。于是受此启发,杰米姆提出了“梯度增强”(Gradient Boosting)的想法。这也就是梯度回归决策树思想来源的第二个地方,也是直接根源。如果你希望对“梯度增强”有进一步的了解,可以见参考文献[3]。
|
||||
|
||||
最早把“梯度增强”的想法应用到搜索中,是雅虎研究院的学者于2007年左右提出的[4]&[5]。之后,Facebook把梯度增强决策树应用于新闻推荐中[6]。
|
||||
|
||||
梯度增强的思想核心
|
||||
|
||||
我们刚才简单讲了增强算法的思路,那么要想理解梯度增强决策树,就必须理解梯度增强的想法。
|
||||
|
||||
梯度增强首先还是增强算法的一个扩展,也是希望能用一系列的弱学习器来达到一个强学习器的效果,从而逼近目标变量的值,也就是我们常说的标签值。而根据加性模型的假设,这种逼近效果是这些弱学习器的一个加权平均。也就是说,最终的预测效果,是所有单个弱学习器的一个平均效果,只不过这个平均不是简单的平均,而是一个加权的效果。
|
||||
|
||||
那么如何来构造这些弱学习器和加权平均的权重呢?
|
||||
|
||||
梯度增强采用了一个统计学或者说是优化理论的视角,使得构造这些部分变得更加直观。
|
||||
|
||||
梯度增强的作者们意识到,如果使用“梯度下降”(Gradient Descent)来优化一个目标函数,最后的预测式可以写成一个加和的形式。也就是,每一轮梯度的值和一个叫“学习速率”(Learning Rate)的参数共同叠加起来形成了最后的预测结果。这个观察非常重要,如果把这个观察和我们的目标,也就是构造弱学习器的加权平均联系起来看,我们就会发现,其实每个梯度的值就可以认为是一个弱学习器,而学习速率就可以看作是某种意义上的权重。
|
||||
|
||||
有了这个思路,梯度增强的算法就很容易构造了。
|
||||
|
||||
首先,这是一个迭代算法。每一轮迭代,我们把当前所有学习器的加权平均结果当作这一轮的函数值,然后求得针对某一个损失函数对于当前所有学习器的参数的一个梯度。然后,我们利用某一个弱学习器算法,可以是线性回归模型(Linear Regression)、对数几率模型(Logistic Regression)等来拟合这个梯度。最后,我们利用“线查找”(Line Search)的方式找到权重。说得更直白一些,那就是我们尝试利用一些简单的模型来拟合不同迭代轮数的梯度。
|
||||
|
||||
梯度增强的一个特点就是梯度下降本身带来的,那就是每一轮迭代一定是去拟合比上一轮小的一个梯度,函数对目标的整体拟合也是越来越好的。这其实也就是增强算法和梯度下降的一个完美结合。
|
||||
|
||||
梯度增强决策树以及在搜索的应用
|
||||
|
||||
理解了梯度增强,那么梯度增强决策树也就容易理解了。简单来说,梯度增强决策树就是利用决策树,这种最基本的学习器来当作弱学习器,去拟合梯度增强过程中的梯度。然后融合到整个梯度增强的过程中,最终,梯度增强决策树其实就是每一轮迭代都拟合一个新的决策树用来表达当前的梯度,然后跟前面已经有的决策树进行叠加。在整个过程中,决策树的形状,比如有多少层、总共有多少节点等,都是可以调整的或者学习的超参数。而总共有多少棵决策树,也就是有多少轮迭代是重要的调节参数,也是防止整个学习过程过拟合的重要手段。
|
||||
|
||||
参考文献[5]和[6],就是雅虎的科学家第一次把刚才提到的这个思路用于搜索问题中,训练排序算法。在应用的时候,有一些细节的调整,比如损失函数的设定。这里,作者们采用了配对法排序学习方法,那就是不直接去拟合相关度,而是拟合两个不同文档相关度的差值。具体来说,就是针对某一个查询关键字,我们利用算法来最小化对文档相关度差值的预测,也就是说我们不希望把相关度高的文档放到相关度低的后面。
|
||||
|
||||
在这些论文中,还有后续的很多研究中,利用梯度增强决策树算法进行排序训练得到的效果比当时的其他算法都有大幅度的提升。因此,这也就慢慢地奠定了梯度增强决策树作为一种普适的机器学习排序算法的地位。值得说明的是,梯度增强决策树的成功,一部分来自于增强算法,另一部分来自于把很多决策树堆积起来的想法。这两个思路都是在机器学习中被反复验证、行之有效的“模式”。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了梯度增强决策树算法的基本原理,这是一个利用机器学习技术来学习排序的基础算法。作为配对法排序学习的一个经典算法,梯度增强决策树算法有着广泛的应用 。 一起来回顾下要点:第一,我们简要介绍了梯度增强决策树提出的历史。第二,我们详细介绍了增强算法的核心以及梯度增强的思路。第三,我们简要介绍了梯度增强决策树的核心以及如何利用这个算法来训练排序问题。
|
||||
|
||||
最后,给你留一个思考题,梯度增强的思路能和神经网络模型结合吗?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Yoav Freund and Robert E Schapire. A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting. J. Comput. Syst. Sci. 55, 1 (August 1997), 119-139, 1997.
|
||||
Friedman, Jerome; Hastie, Trevor; Tibshirani, Robert. Additive logistic regression: a statistical view of boosting (With discussion and a rejoinder by the authors). Ann. Statist. 28 (2000), no. 2, 337–407, 2000.
|
||||
Friedman, Jerome H. Greedy function approximation: a gradient boosting machine. Annals of Statistics (2001): 1189–1232, 2001.
|
||||
Zhaohui Zheng, Hongyuan Zha, Tong Zhang, Olivier Chapelle, Keke Chen, and Gordon Sun. A general boosting method and its application to learning ranking functions for web search. Proceedings of the 20th International Conference on Neural Information Processing Systems (NIPS’07), J. C. Platt, D. Koller, Y. Singer, and S. T. Roweis (Eds.). Curran Associates Inc., USA, 1697-1704, 2007.
|
||||
Zhaohui Zheng, Keke Chen, Gordon Sun, and Hongyuan Zha. A regression framework for learning ranking functions using relative relevance judgments. Proceedings of the 30th annual international ACM SIGIR conference on Research and development in information retrieval (SIGIR ‘07). ACM, New York, NY, USA, 287-294, 2007.
|
||||
Xinran He, Junfeng Pan, Ou Jin, Tianbing Xu, Bo Liu, Tao Xu, Yanxin Shi, Antoine Atallah, Ralf Herbrich, Stuart Bowers, and Joaquin Quiñonero Candela. Practical Lessons from Predicting Clicks on Ads at Facebook. Proceedings of the Eighth International Workshop on Data Mining for Online Advertising (ADKDD’14). ACM, New York, NY, USA, , Article 5 , 9 pages, 2014.
|
||||
|
||||
|
||||
论文链接
|
||||
|
||||
|
||||
A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting
|
||||
Additive logistic regression: a statistical view of boosting
|
||||
Greedy function approximation: a gradient boosting machine
|
||||
A general boosting method and its application to learning ranking functions for web search
|
||||
A regression framework for learning ranking functions using relative relevance judgments
|
||||
Practical Lessons from Predicting Clicks on Ads at Facebook
|
||||
|
||||
|
||||
|
||||
|
||||
|
79
专栏/AI技术内参/054机器学习排序算法经典模型:LambdaMART.md
Normal file
79
专栏/AI技术内参/054机器学习排序算法经典模型:LambdaMART.md
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
054 机器学习排序算法经典模型:LambdaMART
|
||||
在这周的时间里,我们讨论机器学习排序算法中几个经典的模型。周一我们分享了排序支持向量机(RankSVM),这个算法的好处是模型是线性的,容易理解。周三我们聊了梯度增强决策树(Gradient Boosted Decision Tree),长期以来,这种算法被用在很多商业搜索引擎当中来作为排序算法。
|
||||
|
||||
今天,我们来分享这一部分的最后一个经典模型:LambdaMART。这是微软在Bing中使用了较长时间的模型,也在机器学习排序这个领域享有盛誉。
|
||||
|
||||
LambdaMART的历史
|
||||
|
||||
LambdaMART的提出可以说是一个“三步曲”。
|
||||
|
||||
这里有一个核心人物,叫克里斯多夫⋅博格斯(Christopher J.C. Burges)。博格斯早年从牛津大学物理学毕业之后,又于布兰戴斯大学(Brandeis University)获得物理学博士学位,他曾在麻省理工大学做过短暂的博士后研究,之后来到贝尔实验室,一待14年。2000年,他来到微软研究院,并一直在微软研究院从事机器学习和人工智能的研究工作,直到2016年退休。可以说,是博格斯领导的团队发明了微软搜索引擎Bing的算法。
|
||||
|
||||
LambdaMART的第一步来自于一个叫RankNet的思想[1]。这个模型发表于ICML 2005,并且在10年之后获得ICML的时间检验奖。这也算是在深度学习火热之前,利用神经网络进行大规模商业应用的经典案例。
|
||||
|
||||
RankNet之后,博格斯的团队很快意识到了RankNet并不能直接优化搜索的评价指标。因此他们根据一个惊人的发现,提出了LambdaRank这一重要方法[2]。LambdaRank的进步在于算法开始和搜索的评价指标,也就是NDCG挂钩,也就能够大幅度提高算法的精度。
|
||||
|
||||
LambdaRank之后,博格斯的团队也认识到了当时从雅虎开始流行的使用“梯度增强”(Gradient Boosting),特别是“梯度增强决策树”(GBDT)的思路来进行排序算法的训练,于是他们就把LambdaRank和GBDT的思想结合起来,开发出了更加具有模型表现力的LambdaMART[3]。LambdaMART在之后的雅虎排序学习比赛中获得了最佳成绩。
|
||||
|
||||
RankNet的思想核心
|
||||
|
||||
要理解LambdaMART,我们首先要从RankNet说起。其实,有了排序支持向量机RankSVM的理论基础,要理解RankNet就非常容易。RankNet是一个和排序支持向量机非常类似的配对法排序模型。也就是说,RankNet尝试正确学习每组两两文档的顺序。那么,怎么来定义这个所谓的两两文档的顺序呢?
|
||||
|
||||
其实,我们需要做的就是定义一个损失函数(Loss Function)来描述如何引导模型学习正确的两两关系。我们可以假设能够有文档两两关系的标签,也就是某一个文档比另外一个文档更加相关的信息。这个信息可以是二元的,比如+1代表更加相关,-1代表更加不相关,注意这里的“更加”表达了次序关系。
|
||||
|
||||
那么,在理想状态下,不管我们使用什么模型,都希望模型的输出和这个标签信息是匹配的,也就是说模型对于更加相关的文档应该输出更加高的预测值,反之亦然。很自然,我们能够使用一个二元分类器的办法来处理这样的关系。RankNet在这里使用了“对数几率损失函数”(Logistic Loss),其实就是希望能够利用“对数几率回归”(Logistic Regression)这一思想来处理这个二元关系。唯一的区别是,这里的正例是两个文档的相对关系。
|
||||
|
||||
有了损失函数之后,我们使用什么模型来最小化这个损失函数呢?在RankNet中,作者们使用了神经网络模型,这也就是Net部分的由来。那么,整个模型在这里就变得异常清晰,那就是使用神经网络模型来对文档与文档之间的相对相关度进行建模,而损失函数选用了“对数几率损失函数”。
|
||||
|
||||
LambdaRank和LambdaMART
|
||||
|
||||
尽管RankNet取得了一些成功,但是,文档的两两相对关系并不和搜索评价指标直接相关。我们之前讲过,搜索评价指标,例如NDCG或者MAP等,都是直接建立在对于某一个查询关键字的相关文档的整个序列上,或者至少是序列的头部(Top-K)的整个关系上的。因此,RankNet并不能保证在NDCG这些指标上能够达到很好的效果,因为毕竟没有直接或者间接优化这样的指标。
|
||||
|
||||
要想认识这一点其实很容易,比如你可以设想对于某一个查询关键字,有10个文档,其中有两个相关的文档,一个相关度是5,另外一个相关度是3。那么,很明显,在一个理想的排序下,这两个文档应该排在所有10个文档的头部。
|
||||
|
||||
现在我们假定相关度5的排在第4的位置,而相关度3的排在第7的位置。RankNet会更愿意去调整相关度3的,并且试图把其从第7往前挪,因为这样就可以把其他不相关的挤下去,然而更优化的办法应该是尝试先把相关度5的往更前面排。也就是说,从NDCG的角度来说,相关度高的文档没有排在前面受到的损失要大于相关度比较低的文档排在了下面。
|
||||
|
||||
NDCG和其他一系列搜索评价指标都是更加注重头部的相关度。关于这一点,RankNet以及我们之前介绍的GBDT或者排序支持向量机都忽视了。
|
||||
|
||||
既然我们找到了问题,那么如何进行补救呢?
|
||||
|
||||
之前说到博格斯的团队有一个惊人的发现,其实就在这里。他们发现,RankNet的优化过程中使用到的梯度下降(Gradient Descent)算法需要求解损失函数针对模型的参数的梯度,可以写成两个部分的乘积。在这里,模型的参数其实就是神经网络中的各类系数。第一部分,是损失函数针对模型的输出值的,第二部分是模型输出值针对模型的参数的。第二个部分跟具体的模型有关系,但是第一个部分没有。第一个部分跟怎么来定一个损失函数有关系。
|
||||
|
||||
在原始的RankNet定义中,这当然就是“对数几率函数”定义下的损失函数的梯度。这个数值就是提醒RankNet还需要针对这个损失做多少修正。其实,这个损失梯度不一定非得对应一个损失函数。这是博格斯的团队的一个重大发现,只要这个损失的梯度能够表示指引函数的方向就行了。
|
||||
|
||||
那既然是这样,能不能让这个损失的梯度和NDCG扯上边呢?答案是可以的。也就是说,我们只要定义两个文档之间的差距是这两个文档互换之后NDCG的变化量,同时这个变化量等于之前所说的损失的梯度,那么我们就可以指导RankNet去优化NDCG。在这里,博格斯和其他作者把这个损失的梯度定义为Lambda,因为整个过程是在优化一个排序,所以新的方法叫作LambdaRank。
|
||||
|
||||
有了LambdaRank之后,LambdaMART就变得水到渠成。Lambda是被定义为两个文档NDCG的变化量(在实际运作中,是用这个变化量乘以之前的对数几率所带来的梯度)。那么,只要这个Lambda可以计算,模型就可以嫁接别的算法。于是,博格斯的团队使用了在当时比神经网络更加流行的“梯度增强决策树”(GBDT)来作为学习器。不过,梯度增强决策树在计算的时候需要计算一个梯度,在这里就被直接接入Lambda的概念,使得GBDT并不是直接优化二分分类问题,而是一个改装了的二分分类问题,也就是在优化的时候优先考虑能够进一步改进NDCG的方向。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了LambdaMART算法的基本原理。作为配对法和列表排序学习的一个混合经典算法,LambdaMART在实际运用中有着强劲的表现 。 一起来回顾下要点:第一,我们简要介绍了LambdaMART提出的历史。第二,我们详细介绍了LambdaMART的核心思路。
|
||||
|
||||
最后,给你留一个思考题,采用Lambda这样更改优化过程中的梯度计算,虽然很形象,但是有没有什么坏处?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Burges, C.; Shaked, T.; Renshaw, E.; Lazier, A.; Deeds, M.; Hamilton, N. & Hullender, G. Learning to Rank Using Gradient Descent. Proceedings of the 22nd International Conference on Machine Learning, ACM, 89-96, 2005.
|
||||
Burges, C. J.; Ragno, R. & Le, Q. V. Schölkopf, B.; Platt, J. C. & Hoffman, T. (Eds.). Learning to Rank with Nonsmooth Cost Functions. Advances in Neural Information Processing Systems 19, MIT Press, 193-200, 2007.
|
||||
Wu, Q.; Burges, C. J.; Svore, K. M. & Gao, J. Adapting Boosting for Information Retrieval Measures. Information Retrieval, Kluwer Academic Publishers, 13, 254-270, 2010.
|
||||
Chapelle, O. & Chang, Y.Chapelle, O.; Chang, Y. & Liu, T.-Y. (Eds.). Yahoo! Learning to Rank Challenge Overview. Proceedings of the Learning to Rank Challenge, PMLR, 14, 1-24, 2011.
|
||||
|
||||
|
||||
论文链接
|
||||
|
||||
|
||||
Learning to Rank Using Gradient Descent
|
||||
Learning to Rank with Nonsmooth Cost Functions
|
||||
Adapting Boosting for Information Retrieval Measures
|
||||
Yahoo! Learning to Rank Challenge Overview
|
||||
|
||||
|
||||
|
||||
|
||||
|
63
专栏/AI技术内参/055基于深度学习的搜索算法:深度结构化语义模型.md
Normal file
63
专栏/AI技术内参/055基于深度学习的搜索算法:深度结构化语义模型.md
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
055 基于深度学习的搜索算法:深度结构化语义模型
|
||||
近两个月,我们集中系统地分享了搜索核心技术模块。做一个简单的内容梳理,我们讲解了搜索引擎方方面面的话题,从经典的信息检索技术、查询关键字理解、文档理解到现代搜索引擎的架构和索引的核心技术;还从机器学习角度出发分享了搜索引擎的最核心部分,也就是排序算法,深入排序算法的细节讲解了排序支持向量机(RankSVM)、梯度增强决策树(GBDT)以及经典模型LambdaMART。至此,整个人工智能领域关于搜索的经典话题也就告一段落了。
|
||||
|
||||
那么,这个星期,我们来看一些关于搜索算法的前沿思考。火热的深度学习不仅对图像、视频和音频这些领域产生了巨大的冲击,也对自然语言处理、甚至搜索领域有不小的影响。深度学习带给传统的模型和算法以新的建模能力和新的视角,为以前所不能完成的应用打下了基础。
|
||||
|
||||
今天,我们来看一篇较早利用深度学习技术来进行搜索建模的论文:《使用点击数据学习深度结构化的网络搜索语义模型》(Learning deep structured semantic models for web search using clickthrough data)。这篇论文阐述了一个深度结构化语义模型,发表在第22届世界信息和知识管理大会CIKM 2013上。
|
||||
|
||||
论文背景介绍
|
||||
|
||||
发表于2013年的这篇论文应该算是比较早的直接使用深度学习中经验的论文。其主要目的是探索一些经典的深度学习方法能否在搜索的应用中得到合适的效果。
|
||||
|
||||
下面我们来了解一下这篇论文的作者群信息。
|
||||
|
||||
第一作者黄博森(Po-Sen Huang)是一名来自台湾的学者。在发表论文的时候,他在伊利诺伊大学香槟分校攻读电子工程和计算机博士学位,师从马克·约翰森(Mark Hasegawa-Johnson)。论文是黄博森在微软实习时的工作总结。2015年黄博森博士毕业,然后于2016年加入了微软研究院。到目前为止,他发表了30多篇人工智能相关的论文,论文引用次数已经超过1千多次。
|
||||
|
||||
其他作者均来自当时在微软研究院工作的学者。其中不乏著名学者,比如何晓冬(Xiaodong He)、邓力(Li Deng)、亚历克斯·阿西罗(Alex Acero)和拉里·赫克(Larry Heck)等。下面聊聊比较少被提及的阿西罗和赫克。阿西罗曾长期在微软研究院担任语音相关研究组的经理职位,2013年之后,他到苹果公司担任Siri的资深总监。赫克曾经在雅虎担任搜索和广告业务副总裁,然后到微软研究院担任语音组的首席科学家。文章发表之后,赫克到了谷歌,在一个人工智能组担任总监,并于最近加入三星北美研究院担任资深副总裁。这些学者主要是为这个工作提供支持和指导工作。
|
||||
|
||||
这篇论文自2013年发表后已经有超过390多次的引用,是深度学习在搜索领域应用中被引用次数最多的论文之一。
|
||||
|
||||
深度结构化语义模型详解
|
||||
|
||||
下面详细讲讲这篇论文的核心思想。要想理解这篇论文提出的思路,我们首先要简单回顾一下经典的搜索模型构建。
|
||||
|
||||
在经典的搜索模型里,不管是TF-IDF、BM25、语言模型,还是基于机器学习的排序算法模型,整体来说,一个共通的想法就是争取用某种表示(Representation)来表达查询关键字,然后用相同的、或者类似的表示来表达文档,再通过某种程度的匹配函数来计算查询关键字表示和文档表示之间的距离,然后进行排序。
|
||||
|
||||
那么,从深度学习的角度来说,要想针对这个传统的模式进行革新,当然就可以从最主要的三个方面入手:查询关键字的表达、文档的表达和匹配函数。
|
||||
|
||||
这篇文章也正是沿着这个思路,提出了深度结构化语义模型。
|
||||
|
||||
首先,深度结构化语义模型对查询关键字和文档进行了相似的处理。具体来说,就是先把查询关键字或者文档转换为词向量(Term Vector),这个词向量可以是最简单的“词袋”的表达方式,这也就是最基本的模型的输入。从词向量出发,模型首先学习一个“词哈希”(Word Hashing),也就是把0或1的稀疏词向量转换成为一个稠密(Dense)的向量表达。这一步是把深度学习方法应用在自然语言处理中所通用的办法,目的就是把稀疏的输入转换为稠密的输入,降低输入的数据维度。
|
||||
|
||||
当查询关键字和文档都转换成稠密数组以后,深度结构化语义模型利用了深度学习中的重要经验,那就是通过“非线性转换”(Non-Linear Projection)来获取数据深层次的语义信息,而不仅仅只是传统方法中字面上的匹配。这里,查询关键字和文档都使用了简单的“前馈神经网络”(Feedforward Neural Network)的方法,对输入向量进行了多层的非线性转换。非线性转换本身通过“双曲正切函数”(tanh函数)实现,这应该算是最传统的深度学习模型的实现方法了。
|
||||
|
||||
经过多层转换之后,查询关键字和文档都变成了新的某种表达之后,如何来计算两者间的距离(或者远近)呢?这篇文章采用了非常直接的形式,那就是利用“余弦函数”(Cosine)来作为距离函数,描述两个向量之间的距离。在传统信息检索的语境中,也经常用余弦函数来计算向量的距离,所以在这里应该说并没有太多创新的地方。
|
||||
|
||||
总体来说,深度学习在这里的主要应用,就是成为查询关键字和文档的表达的提取器。和传统方法中人工提取各种类型的文字特性相比,在深度结构化语义模型中,基于前馈神经网络的特征提取器自动提取了文字的深层语义信息。
|
||||
|
||||
提出了模型之后,我们来看这个模型是如何被训练出来的。作者们首先利用了用户的点击信息,也就是针对某一个查询关键字,有哪些文档被点击过,作为正例数据,其他文档作为负例数据,然后把整个建模问题看作一个多类分类问题。这样就可以利用标签信息对整个模型进行学习了。
|
||||
|
||||
整体来说,这个深度学习模型是可以利用“端到端”(End-to-End)的方式进行训练的,并且采用了随机梯度下降(SGD)这样的优化算法,这里就不复述了。
|
||||
|
||||
深度结构化语义模型的实验效果
|
||||
|
||||
因为深度结构化语义模型仅仅使用了查询关键字和文档之间的文字信息,因此提出的模型就无法和完整的、利用很多特性的机器学习排序算法进行比较,只能和文字型的排序算法例如TF-IDF、BM25和语言模型进行比较,这也是文章并没有采用一些更为通用的数据集的原因。最终文章在数据集上采用了Bing的搜索数据,有1万6千多的查询关键字以及每个查询关键字所对应的15个文档,每个文档又有4级相关标签,这样可以用来计算诸如NDCG这样的指标。
|
||||
|
||||
在这篇文章里,作者们比较了一系列的方法,比如TF-IDF、BM25,以及一些传统的降维方法如LSA和PLSA。简单来说,深度结构化语义模型在最后的比较中取得了不错的结果,NDCG在第10位的表现是接近0.5。不过,TF-IDF的表现也有0.46,而传统的PLSA和LSA也有0.45左右的表现。所以,可以说深度结构化语义模型的效果虽然很明显但并不是特别惊人。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了深度结构化语义模型的一些基本原理,这是利用深度学习技术对搜索算法进行改进的一个经典尝试。我们在上面的实验结果总结中已经说到,虽然文章仅仅谈到了文本信息的匹配,并没有作为完整的排序算法进行比较,但是也揭开了用深度模型来表征查询关键字和文档的研发序幕 。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了提出深度结构化语义模型的历史。第二,我们详细介绍了深度结构化语义模型的核心思路以及实验结果。
|
||||
|
||||
给你留一个思考题,除了文章中提到的余弦函数可以作为一个距离函数,还有没有其他的函数选择来表达两个向量之间的距离?
|
||||
|
||||
|
||||
|
||||
|
61
专栏/AI技术内参/056基于深度学习的搜索算法:卷积结构下的隐含语义模型.md
Normal file
61
专栏/AI技术内参/056基于深度学习的搜索算法:卷积结构下的隐含语义模型.md
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
056 基于深度学习的搜索算法:卷积结构下的隐含语义模型
|
||||
这个星期,也是我们整个搜索领域分享的最后一周内容,来看一些搜索算法的前沿思考,特别是深度学习对搜索领域的影响。周一我们分享了一篇较早利用深度学习技术来进行搜索建模的论文,论文提出如何使用前馈神经网络来对查询关键字和文档进行信息提取,从而能够学习更有意义的语义信息。
|
||||
|
||||
今天我们来看一篇文章《信息检索中结合卷积池化结构的隐含语义模型》(A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval),可以说这是我们周一分享论文的一个后续工作。这篇论文发表在第23届世界信息和知识管理大会CIKM 2014上。
|
||||
|
||||
论文背景介绍
|
||||
|
||||
这篇论文的主要目的是探讨深度学习中的卷积神经网络能否应用在搜索中,并取得较好的效果。
|
||||
|
||||
下面我们先来了解一下这篇论文作者群的信息。
|
||||
|
||||
第一作者Yelong Shen是微软研究院的一名资深研究员。
|
||||
|
||||
第二作者是何晓冬(Xiaodong He)是微软研究院深度学习组的主任研究员兼经理,发表过一百多篇学术论文,在人工智能领域,特别是近年来在深度学习领域有很突出的贡献。
|
||||
|
||||
第三作者高剑峰(Jianfeng Gao)是一名长期在微软研究院工作的研究员和经理。
|
||||
|
||||
第四作者邓力(Li Deng)是微软研究院的人工智能学者,曾担任微软的首席人工智能科学家并且领导深度学习中心。2017年5月,邓力离开微软加入Citadel,美国著名的金融机构,担任首席人工智能官的职位。
|
||||
|
||||
最后一位作者格雷古瓦·梅尼尔(Grégoire Mesnil)是来自蒙特利尔大学的一名博士学生。
|
||||
|
||||
这篇论文自2014年发表后已被引用180多次,是探讨深度学习在搜索领域中应用的主要论文之一。
|
||||
|
||||
卷积结构下的隐含语义模型详解
|
||||
|
||||
我们周一介绍的深度结构化语义模型,其主要思想是希望能够利用前馈神经网络来对查询关键字和文档进行信息提取。这个模型有一个很明显的问题,那就是在第一步对查询关键字或文档进行特征提取时所形成的词向量(Term Vector)是忽略了文字原本的顺序信息的,也就是依然是一个“词袋模型”(Bag of Words)假设,这显然是丢失了很多信息的。
|
||||
|
||||
当然,我们今天要分享的卷积结构下的隐含语义模型,也并不是第一个想要解决这个问题的模型。在经典的信息检索领域的研究中,已经有不少这方面的尝试了。那么对于深度学习来说,又有什么优势呢?
|
||||
|
||||
近些年来深度学习模型兴起的一个重要动力就是在图像、音频、视频领域的技术突破。而这些突破离不开一个重要的基础模型,卷积神经网络的成熟。这个模型对有空间位置结构性的数据,比如图像中每一个像素,有较强的建模能力,成为了探索结构信息建模的一个利器。那么,能不能把在这些领域中已经成熟的经验借鉴到搜索领域呢?
|
||||
|
||||
如果把文本的词与词,句子与句子之间的关系看作是一种空间位置关系的话,那么从假设上来看,就很符合卷积神经网络模型的基本设置。接下来,我们就来看看这个模型具体是怎么应用到搜索中的。
|
||||
|
||||
首先,模型对查询关键字或者文档的文字进行“移动窗口”式(Sliding Window)的扫描。这第一步就和之前的深度结构化语义模型有了本质区别。然后,模型进一步把“移动窗口”下的词转换成为字母级别的表征向量(Representation Vector)。这个步骤之后,模型采用了卷积层来提取空间位置的特征,也是把数据的维度大幅度降低。卷积层之后就是基本的“池化层”(Pooling Layer),这里的模型采用了最大池化(Max Pooling),也就是从多个卷积层的结果中,每一个层对应元素中的最大元素。在池化层之后,就是进行一个全部展开的语义层。
|
||||
|
||||
更加直白地说,整个模型就是希望先从原始的文字信息中,利用保留顺序的一个移动窗口提取最基本的特征;然后利用卷积神经网络的标配,卷积层加池化层,来提取空间位置信息;最后利用一个全部的展开层来学习下一步的系数。卷积层主要抓住的是单词这个级别的特征;而池化层则是希望抓住句子这个层面的语义信息;最后利用句子这个层面的语义信息形成整个文字的内在语义表达。
|
||||
|
||||
这个模型是如何被训练出来的呢?事实上,可以说整个模型的训练过程和我们周一分享的深度结构化语义模型的训练过程一模一样。首先,同样是利用用户的点击信息,也就是针对某一个查询关键字,有哪些文档被点击过,作为正例数据,其他文档作为负例数据;然后把整个建模问题看做是一个多类分类问题;这样就可以利用标签信息对整个模型进行学习。
|
||||
|
||||
隐含语义模型的实验效果
|
||||
|
||||
和深度结构化语义模型一样,隐含语义模型也仅仅使用了查询关键字和文档之间的文字信息,所以也只能和文字型的排序算法进行比较。最终文章在数据集上采用了Bing的搜索数据,有1万2千多的查询关键字以及每个查询关键字所对应的74个文档,每个文档又有4级的相关标签,用来计算NDCG这样的指标。数据虽然和之前一篇不完全一样,但是在数量级上是差不多的。
|
||||
|
||||
在这篇文章里,作者们也比较了一系列的方法,比如TF-IDF、BM25,以及传统的PLSA和LDA。简单来说,隐含语义模型在最后的比较中取得了不错的结果,NDCG在第10位的表现是接近0.45,而之前提出的深度结构化语义模型达到了差不多0.44。虽然利用卷积的效果要好一些,但是差距并不大。在这个数据集上,传统方法要差很多,比如BM25的表现仅有0.38左右,而传统的PLSA和LDA也只有0.40左右的表现。应该说在这篇文章中展示出来的效果还是有比较大的差距的。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了卷积结构下的隐含语义模型的一些基本原理,这个模型是利用深度学习技术对搜索算法进行改进的另一个很有价值的尝试,揭开了用深度学习模型,特别是用在图像处理中非常成功的卷积神经网络技术来表征查询关键字和文档会达到的效果。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了隐含语义模型提出的历史。第二,我们详细介绍了隐含语义模型的核心思路以及实验结果。
|
||||
|
||||
给你留一个思考题,为什么顺序信息并没有像我们想象中的那样,给文档搜索提升带来很大的效果呢?有没有什么解释?
|
||||
|
||||
|
||||
|
||||
|
63
专栏/AI技术内参/057基于深度学习的搜索算法:局部和分布表征下的搜索模型.md
Normal file
63
专栏/AI技术内参/057基于深度学习的搜索算法:局部和分布表征下的搜索模型.md
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
057 基于深度学习的搜索算法:局部和分布表征下的搜索模型
|
||||
周一我们分享了一篇较早利用深度学习技术来进行搜索建模的论文,利用前馈神经网络来对查询关键字和文档进行信息提取,从而学习到更有意义的语义信息。周三我们分享了另外一篇论文,可以说是周一分享文章的一个后续工作,探讨了如何利用卷积神经网络来对搜索表征进行进一步提升。这两篇论文呈现了一个统一的套路,那就是尝试把深度学习的一些经验直接应用到传统的搜索建模上。这些尝试,也都取得了一些初步成绩。
|
||||
|
||||
今天我们来聊一篇2017年刚刚发表的论文《网页搜索中利用文本的局部和分布表征学习匹配》(Learning to Match Using Local and Distributed Representations of Text for Web Search),这是近期将深度学习模型应用在搜索领域的一个创新。这篇论文发表在世界万维网大会WWW 2017上。
|
||||
|
||||
论文背景介绍
|
||||
|
||||
下面我们来了解一下这篇论文的作者群信息。
|
||||
|
||||
第一作者巴斯卡⋅米特拉(Bhaskar Mitra)是微软研究院在剑桥实验室的一名研究员。他已经发表了多篇利用深度学习技术解决搜索问题的论文。目前,米特拉在伦敦大学学院攻读博士学位。
|
||||
|
||||
第二作者是费尔南多⋅迪亚兹(Fernando Diaz)在文章发表的时候是微软研究院的一名研究员,目前则在Spotify工作。迪亚兹长期从事搜索以及信息检索的工作,发表多篇论文,文章总引用数超过三千次。加入微软之前,他曾经在雅虎研究院从事过研究工作。
|
||||
|
||||
文章的第三作者尼克⋅克拉维尔(Nick Craswell)在微软研究院工作,目前是主任级研发经理,长期从事搜索和信息检索的研究,发表多篇论文,文章总引用数达8千多次。
|
||||
|
||||
局部和分布表征下的搜索模型详解
|
||||
|
||||
我们详细讲讲这篇论文的核心思想。要想理解这篇论文提出的思路,我们首先要简单回顾一下这周讲的前两篇文章内容。
|
||||
|
||||
本周第一篇介绍的深度结构化语义模型主要是希望利用前馈神经网络来对查询关键字和文档进行信息提取。第二篇文章尝试用卷积神经网络来提取查询关键字和文档的信息。
|
||||
|
||||
不论是前馈网络,还是卷积网络, 这些尝试都是想从文本中提取高层次的语义信息。那么今天这篇文章说得是,并不是所有的相关信息都是高层次的语义信息。这是什么意思呢?
|
||||
|
||||
作者们提出了这样一个观点,那就是在搜索的时候,一个非常关键的需求就是被搜索到的文档应该包含查询关键字;或者反过来说,拥有查询关键字的文档有很大可能是相关的。也就是说,如果一个模型不能去进行绝对的关键字匹配,那很有可能就无法真正抓住所有的相关信息。
|
||||
|
||||
另一方面,相关信息的提取也需要高层次的语义,比如同义词,或者同一个主题。设想我们需要查找汽车相关的信息,而一个最新品牌的汽车页面也许并不直接包含“汽车”关键字,但很明显是一个相关的页面。因此,利用同义词或者整个主题的相关性,通常可以提高搜索效果,特别是“召回”(Recall)的效果。
|
||||
|
||||
那么,很显然,一个好的搜索模型应该兼顾这两个方面,也就是说既能够做到关键字的直接匹配,也能做到在高层次的语义上进行模糊匹配。
|
||||
|
||||
之前讲到的比如利用前馈网络或者卷积网络主要是针对后者,也就是模糊匹配,文章中提到叫做“分布表征”的匹配。那么,这篇文章的新意就是提出一种捕捉直接匹配的方式,文章叫做“局部表征”,并且和模糊匹配的分布表征结合在一起,形成一个统一的模型,从而提高搜索的效果。
|
||||
|
||||
具体来说,文章提出的模型是这样的。首先,从整体的网络框架来说,整个网络分成两个部分:一部分来学习查询关键字和文档的局部表征,也就是完全匹配;另一部分来学习查询关键字和文档的分布表征,也就是模糊匹配。最后,两个部分分别学习出一个向量,然后两个向量加和就形成了最后的表征。
|
||||
|
||||
完全匹配的局部表征技巧来自于数据的输入。和之前介绍的模型不同,因为我们需要学习查询关键字和文档之间的匹配信息,因此,网络的输入信息就不单单是查询关键字和文档本身,而是两者的一个“点积”(Dot-Product),也就是说,网络的输入信息就是两者是否有匹配。把这个信息作为输入向量之后,这篇文章采用了我们分享过的卷积神经网络的结构,来进一步提取点积过后的输入向量。
|
||||
|
||||
在模糊匹配的分布表征部分,整体的框架和上次分享的模型很类似,也就是对查询关键字和文档分别进行建模,分别利用卷积神经网络提取高层次的语义信息。然后在高层次的语义信息上再进行查询关键字和文档表征的乘积(这里是矩阵相对应元素相乘)。最后,在经过基层的隐含转换(其实就是前馈网络),形成分布表征的最后唯一结果。
|
||||
|
||||
从整个模型来看,局部表征和分布表征的主要区别在于如何处理查询关键字和文档的匹配信息。如果是在原始数据上直接匹配,然后学习匹配后的高层语义,这就是局部表征。如果是先学习高层语义然后再匹配,这就是分布表征。
|
||||
|
||||
整个模型利用相关标签,进行的是监督学习流程,并且采用了SGD来优化。
|
||||
|
||||
局部和分布表征的搜索模型实验效果
|
||||
|
||||
这篇论文提出的模型还是仅仅使用了查询关键字和文档之间的文字信息,因此和上两篇分享一样,提出的模型就只能和文字型的排序算法例如TF-IDF、BM25和语言模型进行比较。文章在数据集上采用了Bing的搜索数据,有19万多的查询关键字,总共有将近百万的文档数。这比之前两个分享里的数据都要大。不过遗憾的是,这三篇文章都是不同的数据集 。每个文档又有4级的相关标签,可以用来计算诸如NDCG这样的指标。
|
||||
|
||||
在这篇文章里,作者们比较了一系列的方法,比如TF-IDF、BM25,以及一些传统的降维方法比如LSA,然后还比较了之前两个分享中提到的模型。简单来说,本文模型在最后的比较中取得了非常不错的成绩,NDCG在第10位的表现接近0.53,而之前提出的一系列深度搜索模型,包括我们分享的两个模型达到了差不多0.45~0.48左右。看来,既需要完全匹配还需要模糊匹配的确能够带来性能上的提升。在这个数据集上,传统方法其实也不差,比如BM25的表现有0.45左右,而传统的LSA也有0.44左右的表现。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你分享了搜索专题的最后一篇内容,那就是利用深度学习技术对搜索算法进行改进的又一个尝试:一个结合了学习完全匹配的局部表征和模糊匹配的分布表征的统一的搜索模型。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了局部和分布表征搜索模型提出的历史。第二,我们详细介绍了局部和分布表征搜索模型的核心思路以及实验结果。
|
||||
|
||||
给你留一个思考题,我们这周分享了三个经典的深度学习和搜索相结合的尝试,你觉得目前深度学习在搜索领域取得的成果,有让你感到特别惊讶的结果吗?
|
||||
|
||||
|
||||
|
||||
|
101
专栏/AI技术内参/057复盘1搜索核心技术模块.md
Normal file
101
专栏/AI技术内参/057复盘1搜索核心技术模块.md
Normal file
@@ -0,0 +1,101 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
057 复盘 1 搜索核心技术模块
|
||||
到目前为止,我们讲完了人工智能核心技术的第一个模块——*搜索*。我们从搜索的核心算法入手,进而讨论了搜索的两个关键组件,分别是查询关键字理解和文档理解,并落实到对搜索系统的评价,然后从宏观视角介绍了搜索框架的历史和发展,最后又从深度学习技术在搜索领域的应用角度,对分享做了一个延伸。
|
||||
|
||||
整个模块共27期,9大主题,希望通过这些内容,能让你对搜索技术有一个系统的认识和理解,为自己进一步学习和提升打下基础。今天我们就来对这一模块的内容做一个复盘。
|
||||
|
||||
提示:点击知识卡跳转到你最想看的那篇文章,温故而知新。如不能正常跳转,请先将App更新到最新版本。
|
||||
|
||||
1.现代搜索架构剖析
|
||||
|
||||
从20世纪50年代有信息检索系统开始,搜索系统大致经历了三个发展阶段。从最开始的“基于文本匹配的信息检索系统”到“基于机器学习的信息检索系统”,再到近几年受深度学习影响的“更加智能的搜索系统”。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
2.经典搜索核心算法
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
3.基于机器学习的排序算法
|
||||
|
||||
问题设置:把一个排序问题转换成一个机器学习的问题设置,特别是监督学习的设置。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
4.基于机器学习的高级排序算法
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
5.查询关键字理解
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
6.文档理解
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
7.经典图算法
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
8.基于深度学习的搜索算法
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
9.搜索系统的评价
|
||||
|
||||
If You Can’t Measure It, You Can’t Improve It.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
积跬步以至千里
|
||||
|
||||
最后,*恭喜你在这个模块中已经阅读了70047字,听了220分钟的音频,这是一个不小的成就*。在人工智能领域的千里之行,我们已经迈出了扎实的第一步。
|
||||
|
||||
|
||||
|
||||
感谢你在专栏里的每一个留言,给了我很多思考和启发。期待能够听到你更多的声音,我们一起交流讨论。
|
||||
|
||||
|
||||
|
||||
|
77
专栏/AI技术内参/058简单推荐模型之一:基于流行度的推荐模型.md
Normal file
77
专栏/AI技术内参/058简单推荐模型之一:基于流行度的推荐模型.md
Normal file
@@ -0,0 +1,77 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
058 简单推荐模型之一:基于流行度的推荐模型
|
||||
今天,我们正式进入专栏的另一个比较大的模块,那就是推荐系统。之前我们详细且全面地介绍了搜索系统的各个组成部分。在接下来的几周时间里,我们一起来看推荐系统的技术要点又有哪些。
|
||||
|
||||
我们还是从简单推荐系统聊起,由易到难,逐步为你讲述一些经典的推荐模型。
|
||||
|
||||
推荐系统目前已经深入到了互联网的各类产品中。不管是到电子商务网站购物,还是到新闻阅读网站获取信息,甚至是在出行的时候希望听到不同的音乐,不同种类的推荐系统都在我们的生活中发挥着举足轻重的作用。
|
||||
|
||||
那么,搭建一个最简单的推荐系统,应该如何入手呢?今天我们就来聊一个最基本的推荐模型:基于流行度的推荐模型。
|
||||
|
||||
最简单的流行度估计
|
||||
|
||||
什么是基于流行度(Popularity-based)?通俗地说,就是什么内容吸引用户,就给用户推荐什么内容。
|
||||
|
||||
这里面其实有一个隐含的假设,那就是物品本身的质量好坏和流行度有一定的正比关系。什么意思呢?就是说好的东西,关注的人自然就多,自然就会有更多的谈论。当然,这是一个主观的假设,并不是所有质量高的物品都会有很高的流行度。然而,在不需要过多其他信息和假设的情况下,流行度可以算是衡量物品质量好坏的一个最简单的测度。
|
||||
|
||||
那么,如果我们能够在每一个时间点上准确地估计到一个物品的流行度,就只需要按照流行度的数值从高到低排序显示所有的物品就可以了。
|
||||
|
||||
然而,这里牵涉到一个问题,那就是如何判断一个物品在任何时间点上的流行度呢?有两个重要的因素影响着物品流行度的估计,那就是时间和位置。
|
||||
|
||||
我们先来说一下时间因素。很显然,用户访问每一个应用或者服务都有一定的规律,这种规律导致每一个应用的流量规律也不一样。比如,人们可能更倾向于在早上或者傍晚打开新闻网站,看一看一天都发生了什么事情。因此,任何文章投放到这两个时段自然就会有比较高的关注度。这并不代表这些文章就要好于其他的文章,可能仅仅是由于时间的关系。因此,我们在对流行度建模的时候就需要考虑时间的因素。
|
||||
|
||||
另外一个重要的因素是位置。这个“位置”并不是真正的地理位置,而是在一个服务或者网站的什么位置显示你的物品。因为用户心理对于不同位置的感受,在很多类型的服务中常常都有隐含的“位置偏差”(Position Bias)。
|
||||
|
||||
这些偏差给我们估计某个物品的流行度带来了很大的困难。比如说,在绝大多数的搜索引擎服务中,排名第一的物品所受到的关注度很可能大大高于排名第二和之后的物品。因此,一个物品只要放到第一的位置,关注度自然就会升高。当然,这并不能完全代表这个物品本身的属性。
|
||||
|
||||
因此,我们在估计物品的流行度时就需要考虑上面所说的这两个重要因素。
|
||||
|
||||
要解决刚才说的两个问题,我们就不能使用绝对数值来对流行度建模。比如我们使用在单位时间内点击的数目,购买的数目,或者点赞的数目,都会受到刚才所说的两种偏差的影响。假设一篇文章在9点到10点这个时段被点击了100次,在10点到11点这个时段被点击了50次,这并不能代表这个文章在10点到11点这个时段就变得不受欢迎了,很可能是这个时段的总的用户量比较多。
|
||||
|
||||
因此,对于流行度的衡量,我们往往使用的是一个“比值”(Ratio),或者是计算某种“可能性”(Probability)。也就是说,我们计算在总的用户数是N的情况下,点击了某个文章的人数。这个比值,取决于不同的含义,如果是点击,往往叫作点击率;如果是购买,叫作购买率。为了方便讨论,我们在下面的例子中都使用点击率。
|
||||
|
||||
然而,点击率本身虽然解决了一部分时间和位置偏差所带来的影响,但是点击率的估计所需要的数据依然会受到偏差的影响。因此,我们往往希望能够建立无偏差的数据。
|
||||
|
||||
关于如何能够无偏差地估计,这是一个研究课题,我们今天不详细展开。不过,有一种比较经济的方法可以收集没有偏差的数据,那就是把服务的流量分成两个部分。
|
||||
|
||||
一个部分,利用现在已有的对物品流行度的估计来显示推荐结果。另外一个部分,则随机显示物品。这种方法是一种特殊的EE算法(Exploitation & Exploration),叫“epsilon贪心”(epsilon-Greedy)。
|
||||
|
||||
我们之后还会聊到这个话题。根据这样的方式搜集的数据可以认为是没有位置偏差的。我们从随机显示物品的这部分流量中去估计流行度,然后在另外一个部分的流量里去显示物品。
|
||||
|
||||
如果从数学上对点击率建模,其实可以把一个物品在显示之后是否被点击看成是一个“伯努利随机变量”,于是对点击率的估计,就变成了对一个伯努利分布参数估计的过程。
|
||||
|
||||
有一种参数估计的方法叫作“最大似然估计法”(Maximum Likelihood Estimation)。简而言之,就是说,希望找到参数的取值可以最大限度地解释当前的数据。我们利用最大似然法就可以求出在某一段时间内的点击率所代表的伯努利分布的参数估计。这个估计的数值就是某个物品当前的点击总数除以被显示的次数。通俗地讲,如果我们显示某个物品10次,被点击了5次,那么在最大似然估计的情况下,点击率的估计值就是0.5。
|
||||
|
||||
很显然,这样的估计有一定的局限性。如果我们并没有显示当前的物品,那么,最大似然估计的分母就是0;如果当前的物品没有被点击过,那么分子就是0。在这两种情况下,最大似然估计都无法真正体现出物品的流行度。
|
||||
|
||||
高级流行度估计
|
||||
|
||||
我们从统计学的角度来讲了讲,如何利用最大似然估计法来对一个伯努利分布所代表的点击率的参数进行估计。
|
||||
|
||||
这里面的第一个问题就是刚才我们提到的分子或者分母为0的情况。显然,这种情况下并不能很好地反应这些物品的真实属性。
|
||||
|
||||
一种解决方案是对分子和分母设置“先验信息”。就是说,虽然我们现在没有显示这个物品或者这个物品没有被点击,但是,我们“主观”地认为,比如说在显示100次的情况下,会有60次的点击。注意,这些显示次数和点击次数都还没有发生。在这样的先验概率的影响下,点击率的估计,或者说得更加精确一些,点击率的后验概率分布的均值,就成为了实际的点击加上先验的点击,除以实际的显示次数加上先验的显示次数。你可以看到,在有先验分布的情况下,这个比值永远不可能为0。当然,这也就避免了我们之前所说的用最大似然估计所带来的问题。
|
||||
|
||||
利用先验信息来“平滑”(Smooth)概率的估计,是贝叶斯统计(Bayesian Statistics)中经常使用的方法。如果用更加精准的数学语言来表述这个过程,我们其实是为这个伯努利分布加上了一个Beta分布的先验概率,并且推导出了后验概率也是一个Beta分布。这个Beta分布参数的均值,就是我们刚才所说的均值。
|
||||
|
||||
在实际操作中,并不是所有的分布都能够找到这样方便的先验分布,使得后验概率有一个解析解的形式。我们在这里就不展开讨论了。
|
||||
|
||||
另外一个可以扩展的地方就是,到目前为止,我们对于流行度的估计都是针对某一个特定的时段。很明显,每个时段的估计和前面的时间是有一定关联的。这也就提醒我们是不是可以用之前的点击信息,来更加准确地估计现在这个时段的点击率。
|
||||
|
||||
答案是可以的。当然,这里会有不同的方法。
|
||||
|
||||
一种最简单的方法还是利用我们刚才所说的先验概率的思想。那就是,当前T时刻的点击和显示的先验数值是T-1时刻的某种变换。什么意思呢?比如早上9点到10点,某个物品有40次点击,100次显示。那么10点到11点,我们在还没有显示的情况下,就可以认为这个物品会有20次点击,50次显示。注意,我们把9点到10点的真实数据乘以0.5用于10点到11点的先验数据,这种做法是一种主观的做法。而且是否乘以0.5还是其他数值需要取决于测试。但是这种思想,有时候叫作“时间折扣”(Temporal Discount),是一种非常普遍的时序信息处理的手法。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了基于流行度的推荐系统的基本原理。一起来回顾下要点:第一,我们简要介绍了为什么需要基于流行度进行推荐;第二,我们详细介绍了如何对流行度进行估计以及从统计角度看其含义;第三,我们简要地提及了一些更加高级的流行度估计的方法。
|
||||
|
||||
最后,给你留一个思考题,我们介绍了如何使用先验信息来对参数进行平滑,如何能够更加准确地确定先验概率中的数字呢?具体到我们的例子就是,如何来设置先验的点击和显示次数呢?
|
||||
|
||||
|
||||
|
||||
|
79
专栏/AI技术内参/059简单推荐模型之二:基于相似信息的推荐模型.md
Normal file
79
专栏/AI技术内参/059简单推荐模型之二:基于相似信息的推荐模型.md
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
059 简单推荐模型之二:基于相似信息的推荐模型
|
||||
这周我们开始讲推荐系统。周一的文章中,我们聊了一个最基本的推荐模型:基于流行度的推荐模型。这是一种简单且实用的推荐系统搭建方式,那就是需要对每一个物品的流行度进行估计。
|
||||
|
||||
今天,我们来看另外一种简单但很有效果的推荐模型:基于相似信息的推荐模型。
|
||||
|
||||
什么是相似信息的推荐模型
|
||||
|
||||
相似信息的推荐模型又叫“临近”(Neighborhood)模型。顾名思义,就是我们希望利用临近、或者相似的数据点来为用户推荐。
|
||||
|
||||
临近模型的内在假设是推荐系统中著名的“协同过滤”(Collaborative Filtering)。什么意思呢?就是说,我们认为,相似的用户可能会有相似的喜好,相似的物品可能会被相似的人所偏好。于是,如果我们能够定义怎么寻找相似的用户或者相似的物品,那么我们就可以利用这些类别的人群或者物品来给用户进行推荐。
|
||||
|
||||
例如,对于一个电影推荐的场景来说,有一个用户A观看了电影《战狼2》,我们希望根据这个信息来为用户进行推荐。很显然,如果我们仅仅知道用户A观看过《战狼2》,这个信息是非常有限的。但是,假设有一个用户B也观看过《战狼2》,并且最近还观看过《红海行动》。那么, 我们可以根据B的信息来对A进行推荐,也就是说,我们认为用户A也有可能喜欢《红海行动》。
|
||||
|
||||
这里面,我们其实经历了这么两个步骤。
|
||||
|
||||
第一,联系用户A和用户B的是他们都看过《战狼2》。这就帮助我们定义了A和B是相似用户。
|
||||
|
||||
第二,我们的假定是,相似的用户有相似的观影偏好,于是我们就直接把B的另外一个观看过的电影《红海行动》拿来推荐给了A。
|
||||
|
||||
这两个步骤其实就很好地解释了“协同过滤”中“协同”的概念,意思就是相似的用户互相协同,互相过滤信息。
|
||||
|
||||
“协同过滤”从统计模型的意义上来讲,其实就是“借用数据”,在数据稀缺的情况下帮助建模。掌握这个思路是非常重要的建模手段。
|
||||
|
||||
在用户A数据不足的情况下,我们挖掘到可以借鉴用户B的数据。因此,我们其实是把用户A和用户B“聚类”到了一起,认为他们代表了一个类型的用户。当我们把对单个用户的建模抽象上升到某一个类型的用户的时候,这就把更多的数据放到了一起。
|
||||
|
||||
基于相似用户的协同过滤
|
||||
|
||||
刚才我们简单聊了聊什么是基于相似信息的推荐系统。相信到现在,你已经对这个概念有了一个最基本的认识。
|
||||
|
||||
那么,如何才能够比较系统地定义这样的流程呢?
|
||||
|
||||
首先,问题被抽象为我们需要估计用户I针对一个没有“触碰过”(这里指点击、购买、或者评分等行为)的物品J的偏好。
|
||||
|
||||
第一步,我们需要构建一个用户集合,这个用户集合得满足两个标准:第一,这些用户需要已经触碰过物品J,这是与用户I的一大区别;第二,这些用户在其他的行为方面需要与用户I类似。
|
||||
|
||||
现在我们假设这个集合已经构造好了。那么,接下来的一个步骤,就是根据这个相似的用户集,我们可以对物品J进行一个打分。这个打分的逻辑是这样的。首先,我们已经得到了所有和I相似的用户对J的打分。那么,一种办法就是,直接用这些打分的平均值来预估J的评分。也就是说,如果我们认为这个相似集合都是和用户I相似的用户,那么他们对J的偏好,我们就认为是I的偏好。显然这是一个很粗糙的做法。
|
||||
|
||||
我们可以针对这个直接平均的做法进行两个改动。
|
||||
|
||||
第一,采用加权平均的做法。也就是说,和用户I越相似的用户,我们越倚重这些人对J的偏好。
|
||||
|
||||
第二,我们也需要对整个评分进行一个修正。虽然这个相似集合的人都对J进行过触碰,但是每个人的喜好毕竟还是不一样的。比如有的用户可能习惯性地会对很多物品有很强的偏好。因此,仅仅是借鉴每个人的偏好,而忽略了这些用户的偏差,这显然是不够的。所以,我们需要对这些评分做这样的修正,那就是减去这些相似用户对所有东西的平均打分,也就是说,我们需要把这些用户本人的偏差给去除掉。
|
||||
|
||||
综合刚才说的两个因素,可以得到一个更加合适的打分算法,那就是,用户I对物品J的打分来自两个部分:一部分是I的平均打分,另外一部分是I对于J的一个在平均打分之上的补充打分。这个补充打分来自于刚才我们建立的相似用户集,是这个相似用户集里每个用户对于J的补充打分的一个加权平均。权重依赖于这个用户和I的相似度。每个用户对于J的补充打分是他们对于J的直接打分减去他们自己的平均打分。
|
||||
|
||||
相似信息的构建
|
||||
|
||||
我们刚才讲了一下相似用户协同过滤的一个基本思路。那么,这里面有几个要素需要确定。
|
||||
|
||||
第一,我们怎么来定义两个用户是相似的?一种最简单的办法,就是计算两个用户对于他们都偏好物品的“皮尔森相关度”(Pearson Correlation)。这里当然可以换做是其他相关信息的计算。
|
||||
|
||||
具体来说,皮尔森相关度是针对每一个“两个用户”都同时偏好过的物品,看他们的偏好是否相似,这里的相似是用乘积的形式出现的。当两个偏好的值都比较大的时候,乘积也就比较大;而只有其中一个比较大的时候,乘积就会比较小。然后,皮尔森相关度对所有的乘积结果进行“加和”并且“归一化”。
|
||||
|
||||
第二,当有了用户之间的相关度信息后,我们可以设定一些“阈值”来筛选刚才所说的相关用户集合。对于每个目标用户,我们可以设置最多达到前K个相似用户(比如K等于100或者200),这也是有效构造相似集合的办法。
|
||||
|
||||
最后,我们来谈一下刚才所说的加权平均里面的权重问题。一种权重,就是直接使用两个用户的相似度,也就是我们刚计算的皮尔森相关度。当然,这里有一个问题,如果直接使用,我们可能会过分“相信”有一些相关度高但自身数据也不多的用户。什么意思呢?比如有一个用户M,可能和目标用户I很相似,但是M自己可能也就偏好过一两件物品,因此我们可能还需要对相关度进行一个“重新加权”(Re-Weighting)的过程。具体来说,我们可以把皮尔森相关度乘以一个系数,这个系数是根据自身的偏好数量来定的。
|
||||
|
||||
基于相似物品的协同过滤
|
||||
|
||||
在协同过滤的历史上,人们很快就意识到在进行构建推荐的过程中,用户和物品的“对称性”。什么意思?也就是说,我们刚才对于用户的讨论其实完全可以变换到物品中。
|
||||
|
||||
具体说来,那就是我们不去构造和用户I相似的用户,而是去构造所有和物品J相似的物品。这些相似物品集合必须要满足两点:第一,和J相似;第二,已经被用户I触碰了。这里的一个基本的假设类似于,虽然我不知道用户I对于《红海行动》的偏好,但我可以去看一看用户过去看的电影里有哪些和《红海行动》是类似的,我们就可以从那些类似的电影中进行加权平均,取得对《红海行动》的预测。
|
||||
|
||||
小结
|
||||
|
||||
今天,我为你讲了推荐系统的另外一个基本的形式:基于相似度的协同过滤推荐系统。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了整个基于相似度协同过滤的内涵以及我们这么做的基本假设;第二,我们详细介绍了如何构造一个基于用户相似度的协同过滤系统;第三,我们简要地提及了如何构造物品相似的协同过滤系统。
|
||||
|
||||
最后,给你留一个思考题,协同过滤的一个致命问题是什么?
|
||||
|
||||
|
||||
|
||||
|
81
专栏/AI技术内参/060简单推荐模型之三:基于内容信息的推荐模型.md
Normal file
81
专栏/AI技术内参/060简单推荐模型之三:基于内容信息的推荐模型.md
Normal file
@@ -0,0 +1,81 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
060 简单推荐模型之三:基于内容信息的推荐模型
|
||||
周一的文章中,我们聊了一个最基本的基于流行度的推荐模型。周三我们讨论了基于相似信息的推荐模型。基于相似信息的推荐模型,其核心就是协同过滤的思想,希望能够通过相似的用户或者相似的物品来对当前的场景进行推荐。
|
||||
|
||||
然而,不管是基于流行度的推荐,还是协同过滤,这些方法都有一些根本的问题。比如,对于基于流行度预测的推荐来说,推荐结果不是个性化的。因为流行度预测是一种全局的预测,每个人得到的推荐结果是一样的。而协同过滤的问题是强烈依赖相似用户以及相似物品的定义,而且对于新用户或者新物品来说有数据稀缺的问题。因此,在实际应用中,往往不能在整个系统中单独使用协同过滤。
|
||||
|
||||
今天,我们来分享一个更加普遍的方法,那就是基于内容信息的推荐系统。这种系统在实践中往往更能适应各种不同的推荐场景。
|
||||
|
||||
什么是基于内容信息的推荐系统
|
||||
|
||||
所谓基于内容信息的推荐系统,其实就是用特征(Feature)来表示用户、物品以及用户和物品的交互,从而能够把推荐问题转换成为监督学习任务。
|
||||
|
||||
把推荐系统完全定义为监督学习任务,需要有这么几个步骤。
|
||||
|
||||
第一,就是我们已经提到的,需要把所有用户、物品的各种信号用特征来表示。这里面往往牵涉非常复杂和繁琐的特征工程,也就是看如何能够把不同的信息通过特征表达出来。
|
||||
|
||||
第二,就是每一个监督任务都需要面临的问题,如何构造一个目标函数,来描述当前的场景。可以说,这是最难的一个部分,也是和基于流行度和基于相似度的推荐系统的最大区别。
|
||||
|
||||
内容信息的各类特性
|
||||
|
||||
那么,对于物品特性来说,有哪些是比较重要的呢?这里我们肯定没法提供一个完备的列表,那我就来谈一些主要的特性,起到一个抛砖引玉的作用。
|
||||
|
||||
第一,物品的文本信息。比如商品的名字和描述。这些文字信息可以使用很多文本挖掘(Text Mining)的方式来组成有效的特征。
|
||||
|
||||
我们在讲搜索模块的时候,其实就已经提到了一些,比如用TF-IDF的方法来形成文本向量。当然,因为文本信息的噪声相对比较大,并且数据维度也比较大(维度等于文本所对应语言的词汇量),很多时候我们都寻求降低这部分数据的维度,降低到一个固定的维度。这种时候,很多所谓“降维”的工具就很有必要了。
|
||||
|
||||
传统上,有用“话题模型”(Topic Model)对文本进行降维的。也就是说,我们针对每一个文字描述都可以学习到一个话题的分布,这个分布向量可能是50维、100维等等,但是肯定要比原始的词汇向量要小。
|
||||
|
||||
近些年,很多人又开始使用各种“词嵌入向量”(Word Embedding)的方法来为文字信息降维,从而能够使用一个固定的维度来表达文字信息。
|
||||
|
||||
第二,物品的类别信息(或者物品的知识信息)。对于新闻文章来说,类别信息是新闻的话题类别,像娱乐新闻、财经新闻或者时政新闻等。而对于商品来说,类别信息是商品的品类,像电器、床上用品或者生活用品等。这些类别信息往往能够非常有效地抓住物品的整体属性。通常情况下,这样的属性比直接使用文字信息更加直接。
|
||||
|
||||
如何能够得到这样的类别信息呢?在有些情况下,这些类别信息是在数据输入的时候获取的。比如通过合作渠道取得新闻文章的时候,类别往往是编辑加上去的。再比如,商品的类别很多时候也是卖家在输入商品的时候加上去的。
|
||||
|
||||
当然,也有一些情况,这些类别信息并不是直接获得的;或者是在数据中有很多缺失的情况下,就需要利用机器学习的手段,来构造分类器以获取这些类别信息。我们在这里就不展开讨论这些分类器该如何构建了。
|
||||
|
||||
最后需要说明的一点是,除了最基本的类别信息,最近一段时间比较火热的研发领域,就是利用知识图谱(Knowledge Graph)来对物品的各种信息进行深入挖掘。很多信息是通过知识图谱推断出来的。
|
||||
|
||||
举个例子,某一篇新闻文章是关于美国总统特朗普的,于是这篇文章可能就会自动被打上美国总统、美国政治等其他标签。这种通过一些原始的信息来进一步推断更加丰富的知识信息,也是重要的物品类别特征的处理工作。
|
||||
|
||||
最后需要提及的是图像或者其他多媒体的信息。在信息如此丰富的今天,很多物品都有多样的表现形式,比如比较常见的图像、视频等。
|
||||
|
||||
那么,如何从这些媒介中提取信息也是非常关键的物品特征工程。和文字信息正好相反,很多多媒体的信息都是稠密(Dense)的向量,因此需要对这些向量进行特殊处理,比如我们首先学习一个分类器,然后再和其他特征的不同分类器组合。
|
||||
|
||||
前面我们简单谈了谈物品的特征,下面我们再来看看用户的特征。
|
||||
|
||||
对于用户来说,最基础、最首要的肯定是用户的基本特性,包括性别、年龄、地理位置。这三大信息其实可以涵盖用户特性工程中非常大的一块内容。
|
||||
|
||||
这里不仅是最基本的这三个特性的值,还有围绕这三个特性发展出来的三大种类的特性。比如,不同性别在文章点击率上的差异,不同年龄层在商品购买上的差异,不同地理位置对不同影视作品的喜好等,这些都是根据这三个特性发展出来的更多的特性。
|
||||
|
||||
然后,我们可以为用户进行画像(Profiling)。有显式的用户画像,比如用户自己定义的喜好,或者用户自己认为不愿意看到的物品或者类别。
|
||||
|
||||
但是在大多数情况下,用户都不会为我们提供那么精准的回馈信息,甚至完全不会有任何直接的反馈。在这样的情况下,绝大多数的用户画像工作,其实是通过用户的“隐反馈”(Implicit Feedback),来对用户的喜好进行建模。关于如何进行用户画像,我们今天就不在这里展开了。
|
||||
|
||||
目标函数
|
||||
|
||||
讨论了物品和用户特征的一些基本情况后,我们再来简单聊聊另外一个话题,那就是目标函数。我们前面提到,整个基于内容信息的推荐系统就是把所有的信号都当做特征,然后构建一个监督学习任务。
|
||||
|
||||
监督学习的一个关键的就是目标函数。对于一个推荐系统来说,都有什么样的目标函数呢?
|
||||
|
||||
和纯粹的基于评分(Rating)的协同过滤推荐系统一样,我们可以设置监督学习的目标函数是拟合评分。当然,已经有很多学者指出评分并不是推荐系统的真正目标。
|
||||
|
||||
那么,在实际系统中比较常见的目标函数有点击率和购买率,也有一些相对比较复杂的目标函数,比如预测用户在某一个物品上的停留时长。
|
||||
|
||||
对于究竟在哪种场景中使用什么样的目标函数,这依然是当前的一个主要研究方向。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了基于内容信息的推荐系统。通俗地说,就是如何把推荐系统当做监督学习任务来看待。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了整个基于内容推荐的内涵以及我们这么做的基本假设;第二,我们详细介绍了如何构造一个基于内容的推荐系统,特别是如何构造物品和用户的特征;第三,我们简要地介绍了目标函数的重要性。
|
||||
|
||||
最后,给你留一个思考题,如何把我们前面介绍的两种推荐系统模式,也就是基于流行度和协同过滤,也融进基于内容的推荐系统中去呢?
|
||||
|
||||
|
||||
|
||||
|
73
专栏/AI技术内参/061基于隐变量的模型之一:矩阵分解.md
Normal file
73
专栏/AI技术内参/061基于隐变量的模型之一:矩阵分解.md
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
061 基于隐变量的模型之一:矩阵分解
|
||||
上周我们聊了三个简单的推荐模型,分别是基于流行度的推荐模型,基于相似信息的推荐模型和基于内容特征的推荐模型。
|
||||
|
||||
这周,我们来看一类非常重要的推荐模型:基于隐变量的推荐模型。这类模型的优势是对用户和物品信息中的隐含结构进行建模,从而能够挖掘更加深层次的用户和物品关系。
|
||||
|
||||
什么是隐变量
|
||||
|
||||
在解释如何用隐变量来生成推荐结果之前,我们先来说一下什么是隐变量。
|
||||
|
||||
隐变量(Latent Variable),顾名思义,就是“隐藏的变量”或者叫“隐藏的参数”,这里主要是指我们假定实际的数据是由一系列的隐含变量产生的。我们通过模型的假设,知道隐变量之间的关系,但暂时并不知道隐变量的取值。因此需要通过“推断”(Inference)过程来确定隐变量的实际取值。当我们知道了这些隐变量的取值之后,就可以根据这些取值来对未来的数据进行预测和分析。
|
||||
|
||||
隐变量往往还带有“统计分布”(Distribution)的假设。什么意思呢?就是隐变量之间,或者隐变量和显式变量之间的关系,我们往往认为是由某种分布产生的。
|
||||
|
||||
举一个最简单的隐变量模型的例子,那就是“高斯混合模型”(Mixture of Gaussian)。
|
||||
|
||||
高斯混合模型假设数据是由多个不同的高斯分布产生的,每一个高斯分布有自己的均值和方差。在最简单的两个高斯的情况下,每一个数据点,都有可能是由这两个高斯分布中的一个产生的,但是,究竟是哪一个我们并不知道。于是,对于每一个数据点,我们就有一个隐含的变量,来表达当前这个数据点究竟来自哪一个高斯分布。
|
||||
|
||||
很明显,这个隐含变量的取值事先并不知道。除了这个隐含变量我们不知道以外,两个高斯分布的均值和方法其实也不知道。于是,对于高斯混合模型来说,整个学习的过程就需要估计每个数据点的来源以及多个高斯分布的均值和方差。高斯混合模型,几乎是最简单的隐变量模型,但也给我们了展示了使用隐变量模型对数据建模的灵活性以及训练的复杂性。
|
||||
|
||||
矩阵分解作为隐变量模型
|
||||
|
||||
了解了隐变量模型的基本的概念以后,我们还是回到推荐的场景。
|
||||
|
||||
在推荐系统中,有一种最普遍的数据表达,那就是用户和物品的交互,比如评分、点击等等。这里我们用评分作为一般性的讨论。对于每一个用户,如果我们用一个向量来表达其对所有可能物品的评分,那么把所有用户的向量堆积起来,就可以得到一个矩阵。这个矩阵的每一行代表一个用户,每一列代表一个物品,每一个交叉的元素代表某一个用户对于某一个商品的评分。
|
||||
|
||||
那么这个矩阵有什么特点呢?最大的特点就是,这个矩阵的数据其实非常稀少。因为在一个现实的系统中,一个用户不可能对所有的物品都进行评分。实际上,一个用户仅仅对非常少的物品进行过评分,而对绝大多数物品并不会评分,甚至连评分的打算都没有。因此,这个矩阵的绝大多数元素其实是0。当然,实际上这些元素也不是0,而是未知,因为用户并不是觉得这些物品的评分是0,而是压根没有对这些物品进行打分,也就是说评分信息不完备。
|
||||
|
||||
对于这样一个矩阵,我们的任务其实就是根据有评分的用户物品交互,对那些还没有评分信息的物品进行预测。如果我们能够“补全”(Complete)整个矩阵里的其他元素,那么就可以根据预测的评分从大到小给用户进行推荐。
|
||||
|
||||
怎么来补全这个矩阵的信息呢?
|
||||
|
||||
这里,我们假设,矩阵的每一个元素都是经过这样一个过程产生的。
|
||||
|
||||
首先,我们假设每一个用户和每一个物品都对应一个隐向量(Latent Factor)。比如,我们用100维的向量来表达一个用户,用另外一个100维的向量来表达一个物品。如果我们有1百万个用户和1万个物品,那么我们就需要1百万个100维的用户向量,和1万个100维的物品向量。
|
||||
|
||||
然后,我们假设矩阵的每一个元素是由所对应的用户和物品的隐向量点积得到的。也就是说,矩阵里的每一个元素,都是一个100维的用户向量和一个100维的物品向量对应元素相乘相加而得。
|
||||
|
||||
在这样的一个假设下,一个原本1百万乘以1万的矩阵就可以被分解为1百万乘以100的用户矩阵和100乘以1万的物品矩阵的乘积。这也就是为什么在这样的模型下,我们会称这个方法为“矩阵分解”(Matrix Factorization)的原因。
|
||||
|
||||
在矩阵分解这个假设下,我们可以看到,原本是需要对整个矩阵,也就是1百万乘以1万个数据进行建模,而现在缩减到了两个小一些的矩阵1百万乘以100和100乘以1万。对比来看,之前对于每一个用户,我们需要一万个元素来表达用户对于这一万个物品的评分喜好;现在,对每个用于仅仅需要保存100个元素。
|
||||
|
||||
只不过,这一百个元素的数值并不代表任何意义。从这个层面上理解矩阵分解,也就能够帮助我们知道,这个方法其实是一种“降维”(Dimension Reduction),也就是把一个比较大的矩阵分解成两个小矩阵来表达。
|
||||
|
||||
我们可以看到,矩阵分解的核心其实就是刚才的假设,用隐向量来表达用户和物品,他们的乘积关系就成为了原始的元素。不同的假设可以得到不同的矩阵分解模型。
|
||||
|
||||
学习矩阵分解模型
|
||||
|
||||
很明显,矩阵分解仅仅告诉了我们这个模型的表达,但并没有告诉我们怎么去获得整个模型的最核心内容,那就是用户矩阵和物品矩阵里每一个元素的数值。也就是我们所说的,用户隐向量和物品隐向量都是事先不知道的。
|
||||
|
||||
那有什么办法能够得到这些向量的取值呢?
|
||||
|
||||
这里介绍一种常用的方法,就是利用最小二乘法的原理(Least Square)来拟合求解这些隐向量。
|
||||
|
||||
前面讲到,矩阵里的每一个元素来自于两个隐向量的点积,我们就可以利用这一点来构造一个目标函数。这个目标函数其实就是说,这两个隐向量的点积一定要与我们观测到的矩阵数值相近。这里的“相近”是用这两个数值的误差,在这里也就是平方差(Square Error)来衡量的。误差越小,说明数据拟合得越好,隐向量也就更能表达用户和物品。
|
||||
|
||||
构造好了这个目标函数以后,我们就可以利用优化算法来求解这个目标函数。因为两个未知数点积的原因,这个目标函数没有一个全局的最优解,但是我们可以通过“梯度下降”(Gradient Descent)的方法找到一个不错的局部解(Local Minima)。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了推荐系统的一个重要分支,隐变量模型。我们讲了其中最重要的一个基本模型,矩阵分解。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了隐变量模型的基本原理;第二,我们详细介绍了矩阵分解作为隐变量模型的假设和原理;第三,我们简要地讨论了如何求解矩阵分解里的隐变量。
|
||||
|
||||
最后,给你留一个思考题,矩阵分解模型最大的问题是什么?
|
||||
|
||||
|
||||
|
||||
|
61
专栏/AI技术内参/062基于隐变量的模型之二:基于回归的矩阵分解.md
Normal file
61
专栏/AI技术内参/062基于隐变量的模型之二:基于回归的矩阵分解.md
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
062 基于隐变量的模型之二:基于回归的矩阵分解
|
||||
本周我们主要来分享“矩阵分解”的点点滴滴,这是过去10年里推荐系统中最流行的一类模型。周一我们讨论了这类方法中最基础的基于隐变量的矩阵分解。这类模型的优势是显式地对用户和物品信息中的隐含结构进行建模,从而能够挖掘更加深层次的用户和物品关系。矩阵分解的流行起源于10年前的Netflix大赛,当时各类矩阵分解模型都在实际数据中起到了很好的效果。
|
||||
|
||||
今天我们要分享的模型,叫作“基于回归的隐变量模型”(Regression-based Latent Factor Model)。这是在基本矩阵分解的基础上衍生出来的一类模型。
|
||||
|
||||
基本矩阵分解的问题
|
||||
|
||||
我们先来看看基本矩阵分解模型的潜在问题。
|
||||
|
||||
首先,我们来回顾一下矩阵分解的基本表达。假设我们在对用户和物品的评分进行建模。对于每一个用户,用一个向量来表达其对于所有可能物品的评分,把所有用户的向量堆积起来,就可以得到一个矩阵。这个矩阵的每一行代表一个用户,每一列代表一个物品,每一个交叉的元素代表某一个用户对于某一个商品的评分。对于每一个用户和物品的隐向量都要少于原有的物品数目,因此,我们也说矩阵分解的模型实现了“降维”(降低建模维度)的目的。
|
||||
|
||||
虽然矩阵分解的模型对于挖掘用户和物品的内在联系有比较强的作用,但是这类模型的劣势也十分明显。
|
||||
|
||||
第一,矩阵分解的矩阵仅仅是对用户和物品的喜好进行了“编码”(Encode)。我们之前在解释基于内容的推荐系统时说过,对于一个复杂的工业级推荐系统来说,有很多灵感或者直觉,都很难仅仅依赖用户和物品的喜好来捕捉到。有大量的信号,无法很好地被融合到这个矩阵分解的模式里。因此,矩阵分解虽然是不错的“独立”模型(Standalone),但在融合多种不同的推荐元素方面,表现却很一般。
|
||||
|
||||
第二,矩阵分解的核心是学习用户的隐向量和物品的隐向量。原则上,这两类隐向量的学习仅能通过训练过程获得。
|
||||
|
||||
什么意思呢?就是说,如果在训练集合中有100个用户,200个物品,那么通过训练,我们可以学习到这100个用户和200个物品对应的隐向量,用于以后的预测或者排序。但我们无法获得新来用户或者新来物品的隐向量了,因为这些用户和物品并不在训练集里。
|
||||
|
||||
在推荐系统中,这种情况就叫作不能处理“冷启动”(Cold Start)问题,也就是不能处理“冷”用户和“冷”物品。这个特点是好是坏取决于具体的应用。但是,在有些应用的场景下,这是灾难性的一种特性。比如,新闻网站推荐文章,一般来说新闻文章滚动得都很快,随时随地都可能有新文章涌入,每过几天,整个网站的文章可能都被换掉,在这样的场景下,直接使用矩阵分解就会有问题。
|
||||
|
||||
矩阵分解的基本模型存在这两个问题,那有没有什么办法可以扩展矩阵分解的形式,改善在这两种情况下的处理呢?
|
||||
|
||||
基于回归的矩阵分解
|
||||
|
||||
基于回归的矩阵分解,其核心思路其实非常简单直观。矩阵分解不过是定义了一种从用户隐变量和物品隐变量到可以观测到的评分,这一显变量的产生过程。如果我们掌握了这么一个思路,那么,基于回归的矩阵分解就很容易理解了。
|
||||
|
||||
首先,有一组用户特性和物品特性来表述每一个用户和物品。这些特性不是隐变量,是显式表达的特性。用户特性比如用户的年龄、性别、经常出现的地区、已经表达了喜好的类别等;物品特性比如物品的种类、描述等等。这两组显式的特性就是为了解决我们刚才说的第一个问题,矩阵分解无法抓住更多的信号。而在这里,我们明确定义这两组信号,一组来自于用户,一组来自于物品,希望能够通过这些信号抓住更多有价值的信息。
|
||||
|
||||
解决了这一步后,现在我们有两个独立的,看上去不相关的部分。一个是基于矩阵分解的部分,这一部分是分解一个已知的评分矩阵,从而学习到用户和物品的隐向量。另外一个部分,就是用户特性和物品特性,暂时还不知道如何与矩阵分解关联上。
|
||||
|
||||
基于回归的矩阵分解假定,用户的隐向量,其实是从用户的显式特性变换而来的。同理,物品的隐向量,其实是从物品的显式特性变换而来的。而这两种变换,本质上就是两个回归模型(Regression Model)。就是说,我们建立一个从显式特性到隐向量的回归模型,使得隐向量受到两方面的制约:从评分矩阵的分解得来的信息和从显式特性回归得来的信息。这样,我们就把这两部分信息嫁接到了一起。
|
||||
|
||||
把这两部分信息嫁接到一起的好处就是,我们不再怕“冷启动”了。或者说,在有一部分“冷启动”的情况下,这样的模型可以处理得更好。原因就是我们使用了显示特性来回归隐向量。对于新用户和新物品而言,我们虽然没有直接得到他们的隐向量,但是有这些用户或者物品的显式特性,而这些显式特性可以帮助我们估计到新用户和新物品的隐向量,即使我们并没有它们的交互信息。这就是基于回归的矩阵分解的强大之处。
|
||||
|
||||
我们还可以从贝叶斯的角度来理解基于回归的矩阵分解。把用户的隐向量和物品的隐向量看作是两个随机变量。我们可以认为这些随机变量加上了先验概率分布。只不过,这个先验概率分布的均值不是我们经常使用的0,而是一个以回归函数的结果为均值的高斯分布,这个回归函数就是我们由显式特性得到的。本质上,我们认为显示特性的某种变换成为了隐向量的先验信息。
|
||||
|
||||
学习基于回归的矩阵分解
|
||||
|
||||
基于回归的矩阵分解,其实就相当于我们定义了“层次的贝叶斯模型”(Hierarchical Bayesian Model)。模型的求解就变得更加复杂。
|
||||
|
||||
有一种学习这个模型的简单思路。第一,针对已知的用户和物品,先通过简单的矩阵分解学习到用户和物品的隐变量。在这个部分里,用户的显式信息并不参与学习。第二,学习好了这部分变量以后,再来学习从显式信息到隐变量的回归部分。这部分基本上可以当作线性回归。当然,用这种两个阶段的学习流程,并不能保证学习到的参数是最优的,这仅仅是一种简化的学习方法。
|
||||
|
||||
如果走比较正统的学习过程,这样的模型需要采用“期望最大化”(Expectation Maximization)的流程。也就是说,我们先用一组随机的参数来决定回归的部分,学习到最佳的隐向量,然后再根据隐向量更新回归部分的参数。因篇幅的原因我们就不展开细节了。不过,即便如此,我们也仅仅能够学习到一个局部解。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了隐变量模型中基于回归的矩阵分解。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了矩阵分解的一些问题;第二,我们详细介绍了基于回归的矩阵分解的基本思路,以及这样的模型如何解决了传统矩阵分解关于“冷启动”的难题;第三,我们简要地讲解了如何求解基于回归的矩阵分解里的参数。
|
||||
|
||||
最后,给你留一个思考题,基于回归的矩阵分解的短板是什么?
|
||||
|
||||
|
||||
|
||||
|
67
专栏/AI技术内参/063基于隐变量的模型之三:分解机.md
Normal file
67
专栏/AI技术内参/063基于隐变量的模型之三:分解机.md
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
063 基于隐变量的模型之三:分解机
|
||||
周三我们分享了“基于回归的隐变量模型”,这是在基本的矩阵分解基础上衍生出来的一类模型。这种模型把显式特性和隐变量结合起来,对解决“冷启动”问题有一定作用。
|
||||
|
||||
今天,我们来介绍一种叫作“分解机”(Factorization Machines)的推荐技术。这个模型是从基于回归的隐变量模型中衍生出来的,已成为了主流的推荐模型。
|
||||
|
||||
矩阵分解和基于回归的隐变量模型存在哪些问题?
|
||||
|
||||
在介绍分解机的基本原理之前,我们先来回顾一下从“矩阵分解”到“基于回归的隐变量模型”的一个发展脉络。
|
||||
|
||||
首先,矩阵分解主要解决了两个问题,那就是从一个大矩阵降维到两个小矩阵,并且寄希望这两个小矩阵能够抓住用户和物品的相关度。
|
||||
|
||||
然而,单纯的矩阵分解无法融入很多用户和物品的特性,这就引导我们开发出了基于回归的矩阵分解。所谓的回归部分,也就是从显式特性出发,建立从显式特性到隐变量之间关系的流程,从而使我们能够把更多的信号放进模型中。
|
||||
|
||||
在一定程度上,基于回归的隐变量模型实现了把显式变量和隐变量结合的目的,但是这类模型的学习过程非常麻烦。实际上,因为这类模型复杂的训练流程,其在实际应用中并不常见。
|
||||
|
||||
那么,有没有其他思路来统一显式变量和隐变量的处理方式呢?
|
||||
|
||||
分解机的基本原理
|
||||
|
||||
分解机[1]是学者斯特芬·润顿(Steffen Rendle)在德国康斯坦扎大学任教期间开发出来的推荐模型。斯特芬后来加入谷歌,分解机是他的代表作品。
|
||||
|
||||
分解机结合了“基于内容的推荐系统”和“基于回归的隐变量模型”的一些基本思想。
|
||||
|
||||
基于内容的推荐系统,其核心就是认为需要预测的变量(这里我们依然讨论评分)是所有显式变量的一个回归结果。分解机直接借鉴了这一点,也就是说,分解机的输入是所有的显式变量。
|
||||
|
||||
实际上,分解机在对待显式变量的手法上更进了一步,那就是不仅直接对显式变量进行建模,还对显示变量的两两关系进行建模。当然,在原始的论文中,分解机其实还可以对更加高维的关系进行建模,我们这里局限在两两关系上。
|
||||
|
||||
什么意思呢?比如说我们有一个用户特性,是用户的年龄;我们有一个物品特性,是物品的种类。那么,普通的回归模型,就是把用户的年龄和物品的种类直接当作特性输入到模型中。而对于分解机来说,这只是第一步。
|
||||
|
||||
第二步,分解机是把这两个特性的数值进行乘积,当作一个新的特性,然后进一步处理这种两两配对的关系。把原始特性进行两两配对是构建模型的一种重要的方法,特别是对于非深度学习模型,需要自己做特征工程的模型。
|
||||
|
||||
两两配对的特征有什么好处呢?好处就是可以对两种特性的交互信息进行建模。举个例子,如果我们特别在意某个年龄段的用户在某种商品类别中的评分,那么,把这两个特性相乘,从而抓取到这个交互信息,是一个非常有效的手段。
|
||||
|
||||
但是,两两配对存在什么问题吗?一个问题就是特性空间会急速增长。如果我们有一个100维的用户特性向量,然后有一个100维的物品特性向量,那对于两两配对的特征,就是100乘100这个数量级的。另一个更严重的问题就是,如果我们的单独特性中,有一些是“类别特性”(Categorical Feature),那么在两两配对之后就会产生大量的0,从而变成一个巨大的稀疏矩阵。
|
||||
|
||||
如何解决这个问题呢?分解机利用了矩阵分解的降维思路。就是说,我们不对一个稀疏矩阵直接建模,而是把这个稀疏矩阵分解之后再进行建模。具体到上面这个例子,就是先假定,所有特性都对应一个隐变量向量,两个显式特性的乘积是两个特性的隐变量的点积。也就是说,我们把两个显式特性的乘积分解为了两个向量的乘积。这样,我们就不需要直接表示原来的稀疏矩阵。
|
||||
|
||||
在这样的思路下,分解机成功地把隐变量和显式变量结合到了一起。当我们的显式特性仅仅是用户ID和物品ID的时候,分解机的表达退回了最原始的矩阵分解。也就是说,矩阵分解其实可以表达成为特性的两两作用矩阵的分解。
|
||||
|
||||
在原始的论文中,作者还用分解机模拟了好几种流行的模型,我们这里就不复述了。
|
||||
|
||||
虽然也是为了建立从显式特性到隐变量的关系,但是对比基于回归的矩阵分解而言,分解机的训练过程大大简化了。在实际应用中,我们经常使用“随机梯度下降”(SGD, Stochastic Gradient Descent)来对分解机直接进行求解。
|
||||
|
||||
在最近几年的Kaggle比赛中以及一些工业级的应用中,分解机凭借其简单易用的特点,成为了很多产品的核心算法。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了隐变量模型中分解机的基本原理。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了矩阵分解的一些问题;第二,我们详细介绍了分解机的基本原理;第三,我们简要讲了如何求解分解机。
|
||||
|
||||
最后,给你留一个思考题,分解机能够解决“冷启动”的问题吗?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Steffen Rendle. Factorization Machines with libFM. ACM Trans. Intell. Syst. Technol. 3, 3, Article 57 (May 2012), 22 pages, 2012.
|
||||
|
||||
|
||||
|
||||
|
||||
|
85
专栏/AI技术内参/064高级推荐模型之一:张量分解模型.md
Normal file
85
专栏/AI技术内参/064高级推荐模型之一:张量分解模型.md
Normal file
@@ -0,0 +1,85 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
064 高级推荐模型之一:张量分解模型
|
||||
上周我们分享了推荐系统中矩阵分解的点点滴滴,简单复习一下讨论过的三个模型。
|
||||
|
||||
第一,“基于隐变量的矩阵分解”,其优势是显式地对用户和物品信息中的隐含结构进行建模,从而能够挖掘更加深层次的用户和物品关系。
|
||||
|
||||
第二,“基于回归的隐变量模型”,这是在基本的矩阵分解基础上衍生出来的一类模型。这种基于回归的矩阵分解模型把显式特性和隐变量结合起来,对解决“冷启动”问题有一定作用。
|
||||
|
||||
第三,“分解机”是由基于回归的隐变量模型衍生出来的,并且吸纳了基于信息的推荐系统的一些观点,成为了一种可以融合多种信息的强有力的工具。
|
||||
|
||||
这周,我们跟随着这个脚步,进一步来讨论一些比较高级的模型,看这些模型如何抓住更多的用户和物品之间的关系。
|
||||
|
||||
今天,我们先来聊一种叫作“张量分解”(Tensor Factorization)的模型。
|
||||
|
||||
为什么需要张量分解
|
||||
|
||||
在我们探讨张量分解的一些基本思想之前,先来看一看,推荐系统在什么场景下需要张量分解。
|
||||
|
||||
我们还是要从矩阵分解说起。矩阵分解的核心思想,是用矩阵这种数据结构来表达用户和物品的相互关系。这里,我们一般谈论的都是一些最简单的关系,例如评分、点击、购买等(本文我们依然只是讨论评分)。在这种二元的模式下,矩阵就是最好的表达用户和物品之间关系的数据结构。
|
||||
|
||||
然而,在真实的场景中,用户和物品的关系以及产生这种关系的周围环境是复杂的。一个矩阵并不能完全描述所有的变量。例如,用户对于某个物品的评分是发生在某个地点、某个时间段内的。这种所谓的“上下文关系”(Context)往往会对评分产生很大影响。遗憾的是,一个矩阵无法捕捉这样的上下文关系。
|
||||
|
||||
我们之前讨论过的“基于回归的矩阵分解”和“分解机”,本质上都是在某种程度上绕开这个问题。采用的方法就是,依然用矩阵来表达二元关系,但是把其他信息放进隐变量中,或者是采用基于信息的推荐系统的思路来得到相关信息的建模。
|
||||
|
||||
除了这种思路,还有没有别的方法,可以把上下文关系融入到对用户和物品的建模中去呢?
|
||||
|
||||
这时“张量”就该上场了。
|
||||
|
||||
从本质上来说,张量就是矩阵的推广。我们可以这么理解,矩阵是对二维关系建模的一种工具;而张量,就是对N维关系的一种建模。在二维关系中,用户和物品的评分是唯一能够被建模的变量;而到了N维关系中,理论上,我们可以对任意多种上下文关系进行建模。
|
||||
|
||||
比如,我们刚才提到的时间,就可以组成一个三维的张量,分别为用户、物品和时间。然后,在这个三维的张量中,每一个单元代表着某一个用户对于某一个物品在某一个时间段的评分。
|
||||
|
||||
基于张量分解的推荐模型
|
||||
|
||||
我们已经讲了张量的作用。那么,如何使用张量来进行推荐模型的建模呢?
|
||||
|
||||
我们还是用刚才所说的“用户、物品和时间”作为例子。在这个三维的张量里,每一个元素代表的是用户对于物品在某个时间段上的评分。那么,根据矩阵分解的思路,我们怎么来对这个张量进行分解呢?
|
||||
|
||||
遗憾的是,张量的分解要比矩阵分解更为复杂。与矩阵分解不同,张量分解至少有两种不同的形式,这两种形式会引导出不同的分解模型和算法。
|
||||
|
||||
第一种分解模式叫 CP分解(CANDECOMP/PARAFAC)。
|
||||
|
||||
拿我们刚才所说的三维张量来讲,CP分解是把一个三维张量分解为三个矩阵。具体来说,比如我们的三维张量是N维用户乘以M维的物品乘以R维的时间段。那么,分解出来的三个矩阵就分别为N维乘以K维的用户矩阵,M维乘以K维的物品矩阵,以及R维乘以K维的时间矩阵。这三个矩阵中的每一个向量都代表某一个用户、某一个物品和某一个时间段。K在这里是一个参数,类似于矩阵分解中的隐变量的维度,我们也就可以把这个K理解成为隐变量的维度。
|
||||
|
||||
那么在原始的三维张量中,某一个元素就是这三个矩阵的某三个向量对应元素乘积相加的结果。CP分解的一大好处就是,分解出来的三个矩阵的隐变量维度是一样的,这也就减少了需要调整的参数的个数。
|
||||
|
||||
第二种分解模式叫作 HOSVD分解(High Order Singular Value decomposition)。
|
||||
|
||||
这种分解和CP分解最大的不同就是分解出来的三个矩阵的维度不再一样。也就是说,在我们之前的例子中,用户矩阵的维度可以是N乘以A,物品矩阵的维度是M乘以B,时间段矩阵的维度是R乘以C。当然,这样就无法还原之前的N乘以M乘以R的三维张量了。
|
||||
|
||||
于是在技术上,还需要乘以一个A乘以B乘以C的小张量才能对原始数据进行复原。所以,通俗地讲,HOSVD分解就是把一个三维的张量,分解成为三个矩阵和一个更小的张量的乘积。
|
||||
|
||||
那HOSVD相比CP分解有什么好处呢?好处自然就是给不同的数据以不同的自由度,因为不再限制用户、物品和时间段都必须有一样的维度。但同时也带来了难点,那就是有了更多的“超参数”需要调整。
|
||||
|
||||
值得一提的是,我们仅仅是讲了讲张量分解的一个基本思路。在实际的运作中,还有一个重要的步骤,那就是设计目标函数,或者说是定义损失函数。在一般的分解过程中,我们可以定义“平方差”(Squared Loss),也就是原始数值和预测数值之间的平方差来作为损失函数,当然也可以使用其他的损失函数,这一点和矩阵分解是一样的。
|
||||
|
||||
求解张量分解
|
||||
|
||||
虽然张量是对矩阵的自然延伸,张量分解是矩阵分解的某种延伸,但是求解张量分解则是一个相对比较难的问题。
|
||||
|
||||
一种比较简单的模式依然是使用“随机梯度下降”法(SGD, Stochastic Gradient Descent),也就是把张量的分解问题看作是一个一般的优化问题。关于这种方法的细节我在这里不详细讲解了,感兴趣的话,建议阅读参考文献[1],这是一篇很经典的论文,是第一次把张量分解使用在推荐系统中。
|
||||
|
||||
另外一种方法,也是在矩阵分解中可以使用的,叫作 ALS(Alternating Least Square)方法。这种方法则是在优化每一轮的时候,按住所有其他的矩阵变量不动,单独优化一个变量。举例来说,如果我们要优化用户矩阵,那么我们就按住物品矩阵和时间段矩阵不动,不去更新里面的参数,而仅仅更新用户矩阵里面的参数。同理,在下一轮的优化中,可以仅仅更新物品矩阵里的参数。这种方法也是行之有效的一种优化方法。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了推荐系统的一个高级模型:张量分解。张量分解模型主要用来对上下文的信息进行建模。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了为什么需要张量分解;第二,我们详细介绍了张量分解的基本原理;第三,我们简要地讨论了如果求解张量分解。
|
||||
|
||||
最后,给你留一个思考题,从概念上来看,用张量分解对上下文信息进行建模的最大问题是什么?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Alexandros Karatzoglou, Xavier Amatriain, Linas Baltrunas, and Nuria Oliver. Multiverse recommendation: n-dimensional tensor factorization for context-aware collaborative filtering. Proceedings of the fourth ACM conference on Recommender systems (RecSys ‘10). ACM, New York, NY, USA, 79-86, 2010.
|
||||
|
||||
|
||||
|
||||
|
||||
|
79
专栏/AI技术内参/065高级推荐模型之二:协同矩阵分解.md
Normal file
79
专栏/AI技术内参/065高级推荐模型之二:协同矩阵分解.md
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
065 高级推荐模型之二:协同矩阵分解
|
||||
周一我们讨论了“张量分解”模型。这种模型的特点是能够把不同的上下文当作新的维度,放进一个张量中进行建模。虽然张量分解是矩阵分解在概念上的一种直觉扩展,但其在现实建模的过程中有很大难度,最大的问题就是张量分解的求解过程相对比较复杂,不同的分解方法又带来不同的建模选择。
|
||||
|
||||
今天,我们来看另外一种思路,来解决融合多种渠道信息的问题,这就是协同矩阵分解(Collective Matrix Factorization)。
|
||||
|
||||
为什么需要协同矩阵分解
|
||||
|
||||
在解释什么是协同矩阵分解之前,我们先来看一看为什么需要这样一种思路。我们还是需要回到矩阵分解本身。
|
||||
|
||||
矩阵分解的核心就是通过矩阵,这个二维的数据结构,来对用户和物品的交互信息进行建模。因为其二维的属性,矩阵往往只能对用户的某一种交互信息直接进行建模,这就带来很大的局限性。
|
||||
|
||||
在之前的讨论中,我们看到了一系列不同的思路来对这样的基本结构进行扩展。
|
||||
|
||||
思路一,就是通过建立显式变量和隐变量之间的回归关系,从而让矩阵分解的核心结构可以获得更多信息的帮助。
|
||||
|
||||
思路二,则是采用分解机这样的集大成模型,从而把所有的特性,都融入到一个统一的模型中去。
|
||||
|
||||
思路三,就是我们这周已经讲到的,利用张量,把二维的信息扩展到N维进行建模。
|
||||
|
||||
这些已有的思路都各有利弊,需要针对具体的情况来分析究竟什么样的模型最有效果。
|
||||
|
||||
然而在有一些应用中,除了用户和物品这样很明显的二元关系以外,还有其他也很明显的二元关系,如何把这些二元关系有效地组织起来,就变成了一个有挑战的任务。
|
||||
|
||||
什么意思呢?比如,我们是一个社交媒体的网站,既有用户对于物品(比如帖子)的交互信息,又有用户之间的互相连接信息(谁与谁是好友等)。那么,如何来显式地表达这两类不同的二元关系呢?
|
||||
|
||||
在前面的思路里面可以看到,我们似乎需要选择一个主要的关系来作为这个模型的基础框架,然后把其他的信息作为补充。在这样两类关系中,选择哪一个作为主要关系,哪一个作为补充关系,就显得有一点困难了。
|
||||
|
||||
更进一步说,对于用户与用户之间的建模,以及用户与物品之间的建模,我们其实会有不同的模型去构造。例如,用户与物品之间的评分,往往用整数来代表评分的数值,或者是用实数来代表喜好度。而用户与用户之间的友好关系,则往往是0或者1,象征是否有连接。因此,我们可能需要不同的模型对这些不同的数值进行建模。
|
||||
|
||||
这也就让研究人员想出了协同矩阵分解的思路。
|
||||
|
||||
协同矩阵分解的基本思路
|
||||
|
||||
协同矩阵分解的基本思路其实非常直观,那就是有多少种二元关系,就用多少个矩阵分解去建模这些关系。
|
||||
|
||||
用我们刚才所说的社交媒体的例子。如果我们有用户与用户的关系,用户与物品的关系,那我们就组织两个矩阵分解,分别来对这两种关系进行建模。最早对这个思想进行得比较完整的表述,我在文末列出了参考文献[1]。
|
||||
|
||||
这里的一个核心就是,如果两个没有关系的矩阵,各自做矩阵分解,那么分解出来的信息,一般来说,是没有任何关联的。
|
||||
|
||||
再来看刚才的例子,如果有一个用户与用户的矩阵需要分解,然后有一个用户与物品的矩阵需要分解。那从这两个矩阵分解中,我们分别可以得到至少两组不同的用户隐变量。一组是从用户与用户的关系而来,一组是从用户与物品的关系而来。这两组用户的隐变量是不一样的。同时,因为两个矩阵没有关联,所以无法达到我们希望这两种关系互相影响的效果。
|
||||
|
||||
要想在两个矩阵分解之间建立联系,我们必须有其他的假设。这里的其他假设就是,两组不同的用户隐变量其实是一样的。也就是说,我们假设,或者认定,用户隐变量在用户与用户的关系中,以及在用户与物品的关系中,是同一组用户隐变量在起作用。
|
||||
|
||||
这样,虽然表面上还是两个矩阵分解,但其实我们限定了其中某一部分参数的取值范围。说得直白一些,我们认定从两个矩阵分解出来的两组来自同一个因素(这里是用户)的隐变量是完全一样的。用更加学术的语言来说,这就是将两组矩阵分别投影到了相同的用户空间和物品空间。
|
||||
|
||||
这样做的好处,自然就是对于多种不同的关系来说,我们使用“相同隐变量”这样的假设,可以把这些关系都串联起来,然后减少了总的变量数目,同时也让各种关系互相影响。
|
||||
|
||||
那么,这样的假设有没有潜在的问题呢?
|
||||
|
||||
一个比较大的潜在问题就是,使用同样的一组隐变量去表达所有的同类关系,这样的假设存在一定的局限性。比如上面的例子,用同样一组用户隐变量去解释用户和用户之间的关系,同时也需要去解释用户和物品之间的关系,能够找到这样一组用户隐变量其实是有一定难度的。
|
||||
|
||||
而在实际应用中,不同关系的数据量会有很大的差距。比如,用户和物品关系的数据总量可能要比用户与用户的多。所以,由于用户和物品关系的数据多,两个矩阵分解用的同一组用户隐变量,很可能会更多地解释用户和物品的部分,从而造成了学到的隐变量未必能够真正表达所有的关系。
|
||||
|
||||
对于这样的情况,自然已经有一些学者想到了对策,我们今天就不在这里展开了。
|
||||
|
||||
最后,需要提一下,在协同矩阵分解的场景中,学习各个隐变量的参数的过程,和一般的单个矩阵分解相比,没有太多本质性的变化。最简单的学习过程,依然是利用随机梯度下降法(SGD, Stochastic Gradient Descent)去学习。只不过,每一个隐变量会存在于多个矩阵分解中,这在更新变量时增加了所需的计算量。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了推荐系统的另一个高级模型,协同矩阵分解,用来对不同类型的二元信息进行建模。
|
||||
|
||||
一起来回顾下要点:第一,我们简要介绍了为什么需要协同矩阵分解;第二,我们详细介绍了协同矩阵分解的原理、潜在问题和解法。
|
||||
|
||||
最后,给你留一个思考题,从概念上来看,协同矩阵分解和张量分解之间有怎样的关系?是不是所有的张量分解都可以化为多个协同矩阵分解呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Ajit P. Singh and Geoffrey J. Gordon. Relational learning via collective matrix factorization. Proceedings of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD ‘08). ACM, New York, NY, USA, 650-658, 2008.
|
||||
|
||||
|
||||
|
||||
|
||||
|
73
专栏/AI技术内参/066高级推荐模型之三:优化复杂目标函数.md
Normal file
73
专栏/AI技术内参/066高级推荐模型之三:优化复杂目标函数.md
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
066 高级推荐模型之三:优化复杂目标函数
|
||||
周三我们讨论了协同矩阵分解,其主要思想就是解决多个两两关系的矩阵分解,并且希望能够建立隐变量之间的共享。
|
||||
|
||||
今天,我们来看一个稍微不一样的话题,那就是如何优化更加复杂的目标函数。
|
||||
|
||||
为什么需要复杂的目标函数
|
||||
|
||||
在介绍更复杂的目标函数之前,我们首先来回想一下,在之前的分享中,都接触到了哪些目标函数。
|
||||
|
||||
对于基于流行度或者相似度的推荐系统来说,其实并没有真正的目标函数的概念。这些推荐模型都是某种直观的“翻译”,这也导致了这些推荐系统很难直接使用在真实的应用中,往往是被当作特性用在其他模型中。
|
||||
|
||||
基于信息的推荐系统,本质上就是监督学习在推荐系统中的应用。因为是监督学习,那自然就需要目标函数。这里,经常是对点击率或者购买率进行建模,也就是说,经常使用二分分类的目标函数。
|
||||
|
||||
当我们使用矩阵分解的架构来对用户和物品的关系进行建模时,绝大多数情况下我们是在讨论评分。对于评分信息,常用的其实是线性回归(Linear Regression),也有学者使用泊松回归,因为泊松回归对于整数变量的建模要好于线性回归。当然了,矩阵分解也可以扩展到对点击率或者购买率的建模。
|
||||
|
||||
当年Netflix竞赛之后,Netflix公司把获奖的矩阵分解拿来进行实现,放入线上系统中,结果发现并没有本质性地提高推荐效果,这其实就和目标函数有关。虽然Netflix竞赛造就了矩阵分解等类似模型的流行,但是逐渐地,研究人员和工业界从业人员也意识到,用户对物品的评分,并不是推荐系统需要优化的目标,也就是说目标函数“选错了”。
|
||||
|
||||
那么,我们需要什么样的目标函数呢?
|
||||
|
||||
高级目标函数
|
||||
|
||||
直接对评分进行建模的最大问题,就是这和真实的推荐场景并不相符。不管是电商平台,还是新闻系统,我们并不是只在意用户对于某一些物品的评分。
|
||||
|
||||
真实的应用场景往往是这样的,用户打开应用,然后浏览一系列物品,由上往下进行翻阅,然后从中找到喜欢的物品。
|
||||
|
||||
这是不是很像我们在讨论搜索的时候,用户对于搜索结果的浏览?回忆一下,在搜索的场景中,我们首先输入关键字,然后搜索算法会返回一系列的结果。大多数情况下,我们会对返回的结果逐一检查。
|
||||
|
||||
在推荐场景下,我们虽然没有搜索关键词,但是整个从上往下的场景是类似的。
|
||||
|
||||
于是,我们就可以从搜索排序中得到启发,尝试对推荐结果进行排序。换句话说,我们并不在意用户的真实评分,或者我们是否能对用户和物品的喜好度进行完美估计,我们在意的是,能否把用户可能喜欢的物品排到前面去。
|
||||
|
||||
把搜索系统中的排序思想利用到推荐系统中,是推荐系统的一个重大进步,这也让推荐系统和真实场景逐渐挂钩。
|
||||
|
||||
那么,很直观的,要想更改推荐系统的行为,从评分的预测到排序学习,我们需要更改目标函数。
|
||||
|
||||
参考文献[1]中提出了一种叫BPR的方法,是把配对法引入到推荐系统中的一个重要工作。我们快速回忆一下已经在搜索系统中介绍过的“配对排序学习”。简单说来,配对法就是希望,对于某一个查询关键词来说,学习到每一对文档之间的关系,然后通过把所有的两两关系都预测正确,从而建立一个完整的排序结果。
|
||||
|
||||
很明显,在推荐系统的场景下,没有查询关键词,但是我们依然可以通过构造“会话”(Session)来学习排序。
|
||||
|
||||
简单来说,我们针对用户来到应用后产生的会话,对用户交互过的物品进行建模训练。我们期望能把有“正交互信息”的物品排到“负交互信息”的物品之前。
|
||||
|
||||
值得注意的是,和搜索不一样,推荐系统往往没有明确的反馈信息。意思就是,在搜索系统中,我们有已知的标签信息,也就是哪一个文档是“相关”的,哪一个是“不相关”的。然而,在推荐系统中我们并没有这样的信息。
|
||||
|
||||
因此,所有用户和物品的交互都是“隐回馈”(Implicit Feedback)。我们必须依靠假设来找到相关的物品。在这里,我们假定有正交互信息的物品是比其他物品更加相关。于是,正交互的物品的预测值要高。这里的“正交互”可以是点击、购买或者其他信息。这就是BPR的基本思路。
|
||||
|
||||
需要强调的一点是,BPR仅仅是一种思路框架,我们可以应用到矩阵分解中,以及基于信息的推荐系统等不同的模型中。我们可以把矩阵分解中的对于评分的目标函数换成基于BPR的目标函数,也就是进行配对法训练,得到的推荐系统能够更好地对物品进行排序。
|
||||
|
||||
有了这个思路,我们就可以打开一系列的想法了。比如,我们在前面的搜索模块中讲过,其实还可以直接优化类似NDCG、MAP这样的指标。那能不能把这些想法也搬运到推荐系统中去呢?
|
||||
|
||||
简单的回答是,能。但是这个流程也不是那么显然易见的,毕竟我们没有直接的标签信息,而且一般来说,这些目标函数本身就已经很难优化了,我们还要嫁接到矩阵分解或者是分解机等模型上,这就会让优化的难度继续攀升。今天我们就不展开讨论这部分内容了。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了推荐系统的另外一个问题,那就是目标函数。
|
||||
|
||||
一起来回顾下要点:第一,我们分析了为什么要关注目标函数,以评分为基础的目标函数的问题;第二,我们详细介绍了BPR这种非常经典的配对法的目标函数。
|
||||
|
||||
最后,给你留一个思考题,如果我们能够对所有物品的喜好度进行精准预测,是不是就不需要BPR了呢?学习排序和对物品喜好度的预测是完全不同的两件事,还是相互之间有联系呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, and Lars Schmidt-Thieme. BPR: Bayesian personalized ranking from implicit feedback. Proceedings of the Twenty-Fifth Conference on Uncertainty in Artificial Intelligence (UAI ‘09). AUAI Press, Arlington, Virginia, United States, 452-461, 2009.
|
||||
|
||||
|
||||
|
||||
|
||||
|
79
专栏/AI技术内参/067推荐的Exploit和Explore算法之一:EE算法综述.md
Normal file
79
专栏/AI技术内参/067推荐的Exploit和Explore算法之一:EE算法综述.md
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
067 推荐的Exploit和Explore算法之一:EE算法综述
|
||||
上周,我们聊了一些比较高级的模型,包括张量分解和协同矩阵分解,讨论这些模型如何能够抓住更多的用户和物品之间的关系。最后,我们还讨论了如何优化更加复杂的目标函数。
|
||||
|
||||
这周,我们来看一个完全不同的话题,那就是 Exploitation(利用)和 Exploration(探索)的策略,俗称“EE策略”。
|
||||
|
||||
一个推荐系统,如果片面优化用户的喜好,很可能导致千篇一律的推荐结果。其实,EE策略是推荐系统里很有意思,但也非常有争议的一个话题。一方面,大家都明白这类算法的目的,每年有很多相关论文发表。但另一方面,工业界对于部署这类算法非常谨慎,有的产品经理甚至视之为“洪水猛兽”。我们今天就来分析一下导致这个现象的一些因素。
|
||||
|
||||
走一步看一步的策略
|
||||
|
||||
这里再简单阐述一下什么是EE。简单来说,就是我们在优化某些目标函数的时候,从一个时间维度来看,当信息不足或者决策不确定性(Uncertainty)很大的时候,我们需要平衡两类决策:
|
||||
|
||||
|
||||
选择现在可能是最佳的方案;
|
||||
选择现在不确定,但未来可能会有高收益的方案。
|
||||
|
||||
|
||||
在做这两类决策的过程中,我们也逐渐更新对所有决策不确定性的认识。最终,从时间的维度上来看,我们在不确定性的干扰下,依然能够去优化目标函数。
|
||||
|
||||
也就是说,EE可以看作是一个优化过程,需要多次迭代才能找到比较好的方案。
|
||||
|
||||
EE的应用历史
|
||||
|
||||
早期把EE应用于新闻推荐系统的文章,主要关注在雅虎的今日新闻(Today Module)这一产品上,这也基本上是EE最早在互联网应用的尝试,目的是为了优化点击率(CTR)。而更早的一些奠基性的文章,则是在广告的数据集上展示实验结果。
|
||||
|
||||
雅虎的今日新闻其实为EE提供了一些被很多学者和工业界人士忽视了的条件和成功因素。如果不考虑这些因素,鲁莽地在其他场景中使用这些文献中相似的算法,很可能会产生相当差的效果。那么是哪些因素呢?主要有两点。
|
||||
|
||||
|
||||
相对少量的优质资源。今日新闻每天的内容池(Content Pool)其实并不大。这里面都是网站编辑精选了的大概100篇文章。这些文章原本的质量就非常高,无论是这里面的任何一组,用户体验都没有明显变差。内容池每天都人为更换。
|
||||
非常大的用户量。有亿万级的用户,最终可能是从算法随机产生的文章排序中选择了阅读的文章。因为用户数量巨大,所以算法就相对比较容易收敛(Converge)到稳定的方案,也就是前面讲的,优化CTR的状态。
|
||||
|
||||
|
||||
正因为有了以上两个因素,在这个模块上,工程师和科学家们享受了后来学者们所无法想象的“奢侈”,比如运行Epsilon-Greedy这种简单粗暴的EE算法;甚至是完全随机显示新闻,收集到了大量无偏(Unbiased)的数据,都为很多学术工作奠定了数据基础。时至今日,依然有不少后续学者,在今日新闻随机数据的基础上进行算法改进。
|
||||
|
||||
如果没有了这两条因素,最早的解决方案可能都没法在当时的雅虎施行。原因很简单,如果资源良莠不齐,资源数量非常大,那么在仅有的几个展示位置,优质资源显示的可能性在短期内就会比较小(因为系统对于大多数的资源还有很高的不确定性,需要Explore)。
|
||||
|
||||
由于优质资源显示得少了,用户就会明显感受到体验下降,最直接的可能就是倾向于不点击甚至放弃使用产品。用户不和系统交互这样的行为,又进一步减缓了系统学习资源不确定性的速度。这时,也许亿万级用户数都没法满足学习所有资源的用户数量(毕竟所有用户只有一部分会落入Exploration)。
|
||||
|
||||
关于这个解决方案有一个很有意思的点值得一提,在雅虎的研究人员跳槽到了LinkedIn以后,LinkedIn也推了相似的方案。为了模拟雅虎今日新闻的这些条件,就对用户内容流里的数据进行了大规模的过滤。这样就有少数的信息符合高质量的要求,并且能够在用户数允许的情况下探索到合适的解决方案。
|
||||
|
||||
EE的产品部署难点
|
||||
|
||||
我们来讲一下EE的产品部署难点,这些难点普遍高于具体的EE算法选择(比如选某一个UCB或者某一个Thompson Sampling)在产品工程解决方案上的抉择。
|
||||
|
||||
为了便于讨论,我们把所有EE算法整体叫作“Random”,简称“R算法”,而把不做EE的算法叫作“Deterministic”,简称“D算法”。这里面的假设是,D算法比较静态,能够产生高质量、一致性的内容。这里的一致性是指用户在短时间内的体验比较稳定,不会有大幅度的界面和内容变化。相反,整体来说,R算法的不确定性比较大,用户体验和产生的内容可能会有比较大的波动。
|
||||
|
||||
第一个难点是如何上线测试。这看上去不应该是难点,但实际上需要格外小心。传统EE文献,只是把问题抽象为每一次访问需要做一个决策的选择。然而,文献却没有说,这些访问是否来自同一个用户。
|
||||
|
||||
那么,理论上,EE应该对所有的访问不加区别,不管其是否来自同一个用户。用我们这篇文章的术语来说,就是所有的流量都做R算法。虽然从理论上讲这样没有问题,但实际上,用户体验会有很大的差别。特别是一些推荐网站,用户希望自己前后两次对网站的访问保持一致性。如果不加区分地做R,对于同一个用户来说,很可能两次看见的内容完全迥异。这对用户熟悉产品界面,寻找喜爱的内容会产生非常大的障碍。
|
||||
|
||||
那么,我们对绝大部分用户做D,对另外一小部分用户做R,这样会好一些吗?这其实就是“牺牲”少部分用户体验,来换取绝大多数用户体验的一致性。这样实现也是最直观的,因为很多在线系统的A/B测试系统是根据用户来进行逻辑分割的。也就是说,某一部分用户会进入一个Bucket,而另一批用户会进入另外一个Bucket。按用户来做D & R可以很容易和Bucket System一致起来,方便部署。当然,这样做也是有潜在风险的。那就是,这部分老做R的用户,在当了别人的小白鼠以后,很可能永远放弃使用产品。
|
||||
|
||||
另外一个难点就是如何平衡产品。EE几乎是一定会导致用户对产品的体验下降,至少是在短期内会这样。如何弥补这一点,技术上其实比较困难。比如做过滤是一种思路,那就是只在优质内容里探索。当然,有人会说,这样其实也没有多大的意义。然而,一旦把质量的闸门打开了,那就会对用户体验带来很大的影响。
|
||||
|
||||
这也是很多产品经理对于EE非常谨慎的原因,能不做就不做。而且,牺牲了用户体验后,EE所带来的好处其实是很难评测的,这主要是由线上产品的评测机制和评测原理决定的。目前还没有比较统一的解决方案。
|
||||
|
||||
如何能够做到“用户友好型”的EE呢?这里面可以有两种思路。
|
||||
|
||||
思路一,不是所有人群的所有访问都适合做R。和传统EE不同的是,做“反向EE”。也就是说,我们只针对常用产品的用户做探索,而并不是针对新用户或者是还没有那么熟悉系统的人群。这个思路和EE完全相反,但是更加人性化。
|
||||
|
||||
思路二,夹带“私货”。也就是更改EE的算法,使得高质量的内容和低质量的内容能够相伴产生,并且高质量的内容更有几率排在前面。这样用户体验的损失是可控的。
|
||||
|
||||
其实,EE和产品的结合点应该是工程和研究的重点,但遗憾的是,碍于数据和其他方面的因素,这方面的研究工作几乎没有。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了推荐系统的一个重要的问题,就是如何持续挖掘用户可能的喜好,也就是做EE。
|
||||
|
||||
一起来回顾下要点:第一,我们讲解了什么是EE;第二,我们介绍了EE的一些简要历史;第三,我们讨论了EE的部署难点。
|
||||
|
||||
最后,给你留一个思考题,EE策略是不是一定会导致用户看到多样不同的东西呢?
|
||||
|
||||
|
||||
|
||||
|
57
专栏/AI技术内参/068推荐的Exploit和Explore算法之二:UCB算法.md
Normal file
57
专栏/AI技术内参/068推荐的Exploit和Explore算法之二:UCB算法.md
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
068 推荐的Exploit和Explore算法之二:UCB算法
|
||||
这周,我们来讨论EE策略,周一介绍了EE的综合情况。今天来看一种最基本的思路,叫作 UCB(Upper Confidence Bound)算法。
|
||||
|
||||
EG算法
|
||||
|
||||
在介绍UCB算法之前,我们先来看一种更加简单的EE算法,叫 EG(Epsilon-Greedy)算法。
|
||||
|
||||
我们先来回顾一下EE的主要目的。EE的核心思想是说,我们对当前物品的估计往往是有限的、不准确的,需要不断尝试来增强对整个环境的了解,进而能够更加准确地对每个物品进行估计。
|
||||
|
||||
可以说,EG算法是最简单也是最基本的EE算法。EG算法的基本思路是这样的:既然我们当前对所有物品的估计是不完整的,那就可以随机地显示所有物品来获取数据。假设我们现在有一千个物品,我们对每个物品都需要估计一个数值,比如点击率。很显然,这个点击率的估计受以下两个因素的影响:已经显示了什么样的物品和显示的次数。那么,要想进一步提高这个估计值的准确度,EG算法认为我们必须对所有物品进行“探索”(Explore)。
|
||||
|
||||
具体来说,EG算法的流程是这样的:对于所有的物品,在概率P的情况下,按照当前的估计值来显示物品。回到刚才点击率的例子,那就是在概率P的情况下,谁的点击率高就显示谁。然后在概率1-P的情况下,随机地在所有物品中选择显示对象。如果我们从所有用户的角度来看,也就是说,P%的用户看到的是根据点击率排序的物品,而(1-P)%的用户看到的是随机的物品。
|
||||
|
||||
EG的想法是,虽然在最开始的时候,这种随机性可能会带来用户体验的下降,也就是那(1-P)%的用户会持续看到随机的内容,但是在牺牲这部分用户体验的情况下,随着时间的推移,慢慢地从整体上来看,对所有物品的估计会更加准确,P%的那部分用户的体验会增加。这也就是一种牺牲小部分用户体验来换取大部分用户体验的思路。
|
||||
|
||||
UCB算法的核心思路
|
||||
|
||||
我们刚才讲了EG算法的基本思路。很显然,EG有一个很大的问题,那就是有一个固定百分比的用户持续看到的都是随机的内容,这就太过于局限。
|
||||
|
||||
那么,我们能不能根据对物品的估计,来动态地调整显示物品的可能性呢?
|
||||
|
||||
回到我们刚才说的物品点击率预测的例子。一般来说,我们可以根据每个物品的显示记录来预测点击率。这个数值,其实是一个估计的“均值”。然而,这个估计可能是很不准确的,或者说,估计的置信度不高。
|
||||
|
||||
那么,如何来衡量一个物品的置信度呢?在统计中,一个比较好的方法,就是利用“标准差”(Standard Deviation)。从感性上来理解,标准差描述了数据的离散程度,也就是说,标准差其实是量化了数据在均值周围的分布情况。标准差小说明我们对这个数值的估计比较有信心,而标准差大则说明了不确定性大。
|
||||
|
||||
有了标准差的思路之后,我们再回到最初的问题,怎样才能动态地调整显示物品的可能性呢?我们沿着这个思路再稍微展开一下。很显然,我们需要考虑物品的当前估计,但同时也需要考虑这个估计的置信度。这个置信度告诉我们是不是需要更多地去“探索”这个物品。那么,很自然地,我们就可以同时用均值和标准差来表达对一个物品的整体估计,然后根据这个估计来排序显示物品。因为标准差已经表达了这种不确定因素,因此,我们的结果里面,不确定性特别大的物品,会被显示到前面来。
|
||||
|
||||
具体来说,UCB采用的数值是均值加上两倍的标准差来作为最终排序的实用数值。当然,不同类型的UCB算法在最终的数值上会有所偏差,但是大体思路基本相同。在这样的思路下,每一轮计算,我们都根据当前的数据计算出物品点击率的均值和当前的标准差,然后根据UCB的计算,我们再基于物品的数值,也就是刚才提到的均值加上两倍的标准差来排序。
|
||||
|
||||
在这样的一个机制下,经过多轮显示,当某个物品的数据越来越多的时候,标准差也会慢慢减小,最终UCB的数值会收敛到均值上。因此,这个算法本身其实是同时考虑了物品现在的情况以及在这种情况下的置信度,并且寄希望通过多次迭代来达到减小标准差,提高置信度的目的。
|
||||
|
||||
UCB算法的讨论
|
||||
|
||||
UCB的方法一经提出,因为它的简单,并且有数学基础,马上备受学术界的关注。另外从概念上来说,UCB的确要比EG要好。EG有一个固定的群体需要忍受“探索”的不确定性结果;而UCB,这部分“牺牲”消失了。不仅如此,我们之前提到EG中有一个概率P,这个参数在UCB中也完全消失了。这个概率P是一个需要调整的参数,而且没人知道这个参数该怎么设置才是最优的。而在UCB中,每一个物品的“随机度”是不一样的,并没有一个全局的类似P这样的参数。
|
||||
|
||||
那是不是UCB就没有问题了呢?
|
||||
|
||||
UCB的最大问题在于其对物品打分的机制,也就是均值加上两倍的标准差。这个机制听上去很合理,但在实际中,比如一些大型网站,会有上百上千甚至几百万的物品,那么,在没有任何特殊处理的情况下,对绝大多数物品的打分数值是相同的。什么意思?比如,很多物品从来没有被显示过,估计的均值就可能是0,或者是一个默认的初始值,在这样的情况下,物品的标准差自然也是一样的。那对于所有这些一样的物品,UCB本身并没有设计任何机制来加以区分。
|
||||
|
||||
这其实说明了一个问题,UCB算法本质上还是“确定性”(Deterministic)算法,也就是说并没有随机性。表面上通过标准差引入的不确定性其实是一种假象,这个算法从根本上还并不能真正做到随机探索。
|
||||
|
||||
小结
|
||||
|
||||
今天我们继续讨论推荐系统的一个重要问题,EE策略。我们介绍了一个很重要的算法,UCB算法。
|
||||
|
||||
一起来回顾下要点:第一,我们首先介绍了比UCB算法更加简单的EG算法;第二,我们介绍了UCB的核心思想;第三,我们讨论了UCB存在的一些问题。
|
||||
|
||||
最后,给你留一个思考题,如果有一大堆物品的UCB打分值是一样的,我们该如何解决这个问题呢?
|
||||
|
||||
|
||||
|
||||
|
66
专栏/AI技术内参/069推荐的Exploit和Explore算法之三:汤普森采样算法.md
Normal file
66
专栏/AI技术内参/069推荐的Exploit和Explore算法之三:汤普森采样算法.md
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
069 推荐的Exploit和Explore算法之三:汤普森采样算法
|
||||
周三的分享里,我们讨论了一种叫作UCB(Upper Confidence Bound)的算法。这种算法的核心是使用均值和标准差组成对物品的估计,并且利用这种估计达到EE的效果。同时,我们也提到,UCB的最大问题就是并没有真正达到随机的效果。
|
||||
|
||||
今天,我们来看一种不太一样的算法,叫“汤普森采样”(Thompson Sampling)。
|
||||
|
||||
为什么需要随机采样?
|
||||
|
||||
在讨论汤普森采样之前,我们先来看一看什么是随机采样。随机采样的技术和概率分布密不可分,也和计算机产生随机数有很大的联系。
|
||||
|
||||
我们这里主要是关心如何从一个概率分布中产生一个随机变量的样本。因为是随机变量的样本,因此不可能每一次产生的结果都一样。然而,对于大量的样本来说,其均值往往是对概率分布均值的一个比较好的估计。因此,样本其实可以用来刻画一个概率分布。
|
||||
|
||||
比如,我们用参数是0.5的伯努利分布来表达抛硬币这个事件。那么,从这个伯努利分布中产生的样本,也就是0和1,象征了硬币是正面还是反面这两个事件。很显然,因为是随机样本,所以如果我们的抽样次数足够多,每个事件发生的概率会趋向于0.5。
|
||||
|
||||
然而,有一点需要注意,并不是所有的分布都能够这样容易地抽取样本。实际上,即便是伯努利分布,也是因为有一定的程序,才能够确定从中抽样。而能够抽样的,往往是标准的分布,诸如伯努利分布、高斯分布或者其他简单分布。从抽样的角度来说,对于绝大多数的模型,从中抽取样本都不是一件完全直观自然的事情。
|
||||
|
||||
回到我们讨论的场景。在进行EE策略中,为什么需要引入随机采样呢?
|
||||
|
||||
我们之前介绍过EG算法。EG算法在实施过程中,P%的人群看到按照点击率排序的物品。这一部分,是没有随机性的。也就是说这些人会“确定性”地看见按照点击率排序的物品,每一次都会看见一模一样的东西。而在(1-P)%的人群中,每一次看到的又完全是随机的内容,一点都没有规律。很明显,EG算法的缺点是,有一部分过于确定,而有一部分过于随机。
|
||||
|
||||
再来说一说我们上一次分享的UCB算法。这个算法最大的问题在于它是一个“确定”的算法。也就是说,在参数已经确定了的情况下,UCB展示给用户看的内容也是一样的。
|
||||
|
||||
这里面的一个核心问题是,如果展示给用户的内容是一样的,也就是我们说的确定性算法,那么,也就丧失了“探索”(Explore)的机会。试想,一个用户在同一天内访问一个网站多次,看到的结果都是一样的,而用户一定不希望每次访问都看到同样的内容。这对于用户体验来说很不友好。
|
||||
|
||||
那怎么才能带来随机性呢?
|
||||
|
||||
我们刚才谈了抛硬币的例子,很显然,如果能够通过采样来对物品进行排序或者展示,那就能够解决随机性的问题,也就能够每次都给用户不一样的体验。
|
||||
|
||||
汤普森采样基本原理
|
||||
|
||||
有了希望通过采样来获得结果这个思路以后,下面的事情就变得慢慢清晰起来。
|
||||
|
||||
首先,我们提到了,采样需要对应的概率分布。因此,第一步就是要构建场景的概率分布,来描绘我们的应用。
|
||||
|
||||
回到物品点击率的场景下,和抛硬币类似,物品的点击其实可以用伯努利分布来进行建模。这里需要注意的是,我们究竟应该从什么分布中去采样呢?汤普森采样的原理是,从模型的后验分布中去采样。什么意思?这其实是借用了贝叶斯统计的思路,也就是说,我们希望对参数的后验概率分布进行建模。关于贝叶斯统计的思路,这里限于篇幅不做展开。大体上来说,后验概率分布是在已经有了数据的情况下,结合我们的先验概率,对参数的一种估计。
|
||||
|
||||
再回到用伯努利分布来对点击进行建模的例子中,如果我们希望得到后验概率分布,需要设置怎样的先验概率分布呢?如果我们希望后验概率分布是一个相对比较简单的分布,那我们可以设置所谓的“共轭先验”(Conjugate Prior)。对于伯努利分布来说,共轭先验就是Beta分布。在设置了Beta分布这个先验之后,我们其实就可以解析得到后验概率的分布,也是一个Beta分布,只不过后验概率分布的参数与先验的参数不同。
|
||||
|
||||
在构造好后验概率分布之后,我们就可以选择从中进行抽样了。注意,在当前的情况下,已经不是从伯努利分布中抽样,而是从Beta分布中抽样了。关于如何从Beta分布中抽样,这不在今天讨论的范畴。很多通用的数值计算库,比如MATLAB、NumPy等都有这方面的过程可以直接使用。
|
||||
|
||||
汤普森采样的流程是这样的,从后验分布中抽取一个参数的样本,然后选取所有物品中参数数值最大的那个,进行展示。
|
||||
|
||||
我们来分析一下汤普森采样的整体情况。
|
||||
|
||||
|
||||
每一轮,汤普森采样都有一个参数采样的动作。这个流程决定了汤普森采样本质上是一个随机的流程,不是一个确定的流程。
|
||||
汤普森是从后验概率分布中进行抽样的。这有什么好处呢?后验概率分布中抽样,当样本数足够大的时候,样本的均值也是趋近于分布的均值的。什么意思?如果某一个物品的点击率高,那么其后验概率的均值也就大,反复从中抽样,平均下来,基本上还是在这个点击率的数值范围周边,不会偏离很远。也就是说,我们从后验概率分布中抽样的结果,当样本比较多的时候,是会尊重点击率的数值大小的。这其实就是EG中P%的用户,以及UCB中为什么要使用均值这些步骤的核心所在。我们并不希望让物品最后显示的结果与真正的估计值偏离太远。
|
||||
汤普森采样因为使用了贝叶斯统计,我们对参数有先验的设置,因此针对当前点击率估计还不准确甚至还没有数据的物品来说,有天然的优势。
|
||||
因为是采样,即便是在参数一样的情况下,两个物品的采样数值都有很大可能是不一样的,一举解决了我们之前提到的UCB的问题。
|
||||
|
||||
|
||||
小结
|
||||
|
||||
今天我为你介绍了一个很重要的算法叫作汤普森采样,可以解决UCB的“确定性”问题,真正实现随机的效果。结束了我们今天的分享,EE这个话题也就告一段落了。
|
||||
|
||||
一起来回顾下要点:第一,我们聊了聊为什么需要引入采样的机制;第二,我们介绍了汤普森采样的基本原理。
|
||||
|
||||
最后,给你留一个思考题,汤普森采样有没有什么问题,或者说有没有什么劣势呢?
|
||||
|
||||
|
||||
|
||||
|
73
专栏/AI技术内参/070推荐系统评测之一:传统线下评测.md
Normal file
73
专栏/AI技术内参/070推荐系统评测之一:传统线下评测.md
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
070 推荐系统评测之一:传统线下评测
|
||||
上周我们讨论了EE算法,介绍了UCB(Upper Confidence Bound)算法和“汤普森采样”(Thompson Sampling)。
|
||||
|
||||
这周,我们回归到一个更加传统的话题,那就是如何评测推荐系统。这个话题非常重要,牵涉到如何持续对一个推荐系统进行评价,从而能够提高推荐系统的精度。
|
||||
|
||||
今天,我们先来看一看推荐系统的线下评测。
|
||||
|
||||
基于评分的线下评测
|
||||
|
||||
在过去10年里,随着Netflix大奖赛的举行,很多研究人员和工程人员往往把推荐系统的模型学习简化为对用户评分的一种估计。同时,在模型上面来说,对用户物品评分矩阵进行分解成为了一种主流的方法。
|
||||
|
||||
在这样的场景下,如何对模型进行评测呢?
|
||||
|
||||
一种简单且直观的办法,就是衡量评分的准确性,换句话说,也就是看我们预测的评分和真实评分之间有多大的差距。
|
||||
|
||||
那么,有哪些方法可以用来衡量两个数值之间的差异呢?
|
||||
|
||||
在机器学习中,一个经常使用的测度叫“均方差”(Mean Square Error),或MSE。有时候,我们也会使用它的根号后的结果,叫作“方差”(Rooted Mean Square Error),或RMSE。
|
||||
|
||||
MSE是这么定义的。首先,如果我们知道一个用户i和物品j的真实评分,假设叫\( Y_{ij} \) ,那么我们的一个估计值是\( Z_{ij} \),MSE计算的就是\( Y_{ij} \) 和\( Z_{ij} \)的差值,然后取平方。平方以后的结果肯定是一个正数,也就是说这样做的好处是整个计算不会出现负数,我们的估计值比真实值小了或者大了,MSE都可以处理。当我们对于每一个用户和物品都计算了这个差值以后,再对所有的差值的平方取一个平均值,就得到了我们所要的MSE。
|
||||
|
||||
从计算上来讲,RMSE就是在MSE的基础上再取一个根号。我们在很多实际应用中,往往使用RMSE来汇报模型的评测结果。同时,RMSE也经常用在大多数的学术论文中,但这个评测有没有什么问题呢?
|
||||
|
||||
答案是,RMSE其实存在很多问题。
|
||||
|
||||
首先,我们从刚才描述的计算过程中就可以看到,RMSE需要取一个平均值。这是对所有用户在所有物品上评分误差的估计的平均。那么,如果一个用户在数据集里面对很多物品进行了评分,这个用户误差的贡献就会在最后的平均值里占很大一部分。也就是说,最后的差值大部分都用于描述这些评分比较多的用户了。
|
||||
|
||||
上述情况存在一个弊端,如果我们得到了一个比较好的RMSE数值,往往很可能是牺牲了大部分用户的评分结果,而对于少部分的高频用户的评分结果有提高。说得更加直白一些,那就是RMSE小的模型,并不代表整个推荐系统的质量得到了提高。这是RMSE很容易带来困惑的地方。
|
||||
|
||||
RMSE的另外一个问题就是,这个指标并没有反应真实的应用场景。什么意思呢?真实的应用场景,我们往往是从一大堆物品中,选择出一个物品,然后进行交互。在这样的流程下,物品单独的评分其实并不是最重要的。更进一步说,就算一个推荐系统能够比较准确地预测评分,也不能证明这个推荐系统能够在真实的场景中表现优异。
|
||||
|
||||
基于排序的线下评测
|
||||
|
||||
当研究人员意识到RMSE的问题后,不少人就开始回归到问题的本质,究竟什么样的评测更能反应推荐系统在真实场景中的表现呢?
|
||||
|
||||
很多人很自然地就想到了搜索。
|
||||
|
||||
我们来回忆一下,搜索的结果是根据某个查询关键字,然后搜索引擎返回一系列文档结果。在这样的场景中,如果我们来和推荐进行对比,就会发现,这里面最大的区别仅仅是有没有一个查询关键词。
|
||||
|
||||
所以,我们其实可以把搜索的一些指标“移植”到推荐中来使用。比如,我们在搜索中讲过的基于二元相关度的指标。下面简单回顾一下这个指标。
|
||||
|
||||
什么叫“二元相关度”呢?简单说来,就是指针对某一个查询关键字而言,整个测试集里的每一个文档都有一个要么“相关”,要么“不相关”的标签。在这样的情况下,不存在百分比的相关度。而每个文档针对不同的关键字,有不同的相关信息。假定某个系统针对某个关键字,从测试数据集中提取一定量的文档而不是返回所有文档,我们就可以根据这个提取的文档子集来定义一系列的指标。
|
||||
|
||||
有两个定义在“二元相关度”上的指标,成为了很多其他重要指标的基石。一个叫“精度”(Precision),也就是说,在提取了的文档中,究竟有多少是相关的。另一个叫“召回”(Recall),也就是说, 在所有相关的文档中,有多少是提取出来了的。
|
||||
|
||||
“精度”和“召回”的相同点在于,分子都是“既被提取出来又相关的文档数目”。这两个指标的不同之处则是他们的分母。“精度”的分母是所有提取了的文档数目,而“召回”的分母则是所有相关的文档数目。如果我们返回所有的文档,“精度”和“召回”都将成为1(也就是说,在这样的情况下是没有意义的)。因此,我们注意到,这两个指标其实都假定,提取的文档数目相比于全集而言是相对比较小的子集。
|
||||
|
||||
我们其实就可以利用“精度”和“召回”来评测推荐系统。
|
||||
|
||||
然而,这有一个问题,那就是对于搜索而言,相关度大多数时候是通过人工标注的,但这个对于推荐系统来说是不可能的。因为推荐的结果对于每个人来说都是不一样的,所以,没法针对所有人来进行统一的人工标注。
|
||||
|
||||
一种折中的办法,就是使用用户的回馈信息。在这里,因为我们需要二元信息,所以可以使用像用户的点击信息或者购买信息来作为二元的相关度。也就是说,如果用户点击了某个物品,那我们就认为是相关的,反之则是不相关。
|
||||
|
||||
顺着这个思路下去,其实我们就可以计算类似于NDCG等更加复杂的指标,只不过我们需要自己去定义相关信息。
|
||||
|
||||
利用排序的思路来评测推荐系统,已经成为了目前推荐系统线下评测的一个标准指标。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了如何评测推荐系统的好坏,今天的重点是线下评测的两类指标。
|
||||
|
||||
一起来回顾下要点:第一,我们聊了聊非常通用的RMSE的评测方法,并且指出这类方法的缺陷;第二,我们介绍了怎么把搜索里的评测方法给移植到推荐中。
|
||||
|
||||
最后,给你留一个思考题,基于排序的评测有什么致命的问题吗?
|
||||
|
||||
|
||||
|
||||
|
65
专栏/AI技术内参/071推荐系统评测之二:线上评测.md
Normal file
65
专栏/AI技术内参/071推荐系统评测之二:线上评测.md
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
071 推荐系统评测之二:线上评测
|
||||
周一,我们聊了推荐系统的线下评测。线下评测是任何系统能够不断演化的最直接的要求。在线下的环境中,我们能够开发出系统的种种改进,并且希望能够通过这些线下评测的手段来选择下一个更好的版本。
|
||||
|
||||
今天,我们来讨论推荐系统的线上评测。任何系统在开发之后最终都要放到线上拿给用户使用。那么,在线上评测的时候需要注意什么呢?
|
||||
|
||||
线上评测的基础
|
||||
|
||||
推荐系统线上评测的基础和我们之前讲过的搜索系统有很多类似的地方。
|
||||
|
||||
线上评测的核心就是在线可控实验,有时候又称作是在线实验,或者叫作在线A/B实验。我们希望能够利用在线实验来对推荐系统的某一个部分进行检验,看是否对用户和系统的交互产生影响。
|
||||
|
||||
在线可控实验其实是建立“因果联系”(Causal Relationship)的重要工具,也可以说是唯一完全可靠的工具。这里面的基础是统计的假设检验。
|
||||
|
||||
具体来说,就是我们针对访问网站或者应用的人群,进行某种划分,一般情况下是平均随机划分。50%的用户进入被划定的一个群组,叫作“控制组”(Control Bucket),而另外50%的用户进入另一个群组,叫作“对照组”(Treatment Bucket)。“控制组”和“对照组”的唯一区别在于所面对的系统。
|
||||
|
||||
假设我们有一个推荐系统,想对其中的某个部分进行改进。那么,可以保持住其他的部分,让这个希望得到改进的部分成为唯一的“独立变量”(Independent Variable),也就是在整个实验设置中的变量。这样,我们就希望通过在线实验以及假设检验的工具,来认定这个“独立变量”是否会带来系统性能上的提高或是降低。
|
||||
|
||||
这里面还有一个需要提前确定的,就是需要评测的指标,特别是用户指标,比如网站的点击率、搜索的数量等。这些指标我们称之为“依赖变量”(Dependent Variable)。说白了,我们就是希望能够在“独立变量”和“依赖变量”之间通过假设检验建立联系。今天在这里,我们就不重复假设检验的基础知识了,如果有兴趣深入了解,可以参考任意一本基础的统计教程。
|
||||
|
||||
对于在线可控实验,在概念上很容易理解,但在现实操作中有很多挑战。
|
||||
|
||||
首先,我们可以想一想,虽然理想状态下,我们可以把用户五五平分,进入“控制组”和“对照组”。然而,现实中,经过随机算法分流的用户群,在这两个群组中很可能并不呈现完全一样的状态。什么意思呢?举个通俗的例子,相比于“对照组”而言,“控制组”中可能存在更多的女性用户;或者是“对照组”中,可能存在更多来自北京的用户。
|
||||
|
||||
而在这样的情况下,“依赖变量”,比如网站点击率,在“控制组”和“对照组”的差别,就很难完全解释为“独立变量”之间的差别。也就是说,如果“控制组”下的点击率比“对照组”高,是因为我们更改系统的某部分的差别呢?还是因为这多出来的女性用户呢?还是女性用户和系统某些部分的交互产生一定复杂的综合结果导致的呢?这就比较难说清楚了。
|
||||
|
||||
当然,在现实中,如果说我们依然可以比较容易地通过算法来控制一两个额外的变量,使得在“控制组”和“对照组”里面这些变量的分布相当,那么,面对十几种重要变量(例如,年龄、性别、地域、收入层级等),要想完全做到两边的分布相当,难度很大。
|
||||
|
||||
另外一个难点是,即便能够做到对已知的变量通过随机算法,使得在两个群组中的分布相当,我们依然不能对当前还未知的变量进行上述操作。因此,现实中因为人群特性所带来的对结论的影响,是在线实验的难点之一。
|
||||
|
||||
在线实验的难点之二是,即便刨除刚才所提到的人群的差异以外,我们可能也很难在设想中的某个系统“控制组”和“对照组”中,确定唯一的“独立变量”。
|
||||
|
||||
在现代网站或者应用中,有很多服务、子系统、页面、模块在同时为整个网站服务。而这些服务、子系统、页面和模块,还有不同的前端系统和后端系统,很可能属于不同的产品以及工程团队。每个部分都希望能够做自己的可控实验,都希望自己改进的部分是唯一变化的“独立变量”。然而,我们从宏观的角度去看,如果每个部分都在做自己的实验,而我们做实验的基本单元依旧是每个用户的话,那这就很难保证用户之间的可比较性。
|
||||
|
||||
举个例子,如果用户U1,进入了首页的“控制组”,然后访问了购物篮推荐模块的“对照组”后离开了网站。而用户U2,直接访问了帮助页面的“对照组”,然后访问了购物篮推荐模块的“控制组”。那U1和U2两个用户最终产生的点击率的差别,就很难从他们访问网站页面的过程中得出结论。即便是在有大量数据的情况下,我们也很难真正去平衡用户在所有这些页面组别之间的关系。
|
||||
|
||||
实际上,如何能够有效地进行在线实验,包括实验设计、实验的评测等,都是非常前沿的研究课题。
|
||||
|
||||
推荐系统线上评测
|
||||
|
||||
在上次的分享中,我讲了过去比较流行的推荐系统线下评测的方法,比如利用MSE以及在此之上衍生出的RMSE。然后,我又讲了如何从排序的角度来对一个推荐系统进行衡量。
|
||||
|
||||
到线上评测以后,很明显,RMSE以及排序的一些相关指标,都不能完全反映用户是否对一个推荐系统产生好感。我这里讲几个通用的指标。
|
||||
|
||||
第一,用户的驻留或者停留时间(Dwell Time)。这个指标主要是衡量用户在某一个物品上的停留时间。用户总的停留时间往往和用户对网站的黏稠度有很强的关系。总体说来,如果用户会长期反复访问网站,用户在网站平均驻留时间往往是比较多的。
|
||||
|
||||
第二,用户在相邻两次访问中的间隔时间,有时叫作“空缺时间”(Absence Time)。这个指标是越短越好。当用户反复访问你的网站,并且空缺时间越来越短,证明用户越来越依赖你网站提供的服务。
|
||||
|
||||
停留时间和空缺时间都是很好的推荐系统线上评测的指标。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了推荐系统评测的线上评测。
|
||||
|
||||
一起来回顾下要点:第一,我们聊了聊推荐系统的在线实验;第二,我们介绍了几个推荐系统线上评测的通用指标。
|
||||
|
||||
最后,给你留一个思考题,如何知道用户对于推荐的内容已经越来越不满意了呢?
|
||||
|
||||
|
||||
|
||||
|
63
专栏/AI技术内参/072推荐系统评测之三:无偏差估计.md
Normal file
63
专栏/AI技术内参/072推荐系统评测之三:无偏差估计.md
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
072 推荐系统评测之三:无偏差估计
|
||||
周三,我讲了推荐系统的线上评测,我们讨论了如何做在线评测,以及推荐系统在线评测可能遇到的一系列问题。
|
||||
|
||||
今天,我们来看一个比较高级的话题,那就是如何做到推荐系统的无偏差估计。
|
||||
|
||||
推荐系统的偏差性
|
||||
|
||||
在理解为什么需要无偏差估计之前,我们先来看一看现在系统为什么会存在偏差性,以及这种偏差性会对推荐系统的学习造成什么样的影响。
|
||||
|
||||
先假定我们讨论的是一个新闻推荐系统。为了方便,假设我们的系统中仅有两类文章,体育新闻和财经新闻。我们先来看一个极端情况,假设系统因为种种原因,只给用户推荐体育新闻,会出现什么样的情况呢?
|
||||
|
||||
很明显,如果我们只给用户看体育新闻,那么,用户只可能在这些体育新闻里面选择点击,压根不知道财经新闻的存在。因为用户只在体育新闻里面通过点击浏览表达了喜好,任何一个机器学习系统,只能在这些新闻里面学习到用户的喜好。
|
||||
|
||||
具体来说,用户已点击的新闻可以认为是正例,没有点击的可以认为是负例。这样可以对用户在体育新闻上面的喜好加以建模。但是很明显,系统在用户对财经新闻喜好的学习上是一筹莫展的,因为我们根本没有任何用户对于财经新闻的回馈数据。
|
||||
|
||||
这就是系统的偏差性。在这样的设置下,系统存在的偏差是无法修正的。通俗地讲,我们压根没有给财经新闻任何机会,所以没有数据可以供系统学习。
|
||||
|
||||
其实还有更加严重的情况。因为我们当前的系统仅仅学习到了用户对于体育新闻的喜好,然后如果把这个系统部署到生产中,系统又会进一步选择体育新闻给用户看,如此循环下去。这其实就是说,系统的偏差性会随着机器学习系统而反复循环,甚至有逐渐放大的可能性。
|
||||
|
||||
当然在现实的应用中,我们不可能有这么极端的情况。但可能面临更加复杂的情况,比如,我们压根不知道系统存在什么样的偏差,或者说,我们该如何面对各种不同的偏差。
|
||||
|
||||
在有偏差的系统中,先通过数据学习得到模型,然后再部署到系统中去,这个流程其实严重阻碍了我们对用户真实喜好的检测。因此,这也是线下表现和线上表现不一致的一个原因。长期以来,偏差性都是困扰研究者的一个非常重要的问题。
|
||||
|
||||
无偏差估计
|
||||
|
||||
当我们知道系统有偏差以后,怎么来解决这个问题呢?
|
||||
|
||||
一个很容易想到的策略是,如果我们知道系统的某种偏差,那能不能在后面的评测过程中矫正这种偏差呢?
|
||||
|
||||
这就涉及“矫正”的思路。回到我们所说的体育新闻和财经新闻的例子。假设我们的系统在80%的情况下会显示体育新闻,20%的情况下显示财经新闻。那么,当用户面对一篇体育新闻点击浏览,或者面对一篇财经新闻点击浏览,我们的系统该如何应对呢?
|
||||
|
||||
在我们已经提到过的传统评测手段中,例如计算MAP或者NDCG的时候,这两种点击是一样的。或者说,权重是一样的。然而,在这样的情况下,机器学习系统其实还是会更加偏重于学习到用户对于体育新闻的偏好,因为毕竟80%的情况下都是体育新闻。相对于财经新闻而言,这种情况就是处于劣势的,可能我们没有给财经新闻足够的机会。
|
||||
|
||||
所以,从矫正的角度来说,我们认为如果用户点击浏览了原本出现概率较低的文章,这个时候,我们反要给这类文章更大的权重。什么意思呢?也就是说,我们认为财经新闻出现的概率比较低,如果在这种情况下,用户点击浏览了财经新闻,那应该是真正的偏好。而相同的情况下,因为80%的新闻都是体育新闻,因此用户点击了其中的一篇也就不足为奇。
|
||||
|
||||
把这种思维放入到一种数学的表达中,也就是,我们希望用户的回馈按照出现的概率进行反比矫正,出现概率越大的物品,正样本权重越小;反之,出现概率越小的物品,正样本权重越大。具体来说,也就是正样本除以出现的概率,然后我们计算平均的加权点击率。这样加权平均后的结果,就是矫正后无偏差的点击率的计算结果。
|
||||
|
||||
很明显,无偏差估计是有一定假设的。首先,我们就需要假设收集的数据涵盖了整个数据集。什么意思?就是刚才我们说的极端情况,比如我们只显示体育新闻而压根一点都不显示财经新闻,这种情况是无法进行矫正的,因为在这种情况下,财经新闻的概率是0。也就是说,无论什么类别的新闻,都需要有非零的概率出现。这是进行无偏差估计的一个基本假设和要求。
|
||||
|
||||
遗憾的是,虽然这个要求看似容易,但其实在现实中很难真正做到。
|
||||
|
||||
试想一个有百万文章量的新闻网站,要确保所有的新闻都有一定概率显示给用户是有挑战的。在实际的应用中,大量的新闻质量是呈指数下降的。也就是说,虽然有百万甚至更多的文章量,但是很有可能只有几百几千的文章相对比较有质量,而剩下的大量文章是低质量的文章。
|
||||
|
||||
然而,我们并不能完全确定哪些是低质量文章。如果我们真的需要做无偏差的估计,就需要针对所有的文章进行显示,也就是说,我们需要冒着给用户显示低质量文章的风险,显然这并不是很好的策略。
|
||||
|
||||
在如何收集数据这一方面,无偏差估计其实和我们之前提到过的EE策略又结合在了一起。也就是说,如何既能够让我们尽可能地把所有数据都呈现给用户,使得我们可以进行无偏差估计,又能够照顾到用户的体验,这是目前非常热门的研究领域。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你重点讲了什么是系统的偏差以及如何处理偏差的思路。
|
||||
|
||||
一起来回顾下要点:第一,我们聊了聊在线系统的偏差出现的场景以及机器学习为什么会让这样的情况恶化;第二,我介绍了如何进行无偏差估计以及无偏差估计所需的条件。
|
||||
|
||||
最后,给你留一个思考题,假如一个系统,你不知道每一种新闻出现的概率,你该如何做无偏差估计呢?
|
||||
|
||||
|
||||
|
||||
|
67
专栏/AI技术内参/073现代推荐架构剖析之一:基于线下离线计算的推荐架构.md
Normal file
67
专栏/AI技术内参/073现代推荐架构剖析之一:基于线下离线计算的推荐架构.md
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
073 现代推荐架构剖析之一:基于线下离线计算的推荐架构
|
||||
上周,我们讨论了推荐系统的评测,聊了推荐系统的线下评测、线上评测和无偏差估计。至此,我们已经聊了推荐系统的一些基本技术和评测体系,相信你已对推荐系统有了一个基本的认识。
|
||||
|
||||
那么,到底该如何搭建一个工业级的推荐系统呢?这周,我们就来谈一谈现代推荐系统的架构体系,帮助你从宏观上对推荐系统的构建有一个更加完整的认识。
|
||||
|
||||
今天,我们先来看一看,基于线下离线计算的推荐架构。
|
||||
|
||||
推荐架构需要解决的问题
|
||||
|
||||
在讨论任何一种架构之前,我们首先来看一下这个架构需要解决什么样的问题。然后在这些问题的指引下,我们就可以来分析不同架构在解决这些问题上的优劣。
|
||||
|
||||
那么,对于一个推荐架构来说,我们需要解决什么样的问题呢?
|
||||
|
||||
首先,从大的角度来说,一个用户来到我们的网站或者服务,推荐系统最重要的一个任务就是,能够在一两百毫秒内给用户提供当前的推荐结果。也就是说,从用户的角度来看,推荐结果的呈现必须是实时的。这一条就是把工业级应用和学术模型区分开的一个重要指标。
|
||||
|
||||
在过去十多年里,学术界的推荐系统,或者是Kaggle竞赛的推荐系统,往往是一个使用了很多不同模型的集成模型(Ensemble Model),这种方式虽然在比赛和论文发表中能够取得较高的精度,但是在现实的系统中,如果不加修改直接使用,必然无法在规定的时间内,也就是一两百毫秒内产生所有的推荐结果。同样的,很多非常复杂的深度学习模型,也无法在规定的时间内产生所有的推荐结果。由此可见,很多推荐架构的核心就是在解决这些问题。
|
||||
|
||||
其次,推荐系统架构需要对用户和系统的交互结果做出响应。什么意思呢?如果用户看了推荐结果,并且点击了一些推荐结果,或者明确表达了对推荐结果的不喜爱,那么推荐模块需要对这些互动的结果给予回馈。试想,如果一个用户已经明确表示了对某些结果的不喜欢,然后在下一次访问的时候,用户又看到同样的推荐,那一定是一个非常不好的体验。
|
||||
|
||||
最后,推荐系统架构需要考虑用户群体的覆盖率的问题。如果一个系统架构只能为部分用户服务,这想必无法真正做到对一个网站或者服务产生影响力。因此,在模型以及其他的技术选择上面,如何能够做到“为更广阔的用户群体服务”,就是一个非常关键的因素。
|
||||
|
||||
基于线下离线计算的架构
|
||||
|
||||
刚才我们简单讨论了一个现代推荐系统架构需要满足的一些需求。那么,在这些需求的驱动下,一种简单易行的架构就诞生了,那就是“基于线下离线计算的架构”。
|
||||
|
||||
什么叫基于线下离线计算的架构呢?
|
||||
|
||||
试想一下,我们有一个推荐模块,是在一个网站首页为用户推荐新闻。现在假设,我们有M个用户,N个新闻文章。M的数量级可能是几千万,N的数量级可能是几百万。那么,理想状态下,需要用我们的模型,对每一个用户,以及每一个新闻进行打分。具体地,对于某一个用户来说,当这个用户访问网站的那一瞬间,我们需要对几百万的新闻进行打分,并且在一两百毫秒内返回结果,这很有可能是不现实的。
|
||||
|
||||
既然我们无法实时对所有的新闻打分,那么,退一步讲,我们能不能事先把这些打分的工作都做了,然后当用户来到网站的时候,我们仅仅是显示结果呢?答案是,可以的,并且这就是线下离线计算的核心思想。
|
||||
|
||||
通俗地说,线下离线计算的一个主要想法就是:把计算中复杂的步骤尽量提前做好,然后当用户来到网站需要呈现结果的时候,我们要么已经完成了所有的计算,要么还剩非常少的步骤,可以在很快的时间内,也就是所说的一两百毫秒内完成剩下的计算。
|
||||
|
||||
回到我们刚才的新闻推荐的例子。我们可以把针对每一个用户的所有新闻的打分,在线下都提前计算好,然后存放在一个数据库或者数据存储的地方,当用户来到网站的时候,我们只需要展示已经完全计算好的推荐结果。
|
||||
|
||||
完全线下离线计算的最大好处就是,当用户来临的时候,基本没有任何的计算成本。系统唯一需要做的就是从一个数据存储的地方直接取得当前的推荐结果。
|
||||
|
||||
也就是说,线下离线计算的最大好处,就是解决我们刚才说的在规定的时间内计算出推荐结果的需求。然而,线下离线计算对其他两个需求则无法很好地处理。
|
||||
|
||||
第一,因为我们是完全提前计算好了所有的结果,并且存储在数据库中。那么,假设用户和推荐结果进行了交互,希望更新推荐结果,离线计算的模式就无法支持这样的操作,或者是非常困难。
|
||||
|
||||
我们可以试想一下,如果一个用户不喜欢某一个新闻推荐结果,那么在当前的框架下,我们应该如何应对呢?首先,我们需要启用线下的计算流程,重新计算这个用户所有的推荐结果,然后把这个推荐结果存储到刚才说的数据库里,这样用户下一次来到网站的时候,就会看到更新的结果了。
|
||||
|
||||
因为刚才我们已经假设模型的复杂度导致无法很快地进行运算,因此,这个更新的流程可能会比较耗时。同时,这只是一个用户的情况,如果我们要针对大量用户进行这样的处理,那最省力的就是隔一段时间,比如说几个小时就针对那些和系统有交互的用户重新计算一次结果,然后再把更新的结果存入数据库。很明显,在这几个小时的间隙里,用户看到的依然是旧的推荐结果。
|
||||
|
||||
第二,完全提前计算好所有结果的情况下,针对新的用户,新的新闻文章就无法进行推荐了。针对这些新用户和新文章来说,完全离线计算这种架构就有一个致命的缺陷。当然,我们也可以依照刚才的思路,也就是说隔一段时间,比如几个小时,就针对当前所有用户和所有新闻,重新计算结果,然后把结果存放到数据库中,但是很明显,这也会导致在这个间歇期内,我们无法对新用户和新文章进行推荐。
|
||||
|
||||
完全离线计算的推荐架构适用于一些简单的场景和一些应用的初期架构。很明显,在复杂的网站需求下,单靠提前把所有结果都计算好是不能满足动态的用户需求的。
|
||||
|
||||
然而,理解离线计算的需求对于构建复杂架构很有帮助。我们在设计一个更加复杂的架构时,依然会依靠很多离线计算,用线下时间来换取线上时间。这个思路是现代推荐系统架构中非常重要的一个想法。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了一种简单的现代推荐系统的构建思路,那就是基于线下离线计算的推荐架构。
|
||||
|
||||
一起来回顾下要点:第一,我们聊了聊推荐架构的需求;第二,我们介绍了什么是离线计算架构,以及这种架构的优缺点是什么。
|
||||
|
||||
最后,给你留一个思考题,如果我们的用户数量和物品数量实在是太大,线下计算无法满足每天全部更新一次推荐,这种情况下,我们又该怎么办呢?
|
||||
|
||||
|
||||
|
||||
|
65
专栏/AI技术内参/074现代推荐架构剖析之二:基于多层搜索架构的推荐系统.md
Normal file
65
专栏/AI技术内参/074现代推荐架构剖析之二:基于多层搜索架构的推荐系统.md
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
074 现代推荐架构剖析之二:基于多层搜索架构的推荐系统
|
||||
周一,我们讨论了基于线下离线计算的推荐架构,这也是最简单的一种推荐架构。我们了解了这种架构的优劣势,以及能够做的一些方案。
|
||||
|
||||
今天,我们来看另外一种也很常见的推荐系统架构,那就是基于多层搜索架构的推荐系统。
|
||||
|
||||
推荐架构需要解决的问题
|
||||
|
||||
周一我们详细讨论了推荐架构需要解决的问题,今天做一个简单的回顾。
|
||||
|
||||
推荐系统解决三个需求。
|
||||
|
||||
第一,推荐系统架构能够在一两百毫秒内给用户提供当前的推荐结果,即实时呈现推荐结果。
|
||||
|
||||
第二,推荐系统架构需要对用户和系统的交互结果做出响应。
|
||||
|
||||
第三,推荐系统架构需要考虑用户群体的覆盖率问题。
|
||||
|
||||
我们周一次讲到的基于离线计算的推荐架构,可以很好地解决第一个问题。解决思路就是先计算好所有的结果,然后存在某种存储空间里,当用户来到网站的时候,再直接显示事先已经计算好的结果。然而,这样的架构在第二和第三个需求面前,就显得有些捉襟见肘了。
|
||||
|
||||
基于多层搜索架构的推荐系统
|
||||
|
||||
我们前面在介绍搜索系统的时候,多次提到了多层搜索架构。一起来回顾一下这种架构。
|
||||
|
||||
首先,我们有一个索引,能够根据某些特性(比如关键字)来把所有的文档存储到里面,方便随时检索。
|
||||
|
||||
第一层或者叫第一轮打分,是发生在索引这个层面,我们通过一些简单的流程或者函数,往往是线性函数或者布尔值函数,来获取最相关的几百最多几千个文档。
|
||||
|
||||
紧接着,第二层或者叫第二轮打分,就是一个重排序的过程。这个时候,我们往往只需要针对几百个文档进行打分,所以可以使用相对比较复杂的函数,比如基于决策树的模型或者深度模型,以得到最终的结果。
|
||||
|
||||
有些时候,在第二轮打分之后,还有后面的轮数,主要是针对一些不同的商业规则,比如结果的多样性等等。
|
||||
|
||||
多层搜索架构可以支持搜索结果,自然地,对第一个需求,也就是在规定的时间内返回结果,有很好的支持。在搜索里面,用户输入查询关键词以后,大多数情况都希望能够快速得到结果。一般来说,我们把在所有文档里查找相关信息分解为两个步骤,先查找一个大概相关的集合,然后再在这个集合里进行重排序。特别是第一个步骤,往往是在索引上并行进行的,因此速度也相对比较快。
|
||||
|
||||
那么,多层搜索架构如何来解决第二和第三个需求呢?
|
||||
|
||||
我们先来看第二个需求,也就是说如何针对用户的反馈对结果进行更新。所谓进行更新,其实就是说,给用户的推荐结果,需要有一些不一样的地方。但是,如果我们仔细想一下这个需求,就会发现,第二个需求的核心是需要对用户的反馈进行更新,但也不能走向另外一个极端,那就是用户点击或者浏览了一两个物品后,整个推荐结果就全部发生了改变。因此,如果我们在这种需要变化但又不是大变的假设之下,多层搜索架构就能相对容易地解决这个问题。
|
||||
|
||||
例如,我们可以根据索引返回用户可能喜欢的一千个物品。假定用户的喜好不会在每一天内发生巨大变化。这个索引本身可以每天更新,但不需要更新得特别频繁。因为用户点击了一些物品,之后需要产生的更新变化,我们可以寄希望在重排序这个环节发生。也就是说,我们在每一天中,从索引中提取出来的内容都可以是一模一样的,但是我们可以根据重排序的部分产生不一样的结果,这样也就满足了用户的需求。
|
||||
|
||||
具体来说,在重排序的阶段,有两种方法可以根据用户的反馈进行更新。
|
||||
|
||||
一种方法,就是更新重排序阶段的模型。如果重排序阶段是一个决策树模型,那我们就对这个决策树进行重新训练。这里主要取决于重排序阶段是一个什么样的模型。如果这个模型需要所有用户的信息,那重新训练的计算量,无疑是非常大的,而且往往还无法在线完成。在这样的情况下,重新训练可能并不是最优的解决方案。
|
||||
|
||||
另外一种方法,就是更新重排序的模型的某些特性。如果重排序模型使用了一些特性,其中包含记录了用户的一些行为。那么,我们其实可以在不更改模型的情况下,通过更新特性的数值来达到更新结果的目的。比如,可能有这么一个特性,记录用户在某个物品上点击了多少次,那么我们单单刷新这个特性的数值就可以了。
|
||||
|
||||
对于第三个需求,也就是说如何针对新用户和新物品进行支持。可以说,搜索架构对于新用户是天然支持的。因为索引里面是物品,而并不是特定的用户信息,所以新老用户对于这个以索引为基础的架构来说是一样的。不太相同的自然是新老用户的特性值是不一样的,因此取决于重排序的模型,很有可能是针对老用户有比较强的效果,而针对新用户则可能会有一些捉襟见肘。
|
||||
|
||||
相对来说,搜索架构的短板在于对新物品的支持。因为整个索引机制是基于物品的,因此当我们已经建立了一个当前的索引后,新的物品不在索引里面,因而无法在提取阶段被取出来。一个比较直接的方法自然是重新建立索引,然而如果我们有上百万的物品,重建索引并不是一个简单容易的步骤。关于如何支持这样一个功能,我们留到下一次分享中探讨。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了基于多层搜索架构的推荐系统。
|
||||
|
||||
一起来回顾下要点:第一,我们回顾了推荐架构的需求;第二,我们介绍了什么是多层搜索架构,以及这个架构是如何利用到推荐场景的,同时还聊了聊这种架构的优缺点是什么。
|
||||
|
||||
最后,给你留一个思考题,我们谈到了用索引来帮助推荐系统的构建,那么在搜索里面索引可以根据关键字来建立,在推荐系统中,我们怎么构建索引呢?
|
||||
|
||||
|
||||
|
||||
|
59
专栏/AI技术内参/075现代推荐架构剖析之三:复杂现代推荐架构漫谈.md
Normal file
59
专栏/AI技术内参/075现代推荐架构剖析之三:复杂现代推荐架构漫谈.md
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
075 现代推荐架构剖析之三:复杂现代推荐架构漫谈
|
||||
本周我们讨论现代推荐系统的架构体系。周一我们看了最简单的基于线下离线计算的推荐架构,周三我们聊了基于多层搜索架构的推荐系统。
|
||||
|
||||
今天,我们来谈一谈如何从这两种架构的思路出发,来满足更加复杂多变的实际情况。
|
||||
|
||||
推荐架构需要解决的问题
|
||||
|
||||
这周我反复强调推荐系统的几个基本需求点。第一,能够在一两百毫秒内给用户提供当前的推荐结果;第二,需要对用户和系统的交互结果做出响应;第三,需要考虑用户群体的覆盖率问题。
|
||||
|
||||
接下来我们就聊一些经常考虑的场景,起到一个抛砖引玉的作用,供你参考。
|
||||
|
||||
新用户的问题
|
||||
|
||||
如果你要搭建的系统面临的情况是新用户多,比如一个新上线的快速增长的产品,那么我们需要怎么考虑架构呢?
|
||||
|
||||
这里面有两个基本思路。第一,我们要更加快速地抓住这些新用户和系统的交互信息,从而更好地为他们推荐信息。第二,在我们还没有足够多的信息的时候,如何为这些用户提供推荐结果。
|
||||
|
||||
我们先从第一点说起,如果希望能够更加快速地抓住用户的交互信息,从而很好地为他们推荐内容,有两种做法:要么能够快速更新模型从而更新推荐结果,要么快速更新特性从而更新推荐结果。
|
||||
|
||||
如果我们整个产品只有一个全局的排序模型的话,不管是基于线下的静态架构还是基于搜索的架构,基本上都不可能很快地去更新这个全局模型。因此,在这种情况下就需要去思考如何更新特性。
|
||||
|
||||
对于搜索的框架,也许我们可以通过更新特性,从而达到在重排序的这个阶段,因特性改变而带来不同的结果。但是对于线下的静态架构,因为所有推荐结果都是事先处理好的,因此改变特性也不能改变结果,除非针对这个用户,对所有的推荐结果重新进行线下计算。这样做是可行的,但是计算成本还是相对比较高。因此,综合来看,如果在新用户比较多的情况下,并且我们还希望抓住用户的交互,静态架构可能就会显得有一些心有余而力不足了。
|
||||
|
||||
第二点则是新用户的交互信息一开始会比较少,如何处理冷启动呢?我们前面提到过,其实冷启动可以利用一些用户的其他信息,比如年龄、性别、地理信息来产生推荐结果。我们可以为用户显示当前比较流行的在某个年龄段、某个性别、某个地理区域的信息。
|
||||
|
||||
一个简单的思路是,这些年龄、性别、地域的信息,可以每个小时或者每天更新一次,单独存放在一个数据库里。当用户来网站的时候,我们可以尝试从搜索的架构里提取信息,也从这个单独的数据库里提取信息,然后在这个基础上进行全部重新排序。这样我们就能够保证架构的统一性,同时也解决了冷启动的问题。
|
||||
|
||||
新物品的问题
|
||||
|
||||
和大量新用户问题不同的是,大量新物品的问题则更加棘手一些。
|
||||
|
||||
在静态框架下,新物品意味着对于所有的用户,我们之前都没有考虑过这些物品,因此如果不进行特殊处理,我们是绝对没法把这些物品展示给用户看的。
|
||||
|
||||
这里有两种思路。一种思路,就是把新物品加入到内容池里,对于所有用户,全部重新生成推荐结果。这当然是最简单的想法,但是很显然,这样做是非常耗时的。另外一种思路,我们把当天产生的新物品单独存储在一个数据库,针对这些物品给出一些预估计的分数。这里当然可以针对物品的特性打分,也可以随机给定一些分数。然后我们在显示推荐的时候,可以混合之前线下已经产生的推荐结果和当天的新物品结果,这样从用户的角度来看,我们是可以对新物品进行推荐的。
|
||||
|
||||
在搜索的架构下,也有两个类似的思路。第一,那就是我们对索引进行重索引,但这个过程相对比较耗时。第二,那就是对新物品构建一个临时索引或者数据库,最后的结果是从索引和当天的临时存储中共同获取,然后进行重新排序。
|
||||
|
||||
在新物品比较多,并且很快就会过时的情况下,另外一个需要注意的棘手问题就是,推荐的模型一定不能仅仅抓住用户喜爱的某一个物品。比如新闻推荐,用户喜欢某一个新闻,但是这个新闻很快就会过时。这就和商品推荐有很大不同,对于商品来说,用户可以反复购买同一件日用品。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你讲了利用推荐系统的一个重要问题,就是如何构架一个现代推荐系统。我们聊了两个场景下的一些更加细致的取舍,分别是新用户多的情况和新物品多的情况。
|
||||
|
||||
其实,所有的这些思路都不是“死规矩”,但是有一些基本的规则你可以去琢磨。
|
||||
|
||||
比如,我们尽可能把复杂的运算放在线下,因为毕竟需要在规定的时间内返回结果。在一切有可能的情况下,尽可能使用搜索引擎来减少需要对大量物品进行打分的步骤。再比如,对于活跃的用户,我们可以使用多层搜索架构;但是对于不活跃用户,我们可以依赖线下,提前产生所有的推荐结果。
|
||||
|
||||
一起来回顾下要点:第一,我们再次回顾了推荐架构的需求;第二,我们通过两个场景,新用户多和新物品多,分析了架构里面的一些取舍。
|
||||
|
||||
最后,给你留一个思考题,假设我们的推荐系统需要给一个手机客户端的产品进行推荐,有什么和桌面端不一样的,需要在架构上额外注意的地方呢?
|
||||
|
||||
|
||||
|
||||
|
69
专栏/AI技术内参/076基于深度学习的推荐模型之一:受限波兹曼机.md
Normal file
69
专栏/AI技术内参/076基于深度学习的推荐模型之一:受限波兹曼机.md
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
076 基于深度学习的推荐模型之一:受限波兹曼机
|
||||
这几周我们进入专栏里一个比较大的模块,那就是推荐系统。
|
||||
|
||||
上周,我们谈了现代推荐系统的架构体系,帮助你在宏观上对推荐系统的构建有一个更加完整的认识。这周,我们主要来看在推荐系统研究领域里一个比较前沿的话题,那就是如何利用深度学习来提升推荐系统的精度。
|
||||
|
||||
今天,我们首先来看一篇经典的文章《受限波兹曼机进行协同过滤》(Restricted Boltzmann machines for collaborative filtering)[1],这篇文章尝试使用受限波兹曼机(Restricted Boltzmann Machines),简称 RBM,来对推荐系统进行建模。这应该是最早把深度学习应用到推荐建模的典范。
|
||||
|
||||
受限波兹曼机(RBM)
|
||||
|
||||
从严格意义上讲,RBM自身并不是深度模型,在早期对于RBM的使用上,也并没有将其“累加”到很多层从而形成“深度RBM”(Deep RBM)。但是从建模思路上来说,由一层RBM到多层RBM的扩展其实是非常直接的,因此了解RBM的基本思路,对后面理解推荐系统中如何利用深度学习模型进行建模是很有帮助的。
|
||||
|
||||
今天我们要介绍的文章发表于2007年的ICML(International Conference on Machine Learning,国际机器学习大会)上。作者群是鲁斯兰·萨拉胡特蒂诺夫(Ruslan Salakhutdinov)、安德烈·尼哈( Andriy Mnih)以及杰弗里·辛顿(Geoffrey Hinton)。
|
||||
|
||||
辛顿在近日常常被称作深度学习之父。他不仅算是波兹曼机(Boltzmann Machines)的重要发明人和推动者之一,也和其学生一起把RBM应用到各类数据上,比如RBM在推荐领域的尝试。
|
||||
|
||||
2007年的时候,Netflix大赛如火如荼,很多学者都希望把各种模型和思路应用到这个比赛中。而在这个大赛中,有三个重要的思想脱颖而出,影响了后来推荐系统的研究发展。这三个思想分别是:
|
||||
|
||||
|
||||
基于矩阵分解的模型;
|
||||
基于RBM的模型;
|
||||
利用集成学习(Ensemble Learning)把大量不同的模型整合起来。
|
||||
|
||||
|
||||
由此可见,RBM对于推荐系统的尝试在当时是非常有新意的。
|
||||
|
||||
第一作者鲁斯兰当时在多伦多大学攻读计算机博士,跟随辛顿研究深度学习模型。另外一篇他当时做的工作,是把贝叶斯矩阵分解利用到Netflix大赛中,和我们今天讨论的这篇论文一起,都是他在博士阶段对于推荐系统这个领域所做的重要贡献。目前鲁斯兰在卡内基梅隆大学任教,并兼任苹果公司的人工智能总监一职。
|
||||
|
||||
那什么是RBM呢?简单说来,RBM就是由一层隐单元(Hidden Unit)和一层显单元(Visible Unit)组成的神经网络结构。通常情况下,显单元和隐单元这两层之间是完全连通的。也就是说,对于每一个显单元来说,它都和所有的隐单元联系到一起。
|
||||
|
||||
每个隐单元和显单元自身都有一个权重(Weight),并且在每对隐单元和显单元之间的连接上还有一个权重。所有这些权重都是需要通过训练学习的未知参数。举例来说,如果我们有3个显单元(用于描述3个数据点),5个隐单元。那么我们就有3个权重对应3个显单元,有5个权重对应5个隐单元,然后有15(3*5)个连接权重,这样算下来一共是23个权重。RBM可以针对高斯信号,也就是实数信息,以及伯努利或者二项分布(Binomial Distribution)信号,也就是离散信息,进行建模。
|
||||
|
||||
受限波兹曼机在推荐上的应用
|
||||
|
||||
当我们对RBM有了一个基本的了解之后,我们来看RBM是怎么应用到推荐系统上的。为了讲解方便,我们这里使用Netflix的例子,也就是对“用户为电影打分”进行建模。
|
||||
|
||||
首先,对于每一个用户,我们使用一个单独的RBM来对这个用户进行建模,只不过,每一个RBM都有一样的隐单元数量。在建模的时候,每一个RBM仅仅对当前这个用户曾经打过分的数据进行建模。也就是说,每一个RBM需要建模的数据是不一样的,有的用户对三个电影打过分,有的对十个电影打过分。你可以设想一下,在这样的情况下,整个模型是什么意思。
|
||||
|
||||
每个用户有一个独立的RBM,这个RBM负责对这个用户的电影集合进行建模。很显然,这些RBM互相没有关联。那怎么把每个用户的RBM给联系起来呢?作者们做了这样的假设,也就是每个RBM的隐单元是不一样的,这其实可以代表学习到的“用户的偏好”。但是,如果两个用户都对同一个电影打过分,那么,针对这个电影,两个不同的RBM会共享一样的权重。这就是联系两个RBM的核心思想,也就是说,利用RBM对用户电影推荐的核心是“共享相同电影的权重”。
|
||||
|
||||
具体说来,每一个显单元都是用户对于某个电影的评价。这里每个显单元都是一个K维的数组,其中只有一个元素是1,其他都是0。这种二元的数组表达,帮助模型来对“用户对于有K种可能的输出”进行建模。隐单元在这篇论文中,也是二元的,只不过,我们事先并不知道隐单元的取值。和刚才介绍的一样,在这样的模型里,需要学习的参数包括显单元的权重、隐单元的权重以及他们之间关系的权重,同一个电影的权重是共享的。
|
||||
|
||||
每一个用户都有一个单独的RBM,并且我们在RBM里只对已经评过分的电影进行了建模,因此这个模型并不能直接对未知的电影评分进行预测。需要预测的时候,我们其实是先拿到这个电影的权重,然后看,我们把那个K维的评分数组设置成哪种情况的时候,产生的概率是最大的。也就是说,我们尝试把对于未知的电影评分设置成不同情况,取出现可能性最大的那种评分作为预测结果。很明显,这样做的计算效率并不高。文章中也介绍了如何加速,我们这里就不复述了。
|
||||
|
||||
RBM对于推荐系统的建模看上去很简单,但是难点却是如何学习这些未知的权重。总体说来,RBM无法直接使用类似“最大似然法”或者“递归下降”的方法来对参数进行学习。这其实也是阻碍这类方法广泛使用的一个重要障碍。在最初的论文里,作者们提出了一种CD(Contrastive Divergence,对比散度)方法,这种方法其实是一种简化的MCMC(Markov chain Monte Carlo,马尔科夫蒙特卡洛)方法,用于对RBM进行采样。CD方法具体是如何实现的,我们这里就不展开了。
|
||||
|
||||
在Netflix的数据集上,RBM展现了惊人的效果,不仅能够很轻松地击败Netflix自身的算法基线,还比当时提出的单纯的矩阵分解方法要更加优秀。基于此,后来就有了很多RBM的扩展工作。
|
||||
|
||||
小结
|
||||
|
||||
这周我来为你讲解利用推荐系统的一个重要的问题,就是如何利用深度学习模型来对推荐系统进行建模。今天我们聊了一个最基本的深度学习模型,受限波兹曼机,讨论了如何将其应用在推荐系统中。
|
||||
|
||||
一起来回顾下要点:第一,我们介绍了什么是受限波兹曼机;第二,我们讨论了如何把受限波兹曼机应用到推荐场景中。
|
||||
|
||||
最后,给你留一个思考题,如果希望在受限波兹曼机里增加其他信息,比如各种用户信息或者电影信息,我们该如何做呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Ruslan Salakhutdinov, Andriy Mnih, and Geoffrey Hinton. Restricted Boltzmann machines for collaborative filtering. Proceedings of the 24th international conference on Machine learning (ICML ‘07), Zoubin Ghahramani (Ed.). ACM, New York, NY, USA, 791-798, 2007.
|
||||
|
||||
|
||||
|
||||
|
||||
|
69
专栏/AI技术内参/077基于深度学习的推荐模型之二:基于RNN的推荐系统.md
Normal file
69
专栏/AI技术内参/077基于深度学习的推荐模型之二:基于RNN的推荐系统.md
Normal file
@@ -0,0 +1,69 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
077 基于深度学习的推荐模型之二:基于RNN的推荐系统
|
||||
周一我们看了一篇经典的文章,那就是尝试使用受限波兹曼机(RBM)来对推荐系统建模。这应该是最早把深度学习应用到推荐建模的典范。当然,RBM虽然算是相对比较早的深度学习模型,但其本质上并没有很多后来提出的深度模型的特质,也没有真正发挥出深度学习模型的特有优势。
|
||||
|
||||
今天,我们结合几篇论文来看一类深度学习模型,那就是“递归神经网络”(Recurrent Neural Network),简称 RNN,在推荐系统中的应用。这类模型可以解决传统推荐模型中难以对时序信息进行建模的问题,扩宽了推荐系统的应用边界。
|
||||
|
||||
时序信息建模
|
||||
|
||||
要想说清楚RNN对于推荐系统的贡献,我们首先要来看一看为什么需要对时序信息进行建模。
|
||||
|
||||
在我们前面介绍的诸多推荐模型中,不管是矩阵分解,还是简单的基于流行度的推荐模型,或是其他更加复杂的张量分解等模型,其实都没有内置“时间”这个概念。
|
||||
|
||||
比方说,我们通过矩阵分解来对用户和物品的评分进行建模。在这个建模的场景里,用户物品评分矩阵是针对所有数据的,不管是用户昨天对某个物品进行评分还是今天,甚至是一年以前,所有数据都是在唯一一个矩阵里面加以表示。这么做的好处是,极大地简化了真实情况,不好的地方则是完全忽略了所有评分在时间上的发展。
|
||||
|
||||
其实早在Netflix大赛中,一些学者就在Netflix公布的数据集上发现,用户对于电影的喜爱程度,或者说评分数值,有非常明显的随时间变化而变化的趋势。文末我列的参考文献[1],这篇论文就是充分挖掘了时间信息从而带来了性能上的提升,如果你有兴趣的话,建议读一读这篇文章。
|
||||
|
||||
在深度学习模型,特别是RNN之前,如果我们希望对时间进行建模,从模型工具的角度上来说,我们都有哪些选择呢?
|
||||
|
||||
一种办法是可以尝试使用传统的“时序模型”(Time Series Models)。这一类模型在统计领域已经使用了较长时间,然而最大的问题就是,很多工具很难直接和我们提到的这些推荐模型进行嫁接。另外一个难点是在嫁接之后,模型的训练算法往往会变得异常复杂,这也给模型的普及和使用带来了很多障碍。
|
||||
|
||||
另外一种办法,就是尝试在现有的模型里通过特性(Feature)或者其他的方法,来让当前的模型能够对时间信息进行建模。这个思路其实是对矩阵分解进行了修改。这样做的好处就是可以根据自己的需要在某一个模型上进行必要的更改,然而这么做的先天性缺陷就在于提出来的修改往往只能针对某一个模型,而没有办法扩展到其他模型。
|
||||
|
||||
第三种做法是可以利用张量分解(Tensor Factorization)。我们直接把时间作为一个新的维度,因此可以对用户在某一个时间段对某个物品的评分进行建模,有一些工作是基于这个假设的。
|
||||
|
||||
不过,直接利用张量分解的最大问题是,张量本身并不是时序模型,利用张量对时序信息进行建模仅仅是因为时序信息大多时候可以被表达成为离散的数据,因此张量才在这里有了用武之地。然而,因为张量无法直接对离散时序的两位数据点之间进行约束建模,比如时间点“昨天”和时间点“今天”可能在张量中占据两个不同的数据点,但是张量本身并不能把这两个数据点联系起来。也就是说,张量在“语义”(Semantics)上其实并不支持时序数据。
|
||||
|
||||
基于以上这些原因,我们需要有新的工具来对时序信息进行比较直接的建模,同时也能有相对容易的学习算法。
|
||||
|
||||
基于RNN的推荐模型
|
||||
|
||||
RNN作为深度学习中有力的时序信息建模工具,随着深度学习的火热,被越来越多的学者用来解决我们刚才所说的这些问题。我们一起来看两篇论文,可以说这两篇文章是RNN在推荐领域应用的重要参考。
|
||||
|
||||
除了从工具的角度来讲为什么需要RNN以外,还有一个是从实际的场景出发,也就是在同一个“会话”(Session)中的推荐结果,这是一个比较突出的需要时序信息的场景,且传统的方法无法很好地解决。
|
||||
|
||||
在这方面比较早的尝试,来自于在ICLR2016上发表的一篇论文《使用递归神经网络的基于会话的推荐》(Session-based recommendations with recurrent neural networks)[2]。这里面的基本思路其实很直观,就是在推荐系统中使用某种RNN模型,在这篇论文里使用的是 GRU(Gated Recurrent Unit)。我们在这里不展开RNN或者GRU的定义细节以及这些模型里面的特征。我们从比较高的维度来讲一讲RNN的建模思路。
|
||||
|
||||
RNN的输入是当前的一个物品,然后RNN需要输出的是对于下一个物品的预测,同时为了能够对这些在时间序列上的物品进行建模,RNN内部也要维持一个隐含的状态序列,这个状态序列会随着时间的变化而变化。不同的RNN模型在以下内容的实现上有所不同,包括如何实现这个隐含的状态序列,以及如何对从状态序列到输入和输出物品的建模。
|
||||
|
||||
总的来说,这篇论文就是直接把目前在自然语言处理中经常使用的GRU拿到了推荐领域,并且做了一些微小的修改。从实验结果来看,如果我们对会话进行建模的话,效果要明显好于没有对会话进行建模。
|
||||
|
||||
再介绍一个比单对会话进行建模更进一步的工作,是发表于WSDM2017上的一篇论文《递归推荐网络》(Recurrent Recommender Networks)[3]。我们前面提到了,矩阵分解的最大问题就是学习到的用户以及物品向量无法囊括时间的信息。在这篇论文里,作者们假定用户的隐向量,物品的隐向量都会随着时间的变化而变化,而在某一个时刻的物品评分仅仅是那一个时刻的用户隐向量和物品隐向量的一个结合。在传统的模型里,要描述这种隐向量随着时间的变化而变化的思路就会充满难度。
|
||||
|
||||
在这篇论文里,一个重要的贡献就是使用了一种叫 LSTM(Long Short-Term Memory)的RNN模型,来对这些用户的隐变量随着时间的变化而变化进行建模。我们在这里也不展开LSTM的基本定义。总体来说,LSTM也是对某一组输入变量和输出变量在时间上的关系进行建模,同时利用内部隐状态序列来对输入和输出变量进行建模。
|
||||
|
||||
小结
|
||||
|
||||
今天我们聊了如何利用RNN对推荐系统中的时序信息进行建模。
|
||||
|
||||
一起来回顾下要点:第一,我们讨论了为什么对时序信息建模是非常必要的;第二,我们结合两篇论文,聊了利用RNN对时序信息建模的例子。
|
||||
|
||||
最后,给你留一个思考题,除了会话信息或者用户的喜好是比较明显的时序信息以外,推荐系统中还有哪些时序信息的应用呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Yehuda Koren. Factor in the neighbors: Scalable and accurate collaborative filtering. ACM Trans. Knowl. Discov. Data 4, 1, Article 1 (January 2010), 24 pages, 2010.
|
||||
|
||||
Bal´azs Hidasi, Alexandros Karatzoglou, Linas Baltrunas, and Domonkos Tikk. Session-based recommendations with recurrent neural networks. International Conference on Learning Representations (2016), 2016.
|
||||
|
||||
Chao-Yuan Wu, Amr Ahmed, Alex Beutel, Alexander J. Smola, and How Jing. Recurrent Recommender Networks. Proceedings of the Tenth ACM International Conference on Web Search and Data Mining (WSDM ‘17). ACM, New York, NY, USA, 495-503, 2017.
|
||||
|
||||
|
||||
|
||||
|
||||
|
57
专栏/AI技术内参/078基于深度学习的推荐模型之三:利用深度学习来扩展推荐系统.md
Normal file
57
专栏/AI技术内参/078基于深度学习的推荐模型之三:利用深度学习来扩展推荐系统.md
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
078 基于深度学习的推荐模型之三:利用深度学习来扩展推荐系统
|
||||
这周,我们主要讨论如何利用深度学习来提升推荐系统的精度。我们分别介绍了使用RBM(Restricted Boltzmann Machines,受限波兹曼机)来对推荐系统建模,和RNN(Recurrent Neural Network,递归神经网络)在推荐系统中的应用。
|
||||
|
||||
今天,我们最后再来看一看,还有哪些深度学习的思潮在影响着推荐系统。这些思想都是一些值得关注和学习的方向,虽然这些方法能否在短时间内成为主流还有待检验。
|
||||
|
||||
多层神经网络
|
||||
|
||||
深度学习开始从计算机视觉这一人工智能子领域慢慢向其他领域扩展,在这个大背景下,很多学者和实践者总结出了深度学习获得成功的一大法宝,那就是能够从众多的信息中学习到高维度的特性(Feature)。比如,在计算机视觉里,通过多层神经网络建立的深度学习模型往往能够识别出类似“边”、“角”、“形状”等视觉概念。于是,大家就形成了这样一个普遍认识:多层神经网络是一种提取特性的利器。
|
||||
|
||||
和很多其他领域的思路一样,在推荐领域的学者也开始尝试利用多层神经网络对用户和物品的信息进行提取。这里面比较经典的思路是:直接利用多层神经网络,来尝试我们之前已经讲过的基于矩阵分解的推荐模型。
|
||||
|
||||
在矩阵分解的例子里,我们学习到的是用户的隐变量和物品的隐变量。这两者的点积成为评分的预测结果。在这个模型框架里可以认为,用户的隐变量和物品的隐变量是我们从数据中提取的特性信息。只不过,这种特性的提取是一种线性变换,而深度学习模型寻求的是多层次的非线性变换。
|
||||
|
||||
利用多层神经网络提取用户和物品特性的基本思路是这样的。
|
||||
|
||||
首先,我们的输入信息是用户的ID以及物品的ID。这里我们可以认为 ID是高维的离散输入。那么,根据这个输入信息,我们分别对用户和物品构建多层神经网络。这里比较常见的是至少有一层的神经网络,可以把离散的输入转换成为连续的数据层。
|
||||
|
||||
通常我们把这一层叫作“嵌入层”(Embedding)。嵌入层的基本思想是希望能够把离散信息转换成为连续信息,并且这些连续信息携带着“语义”(Semantic)上面的相似。什么意思呢?就是说如果两个用户是相似的,或者两个物品是相似的,那么我们就会寄希望于他们的嵌入层在数值上相近,这样嵌入层就能够很好地捕捉到用户和物品的相似度。
|
||||
|
||||
当用户和物品两边分别得到了嵌入层以后,输入信息已经完全变成了连续数据信息,通常的做法是把两边的嵌入层拼接在一起(也有把两个嵌入层取加权平均的做法),形成一个大的嵌入层。这个新的拼接层就成为连结了用户信息和物品信息的输入。
|
||||
|
||||
然后,接下来要做的,就是对这个新的输入进行多层的神经网络变换,最后输出我们对评分的预测。
|
||||
|
||||
总而言之,直接利用多层神经网络对用户和物品的建模可以简单归纳为两步:首先,把离散的ID信息转换成为连续的信息,形成嵌入层;然后,利用多层神经网络对嵌入层进行变换,并最后输出预测结果。
|
||||
|
||||
虽然利用多层神经网络在推荐系统上可以算是非常直观,然而在实际的效果中,我们其实并没有发现利用多层神经网络比矩阵分解要更好。如何能够更加有效地利用多层神经网络目前还是一个研究方向。
|
||||
|
||||
其他深度学习模型
|
||||
|
||||
除了直接利用多层神经网络来对推荐系统进行建模以外,最近也有不少把深度学习中其他思潮应用到推荐系统中的尝试。这里我也简单提及一些。
|
||||
|
||||
首先,在深度学习领域有一个技术叫作“自动编码器”(Autoencoder)。这个方法的核心思想就是希望能够无监督化地学习到某种信号的编码后的信息,并且编码后的信息能够再次通过解码尽可能地还原最初的信号。如果我们能够找到这样完美的过程,那么,在这个方法的假设里,我们就获取了更有价值的特性信息。
|
||||
|
||||
于是,把自动编码器思想应用到推荐系统的尝试,主要就是对用户以及物品进行编码。需要指出的是,我们刚才提到的直接使用多层神经网络的方法,其实也是某种意义上的编码,但我们这里提到的自动编码器的思想,还强调能够从学习到的隐含信息中还原最初的信息,也就是尽可能保持学习到的隐含变量的可还原性。这一点是多层神经网络所不具备的。
|
||||
|
||||
另外一个就是 CNN(卷积神经网络)的应用,学者和工程人员希望借助CNN来对用户和物品进行建模,从而扩展推荐系统的表现力。目前CNN在计算机视觉领域占据着举足轻重的地位,因此,很多人都希望能够直接把CNN的成功借鉴到推荐系统中。
|
||||
|
||||
和刚才我们介绍的直接使用多层神经网络建模的思路非常类似。一种常见的做法也是直接利用CNN来提取用户和物品的信息。通常的做法就是在我们刚才所说的嵌入层之后,不直接使用多层神经网络了,而是使用CNN来对嵌入层之后的信息进行变换。这里其实并没有太多创新的地方,基本上就是把视觉里面的模型拿来直接使用。
|
||||
|
||||
关于其他深度学习模型我们就说到这里,不做太多的介绍。原因是从总体上来看,深度学习在推荐系统上的应用,还是技术大于实际效果,目前并没有在太多的应用上有真正令人说服的成功案例。大多数情况是技术人员希望尝鲜,然后把一些成功的模型照搬到推荐任务上,虽然效果也不差,但从大的贡献来说,并没有太大的创新。
|
||||
|
||||
小结
|
||||
|
||||
今天我们继续讨论了如何利用深度学习模型来对推荐系统进行建模,我们聊了如何把深度学习的思路嫁接到推荐系统的开发中来。
|
||||
|
||||
一起来回顾下要点:第一,我们聊了一种最简单的应用,就是直接利用多层神经网络来对推荐系统进行扩展;第二,我们聊了一些其他的深度学习的思路,包括自动编码器和CNN,简单讨论了如何把这些深度学习模型应用到推荐系统中。
|
||||
|
||||
最后,给你留一个思考题,深度学习模型在推荐领域应用的最大问题,或者说最大挑战是什么?
|
||||
|
||||
|
||||
|
||||
|
89
专栏/AI技术内参/078复盘2推荐系统核心技术模块.md
Normal file
89
专栏/AI技术内参/078复盘2推荐系统核心技术模块.md
Normal file
@@ -0,0 +1,89 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
078 复盘 2 推荐系统核心技术模块
|
||||
到目前为止,我们讲完了人工智能核心技术的第二个模块——推荐系统。
|
||||
|
||||
整个模块共21期,7大主题,希望通过这些内容,能让你对推荐系统核心技术有一个全面系统的认识和理解,为自己进一步学习和提升打下基础。今天我准备了21张知识卡,和你一起来对这一模块的内容做一个复盘。
|
||||
|
||||
提示:点击知识卡跳转到你最想看的那篇文章,温故而知新。如不能正常跳转,请先将App更新到最新版本。
|
||||
|
||||
现代推荐架构剖析
|
||||
|
||||
推荐架构需要解决的问题:
|
||||
|
||||
|
||||
能够在一两百毫秒内给用户提供当前的推荐结果;
|
||||
对用户和系统的交互结果做出响应;
|
||||
考虑用户群体的覆盖率的问题。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
简单推荐模型
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
基于隐变量的模型
|
||||
|
||||
我们通过模型的假设,知道隐变量之间的关系,但暂时并不知道隐变量的取值。因此需要通过“推断”过程来确定隐变量的实际取值。当我们知道了这些隐变量的取值之后,就可以根据这些取值来对未来的数据进行预测和分析。
|
||||
|
||||
隐变量往往还带有“统计分布”的假设。最简单的隐变量模型是高斯混合模型。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
高阶推荐模型
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
推荐的Exploit和Explore算法
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
基于深度学习的推荐模型
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
推荐系统的评价
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
积跬步以至千里
|
||||
|
||||
最后,恭喜你在这个模块中已经阅读了45397字,听了138分钟的音频,获得一张新的通关卡,这是一个不小的成就。在人工智能领域的千里之行,我们又往前迈出了一步。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
63
专栏/AI技术内参/079广告系统概述.md
Normal file
63
专栏/AI技术内参/079广告系统概述.md
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
079 广告系统概述
|
||||
在之前的分享里,我们已经介绍了搜索、推荐系统以及文本分析这三个重要的机器学习、人工智能领域。从基本的思想、算法以及架构说起,我们针对这几个领域要解决的问题和在解决这些问题的过程中出现的经典思路都做了比较详细的讲解。
|
||||
|
||||
可以说,搜索是最早利用机器学习以及人工智能思想和技术的应用领域。不管是从最初的图书馆信息检索系统还是到最近二十年年兴起的大规模现代搜索引擎,围绕搜索系统所产生的诸多方法论、算法和模型都影响着很多相关领域。特别是基于排序学习(Learning To Rank)的搜索排序算法的提出和成熟,让机器学习的一大批技术和搜索的现实问题得以结合,成为了机器学习和某个应用领域相互发展的一大典范。类似的,对于推荐系统来说,也在过去十几年间,通过机器学习技术和推荐问题的结合,迸发出了一系列经典方法,这些方法也影响了其他应用领域的发展。
|
||||
|
||||
从今天起,我们就来看另一个重要的应用领域:计算广告。计算广告这个领域深受搜索系统和推荐系统的影响,可以说有很多技术都是从这两个领域直接借鉴过来的。然而,因为其应用对象的不同和场景的不同,计算广告又有很多自己独特的问题,以及解决这些问题需要注意的限制条件。因此,在过去十多年间,计算广告慢慢发展出了一条独特的道路。
|
||||
|
||||
那么,我们首先来聊一聊广告系统的概述,看一下这个领域要解决的主要问题以及发展的简要历史。
|
||||
|
||||
计算广告的主要场景
|
||||
|
||||
为了给你建立一个感性的认识,我们先来讲一下计算广告的主要场景,了解这个领域需要解决什么样的问题。我们还会在后面的讲解中逐一展开这些场景下的问题设置,因此,这里主要是从大方向上来对这些场景进行一个把握。
|
||||
|
||||
互联网的应用和内容服务商慢慢意识到,提供广告可以作为一种重要的盈利手段,这以后,一个新兴的行业就此诞生了。
|
||||
|
||||
从最简单的场景来说,一个互联网内容服务商,例如一个新闻网站或者一个社交媒体网站,希望在自己的服务里插入广告,这基本上就是一个内容的匹配问题。我们把在自己的服务里提供广告的内容服务商叫作“发布商”(Publisher)。
|
||||
|
||||
发布商的目的是匹配广告和目标人群,有时候又叫“受众”(Audience),使得目标人群能够对广告产生兴趣并且点击,然后最终产生行动。这里的行动,可以是购买了广告里的商品,订阅了广告里的服务,也可以是非常广义下的行动,比如对某个品牌有了更加深刻的好印象等。
|
||||
|
||||
在这个最简单的场景里,有两种最基本的广告模式,一种叫作“搜索广告”,一种叫作“展示广告”。搜索广告是说发布商提供某种形式的搜索服务,然后将广告显示在搜索结果页面上。在这样的情况下,广告需要和查询关键词的语义有关系。从本质上说,这种情况下的广告是搜索结果的自然延伸。而对于展示广告来说,往往就是显示在发布商的普通页面上,一般并不直接和任何查询关键词相关。这又和经典的推荐系统的场景非常类似,也可以看做是推荐的一个自然延伸。
|
||||
|
||||
如果仅从这样的角度来看广告系统,那么我们基本上可以认定,广告就是特殊的搜索或者特殊的推荐。但其实广告系统还有另外一个和搜索以及推荐非常不一样的方面,最终决定了广告系统的特殊性,那就是“广告商”(Advertiser)。
|
||||
|
||||
广告商是那些愿意把自己的广告放到发布商上来显示给受众观看的服务提供商。广告商对于自己的目标往往有明确的定位,比如希望能够通过广告来增加销售,提高服务订阅数量,提高自己的品牌效应等等。因此,广告商自然希望能够在以下这一系列的决策上有更多的发言权,比如发布商究竟如何显示广告,在什么情况下显示广告,针对什么人群显示广告等,从而能够让自己的利益最大化。
|
||||
|
||||
也正是因为这个原因,为了满足广告商的需求,从而能够吸引更多的广告商来自己的服务打广告,发布商往往提供各种工具,帮助广告商了解自己的用户群体以及广告的效果,使得广告商认为这个发布商是一个可以值得依赖的合作伙伴。
|
||||
|
||||
然而,即便如此,发布商和广告商的利益往往是不完全一致的。发布商,作为一个内容的提供平台或是一个社交媒体平台,需要照顾自己用户群的感受。例如,一个医院希望在一个新闻网站上投放自己的广告,即便可以为新闻网站带来丰厚的广告收益,新闻网站也需要考虑,从长远来看,这些广告内容和自己的新闻内容是否和谐,是否慢慢地会让用户产生厌烦情绪等。从这个角度来看,发布商不仅仅是简单地进行广告和受众的匹配,还有一个最重要的工作,是从宏观上平衡广告投放效果和内容服务效果,从而达到自己价值的最大化。
|
||||
|
||||
随着发布商和广告商数目的增多,众多的发布商发现,如果都需要依靠自己的力量来构建大型广告管理系统,那无疑是非常耗时也是很多中小发布商所不具备的能力。同样,对于广告商来说,如果希望自己的广告能够投放到众多发布商中,逐一研究发布商的工具以及各个发布商用户的区别,就会为广告投放增加不小的难度。因此,针对发布商以及针对广告商的中间平台很快就应运而生。
|
||||
|
||||
对于发布商的中间平台而言,整合众多发布机会,从而能够让发布商接触到更多的机会,成为了“供应侧平台”(Supply Side Platform)。而对于广告商的中间平台而言,整合众多广告商机会,从而能够让广告商接触更广的发布机会,成为了“需求侧平台”(Demand-side Platform)。而连接这两大平台的则是“广告交换平台”(Ads Exchange Platform)。关于这些平台的具体功效,我们后面会慢慢接触到。
|
||||
|
||||
总之,现在你可以了解到,广告系统的重要场景是涉及广告商、发布商以及受众“三种角色”的复杂系统之间的平衡以及利益的最大化。
|
||||
|
||||
计算广告的简要历史
|
||||
|
||||
当我们熟悉了广告系统的一些经典场景之后,我们现在来回顾一下计算广告系统的一个发展简史。
|
||||
|
||||
最早的互联网广告出现在1994年11月27日。AT & T这个电信运营商在当时展现了一个叫HotWired的广告商的广告。那个时候,整个互联网只有三千多万用户。
|
||||
|
||||
1998年的时候,Goto.com的比尔⋅格罗斯(Bill Gross)发明了“搜索广告”(Sponsored Search),或者有些搜索引擎也把它叫作“竞价排名”。Goto.com后来在2001年成为了Overtune,并最终在2003年被雅虎公司收购。
|
||||
|
||||
2002年,谷歌也开始了自己的搜索广告产品AdWords并且很快引入了Generalized Second-Price-Auction,或者简称GSP的机制来对广告进行投标竞价。2007年,雅虎也跟进了这种方式来管理所有的广告投标。值得一提的是,当时的谷歌还针对一个广告专利技术纠纷,支付了240万股股票给雅虎。
|
||||
|
||||
另一方面,1998年已经有公司开始尝试利用自己的内容页面展示广告。2003年,谷歌收购了一家叫Oingo的公司并且将其业务更名为AdSense,从而开始了其展示广告服务。其后,雅虎和微软等服务商也相继效仿,扩展了自己的广告业务线。
|
||||
|
||||
早在2005年前后,各种广告交换平台也纷纷出现。这些交换平台的出现为“实时竞价”(Real-Time-Bidding),或叫RTB提供了可能性。今天,绝大多数广告平台都支持RTB来为广告商以及内容发布商提供服务。
|
||||
|
||||
总结
|
||||
|
||||
今天我为你简单介绍了广告系统的概况。一起来回顾下要点:第一,我们讲了广告系统的基本应用场景以及其中的重要角色;第二,我们回顾了计算广告在过去发展的一个简单历史。
|
||||
|
||||
最后,给你留一个思考题,除了我们所说的搜索广告和展示广告,你还见过什么其他类型的互联网广告呢?
|
||||
|
||||
|
||||
|
||||
|
72
专栏/AI技术内参/080广告系统架构.md
Normal file
72
专栏/AI技术内参/080广告系统架构.md
Normal file
@@ -0,0 +1,72 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
080 广告系统架构
|
||||
从本周开始,我们就进入了计算广告这个重要的应用领域。周一我们首先介绍了广告系统的概述,了解了这个领域要解决的主要问题以及发展的简要历史。我们知道了广告系统中有发布商、广告商、受众群这些实体,还有应运而生的各类中间平台。
|
||||
|
||||
今天,我们就更加细致地来看一下广告系统的架构,熟悉各个组件都是怎么运作的。
|
||||
|
||||
实时广告竞标的重要生态圈
|
||||
|
||||
在前一篇分享里,我们提到了“实时竞标”广告系统(简称为RTB)这个概念。现在,我们首先来回顾一下这个系统的重要生态圈。
|
||||
|
||||
实时竞标系统的生态圈里有四个重要的“角色”:广告商、发布商、广告交换商和用户。在此基础上,这个生态圈产生了一些重要的新的中间平台。
|
||||
|
||||
|
||||
供应侧平台,简称SSP,负责管理众多发布商的展示机会,接受来自需求侧平台的竞价(简称Bid),同时自动地展示广告。
|
||||
广告交易平台,简称ADX,是负责多个SSP和需求侧平台进行匹配的中间平台。
|
||||
需求侧平台,简称DSP,是负责管理众多广告商诸多广告的平台。
|
||||
数据处理平台,简称DMP,是为SSP、ADX、DSP提供数据服务的中间商。
|
||||
|
||||
|
||||
值得注意的是,以上的这种区别仅仅是一种概念上的区分,目的是为了让从业人员能够更加清晰地理解各个系统的目标和作用。在实际的运作中,不少平台都充当了多个角色,甚至有比较大的互联网广告平台在这几个子系统中都有所涉及。
|
||||
|
||||
用户行为定向
|
||||
|
||||
了解了实时竞价系统的生态环境之后,我们来看在一次广告显示的流程中,这些生态伙伴都参与了什么样的动作。
|
||||
|
||||
第一步,用户来到某个网站,网站产生了一个对实时竞价系统广告网络的请求。
|
||||
|
||||
第二步,实时竞价系统广告网络向某个DSP发送请求,这个请求里包含了用户是谁,当前页面是什么,以及一些上下文的数据。
|
||||
|
||||
第三步,DSP收到请求以后,就向DMP发送一个数据请求,用于收集用户更多的信息,包括用户的年龄、性别以及喜好。
|
||||
|
||||
第四步,DSP收到DMP的信息以后,会向实时竞价系统发出一个自己认为合适的广告以及竞价的价格。
|
||||
|
||||
第五步,实时竞价系统广告网络收集到所有的广告竞价以后,会举行一个拍卖(Auction)。每个实时竞价系统的拍卖规则可以不同。
|
||||
|
||||
第六步,实时竞价系统会向赢得广告位的DSP发送最后的收款价格,这个价格是根据某种拍卖规则决定的。
|
||||
|
||||
第七步,广告显示给了用户。
|
||||
|
||||
第八步,用户对广告的反馈,例如是否点击,是否购买广告相应的产品,是否订阅广告对应的服务等,这些信息会返回给DSP。
|
||||
|
||||
注意,这里提到的实时竞价系统广告网络既可以是一个SSP,也可以是一个ADX。
|
||||
|
||||
我们通过这个流程可以看出,在广告生态系统中,几乎所有的角色,都要在每一个广告请求中参与其中。每一个流程的不精确都有可能让最后现实的广告不符合用户的喜好。
|
||||
|
||||
用户追踪
|
||||
|
||||
从上面这个广告请求的流程中,我们可以看到,在整个广告生态系统中,对用户的追踪是一种非常重要的能力。如果广告平台的任何一个部件无法对用户信息进行有效的管理,那么,我们就无法显示相关的广告。
|
||||
|
||||
广告生态群对用户信息的追踪有一个基本的技术,那就是存储用户的Cookie。实际上,在广告生态圈里,就是用Cookie来对用户的身份进行识别的。当用户第一次访问一个网站的时候,一段Cookie就会被建立并且存储在用户的浏览器里。当用户下一次再访问的时候,这段Cookie就会被重新访问并且可能被更改。
|
||||
|
||||
需要注意的是,Cookie是和某一个域名(Domain)相关联的。比如,在通常情况下,你访问了A网站,B网站就无法访问你在A网站的Cookie。这样做的初衷是在互联网上可以做到保护用户的隐私以及有限制的信息共享。但作为广告平台来说,这样做当然是无助于平台对于用户信息的访问。
|
||||
|
||||
那么,一种方法就是B网站直接得到A网站的允许,到A网址植入脚本从而来收取用户的Cookie信息。例如,在某个时期内,纽约时报的网站就有多达17个合作方在对用户的数据进行收集。然而,即便是这样,每个单独的数据收集方都只能对用户在互联网上的行为进行局部的数据采集。也就是说,这些收集方很难对用户在互联网上的全部行为进行建模。很明显,这是不利于展示最有价值的广告信息的。
|
||||
|
||||
在这样的情况下,也就慢慢催生了一个新的技术——Cookie的整合。简单说来,Cookie整合要做的事情就是把多个由不同的数据收集方收集的Cookie进行匹配,从而能够在逻辑上把这些Cookie都当做同一个人处理。据统计,一个用户在30次点击内,就有99%的概率会被互联网上前10大“数据追踪机构”所追踪,而至少有40%的Cookie可以得到有效的整合。
|
||||
|
||||
当然,用Cookie来追踪用户并不是万能的。用户可以删除Cookie信息甚至在浏览器的层面禁止Cookie信息。这就给广告平台提出了不小的挑战。最近几年,基于其他存储技术的用户追踪手段,例如Canvas API或者Flash Cookie等也慢慢流行起来。
|
||||
|
||||
总结
|
||||
|
||||
今天我为你介绍了广告系统的基本架构。一起来回顾下要点:第一,我们分享了广告系统中各个系统的角色;第二,我们聊了各个子系统在一个广告显示请求中都干了什么事情,从感性上为你建立一个整体的观念;第三,我们简单提及了用户追踪的概念以及现在最常见的用户追踪技术的一些基本思路。
|
||||
|
||||
最后,给你留一个思考题,对于一个电子商务网站来说,卖家希望通过在站内显示的广告来扩大收益,这种情况下,谁是DSP、SSP和ADX呢?
|
||||
|
||||
|
||||
|
||||
|
65
专栏/AI技术内参/081广告回馈预估综述.md
Normal file
65
专栏/AI技术内参/081广告回馈预估综述.md
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
081 广告回馈预估综述
|
||||
在上一篇的分享里,我们详细地讨论了广告系统的架构,熟悉了各个组件都是怎么运作的,特别是我们重点剖析了对于每一个广告请求,供应侧平台(SSP)、广告交易平台(ADX)、需求侧平台(DSP)以及数据处理平台(DMP)都扮演了什么样的角色。同时,我们介绍了对于用户信息的追踪和整合,业界的基本技术就是存储用户的Cookie,以及慢慢催生的Cookie的整合技术。
|
||||
|
||||
今天,我们就来看一看整个计算广告领域最核心的一个问题:广告回馈预估。
|
||||
|
||||
什么是广告回馈预估
|
||||
|
||||
什么是广告回馈预估?广告回馈预估要解决什么问题?我们先来弄明白这个问题。
|
||||
|
||||
我们说过计算广告有两大应用领域:搜索广告和展示广告,以及围绕这些广告的生态系统。这些系统或者领域都希望达到一个最终的目的,那就是用户和广告进行交互,并且能够对广告所代表的服务或者产品产生印象,从而达成某种程度的交易。
|
||||
|
||||
这里的“交互”包括对传统广告的点击,也包括对视频广告的观看。而在和广告交互之后,用户对于广告所代表的服务或商品达成的“交易”,包括购买、订阅甚至是改变印象等等。那么,这一切和广告本身的交互以及和广告所代表的服务或者商品达成的交易,我们都通通称为“回馈”(Feedback)。
|
||||
|
||||
而我们所说的“回馈预估”,就是要预测用户这种行为的可能性,或者说是概率。也就是说,我们希望了解用户是不是有可能点击这个广告;有多大概率观看完这段视频广告;有多大可能去购买这个广告所代表的商品。
|
||||
|
||||
对广告的回馈概率进行有效估计是很多广告生态系统组件的一个核心需求。对于发布商来说,显示广告,不管是通过搜索结果还是通常的页面,都希望能够有用户交互从而带来收入。很多广告系统的收入模式就是依靠用户的点击从而让广告商为此支付一定费用给发布商。
|
||||
|
||||
因此,对于发布商来说,越是能准确估计这部分的点击率,就越能保证自己的收入。相应地,对于广告商来说,很有必要知道某一种类型的广告在哪个发布商能够带来更多的点击,从而能够有针对性地对于某个发布商进行投放。由此看来,广告回馈预估是一个非常重要的有待解决的技术问题。
|
||||
|
||||
广告回馈预估的普遍挑战和技术难点
|
||||
|
||||
既然广告回馈预估很重要,我们是不是可以直接用现成的机器学习工具就可以解决这个问题呢?这个问题有什么自身的特点,又有哪些挑战和技术难点呢?
|
||||
|
||||
在比较简单的设定下,广告回馈预估可以看做是某种监督学习的任务。在这类监督学习任务里,标签是用户的动作,例如点击或者观看,或者购买等。我们需要建立的是一个用户在某种上下文中对广告标签的一个模型。这里的上下文包括查询关键词、用户信息、广告信息以及一切其他有用的信息。
|
||||
|
||||
那么,在这样的设定下,广告回馈预估的核心挑战是什么呢?
|
||||
|
||||
核心挑战其实来自于稀疏的数据。
|
||||
|
||||
不管是在搜索广告中也好,还是在展示广告中也好,从平均的角度来说,相比于用户和正常的搜索结果或者展示结果(比如新闻内容等)的互动,用户与广告的互动要成倍地减少。有一项研究表明,在同样一个位置,广告的点击率可以是正常内容的十分之一、百分之一甚至是千分之一。也就是说,从概率的角度来看,用户普遍是不点击广告的。这个观察基本上是符合我们对用户的普遍理解的。但是,较少的点击数据造成的结果就是,从监督学习的角度来说,大量的数据点都是未交互的数据,只能当做负例来处理。
|
||||
|
||||
实际上,在广告点击率预估的问题中,正例的数目常常是负例的百分之一或者千分之一。这样造成的就是非常“不均衡”的数据集。而要想在不均衡的数据里中进行概率估计,往往都是一件困难的事情。
|
||||
|
||||
而购买事件相对于广告点击来说就更加稀少,这一点其实也很正常。在点击了广告之后,又有多少人真正会去购买这些产品呢?因此,提高广告的转化率,也就是交易发生的概率,往往就是更富有挑战的任务。
|
||||
|
||||
值得一提的是,在监督学习的框架中,除了数据问题以外,广告回馈预估还有目标函数的挑战。具体是什么情况呢?
|
||||
|
||||
在真实的系统中,我们需要在很多候选可能的广告中,选出最优的一个或者几个显示在页面上。从某种程度上来说,这更像是一个排序问题。同时,对于不少DSP(需求侧平台)来说,广告排序的最终目的是进行“竞拍”(Auction)。因此,最后估算广告的点击率以后,还需要看广告的竞价,由此来对广告是否会赢得竞拍从而被显示在页面上进行一个更加全面的估计。很显然,和传统的推荐或者搜索比较,这些问题都要复杂许多。
|
||||
|
||||
广告回馈预估的算法和模型
|
||||
|
||||
广告回馈预估的难点和挑战来自两方面,一方面是稀疏的数据,会造成不均衡的数据集;一方面是目标函数的挑战。那么,广告回馈预估有哪些比较常见的算法或者模型呢?
|
||||
|
||||
我们接下来会对这一系列有关的算法和模型进行详细讨论。今天,我会带你从宏观上进行一下总结。
|
||||
|
||||
从最直接的监督学习的角度来看,广告回馈预估的一个常见算法就是把这个问题当做二元分类问题,并且直接利用“对数几率回归”(Logistic Regression)来对这个问题建模。实际上,直到今天,对数几率回归依然是广告回馈预估领域的重要方法。
|
||||
|
||||
第二类经常使用的就是树模型,特别是 GBDT 这个通常在搜索中使用的模型。我们前面已经提到了这类模型对于排序学习的作用。
|
||||
|
||||
第三类目前比较火热的领域就是如何利用深度学习来对回馈预估进行建模。这一类模型在最近几年有了比较大的进展。
|
||||
|
||||
总结
|
||||
|
||||
今天我为你介绍了广告系统中最核心的一个问题:广告回馈预估。一起来回顾下要点:第一,广告回馈预估就是预测“用户与广告的交互以及达成交易这种行为”的概率;第二,广告回馈预估有两方面的难点和挑战,分别来自数据和目标函数;第三,在这个领域有一些流行的模型,比如对数几率回归和数模型等。
|
||||
|
||||
最后,给你留一个思考题,当我们有不均衡数据集的时候,我们一般都有哪些解决方案?针对广告预估,是否需要对这些方案进行额外的处理呢?
|
||||
|
||||
|
||||
|
||||
|
73
专栏/AI技术内参/082Google的点击率系统模型.md
Normal file
73
专栏/AI技术内参/082Google的点击率系统模型.md
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
082 Google的点击率系统模型
|
||||
广告是很多互联网公司的重要收入来源,比如Google、Facebook、微软、阿里巴巴、百度、腾讯等。以Facebook为例,它的2017年第一季度财报显示,公司总营收为78.4亿美元,这其中98%的收入来自广告。同样,在这些公司内部,都有着完善的广告系统来支撑其广告业务。
|
||||
|
||||
当然,大型广告系统的成功需要依靠很多相互协调的子系统和组件。今天我要和你聊的是广告系统里最基础的一个子系统,也是整个广告系统的核心功能之一——点击率预估系统。点击率预估,顾名思义就是根据环境和广告的类型,来估计用户有多大的可能性点击当前的广告。这个预估值会用于广告系统的其他组件,比如对广告主(投放广告的客户)的计费模块。因此,点击率预估的准确性和实时性就变得十分重要。
|
||||
|
||||
今天和你分享一篇广告点击率预估文献史上非常重要的论文,它来自Google广告团队,标题是《工程实践视角下的广告点击率预估》(“Ad Click Prediction: a View from the Trenches”)。
|
||||
|
||||
论文背景
|
||||
|
||||
这篇论文发表于KDD 2013年的工业论文组,在短短几年时间里就获得了近200次的文章引用数,不少公司争相研究其中的内容,希望能够复制类似的算法和技术。
|
||||
|
||||
这篇文章的作者群多达16人,他们都是来自Google西雅图、匹兹堡、硅谷以及剑桥等地办公室的研究人员和工程师,文章的致谢部分也有9人。可见整个论文以及里面的技术的确是团队协作的结果。
|
||||
|
||||
这里面有两位作者值得介绍一下。第一位是论文的第一作者布兰登(H. Brendan McMahan)。布兰登早年在卡内基梅隆大学计算机系获得博士学位。他的博士生导师是戈登(Geoff Gordon)以及布卢姆(Avrim Blum),这两位都是卡内基梅隆大学机器学习界的权威教授。布兰登本人长期对优化算法有深入的研究,这篇论文的重要核心算法就来自于他的研究成果。
|
||||
|
||||
文章的另外一位作者斯卡利(D. Sculley)从塔夫茨大学(Tufts University)博士毕业之后,一直在Google的匹兹堡分部工作,并着手研究大规模机器学习系统,其中重要的代表性研究成果是如何把回归问题和排序问题结合起来(发表于KDD 2010年)。斯卡利曾经是一个著名的开源大规模机器学习软件包sofia-ml的作者,里面实现了一个大规模版本的RankSVM,一度受到关注。
|
||||
|
||||
在线逻辑回归(Logistic Regression)
|
||||
|
||||
文章首先讲解的是点击率预估的核心算法。因为Google要处理的数据集非常庞大,不管是样本数量还是样本的特征数都是百亿级别的,所以选用什么样的算法至关重要。2013年,也就是这篇论文发表的时候,当时大规模深度学习的环境还没有完全成熟起来,Google的科学家和工程师选择了逻辑回归,这是一个非常传统但也非常强大的线性分类工具。
|
||||
|
||||
我们这里简单回顾一下逻辑回归模型。
|
||||
|
||||
逻辑回归是要对二元分类问题进行建模,模型的核心是通过一组(有可能是非常巨大规模的)特征以及所对应的参数来对目标的标签进行拟合。这个拟合的过程是通过一个叫逻辑转换或函数来完成的,使得线性的特征以及参数的拟合能够非线性转换为二元标签。
|
||||
|
||||
普通的逻辑回归并不适应大规模的广告点击率预估。有两个原因,第一,数据量太大。传统的逻辑回归参数训练过程都依靠牛顿法(Newton’s Method)或者L-BFGS等算法。这些算法并不太容易在大规模数据上得以处理。第二,不太容易得到比较稀疏(Sparse)的答案(Solution)。也就是说,虽然数据中特征的总数很多,但是对于单个数据点来说,有效特征是有限而且稀疏的。
|
||||
|
||||
我们希望最终学习到的模型也是稀疏的,也就是对于单个数据点来说,仅有少量特征是被激活的。传统的解法,甚至包括一些传统的在线逻辑回归,都不能很好地解决答案的稀疏性问题。
|
||||
|
||||
这篇文章提出了用一种叫FTRL(Follow The Regularized Leader)的在线逻辑回归算法来解决上述问题。FTRL是一种在线算法,因此算法的核心就是模型的参数会在每一个数据点进行更新。FTRL把传统的逻辑回归的目标函数进行了改写。
|
||||
|
||||
新的目标函数分为三个部分:第一部分是一个用过去所有的梯度值(Gradients)来重权(Re-Weight)所有的参数值;第二部分是当前最新的参数值尽可能不偏差之前所有的参数值;第三个部分则是希望当前的参数值能够有稀疏的解(通过L1来直接约束)。从这三个部分的目标函数来看,这个算法既能让参数的变化符合数据规律(从梯度来控制),也能让参数不至于偏离过去已有的数值,从而整个参数不会随着一些异常的数据点而发生剧烈变化。
|
||||
|
||||
在算法上另外一个比较新颖的地方,就是对每一个特征维度的学习速率都有一个动态的自动调整。传统的随机梯度下降(Stochastic Gradient Descent)算法或是简单的在线逻辑回归都没有这样的能力,造成了传统的算法需要花很长时间来手工调学习速率等参数。
|
||||
|
||||
同时,因为每一个特征维度上特征数值的差异,造成了没法对所有特征选取统一的学习速率。而FTRL带来的则是对每一个维度特征的动态学习速率,一举解决了手动调整学习算法的学习速率问题。简单说来,学习速率就是根据每一个维度目前所有梯度的平方和的倒数进行调整,这个平方和越大,则学习速率越慢。
|
||||
|
||||
系统调优工程
|
||||
|
||||
很明显,光有一个比较优化的在线逻辑回归算法,依然很难得到最好的效果,还会有很多细小的系统调优过程。
|
||||
|
||||
比如文章介绍了利用布隆过滤器(Bloom Filter)的方法,来动态决定某一个特征是否需要加入到模型中。虽然这样的方法是概率性的,意思是说,某一个特征即便可能小于某一个值,也有可能被错误加入,但是发生这样事件的概率是比较小的。通过布隆过滤器调优之后,模型的AUC仅仅降低了0.008%,但是内存的消耗却减少了60%之多,可见很多特征仅仅存在于少量的数据中。
|
||||
|
||||
文章还介绍了一系列的方法来减少内存的消耗。比如利用更加紧凑的存储格式,而不是简单的32位或者64位的浮点数存储。作者们利用了一种叫q2.13的格式,更加紧凑地存储节省了另外75%的内存空间。
|
||||
|
||||
此外,前面我们提到的计算每一步FTRL更新的时候,原则上都需要存储过去所有的梯度信息以及梯度的平方和的信息。文章介绍了一种非常粗略的估计形式,使得这些信息可以不必完全存储,让内存的消耗进一步降低。这部分内容可能并非对所有读者都有益处,然而我们可以看到的是,Google的工程师为了把一种算法应用到实际中做出了非常多的努力。
|
||||
|
||||
另外,文章也特别提出,虽然大家都知道在点击率预估这样非常不对称的问题上(也就是正例会远远少于负例)需要对负样本进行采样,但是这里面需要注意的是直接采样会对参数的估计带来偏差。同时文章也提出了需要对模型的最后预测进行调整(Calibration),使得模型的输出可以和历史的真实点击率分布相近。这一点对于利用点击率来进行计费显得尤为重要,因为有可能因为系统性的偏差,预测的数值整体高出或者整体低于历史观测值,从而对广告主过多计费或者过少计费。
|
||||
|
||||
失败的实验
|
||||
|
||||
这篇文章难能宝贵之处是不仅介绍了成功的经验,还介绍了一些失败的或者是不怎么成功的实验结果,让后来的学者和工程师能够少走弯路。
|
||||
|
||||
比如著名的Hashing Trick,在这篇文章里,Google的工程师们经过实验发现,特征经过哈希之后并没有显著降低内存而且模型的精准度有所下降,同时哈希也让模型变得不可解释,于是Google的工程师觉得没有必要对特征进行哈希。
|
||||
|
||||
另外一个热门的技术Dropout也被作者们尝试了,在Google的实验数据上并没有显著的效果。还有一个经常见到的技术,那就是对学到的参数进行归一化(Normalization),这是让参数能够在一定的范围内不随便波动。遗憾的是,Google的作者们也发现这个技术没有太大作用,模型的效果经常还会降低。
|
||||
|
||||
小结
|
||||
|
||||
今天我为你分享了这篇关于广告点击率预估的重要论文,你需要理解的核心要点有几个,一是FTRL模型的创新;二是这个模型如何应用到工业界的环境中特别是如何对内存的消耗进行调优;三是Google一系列失败尝试的总结。
|
||||
|
||||
总之,这篇论文是难得一见的工业界级别的科技论文分享。从KDD工业组的角度来说,很有借鉴意义;从业界贡献来说,除了广告之外,FTRL也被广泛应用到推荐系统等领域。
|
||||
|
||||
最后,我们再来探讨个问题。假设你在负责公司的广告系统,那你应该如何判断自己的场景是不是应该使用FTRL呢?
|
||||
|
||||
|
||||
|
||||
|
59
专栏/AI技术内参/083Facebook的广告点击率预估模型.md
Normal file
59
专栏/AI技术内参/083Facebook的广告点击率预估模型.md
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
083 Facebook的广告点击率预估模型
|
||||
上一篇文章我们讲了整个计算广告领域最核心的一个问题:广告回馈预估。广告回馈预估,就是预测“用户与广告的交互以及达成交易这种行为”的概率,也就是点击率预估和转化率预估。广告回馈预估存在着数据稀疏等难点和挑战,目前在这个领域比较流行的模型有对数几率回归和数模型等。
|
||||
|
||||
今天,我们就来看一个广告回馈预估的实例:Facebook的广告点击率预估。我们会结合2014年发表的一篇论文《Facebook的广告点击率预估实践经验》(Practical Lessons from Predicting Clicks on Ads at Facebook)来进行分析[1]。
|
||||
|
||||
Facebook广告预估
|
||||
|
||||
Facebook的广告不是我们之前介绍过的搜索广告或者展示广告的简单应用,而是社交广告。可以说,社交广告是最近10年慢慢崛起的一种新的广告类型。在论文发表的时候,也就是2014年,Facebook有7.5亿“日活跃用户”(Daily Active Users)和超过1百万的广告商,这个数字在当时是相当惊人的。而今天,在Facebook上活跃的大约有14.5亿用户和5百万广告商。因此,广告系统所需要应对的规模是成倍增加的。
|
||||
|
||||
我们说Facebook的广告是社交广告,也就是说,这些广告不依赖于用户输入的搜索关键词。从Facebook的角度来说,广告商在其平台上投放广告的巨大优势,在于能够精准地根据用户的地理位置、年龄、性别等重要信息进行有针对性的投放,因此这些信息能够帮助平台选择什么样的广告适合什么样的人群。那这里的难点就是,对于某一个人群来说,可能符合的广告数量是巨大的,这对广告的回馈预估以及整个系统都是一个不小的挑战。
|
||||
|
||||
广告点击率的评估
|
||||
|
||||
在我们详细解释Facebook点击率系统的一些核心组件之前,我们首先来看一看Facebook的研究人员是怎么评测他们的系统的。
|
||||
|
||||
我们之前提到过,广告系统中的一个巨大挑战就是数据的不均衡。负例,也就是用户没有点击过的广告非常多;而正例,也就是点击过的广告相对比较少。这个比例,根据不同的广告系统会不太一样,但是大体说来,负例与正例的比大概是10:1、100:1甚至1000:1。
|
||||
|
||||
在这样的情况下,如果把点击率预估当做是一个分类问题,按照一般分类问题的评价标准,例如准确率,我们只要预测绝大多数,甚至是全部的实例为负例,那么就可以取得很高的准确率。因此,单独看准确率并不是一个很好的评测标准。
|
||||
|
||||
这个时候,一个比较通行的评测不均衡数据分类问题的指标是“曲线下面积”,或者简称为 AUC,这个评测办法可以算是一种替代方法。简单来说,AUC就是看我们是不是能够把正例给排序到负例上面。也就是说,如果每一个正例和负例都有一个预测数值,那么我们按照这个数值排序,去数每一个正例下面有多少负例,然后对所有正例所对应的数取平均。AUC的数值高,则代表我们可以把绝大多数正例排序到负例前面。
|
||||
|
||||
当然,AUC也不是万能的。AUC的一个最大问题就是它并不在乎所有实例的绝对预测数值,而只在乎它们的相对位置。这在广告系统中可以说是一个非常大的缺陷。我们之前也提过,有很多广告系统组件依赖于对于广告点击率的精确预估,比如收费系统,流量预测等。因此,仅有一个相对位置的正确是不够的。
|
||||
|
||||
在这篇论文中,Facebook团队提到了一个概念叫“归一化的交叉熵”,简称 NE,用于衡量广告系统的好坏。NE实际上是一个比值,比值的分母是数据中观测到的实际的点击率的数值,也可以叫作数据的“背景估计”(Background Estimation);而分子是某一个模型对点击率的估计。这样做的归一化,目的就是来看,在去除了背景估计的情况下,对点击率的估计是否依然好或者坏。
|
||||
|
||||
层次化的点击率预估模型
|
||||
|
||||
Facebook的研究人员在这篇论文中提出的点击率预估模型分为两个层次。也就是说,从最初的模型特性输入,需要经过两个不同的模型才对点击率做出最终的预测。这个两层架构对后来的很多点击率预估模型有巨大的影响。
|
||||
|
||||
我们首先来看第一层模型,这里的输入是最初的特性,其中连续数值的特性已经被转换成了离散的数值。然后,这些离散的数值经过了一个GBDT树来进行特性转换。这里为什么会用GBDT呢?主要有两层意义。
|
||||
|
||||
第一,GBDT可以对特性进行非线性组合。也就是说,GBDT的输出一定是之前特性的非线性的转换,这是由树模型原本的性质所带来的,这个性质对于线性模型来说会有巨大的优势。
|
||||
|
||||
第二,经过GBDT转换之后,树模型其实选择出了对目标有用的特性,因此这里还起到一个“特性筛选”(Feature Selection)的作用。也就是说,经过GBDT的模型,最后剩下的特性肯定是要远小于最初的输入特性的,毕竟有作用的特性是少数的。
|
||||
|
||||
在经过了GBDT之后,Facebook的研究者用树模型最后的叶节点当做新的特性,然后再学习了一个线性的分类模型。这里的思想其实和后来流行的深度学习的想法很类似,也就是先对输入特性进行非线性转换,然后再经过一个线性分类器来进行最后的预测。这个第二层的线性分类器可以用类似SGD的方法进行“在线学习”(Online Learning)。因此,学习到这样一个模型就相对比较容易。
|
||||
|
||||
在论文的实验中,作者们不仅展示了两层模型的优势,并且还讨论了很多选取特性方面的经验以及训练模型的经验,比如广告过去的历史信息非常重要,而绝大多数重要的特性都和历史信息有关。
|
||||
|
||||
总结
|
||||
|
||||
今天我为你介绍了Facebook的广告点击率预估的核心算法。一起来回顾下要点:第一,Facebook的广告是社交广告,有其自身的特点和难点;第二,Facebook对广告进行评测的指标主要有AUC和NE;第三,Facebook提出了两层模型的架构,其主要思想是先经过GBDT来进行特性转化,再经过一个线性分类器进行最后的预测。
|
||||
|
||||
最后,给你留一个思考题,对于两层架构来说,除了模型性能上的优势以外,在训练的方便程度上,这样的架构还没有什么优势或者劣势呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Xinran He, Junfeng Pan, Ou Jin, Tianbing Xu, Bo Liu, Tao Xu, Yanxin Shi, Antoine Atallah, Ralf Herbrich, Stuart Bowers, and Joaquin Quiñonero Candela. Practical Lessons from Predicting Clicks on Ads at Facebook. Proceedings of the Eighth International Workshop on Data Mining for Online Advertising (ADKDD’14). ACM, New York, NY, USA, , Article 5 , 9 pages, 2014.
|
||||
|
||||
|
||||
|
||||
|
||||
|
65
专栏/AI技术内参/084雅虎的广告点击率预估模型.md
Normal file
65
专栏/AI技术内参/084雅虎的广告点击率预估模型.md
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
084 雅虎的广告点击率预估模型
|
||||
在上一篇文章中,我和你分享了广告回馈预估的一个实例:Facebook的广告点击率预估。我们重点讲了Facebook利用“归一化的交叉熵”这个概念,来衡量广告模型的精准度。另外,我们还分享了Facebook提出的两层模型架构,也就是一开始先利用树模型GBDT来对特性进行非线性转换和选择,然后再利用一个在线学习的线性模型进行最后的预测,这个架构后来得到了很多研究者和实践者的追随。
|
||||
|
||||
今天,我们来分析另外一个经典的公司实例:雅虎的广告点击率预估模型。
|
||||
|
||||
雅虎早期的广告预估模型
|
||||
|
||||
对于曾经的互联网巨头雅虎来说,广告系统很早就成为其重要的经济支柱。早在2007年甚至更早的时候,雅虎的工程师和研究人员就投入到了对广告点击率预估的研究中。这方面的几个代表作我列在了文末的参考文献([1]、[2]和[3])里,如感兴趣,你可以进一步学习。
|
||||
|
||||
我们在这里集中讲讲这些工作的核心思路。
|
||||
|
||||
首先,雅虎的研发人员很早就注意到了广告预估模型的一个难点,那就是数据的稀疏性。这些具有稀疏性的数据带来了一个后果,那就是模型对很多“罕见事件”(Rare Events)的估计会出现很大的不稳定性。
|
||||
|
||||
我们来举个例子,如果广告1在纽约地区展示了1万次,点击200次,点击率是0.02;而广告2在旧金山地区展示了1百次,点击3次,点击率是0.03,在这样的情况下,我们能判断广告2就一定比广告1有更高的点击率吗?这里面至少有两个因素需要考虑。
|
||||
|
||||
第一,上下文的特性信息非常重要。这两个广告可能是类型不同,可能展示的地区不同,因此并不能完全直接来对这两个广告进行比较。第二,广告2在旧金山地区的展示次数还比较少,因此0.03这个预估值可能是非常不准确的,或者说至少是不稳定的,它的误差要大于第一个广告。
|
||||
|
||||
这个时候,研发人员就会思考,如何对这些广告的预估进行更加精确的处理呢?
|
||||
|
||||
在这样的背景下,雅虎的研发人员提出了一个点击率估计方法,其实也是一种两层模型。第一层模型就是最原始的对点击率的估计,也就是类似我们上面所说的直接按照数据进行估计。当然,这里的问题我们刚才也已经提到了,就是估计的不稳定性。第二层模型是对第一层模型的修正。所谓修正,就是利用层次化信息来对原始的估计值进行“平滑”(Smoothing)。
|
||||
|
||||
什么是层次化信息呢?我们举例来说明。比如,两个广告来自于同一个广告商,因此它们应该有一定的类似的点击率;两个广告被展示到同一个地区,它们也应该有一定的类似的点击率。这些层次信息给了我们一些启示,来对原始估计值进行修正。当然,根据我们这两个例子你就可以看出,一个广告可以受到多个层次信息的影响,比如广告商的层次信息,地理位置的层次信息,以及类别的层次信息等。所以,要想设计一套完善的基于层次信息的平滑方案也并非易事。
|
||||
|
||||
这个时期,雅虎在这方面的工作都围绕着一个主题,那就是如何对平滑方案进行创新。一种方法是利用“产生式模型”(Generative Model)的概念,把层次信息的叶子节点的数据产生过程,定义为基于其父节点数据的一个概率分布产生过程,从而把整个平滑方案的问题转换成为了一个有向无环图上的每个节点的后验概率参数的估计问题(参考文献[1]和[2])。另外一种方法则采取了一个不太一样的思路,那就是在做平滑的时候,在这种产生式建模之后,还追加了一个过程,利用树模型来对平滑的结果进行再次修正,使得最后的结果能够达到更高的精度(参考文献[3])。
|
||||
|
||||
这一系列工作虽然在概念上有很高的学术和实践价值,特别是如何利用层次性信息来对预测进行平滑这个方面,但是从整体来说,预估方案变得非常复杂而且环节太多。
|
||||
|
||||
雅虎后期的广告预估模型
|
||||
|
||||
雅虎后期的广告预估模型又从比较复杂的两层模式转换为了一层模式。这个转换主要是考虑到了整个流水线(Pipeline)的复杂度以及需要处理的数据规模逐渐变大,那么利用更加稳定和简单的方法就势在必行了。
|
||||
|
||||
对于雅虎后期的广告预估模型,我参考论文《简单和可扩展的展示广告响应预测》(Simple and Scalable Response Prediction for Display Advertising)[4],在这里为你简单做一个总结。
|
||||
|
||||
总体来说,整个模型回到了相对简单的“对数几率回归”(Logistic Regression),并且直接对所有的特性(Feature)进行建模。这里面唯一可能和之前的很多工作不太一样的地方,是大量使用了“特性哈希”(Feature Hashing)的方法。简单来说,特性哈希就是把原来大规模的有可能是极其稀疏的特性给压缩到了一个固定维度的特性空间里。当然,这肯定会对精度等性能有一定影响,因此这是一个需要有一定取舍的决策。
|
||||
|
||||
在这篇论文中,作者们还介绍了如何对大量的数据进行采样,以及如何利用配对的特性(也就是把两种不同的特性,比如广告商和地理位置进行配对)来自动产生更多的非线性因素的方法。
|
||||
|
||||
那么这个一层模式的方法所达到的效果怎样呢?论文中论述,相比于之前的两层结构,这个方法所达到的效果有很大程度的提升。
|
||||
|
||||
总结
|
||||
|
||||
今天我为你介绍了雅虎的广告点击率预估模型。一起来回顾下要点:第一,雅虎早期的广告预估算法,其重点放在了一种两层模型架构上;第二,雅虎广告预估后期的一些思路,重点则放在了回归到一种更加简单的架构上。
|
||||
|
||||
最后,给你留一个思考题,如何在对数几率回归这样的线性模型中引入层次化的平滑思路呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Deepak Agarwal, Andrei Zary Broder, Deepayan Chakrabarti, Dejan Diklic, Vanja Josifovski, and Mayssam Sayyadian. Estimating rates of rare events at multiple resolutions. Proceedings of the 13th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD ‘07). ACM, New York, NY, USA, 16-25, 2007.
|
||||
|
||||
Deepak Agarwal, Rahul Agrawal, Rajiv Khanna, and Nagaraj Kota. Estimating rates of rare events with multiple hierarchies through scalable log-linear models. Proceedings of the 16th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD ‘10). ACM, New York, NY, USA, 213-222, 2010.
|
||||
|
||||
Nagaraj Kota and Deepak Agarwal.Temporal multi-hierarchy smoothing for estimating rates of rare events. Proceedings of the 17th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD ‘11). ACM, New York, NY, USA, 1361-1369, 2011.
|
||||
|
||||
Olivier Chapelle, Eren Manavoglu, and Romer Rosales. Simple and Scalable Response Prediction for Display Advertising. ACM Trans. Intell. Syst. Technol. 5, 4, Article 61 (December 2014), 34 pages, 2014.
|
||||
|
||||
|
||||
|
||||
|
||||
|
57
专栏/AI技术内参/085LinkedIn的广告点击率预估模型.md
Normal file
57
专栏/AI技术内参/085LinkedIn的广告点击率预估模型.md
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
因收到Google相关通知,网站将会择期关闭。相关通知内容
|
||||
|
||||
|
||||
085 LinkedIn的广告点击率预估模型
|
||||
上一篇文章我们讲了雅虎的广告预估模型。雅虎早期的模型主要集中在如何利用两轮架构来对点击率进行精确建模,后期的模型回归到了比较传统的利用线性模型外加特性哈希来进行大规模点击率预估的模式。
|
||||
|
||||
今天,我们继续来做公司的案例分析,结合论文《LASER:在线广告的可扩展响应预测平台》(LASER: a scalable response prediction platform for online advertising)[1],来了解LinkedIn这家公司是怎么来做最基本的广告预估的。
|
||||
|
||||
LinkedIn广告预估模型
|
||||
|
||||
我们首先来看一看LinkedIn的广告预估模型。这个模型的一大“卖点”就是直接充分考虑了“冷启动”和“热启动”两种模式。
|
||||
|
||||
那么,什么是“冷启动”,什么又是“热启动”呢?
|
||||
|
||||
从我们之前的分享中可以看出,很多点击率预估的模型,都强烈依赖于对用户过去信息以及对广告过去表现的建模。比如刚刚讲过的雅虎预估模型,在它早期的模式中就已经见到了这种信息的作用。
|
||||
|
||||
然而,当我们出现新用户或者新广告时,就会有“冷启动”的问题。也就是说,“冷启动”主要是针对新用户或者新广告而言的。这时候基于历史信息的特性都无法起作用了,一般来说需要有专门的处理。
|
||||
|
||||
相对于“冷启动”,“热启动”指的是我们已经掌握了用户或者广告的一定信息,然后利用这些历史信息来对点击率进行预测。
|
||||
|
||||
这么说来,我们一般需要有两套对策,一套针对“冷启动”,一套针对“热启动”。LinkedIn的方法就是希望通过一个模型来同时解决这两个问题。
|
||||
|
||||
具体来说,LinkedIn把对点击率的预估拆成了三个部分。
|
||||
|
||||
第一部分,是利用用户、广告和上下文所建立的全局性预测。什么意思呢?就是我们利用用户特性、广告特性以及上下文特性来对点击率进行预测。这部分的核心思路就是这些特性所对应的系数是全局性的。也就是说,对于不同的用户、不同的广告以及不同的上下文所对应的系数是相同的。因为是全局性的系数,因此这部分其实提供了一种“冷启动”的需求,也就是不管是任何新的用户或是广告,只要有一定的特性,我们总能通过这部分得到一种粗略的估计。
|
||||
|
||||
第二部分,是利用第一部分的用户、广告和上下文信息组成交叉特性,从而学习这些特性之间的关系。如果说第一部分直接就是线性的预测,那么第二部分其实就是“交叉项”形成的非线性的部分。我们之前在讲推荐系统的时候提到过“分解机”(Factorization Machines)这个模型,讲到过这种“交叉项”所带来的非线性预测的好处。虽然这里和分解机的构成不完全一样,但是整体上表达了相似的意思。
|
||||
|
||||
第三部分,是LinkedIn模型提出来的独特之处(和其他公司模型不太一样的地方)。那就是同样是利用用户、广告和上下文特性,但是LinkedIn所提模型的系数则是每个用户、广告和上下文都不同。作者们认为这可以实现“热启动”效果。也就是说,当某个用户、某个广告或者某个上下文已经有比较多的数据以后,就可以依靠这些用户、广告或者上下文自己的系数了,而不仅仅依靠第一部分的全局系数。这个第三部分只有当数据比较多的时候才能够起作用。
|
||||
|
||||
模型的其他特性
|
||||
|
||||
这个模型在增加了这些系数的先验概率信息之后变得相对比较复杂。这篇论文介绍了一系列的模型训练思路,都是不错的可以借鉴的工业界经验。
|
||||
|
||||
首先,作者们认为,刚才模型中所说的三个部分所需要的模型更新频率是不一样的。比如第一部分和第二部分都可以认为是全局模型,也就是说系数是全局性的。因此这些模型的变化会比较慢,作者们建议一个星期对模型进行一次更新。而第三部分则是在已经积累了历史信息后慢慢呈现出的效果,因此对于数据会非常敏感,而且每个用户和每个广告都是不同的系数,因此需要在短时间内,比如半个小时甚至几分钟内,就重新训练模型,以达到个性化的目的。
|
||||
|
||||
其次,作者们还把提出的模型和EE(Exploit & Explore)策略结合了起来。我们在讲推荐系统时介绍过EE的思路,简单回顾一下EE的目的,主要就是探索那些并没有太多机会被展示的物品,在这里也就是广告。我们刚才说了,所有的系数都加上了先验概率,因此其实可以很容易结合数据计算后验概率分布。有了后验概率分布,作者们提出了以汤普森采样为主的EE模式。这也可以算是论文提出模型的一大亮点。
|
||||
|
||||
最后我们提一下这个模型的训练算法。因为要在大规模的数据上对模型进行训练,这篇文章采用了一种ADMM算法。在文章提出来的时候,作者们还是希望能够利用单个服务器对所有的模型参数进行训练。和其他的算法相比,一般认为ADMM这种算法的收敛速度更快,但是,利用这种算法的其他公司并不太多。
|
||||
|
||||
总结
|
||||
|
||||
今天我为你介绍了LinkedIn广告点击率预估的核心算法。一起来回顾下要点:第一,我们讲了LinkedIn把点击率预估分为三个部分,从而分别解决“冷启动”和“热启动”的思路;第二,我们聊了如何更加有效地对这个提出的模型进行训练学习。
|
||||
|
||||
最后,给你留一个思考题,回顾我们讲过的推荐系统模块,我们还介绍过什么方法可以结合“冷启动”和“热启动”呢?
|
||||
|
||||
参考文献
|
||||
|
||||
|
||||
Deepak Agarwal, Bo Long, Jonathan Traupman, Doris Xin, and Liang Zhang. LASER: a scalable response prediction platform for online advertising. Proceedings of the 7th ACM international conference on Web search and data mining (WSDM ‘14). ACM, New York, NY, USA, 173-182, 2014.
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user