first commit

This commit is contained in:
张乾
2024-10-15 22:50:03 +08:00
parent 914d92856f
commit bbc9aed40c
128 changed files with 12147 additions and 5 deletions

View File

@@ -0,0 +1,41 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
000 开篇词 你的360度人工智能信息助理
你好我是洪亮劼目前在电子商务网站Etsy任数据科学主管很高兴能和你在这里相识也很期待在接下来的时间里通过“AI技术内参”这个专栏和你共同探讨与人工智能有关的话题。
在未来的一年里我会为你讲解人工智能的核心基础介绍顶级学术会议的最新研究成果为广大工程师和数据科学家的个人成长出谋划策也期待能为计划成立和管理数据科学家团队的工程管理领导提供一些意见和建议。我希望“AI技术内参”能够成为你的360度人工智能信息助理帮助你在这个高速发展的领域稳步前行。
那么我为什么愿意来写这么一个专栏呢这让我想起了最近发生的一个片段我在波士顿参加一个有关数据科学的工业界会议会场上一位目前在美国一家时装品牌J.Crew工作的数据科学家和我聊天中间问我如果想在数据科学、人工智能这个领域进阶需要看什么样的资料、需要怎样才能不断学习和进步。我当时发现自己很难为这位数据科学家推荐某一本书、某几篇论文、某一个资料就能够起到这样的作用。
事实上,回想我自己在人工智能这个领域的成长,一个突出的特点就是,需要学习的东西太多、太杂而且很细。
比方说,对于一个人工智能领域的从业人员来说,基础阶段需要系统地学习有关机器学习、概率统计的很多书,还要会使用相关的专业软件以及人工智能框架,然后如果你希望能够在某一个专业领域(比如搜索、推荐、图像技术、语音技术、智能驾驶等)有所发展,还需要阅读这些相关领域的很多技术论文,并且去实践相关的算法模型。
更进一步,要想在技术公司能够真正成长下去,还有很多的工程技巧以及实际经验需要你慢慢习得。这些情况都导致人工智能领域专业人才的培养和成长有很高的门槛。
我自己,以及很多希望能够在这个领域有所发展的朋友,都很急迫地需要有这么一个集中地、有计划地获取信息,获取高质量信息的平台。这让我萌生了自己来写这么一个专栏的想法。
我希望“AI技术内参”这个专栏能够成为你在人工智能领域成长的灯塔当你在茫茫的知识海洋里航行时帮助你快速找到核心的、主干的信息和资源。我希望这个专栏能够成为你在职业发展上的朋友让你对快速发展的行业不再焦虑不再担心自己的知识会落伍不再为如何在日新月异的信息中寻找有价值的学习资料而发愁。
同时,我也希望这个专栏能够为你拓宽视野,让数据科学家、人工智能工程师了解到团队管理者是如何构建一个团队、如何来招聘从业人士的,让数据科学的领导者意识到如何培养数据科学家成长,让你对整个行业的生态系统有一个更加完整的认识。
我为这个专栏精心打磨了三个模块。
第一,我会为你讲解一些经典的人工智能技术。这些技术涵盖搜索、推荐系统、广告系统、图像处理等领域。了解这些经典技术能够让你迅速入门并能为今后的学习打下基础。这部分内容帮助你分析核心的算法模型,并为你进行系统性学习提供纲要和指引。
第二,我会带给你最新的顶级学术会议动态,帮助你了解和掌握这些学术会议最火热和最新的研究成果。每一年和人工智能相关的顶级学术会议有十余个,每个会议都会有上百篇甚至几百篇论文发表。从这些论文和成果中找到有价值的信息,对于初学者,甚至是有一定经验的从业人员来说都是非常困难、也非常耗时的一件事情。那么,在这个专栏里,我会为你精选内容,可以让你不错过任何有价值的最新成果。
第三,我会在这个专栏里为人工智能的从业人员提供指南,帮助数据科学家和工程师提升自我价值,帮助人工智能团队的管理者构建团队,为你在职场发展中的关键步骤出谋划策。
希望我们在今后的一年时间里通过“AI技术内参”这个平台共同学习、共同成长。“AI技术内参”只是一个起点希望你能够从这个专栏出发在人工智能这个领域前行得更好、更高、更远。

View File

@@ -0,0 +1,69 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
001 聊聊2017年KDD大会的时间检验奖
国际数据挖掘与知识发现大会ACM SIGKDDACM SIGKDD Conference on Knowledge Discovery and Data Mining简称KDD是由美国计算机协会ACMThe Association for Computing Machinery的数据挖掘与知识发现专委会SIGKDDSpecial 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

View File

@@ -0,0 +1,67 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
004 精读2017年EMNLP最佳长论文之一
自然语言处理实证方法会议EMNLPConference on Empirical Methods in Natural Language Processing是由国际计算语言学协会ACLAssociation for Computational Linguistics的专委会SIGDATSpecial 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

View File

@@ -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.89F1值达到0.61,都远远高于其他方法。
应该说,从可观的数值上,本文的方法效果不错。
小结
今天我为你讲了EMNLP 2017年的第二篇年度最佳长论文这篇文章介绍了一个采用深度学习模型对论坛文本信息进行分析的应用那就是如何识别有精神疾病的用户的信息。
一起来回顾下要点:第一,我简要介绍了这篇文章的作者群信息。第二,这篇文章是利用自然语言处理技术解决一个社会问题的应用,论文构建的数据集很有价值。第三,文章把目前图像处理的标准卷积层应用到文本信息上,提出了基于卷积神经网络的文本分析框架,用于辨别抑郁症和检测自残倾向,都实现了不错的效果。
最后,给你留一个思考题,如果说在图像信息上采用卷积层是有意义的,那为什么同样的操作对于文本信息也是有效的呢?文本上的卷积操作又有什么物理含义呢?
拓展阅读Depression and Self-Harm Risk Assessment in Online Forums

View File

@@ -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 2017International Conference on Machine Learning ,国际机器学习大会。
IJCAI 2017 International Joint Conference on Artificial Intelligence人工智能国际联合大会。
CVPR 2017Conference on Computer Vision and Pattern Recognition国际计算机视觉与模式识别会议。
ICCV 2017International Conference on Computer Vision国际计算机视觉大会。
NIPS 2017Annual Conference on Neural Information Processing Systems神经信息处理系统大会。
拓展阅读Natural Language Does Not Merge Naturally in Multi-Agent Dialog

View File

@@ -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方法可以不依赖于目标分布的样本并且还能达到线性计算速度。
一起来回顾下要点:第一,我们简要介绍了这篇文章的作者群信息。第二,我们详细介绍了这篇文章要解决的问题以及贡献 。第三,我们简要地介绍了文章的实验结果 。
最后,给你留一个思考题,这种衡量分布之间距离的想法,除了在假设检验中使用以外,在机器学习的哪个环节也经常碰到?

View File

@@ -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的第三篇最佳研究论文文章的一个核心观点是希望能够通过构建蓝图来引导我们解决非完美信息博弈的问题特别是在扑克上面的应用。
一起来回顾下要点:第一,我们简要介绍了这篇文章的作者群信息。第二,我们详细介绍了这篇文章要解决的问题以及贡献 。第三,我们简要地介绍了文章的实验结果 。
最后,给你留一个思考题,为什么非完美博弈的整个问题求解现在并没有依靠*深度加强学习*呢,大家在这个问题上有什么直观上的体会呢?

View File

@@ -0,0 +1,81 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
013 WSDM 2018论文精读看谷歌团队如何做位置偏差估计
WSDMInternational 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 Wang2015年起在谷歌工作。他之前在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.

View File

@@ -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年的一篇来自京东数据科学团队的文章这篇文章介绍了如何利用多关系学习以及模糊逻辑来挖掘商品的替代信息和互补信息然后训练出更加有效的排序算法。
一起来回顾下要点:第一,我们简要介绍了这篇文章的作者群信息;第二,我们详细介绍了这篇文章要解决的问题以及贡献 ;第三,我们简要地介绍了文章提出方法的核心内容以及实验的结果。
最后,给你留一个思考题,互补商品或者替代商品是双向关系还是单向关系,为什么呢?

View File

@@ -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.

View File

@@ -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.

View File

@@ -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的最佳论文。
一起来回顾下要点:第一,我们详细介绍了这篇文章要解决的问题和贡献,探讨偏差和流行度之间的关系,系统性地来讨论偏差在推荐系统中所带来的问题;第二,我们简要地介绍了文章提出方法的核心内容,包括设定随机变量、期望关系以及推导理想状态下的最佳排序;第三,针对论文我们简单进行了讨论。
最后,给你留一个思考题,在不考虑偏差的情况下,为什么一般的推荐系统会偏好于推荐流行物品的算法呢?

View File

@@ -0,0 +1,71 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
024 CVPR 2018论文精读如何解决排序学习计算复杂度高这个问题
今天我们来看这次大会的一篇最佳论文提名标题是《基于排序的损失函数的有效优化》Efficient Optimization for Rank-based Loss Functions
还是先简单介绍下论文的作者群。这篇论文的作者来自好几个不同的学术机构。
第一作者普里迪什·莫哈帕德拉Pritish Mohapatra是印度海得拉巴的国际信息科技大学International Institute of Information TechnologyHyderabad的计算机科学博士生。他已经在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算法那里其实也有这么一个寻找违反排序原则配对的步骤你能想起来是什么步骤吗

View File

@@ -0,0 +1,93 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
025 ICML 2018论文精读模型经得起对抗样本的攻击这或许只是个错觉
2018年7月10日~15日国际机器学习大会ICML 2018The 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%。最后的这种情况,就是随机寻找对抗样本,发现了比基于梯度下降的攻击要好的对抗样本。
那么,针对梯度混淆,攻击方有什么办法呢?
针对扩散梯度作者们提出了一种叫BPDABackward Pass Differentiable Approximation的方法。如果有兴趣建议你阅读论文来了解这种算法的细节。总体说来BPDA就是希望找到神经网络不可微分的地方利用简单的可微分的函数对其前后进行逼近从而达到绕过阻碍的目的。
针对随机梯度作者们提出了“变换之上的期望”Expectation over Transformation这一方法。这个方法的特点是针对随机变化变换的期望应该还是能够反映真实的梯度信息。于是作者们就让攻击方作用于变换的期望值从而能够对梯度进行有效的估计。
针对消失或者爆炸的梯度作者们提出了“重新参数化”Reparameterization这一技术。重新参数化是深度学习中重要的技术。在这里作者们使用重新参数化其实就是对变量进行变换从而使得新的变量不发生梯度消失或者爆炸的情况。
小结
今天我为你讲了今年ICML的最佳论文。
一起来回顾下要点:第一,这篇论文讨论了一个比较陌生的主题,我们简要介绍了论文的背景;第二,我们详细介绍了论文提出的三种类型的梯度混淆。
最后,给你留一个思考题,我们为什么要研究深度学习模型是否健壮,是否能够经得起攻击呢?有什么现实意义吗?

View File

@@ -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的另一篇最佳论文。
一起来回顾下要点:第一,这篇论文讨论了计算机算法的公平性问题;第二,我们详细介绍了论文提出的两种策略以及得出的主要结论。
最后,给你留一个思考题,研究算法的公平性对我们日常的应用型工作有什么启发作用?

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
027 ICML 2018论文精读优化目标函数的时候有可能放大了不公平
今天我们要分享的是ICML 2018的一篇最佳论文提名题目是Fairness Without Demographics in Repeated Loss Minimization。
这篇论文讨论了这样一个话题,在优化目标函数的时候,如何能够做到针对不同的子群体,准确率是相当的,从而避免优化的过程中过分重视多数群体。这篇论文的作者都来自斯坦福大学。
论文的主要贡献
这篇论文其实也是希望讨论算法带来的“公平性”问题,但是出发的角度和我们上一篇讨论公平性的论文非常不一样。这篇论文的核心思想,是希望通过机器学习目标函数优化的原理,来讨论机器学习和公平性的关系。
作者们发现基于“平均损失”Average Loss优化的机器学习算法常常会给某一些少数群体带来巨大的不准确性。这其实并不是模型本身的问题而是优化的目标函数的问题。在这样的情况下目标函数主要是关注有较多数据的群体保证这些群体的损失最小化而可能忽略了在数量上不占优势的少数群体。
在此基础上还带来了另外一个用户“留存度”Retention的问题。因为少数群体忍受了比较大的优化损失因此这些群体有可能离开或者被这个系统剔除。所以长期下去少数群体的数目就可能逐渐变少。这也许是目标函数的设计者们无从想到的一个平均损失函数的副产品。作者们还把这个现象命名为“不公平的放大”Disparity Amplification
这篇论文的一个重要贡献是发现ERMEmpirical Risk Minimization经验风险最小化其实就存在这种不公平的放大性。ERM包含了很多经典的机器学习模型的目标函数例如支持向量机Support Vector Machines、对数回归模型Logistic Regression以及线性回归等。作者们还发现ERM可以让即便在最初看上去公平的模型在迭代的过程中逐渐倾向于不公平。
为了解决ERM的问题作者们开发了一种新的算法框架DRODistributionally 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的思路确实能够解决小众群体的不公平性问题。
最后,给你留一个思考题,这两期内容我们从不同的角度讨论了算法的公平性问题,你是否有自己的角度来思考这个问题?

View File

@@ -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篇文章来详细剖析这个会议的精髓和一些前沿信息。我希望通过我的眼睛和思考让你看到在这个领域里那些激动人心的发展收获新知、拓展视野同时也把我的学习方法分享给你。
我想你应该已经掌握了我分析论文的套路了,对于每一篇文章,我一定会先去做一些背景研究,了解作者群,了解对应的学术机构或者公司信息;然后弄清楚论文解决了什么问题,核心贡献是什么;再详细研究论文的具体方法。这个方法很简单,就是牢牢抓住一个主线,找到最核心的内容来消化吸收。但是真正让这个方法内化成你的思维模式,还是需要大量的阅读和练习。相信我,如果想在人工智能领域继续深耕,阅读大量论文,一定是一个最值得做的投资,因为回报极大。
那回到阅读论文本身,最后想跟你分享的一点只有八个字:学好英语,阅读原文。我知道你可能会说我英语还真不好,但是到达能够阅读原文的水平其实也并没那么难。你不妨直接找一篇我们专栏里讲过的论文原文,就把每一段的第一句读一下,看看能否学到东西。先开始看起来,遇到不会的且影响你理解的单词或句子再去查,你的英语水平就已经开始变得越来越好了。
以上就是我们对论文精读这个模块的一个复盘,希望专栏里的这三十篇论文是一个起点,能够帮助你养成关注国际顶级会议、阅读论文的习惯,拥有这一强大的学习利器,提升自己的学习效率。

View File

@@ -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年从哈佛大学获得应用数学博士学位之后来到康奈尔大学参与组建计算机系。为了致敬杰拉德本人对现代信息检索技术的卓越贡献现在美国计算机协会ACMAssociation 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应用到中文环境中是否需要一些预处理的步骤

View File

@@ -0,0 +1,68 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
035 机器学习排序算法:配对法排序学习
周一的文章里我分享了最基本的单点法排序学习Pointwise Learning to Rank。这个思路简单实用是把经典的信息检索问题转化为机器学习问题的第一个关键步骤。简单回顾一下我们介绍了在测试集里使用NDCGNormalized Discounted Cumulative Gain在某个K的位置评价“精度”Precision和“召回”Recall以这些形式来评估排序算法。
你可以看到单点法排序学习算法的模式和我们最终需要的结果中间还存在明显差距。这个差距并不是算法好坏能够决定的而是算法所要优化的目标也就是单个数据点是否相关和我们的最终目的一组结果的NDCG排序最优之间的结构化区别。这个结构化区别激发研究者们不断思考是不是有其他的方法来优化排序算法。
今天我就来讲从单点法引申出来的“配对法”排序学习Pairwise Learning to Rank 。相对于尝试学习每一个样本是否相关,配对法的基本思路是对样本进行两两比较,从比较中学习排序,离真正目标又近了一步。
配对法排序学习的历史
当人们意识到用机器学习来对排序进行学习从文档与文档之间的相对关系入手也就是配对法就成了一个非常火热的研究方向。机器学习排序这个领域持续活跃了10多年在此期间很多配对法排序算法被提出下面我就说几个非常热门的算法。
2000年左右研究人员开始利用支持向量机SVM来训练排序算法来自康奈尔的索斯藤·乔基姆斯Thorsten Joachims就构建了基于特征差值的RankSVM一度成为配对法排序学习的经典算法。索斯藤我们前面讲过他获得了今年的KDD时间检验奖。
2005年当时在雅虎任职的研究人员郑朝晖等人开始尝试用GBDTGradient Boosting Decision Tree梯度提升决策树这样的树模型来对文档之间的两两关系进行建模。郑朝晖后来成为一点资讯的联合创始人。
2005年微软的学者克里斯·博格斯Chris Burges等人开始使用神经网络训练RankNet文档之间两两关系的排序模型。这是最早使用深度学习模型进行工业级应用的尝试。这篇论文在2015年获得了ICML 2015International 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-2942007.
Thorsten Joachims. Optimizing search engines using clickthrough data. *Proceedings of the eighth ACM SIGKDD international conference on knowledge discovery and data mining*133-1422002.

View File

@@ -0,0 +1,81 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
036 机器学习排序算法:列表法排序学习
本周我们已经分别讨论了最基本的单点法排序学习Pointwise Learning to Rank和配对法排序学习Pairwise Learning to Rank两种思路。单点法排序学习思路简单实用目的就是把经典的信息检索问题转化成机器学习问题。配对法排序学习则是把排序的问题转化成针对某个查询关键字每两个文档之间的相对相关性的建模问题。不过这两种思路也都有很明显的问题需要进一步对算法进行优化以实现我们需要的最终目标。
今天我就来讲直接优化排序问题的“终极方法”列表法排序学习Listwise Learning to Rank 。相对于尝试学习每一个样本是否相关或者两个文档的相对比较关系列表法排序学习的基本思路是尝试直接优化像NDCGNormalized Discounted Cumulative Gain这样的指标从而能够学习到最佳排序结果。
列表法排序学习的历史
2000年后学术界和工业界都开始研究如何用机器学习来解决最优排序问题五六年之后研究者们才开始尝试直接优化整个排序列表。
这方面的研究工作很多都来自微软研究院。比如2007年左右的AdaRank就来自微软亚洲研究院的徐君和李航。这篇论文算是较早提出列表法排序观点的研究工作。同一年在国际机器学习大会ICML 2007International 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-3982007.
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, 11921199, 2008.
S. Chakrabarti, R. Khanna, U. Sawant, and C. Bhattacharyya. Structured learning for non-smooth ranking losses. SIGKDD, 8896, 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, 7786, 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, 271278, 2007.

View File

@@ -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。他还是ACMAssociation of Computing Machinery计算机协会和IEEEInstitute 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

View File

@@ -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这篇论文利用一个叫做PRFPseudo-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.

View File

@@ -0,0 +1,85 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
043 文档理解第一步:文档分类
我们在前几周的专栏里讲解了最经典的信息检索Information Retrieval技术以及基于机器学习的排序学习算法Learning to Rank并且花了一定的时间分享了查询关键字理解Query Understanding这一关键搜索组件的核心技术要点。上周我们还详细讨论了如何从线上和线下两个层面来评价一个搜索系统。
这周我们的分享将转移到搜索的另外一个重要部件文档理解Document Understanding。也就是从文档中抽取各种特性来帮助检索算法找到更加相关的文档。
文档理解最基本的一个步骤就是给文档分类Classification看这些文档表达什么类别的信息。今天我就来和你聊一聊文档分类的一些基本概念和技术让你对这方面的开发与研究有一个基本认识。
文档分类的类型
如果我们把文档分类看做一个监督学习任务的话,那么在各式应用中就经常使用以下几种类型的文档分类。
第一个类别就是二元分类,或者称为二分文档分类,目的就是把文档分成两种不同的类别。比如,把文档分成“商业类”或者“非商业类”。
第二个类别自然就是多类分类,也就是判断文档是否属于好几种不同类别中的某一个。比如,把文档划归为“艺术”、“商业”、“计算机”或者“运动”类别中的某一类。
当然,在多类分类的下面,我们还可以分三个小类别。
第一个小类别,是“多类-单标签-硬分类”MulticlassSingle-LabelHard Classification。什么意思呢就是说每一个文档只能在多类分类问题中被赋予唯一的标签并且所有互相的类别是不兼容的。
第二个小类别,就是“多类-多标签-硬分类”MulticlassMultilabelHard Classification也就是说每一个文档可以被认为属于多个类别然而每个这样的分类都是唯一确定的。
最后一个小类别则是“多类-软分类”MulticlassSoft 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上位置类似。
比如,某一个公司的很多子页面,虽然上面的文字本身有差异,但因为都是这个公司的页面,从大的文档页面网络上看,他们都代表这个公司的信息,因此在进行文档分类的时候,也很有可能会把他们放到一起。
小结
今天我为你讲了现代搜索技术中又一个至关重要的环节,那就是文档理解中的文档分类问题。你可以看到文档分类所要了解的信息还是比较多的。
一起来回顾下要点:第一,简要介绍了文档分类的主要类型,包括二元分类、多类分类以及层次分类。第二,详细介绍了文档分类所可能用到的种种特性,比如文档上原本的文字信息、文档的排版格式以及周围有关系的文档。第三,介绍了如何利用监督学习以及其他的算法工具来完成文档分类的任务。
最后,给你留一个思考题,如果一个文档中既有图片也有文字,那我们该如何组织这些特性,然后放到我们的分类器中去学习呢?

View File

@@ -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均值算法。第四简要提及了文档聚类的一些难点。
最后,给你留一个思考题,当得到文档聚类的结果以后,能否把这些结果用在其他任务中呢?如果可以,如何利用?

View File

@@ -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等模型的领域。
小结
今天我为你讲了文档理解中的多模数据建模问题。你可以看到这是一个非常火热的领域,如何理解多媒体数据是现代数据处理的一个重要问题 。
一起来回顾下要点:第一,简要介绍了什么是多模数据。第二,详细介绍了多模数据建模的一些基本思路,包括如何获取文档的表征、什么是联合表征和什么是独立表征。然后,我们还讲了如何构建不同的分类器。第三,简要地提及了其他的多模数据建模任务以及这些任务所依靠的基本的深度学习趋势。
最后,给你留一个思考题,多模建模带来了丰富的特性,由这些丰富特性所训练的分类器,就一定能比单一数据源所训练得到的分类器表现得更好吗?

View 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有明确的算法来求解在这些框架下的机器学习问题。同时机器学习的一系列基本的方法论比如训练数据、测试数据、评测方法等等都可以应用到信息检索的场景中来。这对于搜索系统的性能以及整体搜索系统的研发都有了非常重要的指导意义。
同时,这也开启了一个非常便利的提高搜索系统效果的大门。那就是任何机器学习领域内部的发展,很多都可以被借鉴到搜索系统中。比如,最近几年深度学习的大力发展,就可以在已经铺就的基于机器学习的搜索系统框架下很容易地进行尝试。
第二,基于机器学习的搜索系统能够很容易地利用多模数据。对于机器学习而言,多模数据,或者说是多种类型的数据的融合,可以很自然地通过特性以及不同类型的特性来表达。因此,对于多模数据,机器学习有天然的优势。通过学习这些特性之间的联系从而预测相关度,是机器学习的强项。
因此,理解搜索系统各个部分的数据并把这些信息用在排序算法中,这样的方式就如雨后春笋般大量地出现了。比如,我们之前提到过的查询关键字理解中的查询关键字分类和查询关键字解析,以及文档理解中的文档分类所产生的特性,很难想象这些内容在传统的文本匹配系统中得以应用。但在基于机器学习的搜索系统中,这些信息则往往成为提高相关度建模的重要工具。
同时,我们也在之前的分享中介绍了,针对多模数据,机器学习中专门有相关的研究,思考如何把不同类型的数据能够更好地融合在一起来建模。这类研究在传统的文本匹配搜索系统中根本不存在。
基于机器学习的搜索系统也不是完美无瑕。实际上,如果没有各种保证,机器学习并不一定能在实际中获得满意的效果,因为基于机器学习的搜索系统对整个系统而言有了较高的要求。
机器学习往往需要大量的数据,而在一个现实的软件产品中,如何能够构建可靠并且干净的数据就是一个不简单的任务。如果没有可靠的数据,对于一般的机器学习算法而言,就是“垃圾进入,垃圾出来”,实际效果往往比不使用机器学习还要糟糕。
同时,机器学习系统可能会有特性异常、模型异常、数据异常等等其他软件系统所不具备的各种问题。如果在生产系统中对这些情况没有一个估计和处理,机器学习搜索系统往往也会不尽人意。
更加智能的搜索系统
很明显,搜索系统不会仅仅停留在应用普通的机器学习算法。近几年,搜索系统的发展有两个方面。
一方面,当然就是依靠深度学习发展的春风,不少学者和研究人员都在思考,如何能够利用深度学习技术让搜索系统更上一层楼。在这方面的研发中,不仅仅是针对普通的深度学习算法,而是看如何应用深度学习所特有的一些模式,比如深度强化学习等方式来重新思考搜索问题。
另一方面,就是从用户的角度来说,研究更加有意义的评测方式。也就是说,如何能够真正抓住用户对这个系统的偏好,并且能够进一步地去优化这个系统的性能。
小结
今天我为你讲了现代搜索技术框架的发展,并简单提及了搜索系统目前发展的趋势 。 一起来回顾下要点:第一,我们讲了基于文本匹配的经典搜索系统的特点;第二,我们讲了基于机器学习的搜索系统的特点。
最后,给你留一个思考题,在机器学习和深度学习的思潮中,传统搜索系统的核心,也就是我们说过的索引,能否依靠机器学习来生成呢?

View File

@@ -0,0 +1,85 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
047 多轮打分系统概述
周一我为你介绍了搜索系统的一个宏观分类,包括传统的文本匹配信息检索系统和机器学习信息检索系统。这个分类可以让你非常清晰地了解信息搜索系统的历史进程,并对这两种搜索系统的特点有所了解。
今天我们就来剖析搜索系统的另一个框架体系多轮打分Scoring系统。
多轮打分系统综述
什么是多轮打分系统?为什么搜索系统需要多轮打分?
我们拿上次介绍的机器学习搜索系统为例。从整体来说,机器学习搜索系统的目的是利用机器学习模型来预测文档和搜索关键字之间的相关性。那么,在理想状态下,针对每一个查询关键字,我们需要对数据集中的每一个文档进行打分。
如果是一个类似互联网搜索引擎的应用场景,那么理论上,每一个查询关键字都需要对几亿甚至十几亿的网页进行打分。显然,仅仅从这个数量级上来说,这样做都是不现实的。
从另一个方面来讲目前比较通用的机器学习模型特别是在排序问题上有强劲表现的树模型Tree Model比如GBDTGradient 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 (ECIR13), 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.

View 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操作符这样能够模拟线性模型的算法。
小结
今天我为你讲了现代搜索技术的一个核心组成部分,那就是倒排索引系统。 一起来回顾下要点:第一,我们讲了索引系统的基本组成和原理。第二,我们讲了索引相关技术的一个概况,重点介绍了压缩以及“略过”的含义。第三,简要讲解了查询关键字处理的两种最基础的策略。
最后,给你留一个思考题,如果我们既有图像信息又有文字信息,那该如何构建我们的索引呢?

View File

@@ -0,0 +1,79 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
049 PageRank算法的核心思想是什么
上周我们介绍了信息搜索系统的历史进程,剖析了搜索系统的多轮打分系统,还深入探讨了倒排索引,聊了聊它的核心技术。
这周我要和你分享的是在互联网搜索引擎兴起之后的一个研发需要,那就是如何理解网页和网页之间的关系,特别是怎么从这些关系中提取网页中除文字以外的其他特性。这部分的一些核心算法曾是提高搜索引擎质量的重要推进力量。另外,我们这周要分享的算法也适用于其他能够把信息用结点与结点关系来表达的信息网络。
今天我们先看一看用图来表达网页与网页之间的关系并且计算网页重要性的经典算法PageRank。
PageRank的简要历史
时至今日谢尔盖·布林Sergey Brin和拉里·佩奇Larry Page作为Google这一雄厚科技帝国的创始人已经耳熟能详。但在1995年他们两人还都是在斯坦福大学计算机系苦读的博士生。那个年代互联网方兴未艾。雅虎作为信息时代的第一代巨人诞生了布林和佩奇都希望能够创立属于自己的搜索引擎。1998年夏天两个人都暂时离开斯坦福大学的博士生项目转而全职投入到Google的研发工作中。他们把整个项目的一个总结发表在了1998年的万维网国际会议上 WWW7the 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

View 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-6321999.
论文链接
Authoritative sources in a hyperlinked environment

View 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

View 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, 337407, 2000.
Friedman, Jerome H. Greedy function approximation: a gradient boosting machine. Annals of Statistics (2001): 11891232, 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 (NIPS07), 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 (ADKDD14). 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

View 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

View 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左右的表现。所以,可以说深度结构化语义模型的效果虽然很明显但并不是特别惊人。
小结
今天我为你讲了深度结构化语义模型的一些基本原理,这是利用深度学习技术对搜索算法进行改进的一个经典尝试。我们在上面的实验结果总结中已经说到,虽然文章仅仅谈到了文本信息的匹配,并没有作为完整的排序算法进行比较,但是也揭开了用深度模型来表征查询关键字和文档的研发序幕 。
一起来回顾下要点:第一,我们简要介绍了提出深度结构化语义模型的历史。第二,我们详细介绍了深度结构化语义模型的核心思路以及实验结果。
给你留一个思考题,除了文章中提到的余弦函数可以作为一个距离函数,还有没有其他的函数选择来表达两个向量之间的距离?

View 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左右的表现。应该说在这篇文章中展示出来的效果还是有比较大的差距的。
小结
今天我为你讲了卷积结构下的隐含语义模型的一些基本原理,这个模型是利用深度学习技术对搜索算法进行改进的另一个很有价值的尝试,揭开了用深度学习模型,特别是用在图像处理中非常成功的卷积神经网络技术来表征查询关键字和文档会达到的效果。
一起来回顾下要点:第一,我们简要介绍了隐含语义模型提出的历史。第二,我们详细介绍了隐含语义模型的核心思路以及实验结果。
给你留一个思考题,为什么顺序信息并没有像我们想象中的那样,给文档搜索提升带来很大的效果呢?有没有什么解释?

View 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左右的表现。
小结
今天我为你分享了搜索专题的最后一篇内容,那就是利用深度学习技术对搜索算法进行改进的又一个尝试:一个结合了学习完全匹配的局部表征和模糊匹配的分布表征的统一的搜索模型。
一起来回顾下要点:第一,我们简要介绍了局部和分布表征搜索模型提出的历史。第二,我们详细介绍了局部和分布表征搜索模型的核心思路以及实验结果。
给你留一个思考题,我们这周分享了三个经典的深度学习和搜索相结合的尝试,你觉得目前深度学习在搜索领域取得的成果,有让你感到特别惊讶的结果吗?

View File

@@ -0,0 +1,101 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
057 复盘 1 搜索核心技术模块
到目前为止,我们讲完了人工智能核心技术的第一个模块——*搜索*。我们从搜索的核心算法入手,进而讨论了搜索的两个关键组件,分别是查询关键字理解和文档理解,并落实到对搜索系统的评价,然后从宏观视角介绍了搜索框架的历史和发展,最后又从深度学习技术在搜索领域的应用角度,对分享做了一个延伸。
整个模块共27期9大主题希望通过这些内容能让你对搜索技术有一个系统的认识和理解为自己进一步学习和提升打下基础。今天我们就来对这一模块的内容做一个复盘。
提示点击知识卡跳转到你最想看的那篇文章温故而知新。如不能正常跳转请先将App更新到最新版本。
1.现代搜索架构剖析
从20世纪50年代有信息检索系统开始搜索系统大致经历了三个发展阶段。从最开始的“基于文本匹配的信息检索系统”到“基于机器学习的信息检索系统”再到近几年受深度学习影响的“更加智能的搜索系统”。
2.经典搜索核心算法
3.基于机器学习的排序算法
问题设置:把一个排序问题转换成一个机器学习的问题设置,特别是监督学习的设置。
4.基于机器学习的高级排序算法
5.查询关键字理解
6.文档理解
7.经典图算法
8.基于深度学习的搜索算法
9.搜索系统的评价
If You Cant Measure It, You Cant Improve It.
积跬步以至千里
最后,*恭喜你在这个模块中已经阅读了70047字听了220分钟的音频这是一个不小的成就*。在人工智能领域的千里之行,我们已经迈出了扎实的第一步。
感谢你在专栏里的每一个留言,给了我很多思考和启发。期待能够听到你更多的声音,我们一起交流讨论。

View 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是一种非常普遍的时序信息处理的手法。
小结
今天我为你讲了基于流行度的推荐系统的基本原理。一起来回顾下要点:第一,我们简要介绍了为什么需要基于流行度进行推荐;第二,我们详细介绍了如何对流行度进行估计以及从统计角度看其含义;第三,我们简要地提及了一些更加高级的流行度估计的方法。
最后,给你留一个思考题,我们介绍了如何使用先验信息来对参数进行平滑,如何能够更加准确地确定先验概率中的数字呢?具体到我们的例子就是,如何来设置先验的点击和显示次数呢?

View 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对于《红海行动》的偏好但我可以去看一看用户过去看的电影里有哪些和《红海行动》是类似的我们就可以从那些类似的电影中进行加权平均取得对《红海行动》的预测。
小结
今天,我为你讲了推荐系统的另外一个基本的形式:基于相似度的协同过滤推荐系统。
一起来回顾下要点:第一,我们简要介绍了整个基于相似度协同过滤的内涵以及我们这么做的基本假设;第二,我们详细介绍了如何构造一个基于用户相似度的协同过滤系统;第三,我们简要地提及了如何构造物品相似的协同过滤系统。
最后,给你留一个思考题,协同过滤的一个致命问题是什么?

View 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的协同过滤推荐系统一样我们可以设置监督学习的目标函数是拟合评分。当然已经有很多学者指出评分并不是推荐系统的真正目标。
那么,在实际系统中比较常见的目标函数有点击率和购买率,也有一些相对比较复杂的目标函数,比如预测用户在某一个物品上的停留时长。
对于究竟在哪种场景中使用什么样的目标函数,这依然是当前的一个主要研究方向。
小结
今天我为你讲了基于内容信息的推荐系统。通俗地说,就是如何把推荐系统当做监督学习任务来看待。
一起来回顾下要点:第一,我们简要介绍了整个基于内容推荐的内涵以及我们这么做的基本假设;第二,我们详细介绍了如何构造一个基于内容的推荐系统,特别是如何构造物品和用户的特征;第三,我们简要地介绍了目标函数的重要性。
最后,给你留一个思考题,如何把我们前面介绍的两种推荐系统模式,也就是基于流行度和协同过滤,也融进基于内容的推荐系统中去呢?

View 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
小结
今天我为你讲了推荐系统的一个重要分支,隐变量模型。我们讲了其中最重要的一个基本模型,矩阵分解。
一起来回顾下要点:第一,我们简要介绍了隐变量模型的基本原理;第二,我们详细介绍了矩阵分解作为隐变量模型的假设和原理;第三,我们简要地讨论了如何求解矩阵分解里的隐变量。
最后,给你留一个思考题,矩阵分解模型最大的问题是什么?

View 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的流程。也就是说我们先用一组随机的参数来决定回归的部分学习到最佳的隐向量然后再根据隐向量更新回归部分的参数。因篇幅的原因我们就不展开细节了。不过即便如此我们也仅仅能够学习到一个局部解。
小结
今天我为你讲了隐变量模型中基于回归的矩阵分解。
一起来回顾下要点:第一,我们简要介绍了矩阵分解的一些问题;第二,我们详细介绍了基于回归的矩阵分解的基本思路,以及这样的模型如何解决了传统矩阵分解关于“冷启动”的难题;第三,我们简要地讲解了如何求解基于回归的矩阵分解里的参数。
最后,给你留一个思考题,基于回归的矩阵分解的短板是什么?

View 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.

View 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],这是一篇很经典的论文,是第一次把张量分解使用在推荐系统中。
另外一种方法,也是在矩阵分解中可以使用的,叫作 ALSAlternating 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.

View 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.

View 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.

View 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策略是不是一定会导致用户看到多样不同的东西呢

View File

@@ -0,0 +1,57 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
068 推荐的Exploit和Explore算法之二UCB算法
这周我们来讨论EE策略周一介绍了EE的综合情况。今天来看一种最基本的思路叫作 UCBUpper Confidence Bound算法。
EG算法
在介绍UCB算法之前我们先来看一种更加简单的EE算法叫 EGEpsilon-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打分值是一样的我们该如何解决这个问题呢

View File

@@ -0,0 +1,66 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
069 推荐的Exploit和Explore算法之三汤普森采样算法
周三的分享里我们讨论了一种叫作UCBUpper 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这个话题也就告一段落了。
一起来回顾下要点:第一,我们聊了聊为什么需要引入采样的机制;第二,我们介绍了汤普森采样的基本原理。
最后,给你留一个思考题,汤普森采样有没有什么问题,或者说有没有什么劣势呢?

View File

@@ -0,0 +1,73 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
070 推荐系统评测之一:传统线下评测
上周我们讨论了EE算法介绍了UCBUpper 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的评测方法并且指出这类方法的缺陷第二我们介绍了怎么把搜索里的评测方法给移植到推荐中。
最后,给你留一个思考题,基于排序的评测有什么致命的问题吗?

View 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。这个指标是越短越好。当用户反复访问你的网站并且空缺时间越来越短证明用户越来越依赖你网站提供的服务。
停留时间和空缺时间都是很好的推荐系统线上评测的指标。
小结
今天我为你讲了推荐系统评测的线上评测。
一起来回顾下要点:第一,我们聊了聊推荐系统的在线实验;第二,我们介绍了几个推荐系统线上评测的通用指标。
最后,给你留一个思考题,如何知道用户对于推荐的内容已经越来越不满意了呢?

View File

@@ -0,0 +1,63 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
072 推荐系统评测之三:无偏差估计
周三,我讲了推荐系统的线上评测,我们讨论了如何做在线评测,以及推荐系统在线评测可能遇到的一系列问题。
今天,我们来看一个比较高级的话题,那就是如何做到推荐系统的无偏差估计。
推荐系统的偏差性
在理解为什么需要无偏差估计之前,我们先来看一看现在系统为什么会存在偏差性,以及这种偏差性会对推荐系统的学习造成什么样的影响。
先假定我们讨论的是一个新闻推荐系统。为了方便,假设我们的系统中仅有两类文章,体育新闻和财经新闻。我们先来看一个极端情况,假设系统因为种种原因,只给用户推荐体育新闻,会出现什么样的情况呢?
很明显,如果我们只给用户看体育新闻,那么,用户只可能在这些体育新闻里面选择点击,压根不知道财经新闻的存在。因为用户只在体育新闻里面通过点击浏览表达了喜好,任何一个机器学习系统,只能在这些新闻里面学习到用户的喜好。
具体来说,用户已点击的新闻可以认为是正例,没有点击的可以认为是负例。这样可以对用户在体育新闻上面的喜好加以建模。但是很明显,系统在用户对财经新闻喜好的学习上是一筹莫展的,因为我们根本没有任何用户对于财经新闻的回馈数据。
这就是系统的偏差性。在这样的设置下,系统存在的偏差是无法修正的。通俗地讲,我们压根没有给财经新闻任何机会,所以没有数据可以供系统学习。
其实还有更加严重的情况。因为我们当前的系统仅仅学习到了用户对于体育新闻的喜好,然后如果把这个系统部署到生产中,系统又会进一步选择体育新闻给用户看,如此循环下去。这其实就是说,系统的偏差性会随着机器学习系统而反复循环,甚至有逐渐放大的可能性。
当然在现实的应用中,我们不可能有这么极端的情况。但可能面临更加复杂的情况,比如,我们压根不知道系统存在什么样的偏差,或者说,我们该如何面对各种不同的偏差。
在有偏差的系统中,先通过数据学习得到模型,然后再部署到系统中去,这个流程其实严重阻碍了我们对用户真实喜好的检测。因此,这也是线下表现和线上表现不一致的一个原因。长期以来,偏差性都是困扰研究者的一个非常重要的问题。
无偏差估计
当我们知道系统有偏差以后,怎么来解决这个问题呢?
一个很容易想到的策略是,如果我们知道系统的某种偏差,那能不能在后面的评测过程中矫正这种偏差呢?
这就涉及“矫正”的思路。回到我们所说的体育新闻和财经新闻的例子。假设我们的系统在80%的情况下会显示体育新闻20%的情况下显示财经新闻。那么,当用户面对一篇体育新闻点击浏览,或者面对一篇财经新闻点击浏览,我们的系统该如何应对呢?
在我们已经提到过的传统评测手段中例如计算MAP或者NDCG的时候这两种点击是一样的。或者说权重是一样的。然而在这样的情况下机器学习系统其实还是会更加偏重于学习到用户对于体育新闻的偏好因为毕竟80%的情况下都是体育新闻。相对于财经新闻而言,这种情况就是处于劣势的,可能我们没有给财经新闻足够的机会。
所以从矫正的角度来说我们认为如果用户点击浏览了原本出现概率较低的文章这个时候我们反要给这类文章更大的权重。什么意思呢也就是说我们认为财经新闻出现的概率比较低如果在这种情况下用户点击浏览了财经新闻那应该是真正的偏好。而相同的情况下因为80%的新闻都是体育新闻,因此用户点击了其中的一篇也就不足为奇。
把这种思维放入到一种数学的表达中,也就是,我们希望用户的回馈按照出现的概率进行反比矫正,出现概率越大的物品,正样本权重越小;反之,出现概率越小的物品,正样本权重越大。具体来说,也就是正样本除以出现的概率,然后我们计算平均的加权点击率。这样加权平均后的结果,就是矫正后无偏差的点击率的计算结果。
很明显无偏差估计是有一定假设的。首先我们就需要假设收集的数据涵盖了整个数据集。什么意思就是刚才我们说的极端情况比如我们只显示体育新闻而压根一点都不显示财经新闻这种情况是无法进行矫正的因为在这种情况下财经新闻的概率是0。也就是说无论什么类别的新闻都需要有非零的概率出现。这是进行无偏差估计的一个基本假设和要求。
遗憾的是,虽然这个要求看似容易,但其实在现实中很难真正做到。
试想一个有百万文章量的新闻网站,要确保所有的新闻都有一定概率显示给用户是有挑战的。在实际的应用中,大量的新闻质量是呈指数下降的。也就是说,虽然有百万甚至更多的文章量,但是很有可能只有几百几千的文章相对比较有质量,而剩下的大量文章是低质量的文章。
然而,我们并不能完全确定哪些是低质量文章。如果我们真的需要做无偏差的估计,就需要针对所有的文章进行显示,也就是说,我们需要冒着给用户显示低质量文章的风险,显然这并不是很好的策略。
在如何收集数据这一方面无偏差估计其实和我们之前提到过的EE策略又结合在了一起。也就是说如何既能够让我们尽可能地把所有数据都呈现给用户使得我们可以进行无偏差估计又能够照顾到用户的体验这是目前非常热门的研究领域。
小结
今天我为你重点讲了什么是系统的偏差以及如何处理偏差的思路。
一起来回顾下要点:第一,我们聊了聊在线系统的偏差出现的场景以及机器学习为什么会让这样的情况恶化;第二,我介绍了如何进行无偏差估计以及无偏差估计所需的条件。
最后,给你留一个思考题,假如一个系统,你不知道每一种新闻出现的概率,你该如何做无偏差估计呢?

View File

@@ -0,0 +1,67 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
073 现代推荐架构剖析之一:基于线下离线计算的推荐架构
上周,我们讨论了推荐系统的评测,聊了推荐系统的线下评测、线上评测和无偏差估计。至此,我们已经聊了推荐系统的一些基本技术和评测体系,相信你已对推荐系统有了一个基本的认识。
那么,到底该如何搭建一个工业级的推荐系统呢?这周,我们就来谈一谈现代推荐系统的架构体系,帮助你从宏观上对推荐系统的构建有一个更加完整的认识。
今天,我们先来看一看,基于线下离线计算的推荐架构。
推荐架构需要解决的问题
在讨论任何一种架构之前,我们首先来看一下这个架构需要解决什么样的问题。然后在这些问题的指引下,我们就可以来分析不同架构在解决这些问题上的优劣。
那么,对于一个推荐架构来说,我们需要解决什么样的问题呢?
首先,从大的角度来说,一个用户来到我们的网站或者服务,推荐系统最重要的一个任务就是,能够在一两百毫秒内给用户提供当前的推荐结果。也就是说,从用户的角度来看,推荐结果的呈现必须是实时的。这一条就是把工业级应用和学术模型区分开的一个重要指标。
在过去十多年里学术界的推荐系统或者是Kaggle竞赛的推荐系统往往是一个使用了很多不同模型的集成模型Ensemble Model这种方式虽然在比赛和论文发表中能够取得较高的精度但是在现实的系统中如果不加修改直接使用必然无法在规定的时间内也就是一两百毫秒内产生所有的推荐结果。同样的很多非常复杂的深度学习模型也无法在规定的时间内产生所有的推荐结果。由此可见很多推荐架构的核心就是在解决这些问题。
其次,推荐系统架构需要对用户和系统的交互结果做出响应。什么意思呢?如果用户看了推荐结果,并且点击了一些推荐结果,或者明确表达了对推荐结果的不喜爱,那么推荐模块需要对这些互动的结果给予回馈。试想,如果一个用户已经明确表示了对某些结果的不喜欢,然后在下一次访问的时候,用户又看到同样的推荐,那一定是一个非常不好的体验。
最后,推荐系统架构需要考虑用户群体的覆盖率的问题。如果一个系统架构只能为部分用户服务,这想必无法真正做到对一个网站或者服务产生影响力。因此,在模型以及其他的技术选择上面,如何能够做到“为更广阔的用户群体服务”,就是一个非常关键的因素。
基于线下离线计算的架构
刚才我们简单讨论了一个现代推荐系统架构需要满足的一些需求。那么,在这些需求的驱动下,一种简单易行的架构就诞生了,那就是“基于线下离线计算的架构”。
什么叫基于线下离线计算的架构呢?
试想一下我们有一个推荐模块是在一个网站首页为用户推荐新闻。现在假设我们有M个用户N个新闻文章。M的数量级可能是几千万N的数量级可能是几百万。那么理想状态下需要用我们的模型对每一个用户以及每一个新闻进行打分。具体地对于某一个用户来说当这个用户访问网站的那一瞬间我们需要对几百万的新闻进行打分并且在一两百毫秒内返回结果这很有可能是不现实的。
既然我们无法实时对所有的新闻打分,那么,退一步讲,我们能不能事先把这些打分的工作都做了,然后当用户来到网站的时候,我们仅仅是显示结果呢?答案是,可以的,并且这就是线下离线计算的核心思想。
通俗地说,线下离线计算的一个主要想法就是:把计算中复杂的步骤尽量提前做好,然后当用户来到网站需要呈现结果的时候,我们要么已经完成了所有的计算,要么还剩非常少的步骤,可以在很快的时间内,也就是所说的一两百毫秒内完成剩下的计算。
回到我们刚才的新闻推荐的例子。我们可以把针对每一个用户的所有新闻的打分,在线下都提前计算好,然后存放在一个数据库或者数据存储的地方,当用户来到网站的时候,我们只需要展示已经完全计算好的推荐结果。
完全线下离线计算的最大好处就是,当用户来临的时候,基本没有任何的计算成本。系统唯一需要做的就是从一个数据存储的地方直接取得当前的推荐结果。
也就是说,线下离线计算的最大好处,就是解决我们刚才说的在规定的时间内计算出推荐结果的需求。然而,线下离线计算对其他两个需求则无法很好地处理。
第一,因为我们是完全提前计算好了所有的结果,并且存储在数据库中。那么,假设用户和推荐结果进行了交互,希望更新推荐结果,离线计算的模式就无法支持这样的操作,或者是非常困难。
我们可以试想一下,如果一个用户不喜欢某一个新闻推荐结果,那么在当前的框架下,我们应该如何应对呢?首先,我们需要启用线下的计算流程,重新计算这个用户所有的推荐结果,然后把这个推荐结果存储到刚才说的数据库里,这样用户下一次来到网站的时候,就会看到更新的结果了。
因为刚才我们已经假设模型的复杂度导致无法很快地进行运算,因此,这个更新的流程可能会比较耗时。同时,这只是一个用户的情况,如果我们要针对大量用户进行这样的处理,那最省力的就是隔一段时间,比如说几个小时就针对那些和系统有交互的用户重新计算一次结果,然后再把更新的结果存入数据库。很明显,在这几个小时的间隙里,用户看到的依然是旧的推荐结果。
第二,完全提前计算好所有结果的情况下,针对新的用户,新的新闻文章就无法进行推荐了。针对这些新用户和新文章来说,完全离线计算这种架构就有一个致命的缺陷。当然,我们也可以依照刚才的思路,也就是说隔一段时间,比如几个小时,就针对当前所有用户和所有新闻,重新计算结果,然后把结果存放到数据库中,但是很明显,这也会导致在这个间歇期内,我们无法对新用户和新文章进行推荐。
完全离线计算的推荐架构适用于一些简单的场景和一些应用的初期架构。很明显,在复杂的网站需求下,单靠提前把所有结果都计算好是不能满足动态的用户需求的。
然而,理解离线计算的需求对于构建复杂架构很有帮助。我们在设计一个更加复杂的架构时,依然会依靠很多离线计算,用线下时间来换取线上时间。这个思路是现代推荐系统架构中非常重要的一个想法。
小结
今天我为你讲了一种简单的现代推荐系统的构建思路,那就是基于线下离线计算的推荐架构。
一起来回顾下要点:第一,我们聊了聊推荐架构的需求;第二,我们介绍了什么是离线计算架构,以及这种架构的优缺点是什么。
最后,给你留一个思考题,如果我们的用户数量和物品数量实在是太大,线下计算无法满足每天全部更新一次推荐,这种情况下,我们又该怎么办呢?

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
074 现代推荐架构剖析之二:基于多层搜索架构的推荐系统
周一,我们讨论了基于线下离线计算的推荐架构,这也是最简单的一种推荐架构。我们了解了这种架构的优劣势,以及能够做的一些方案。
今天,我们来看另外一种也很常见的推荐系统架构,那就是基于多层搜索架构的推荐系统。
推荐架构需要解决的问题
周一我们详细讨论了推荐架构需要解决的问题,今天做一个简单的回顾。
推荐系统解决三个需求。
第一,推荐系统架构能够在一两百毫秒内给用户提供当前的推荐结果,即实时呈现推荐结果。
第二,推荐系统架构需要对用户和系统的交互结果做出响应。
第三,推荐系统架构需要考虑用户群体的覆盖率问题。
我们周一次讲到的基于离线计算的推荐架构,可以很好地解决第一个问题。解决思路就是先计算好所有的结果,然后存在某种存储空间里,当用户来到网站的时候,再直接显示事先已经计算好的结果。然而,这样的架构在第二和第三个需求面前,就显得有些捉襟见肘了。
基于多层搜索架构的推荐系统
我们前面在介绍搜索系统的时候,多次提到了多层搜索架构。一起来回顾一下这种架构。
首先,我们有一个索引,能够根据某些特性(比如关键字)来把所有的文档存储到里面,方便随时检索。
第一层或者叫第一轮打分,是发生在索引这个层面,我们通过一些简单的流程或者函数,往往是线性函数或者布尔值函数,来获取最相关的几百最多几千个文档。
紧接着,第二层或者叫第二轮打分,就是一个重排序的过程。这个时候,我们往往只需要针对几百个文档进行打分,所以可以使用相对比较复杂的函数,比如基于决策树的模型或者深度模型,以得到最终的结果。
有些时候,在第二轮打分之后,还有后面的轮数,主要是针对一些不同的商业规则,比如结果的多样性等等。
多层搜索架构可以支持搜索结果,自然地,对第一个需求,也就是在规定的时间内返回结果,有很好的支持。在搜索里面,用户输入查询关键词以后,大多数情况都希望能够快速得到结果。一般来说,我们把在所有文档里查找相关信息分解为两个步骤,先查找一个大概相关的集合,然后再在这个集合里进行重排序。特别是第一个步骤,往往是在索引上并行进行的,因此速度也相对比较快。
那么,多层搜索架构如何来解决第二和第三个需求呢?
我们先来看第二个需求,也就是说如何针对用户的反馈对结果进行更新。所谓进行更新,其实就是说,给用户的推荐结果,需要有一些不一样的地方。但是,如果我们仔细想一下这个需求,就会发现,第二个需求的核心是需要对用户的反馈进行更新,但也不能走向另外一个极端,那就是用户点击或者浏览了一两个物品后,整个推荐结果就全部发生了改变。因此,如果我们在这种需要变化但又不是大变的假设之下,多层搜索架构就能相对容易地解决这个问题。
例如,我们可以根据索引返回用户可能喜欢的一千个物品。假定用户的喜好不会在每一天内发生巨大变化。这个索引本身可以每天更新,但不需要更新得特别频繁。因为用户点击了一些物品,之后需要产生的更新变化,我们可以寄希望在重排序这个环节发生。也就是说,我们在每一天中,从索引中提取出来的内容都可以是一模一样的,但是我们可以根据重排序的部分产生不一样的结果,这样也就满足了用户的需求。
具体来说,在重排序的阶段,有两种方法可以根据用户的反馈进行更新。
一种方法,就是更新重排序阶段的模型。如果重排序阶段是一个决策树模型,那我们就对这个决策树进行重新训练。这里主要取决于重排序阶段是一个什么样的模型。如果这个模型需要所有用户的信息,那重新训练的计算量,无疑是非常大的,而且往往还无法在线完成。在这样的情况下,重新训练可能并不是最优的解决方案。
另外一种方法,就是更新重排序的模型的某些特性。如果重排序模型使用了一些特性,其中包含记录了用户的一些行为。那么,我们其实可以在不更改模型的情况下,通过更新特性的数值来达到更新结果的目的。比如,可能有这么一个特性,记录用户在某个物品上点击了多少次,那么我们单单刷新这个特性的数值就可以了。
对于第三个需求,也就是说如何针对新用户和新物品进行支持。可以说,搜索架构对于新用户是天然支持的。因为索引里面是物品,而并不是特定的用户信息,所以新老用户对于这个以索引为基础的架构来说是一样的。不太相同的自然是新老用户的特性值是不一样的,因此取决于重排序的模型,很有可能是针对老用户有比较强的效果,而针对新用户则可能会有一些捉襟见肘。
相对来说,搜索架构的短板在于对新物品的支持。因为整个索引机制是基于物品的,因此当我们已经建立了一个当前的索引后,新的物品不在索引里面,因而无法在提取阶段被取出来。一个比较直接的方法自然是重新建立索引,然而如果我们有上百万的物品,重建索引并不是一个简单容易的步骤。关于如何支持这样一个功能,我们留到下一次分享中探讨。
小结
今天我为你讲了基于多层搜索架构的推荐系统。
一起来回顾下要点:第一,我们回顾了推荐架构的需求;第二,我们介绍了什么是多层搜索架构,以及这个架构是如何利用到推荐场景的,同时还聊了聊这种架构的优缺点是什么。
最后,给你留一个思考题,我们谈到了用索引来帮助推荐系统的构建,那么在搜索里面索引可以根据关键字来建立,在推荐系统中,我们怎么构建索引呢?

View File

@@ -0,0 +1,59 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
075 现代推荐架构剖析之三:复杂现代推荐架构漫谈
本周我们讨论现代推荐系统的架构体系。周一我们看了最简单的基于线下离线计算的推荐架构,周三我们聊了基于多层搜索架构的推荐系统。
今天,我们来谈一谈如何从这两种架构的思路出发,来满足更加复杂多变的实际情况。
推荐架构需要解决的问题
这周我反复强调推荐系统的几个基本需求点。第一,能够在一两百毫秒内给用户提供当前的推荐结果;第二,需要对用户和系统的交互结果做出响应;第三,需要考虑用户群体的覆盖率问题。
接下来我们就聊一些经常考虑的场景,起到一个抛砖引玉的作用,供你参考。
新用户的问题
如果你要搭建的系统面临的情况是新用户多,比如一个新上线的快速增长的产品,那么我们需要怎么考虑架构呢?
这里面有两个基本思路。第一,我们要更加快速地抓住这些新用户和系统的交互信息,从而更好地为他们推荐信息。第二,在我们还没有足够多的信息的时候,如何为这些用户提供推荐结果。
我们先从第一点说起,如果希望能够更加快速地抓住用户的交互信息,从而很好地为他们推荐内容,有两种做法:要么能够快速更新模型从而更新推荐结果,要么快速更新特性从而更新推荐结果。
如果我们整个产品只有一个全局的排序模型的话,不管是基于线下的静态架构还是基于搜索的架构,基本上都不可能很快地去更新这个全局模型。因此,在这种情况下就需要去思考如何更新特性。
对于搜索的框架,也许我们可以通过更新特性,从而达到在重排序的这个阶段,因特性改变而带来不同的结果。但是对于线下的静态架构,因为所有推荐结果都是事先处理好的,因此改变特性也不能改变结果,除非针对这个用户,对所有的推荐结果重新进行线下计算。这样做是可行的,但是计算成本还是相对比较高。因此,综合来看,如果在新用户比较多的情况下,并且我们还希望抓住用户的交互,静态架构可能就会显得有一些心有余而力不足了。
第二点则是新用户的交互信息一开始会比较少,如何处理冷启动呢?我们前面提到过,其实冷启动可以利用一些用户的其他信息,比如年龄、性别、地理信息来产生推荐结果。我们可以为用户显示当前比较流行的在某个年龄段、某个性别、某个地理区域的信息。
一个简单的思路是,这些年龄、性别、地域的信息,可以每个小时或者每天更新一次,单独存放在一个数据库里。当用户来网站的时候,我们可以尝试从搜索的架构里提取信息,也从这个单独的数据库里提取信息,然后在这个基础上进行全部重新排序。这样我们就能够保证架构的统一性,同时也解决了冷启动的问题。
新物品的问题
和大量新用户问题不同的是,大量新物品的问题则更加棘手一些。
在静态框架下,新物品意味着对于所有的用户,我们之前都没有考虑过这些物品,因此如果不进行特殊处理,我们是绝对没法把这些物品展示给用户看的。
这里有两种思路。一种思路,就是把新物品加入到内容池里,对于所有用户,全部重新生成推荐结果。这当然是最简单的想法,但是很显然,这样做是非常耗时的。另外一种思路,我们把当天产生的新物品单独存储在一个数据库,针对这些物品给出一些预估计的分数。这里当然可以针对物品的特性打分,也可以随机给定一些分数。然后我们在显示推荐的时候,可以混合之前线下已经产生的推荐结果和当天的新物品结果,这样从用户的角度来看,我们是可以对新物品进行推荐的。
在搜索的架构下,也有两个类似的思路。第一,那就是我们对索引进行重索引,但这个过程相对比较耗时。第二,那就是对新物品构建一个临时索引或者数据库,最后的结果是从索引和当天的临时存储中共同获取,然后进行重新排序。
在新物品比较多,并且很快就会过时的情况下,另外一个需要注意的棘手问题就是,推荐的模型一定不能仅仅抓住用户喜爱的某一个物品。比如新闻推荐,用户喜欢某一个新闻,但是这个新闻很快就会过时。这就和商品推荐有很大不同,对于商品来说,用户可以反复购买同一件日用品。
小结
今天我为你讲了利用推荐系统的一个重要问题,就是如何构架一个现代推荐系统。我们聊了两个场景下的一些更加细致的取舍,分别是新用户多的情况和新物品多的情况。
其实,所有的这些思路都不是“死规矩”,但是有一些基本的规则你可以去琢磨。
比如,我们尽可能把复杂的运算放在线下,因为毕竟需要在规定的时间内返回结果。在一切有可能的情况下,尽可能使用搜索引擎来减少需要对大量物品进行打分的步骤。再比如,对于活跃的用户,我们可以使用多层搜索架构;但是对于不活跃用户,我们可以依赖线下,提前产生所有的推荐结果。
一起来回顾下要点:第一,我们再次回顾了推荐架构的需求;第二,我们通过两个场景,新用户多和新物品多,分析了架构里面的一些取舍。
最后,给你留一个思考题,假设我们的推荐系统需要给一个手机客户端的产品进行推荐,有什么和桌面端不一样的,需要在架构上额外注意的地方呢?

View 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年的ICMLInternational 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个隐单元然后有153*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无法直接使用类似“最大似然法”或者“递归下降”的方法来对参数进行学习。这其实也是阻碍这类方法广泛使用的一个重要障碍。在最初的论文里作者们提出了一种CDContrastive Divergence对比散度方法这种方法其实是一种简化的MCMCMarkov 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.

View 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模型在这篇论文里使用的是 GRUGated Recurrent Unit。我们在这里不展开RNN或者GRU的定义细节以及这些模型里面的特征。我们从比较高的维度来讲一讲RNN的建模思路。
RNN的输入是当前的一个物品然后RNN需要输出的是对于下一个物品的预测同时为了能够对这些在时间序列上的物品进行建模RNN内部也要维持一个隐含的状态序列这个状态序列会随着时间的变化而变化。不同的RNN模型在以下内容的实现上有所不同包括如何实现这个隐含的状态序列以及如何对从状态序列到输入和输出物品的建模。
总的来说这篇论文就是直接把目前在自然语言处理中经常使用的GRU拿到了推荐领域并且做了一些微小的修改。从实验结果来看如果我们对会话进行建模的话效果要明显好于没有对会话进行建模。
再介绍一个比单对会话进行建模更进一步的工作是发表于WSDM2017上的一篇论文《递归推荐网络》Recurrent Recommender Networks[3]。我们前面提到了,矩阵分解的最大问题就是学习到的用户以及物品向量无法囊括时间的信息。在这篇论文里,作者们假定用户的隐向量,物品的隐向量都会随着时间的变化而变化,而在某一个时刻的物品评分仅仅是那一个时刻的用户隐向量和物品隐向量的一个结合。在传统的模型里,要描述这种隐向量随着时间的变化而变化的思路就会充满难度。
在这篇论文里,一个重要的贡献就是使用了一种叫 LSTMLong 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.

View File

@@ -0,0 +1,57 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
078 基于深度学习的推荐模型之三:利用深度学习来扩展推荐系统
这周我们主要讨论如何利用深度学习来提升推荐系统的精度。我们分别介绍了使用RBMRestricted Boltzmann Machines受限波兹曼机来对推荐系统建模和RNNRecurrent Neural Network递归神经网络在推荐系统中的应用。
今天,我们最后再来看一看,还有哪些深度学习的思潮在影响着推荐系统。这些思想都是一些值得关注和学习的方向,虽然这些方法能否在短时间内成为主流还有待检验。
多层神经网络
深度学习开始从计算机视觉这一人工智能子领域慢慢向其他领域扩展在这个大背景下很多学者和实践者总结出了深度学习获得成功的一大法宝那就是能够从众多的信息中学习到高维度的特性Feature。比如在计算机视觉里通过多层神经网络建立的深度学习模型往往能够识别出类似“边”、“角”、“形状”等视觉概念。于是大家就形成了这样一个普遍认识多层神经网络是一种提取特性的利器。
和很多其他领域的思路一样,在推荐领域的学者也开始尝试利用多层神经网络对用户和物品的信息进行提取。这里面比较经典的思路是:直接利用多层神经网络,来尝试我们之前已经讲过的基于矩阵分解的推荐模型。
在矩阵分解的例子里,我们学习到的是用户的隐变量和物品的隐变量。这两者的点积成为评分的预测结果。在这个模型框架里可以认为,用户的隐变量和物品的隐变量是我们从数据中提取的特性信息。只不过,这种特性的提取是一种线性变换,而深度学习模型寻求的是多层次的非线性变换。
利用多层神经网络提取用户和物品特性的基本思路是这样的。
首先我们的输入信息是用户的ID以及物品的ID。这里我们可以认为 ID是高维的离散输入。那么根据这个输入信息我们分别对用户和物品构建多层神经网络。这里比较常见的是至少有一层的神经网络可以把离散的输入转换成为连续的数据层。
通常我们把这一层叫作“嵌入层”Embedding。嵌入层的基本思想是希望能够把离散信息转换成为连续信息并且这些连续信息携带着“语义”Semantic上面的相似。什么意思呢就是说如果两个用户是相似的或者两个物品是相似的那么我们就会寄希望于他们的嵌入层在数值上相近这样嵌入层就能够很好地捕捉到用户和物品的相似度。
当用户和物品两边分别得到了嵌入层以后,输入信息已经完全变成了连续数据信息,通常的做法是把两边的嵌入层拼接在一起(也有把两个嵌入层取加权平均的做法),形成一个大的嵌入层。这个新的拼接层就成为连结了用户信息和物品信息的输入。
然后,接下来要做的,就是对这个新的输入进行多层的神经网络变换,最后输出我们对评分的预测。
总而言之直接利用多层神经网络对用户和物品的建模可以简单归纳为两步首先把离散的ID信息转换成为连续的信息形成嵌入层然后利用多层神经网络对嵌入层进行变换并最后输出预测结果。
虽然利用多层神经网络在推荐系统上可以算是非常直观,然而在实际的效果中,我们其实并没有发现利用多层神经网络比矩阵分解要更好。如何能够更加有效地利用多层神经网络目前还是一个研究方向。
其他深度学习模型
除了直接利用多层神经网络来对推荐系统进行建模以外,最近也有不少把深度学习中其他思潮应用到推荐系统中的尝试。这里我也简单提及一些。
首先在深度学习领域有一个技术叫作“自动编码器”Autoencoder。这个方法的核心思想就是希望能够无监督化地学习到某种信号的编码后的信息并且编码后的信息能够再次通过解码尽可能地还原最初的信号。如果我们能够找到这样完美的过程那么在这个方法的假设里我们就获取了更有价值的特性信息。
于是,把自动编码器思想应用到推荐系统的尝试,主要就是对用户以及物品进行编码。需要指出的是,我们刚才提到的直接使用多层神经网络的方法,其实也是某种意义上的编码,但我们这里提到的自动编码器的思想,还强调能够从学习到的隐含信息中还原最初的信息,也就是尽可能保持学习到的隐含变量的可还原性。这一点是多层神经网络所不具备的。
另外一个就是 CNN卷积神经网络的应用学者和工程人员希望借助CNN来对用户和物品进行建模从而扩展推荐系统的表现力。目前CNN在计算机视觉领域占据着举足轻重的地位因此很多人都希望能够直接把CNN的成功借鉴到推荐系统中。
和刚才我们介绍的直接使用多层神经网络建模的思路非常类似。一种常见的做法也是直接利用CNN来提取用户和物品的信息。通常的做法就是在我们刚才所说的嵌入层之后不直接使用多层神经网络了而是使用CNN来对嵌入层之后的信息进行变换。这里其实并没有太多创新的地方基本上就是把视觉里面的模型拿来直接使用。
关于其他深度学习模型我们就说到这里,不做太多的介绍。原因是从总体上来看,深度学习在推荐系统上的应用,还是技术大于实际效果,目前并没有在太多的应用上有真正令人说服的成功案例。大多数情况是技术人员希望尝鲜,然后把一些成功的模型照搬到推荐任务上,虽然效果也不差,但从大的贡献来说,并没有太大的创新。
小结
今天我们继续讨论了如何利用深度学习模型来对推荐系统进行建模,我们聊了如何把深度学习的思路嫁接到推荐系统的开发中来。
一起来回顾下要点第一我们聊了一种最简单的应用就是直接利用多层神经网络来对推荐系统进行扩展第二我们聊了一些其他的深度学习的思路包括自动编码器和CNN简单讨论了如何把这些深度学习模型应用到推荐系统中。
最后,给你留一个思考题,深度学习模型在推荐领域应用的最大问题,或者说最大挑战是什么?

View File

@@ -0,0 +1,89 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
078 复盘 2 推荐系统核心技术模块
到目前为止,我们讲完了人工智能核心技术的第二个模块——推荐系统。
整个模块共21期7大主题希望通过这些内容能让你对推荐系统核心技术有一个全面系统的认识和理解为自己进一步学习和提升打下基础。今天我准备了21张知识卡和你一起来对这一模块的内容做一个复盘。
提示点击知识卡跳转到你最想看的那篇文章温故而知新。如不能正常跳转请先将App更新到最新版本。
现代推荐架构剖析
推荐架构需要解决的问题:
能够在一两百毫秒内给用户提供当前的推荐结果;
对用户和系统的交互结果做出响应;
考虑用户群体的覆盖率的问题。
简单推荐模型
基于隐变量的模型
我们通过模型的假设,知道隐变量之间的关系,但暂时并不知道隐变量的取值。因此需要通过“推断”过程来确定隐变量的实际取值。当我们知道了这些隐变量的取值之后,就可以根据这些取值来对未来的数据进行预测和分析。
隐变量往往还带有“统计分布”的假设。最简单的隐变量模型是高斯混合模型。
高阶推荐模型
推荐的Exploit和Explore算法
基于深度学习的推荐模型
推荐系统的评价
积跬步以至千里
最后恭喜你在这个模块中已经阅读了45397字听了138分钟的音频获得一张新的通关卡这是一个不小的成就。在人工智能领域的千里之行我们又往前迈出了一步。

View 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来为广告商以及内容发布商提供服务。
总结
今天我为你简单介绍了广告系统的概况。一起来回顾下要点:第一,我们讲了广告系统的基本应用场景以及其中的重要角色;第二,我们回顾了计算广告在过去发展的一个简单历史。
最后,给你留一个思考题,除了我们所说的搜索广告和展示广告,你还见过什么其他类型的互联网广告呢?

View 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呢

View File

@@ -0,0 +1,65 @@
因收到Google相关通知网站将会择期关闭。相关通知内容
081 广告回馈预估综述
在上一篇的分享里我们详细地讨论了广告系统的架构熟悉了各个组件都是怎么运作的特别是我们重点剖析了对于每一个广告请求供应侧平台SSP、广告交易平台ADX、需求侧平台DSP以及数据处理平台DMP都扮演了什么样的角色。同时我们介绍了对于用户信息的追踪和整合业界的基本技术就是存储用户的Cookie以及慢慢催生的Cookie的整合技术。
今天,我们就来看一看整个计算广告领域最核心的一个问题:广告回馈预估。
什么是广告回馈预估
什么是广告回馈预估?广告回馈预估要解决什么问题?我们先来弄明白这个问题。
我们说过计算广告有两大应用领域:搜索广告和展示广告,以及围绕这些广告的生态系统。这些系统或者领域都希望达到一个最终的目的,那就是用户和广告进行交互,并且能够对广告所代表的服务或者产品产生印象,从而达成某种程度的交易。
这里的“交互”包括对传统广告的点击也包括对视频广告的观看。而在和广告交互之后用户对于广告所代表的服务或商品达成的“交易”包括购买、订阅甚至是改变印象等等。那么这一切和广告本身的交互以及和广告所代表的服务或者商品达成的交易我们都通通称为“回馈”Feedback
而我们所说的“回馈预估”,就是要预测用户这种行为的可能性,或者说是概率。也就是说,我们希望了解用户是不是有可能点击这个广告;有多大概率观看完这段视频广告;有多大可能去购买这个广告所代表的商品。
对广告的回馈概率进行有效估计是很多广告生态系统组件的一个核心需求。对于发布商来说,显示广告,不管是通过搜索结果还是通常的页面,都希望能够有用户交互从而带来收入。很多广告系统的收入模式就是依靠用户的点击从而让广告商为此支付一定费用给发布商。
因此,对于发布商来说,越是能准确估计这部分的点击率,就越能保证自己的收入。相应地,对于广告商来说,很有必要知道某一种类型的广告在哪个发布商能够带来更多的点击,从而能够有针对性地对于某个发布商进行投放。由此看来,广告回馈预估是一个非常重要的有待解决的技术问题。
广告回馈预估的普遍挑战和技术难点
既然广告回馈预估很重要,我们是不是可以直接用现成的机器学习工具就可以解决这个问题呢?这个问题有什么自身的特点,又有哪些挑战和技术难点呢?
在比较简单的设定下,广告回馈预估可以看做是某种监督学习的任务。在这类监督学习任务里,标签是用户的动作,例如点击或者观看,或者购买等。我们需要建立的是一个用户在某种上下文中对广告标签的一个模型。这里的上下文包括查询关键词、用户信息、广告信息以及一切其他有用的信息。
那么,在这样的设定下,广告回馈预估的核心挑战是什么呢?
核心挑战其实来自于稀疏的数据。
不管是在搜索广告中也好,还是在展示广告中也好,从平均的角度来说,相比于用户和正常的搜索结果或者展示结果(比如新闻内容等)的互动,用户与广告的互动要成倍地减少。有一项研究表明,在同样一个位置,广告的点击率可以是正常内容的十分之一、百分之一甚至是千分之一。也就是说,从概率的角度来看,用户普遍是不点击广告的。这个观察基本上是符合我们对用户的普遍理解的。但是,较少的点击数据造成的结果就是,从监督学习的角度来说,大量的数据点都是未交互的数据,只能当做负例来处理。
实际上,在广告点击率预估的问题中,正例的数目常常是负例的百分之一或者千分之一。这样造成的就是非常“不均衡”的数据集。而要想在不均衡的数据里中进行概率估计,往往都是一件困难的事情。
而购买事件相对于广告点击来说就更加稀少,这一点其实也很正常。在点击了广告之后,又有多少人真正会去购买这些产品呢?因此,提高广告的转化率,也就是交易发生的概率,往往就是更富有挑战的任务。
值得一提的是,在监督学习的框架中,除了数据问题以外,广告回馈预估还有目标函数的挑战。具体是什么情况呢?
在真实的系统中我们需要在很多候选可能的广告中选出最优的一个或者几个显示在页面上。从某种程度上来说这更像是一个排序问题。同时对于不少DSP需求侧平台来说广告排序的最终目的是进行“竞拍”Auction。因此最后估算广告的点击率以后还需要看广告的竞价由此来对广告是否会赢得竞拍从而被显示在页面上进行一个更加全面的估计。很显然和传统的推荐或者搜索比较这些问题都要复杂许多。
广告回馈预估的算法和模型
广告回馈预估的难点和挑战来自两方面,一方面是稀疏的数据,会造成不均衡的数据集;一方面是目标函数的挑战。那么,广告回馈预估有哪些比较常见的算法或者模型呢?
我们接下来会对这一系列有关的算法和模型进行详细讨论。今天,我会带你从宏观上进行一下总结。
从最直接的监督学习的角度来看广告回馈预估的一个常见算法就是把这个问题当做二元分类问题并且直接利用“对数几率回归”Logistic Regression来对这个问题建模。实际上直到今天对数几率回归依然是广告回馈预估领域的重要方法。
第二类经常使用的就是树模型,特别是 GBDT 这个通常在搜索中使用的模型。我们前面已经提到了这类模型对于排序学习的作用。
第三类目前比较火热的领域就是如何利用深度学习来对回馈预估进行建模。这一类模型在最近几年有了比较大的进展。
总结
今天我为你介绍了广告系统中最核心的一个问题:广告回馈预估。一起来回顾下要点:第一,广告回馈预估就是预测“用户与广告的交互以及达成交易这种行为”的概率;第二,广告回馈预估有两方面的难点和挑战,分别来自数据和目标函数;第三,在这个领域有一些流行的模型,比如对数几率回归和数模型等。
最后,给你留一个思考题,当我们有不均衡数据集的时候,我们一般都有哪些解决方案?针对广告预估,是否需要对这些方案进行额外的处理呢?

View 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的科学家和工程师选择了逻辑回归这是一个非常传统但也非常强大的线性分类工具。
我们这里简单回顾一下逻辑回归模型。
逻辑回归是要对二元分类问题进行建模,模型的核心是通过一组(有可能是非常巨大规模的)特征以及所对应的参数来对目标的标签进行拟合。这个拟合的过程是通过一个叫逻辑转换或函数来完成的,使得线性的特征以及参数的拟合能够非线性转换为二元标签。
普通的逻辑回归并不适应大规模的广告点击率预估。有两个原因第一数据量太大。传统的逻辑回归参数训练过程都依靠牛顿法Newtons Method或者L-BFGS等算法。这些算法并不太容易在大规模数据上得以处理。第二不太容易得到比较稀疏Sparse的答案Solution。也就是说虽然数据中特征的总数很多但是对于单个数据点来说有效特征是有限而且稀疏的。
我们希望最终学习到的模型也是稀疏的,也就是对于单个数据点来说,仅有少量特征是被激活的。传统的解法,甚至包括一些传统的在线逻辑回归,都不能很好地解决答案的稀疏性问题。
这篇文章提出了用一种叫FTRLFollow 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呢

View 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 (ADKDD14). ACM, New York, NY, USA, , Article 5 , 9 pages, 2014.

View 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.

View 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所提模型的系数则是每个用户、广告和上下文都不同。作者们认为这可以实现“热启动”效果。也就是说当某个用户、某个广告或者某个上下文已经有比较多的数据以后就可以依靠这些用户、广告或者上下文自己的系数了而不仅仅依靠第一部分的全局系数。这个第三部分只有当数据比较多的时候才能够起作用。
模型的其他特性
这个模型在增加了这些系数的先验概率信息之后变得相对比较复杂。这篇论文介绍了一系列的模型训练思路,都是不错的可以借鉴的工业界经验。
首先,作者们认为,刚才模型中所说的三个部分所需要的模型更新频率是不一样的。比如第一部分和第二部分都可以认为是全局模型,也就是说系数是全局性的。因此这些模型的变化会比较慢,作者们建议一个星期对模型进行一次更新。而第三部分则是在已经积累了历史信息后慢慢呈现出的效果,因此对于数据会非常敏感,而且每个用户和每个广告都是不同的系数,因此需要在短时间内,比如半个小时甚至几分钟内,就重新训练模型,以达到个性化的目的。
其次作者们还把提出的模型和EEExploit & 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.