内部信息源与外部信息源搜索引擎优化方法的异同(机器学习之前的第21-43条规则(上))

优采云 发布时间: 2022-01-23 06:08

  内部信息源与外部信息源搜索引擎优化方法的异同(机器学习之前的第21-43条规则(上))

  雷锋网AI研究社出版社,本文来自谷歌开发者博客,雷锋网授权转载。以下为下一篇,内容为机器学习前的规则21-43。有关相关术语和规则 1-20,请参阅 Google 的机器学习规则:机器学习工程的最佳实践(第 1 部分)

  规则 21:你可以在线性模型中学习的特征权重的数量与你拥有的数据量大致成正比。

  关于模型的适当复杂度有各种优秀的统计学习理论结果,但你基本上只需要了解这个规则。在一次谈话中,有人质疑是否可以从一千个样本中学到任何东西,或者是否需要超过一百万个样本,他们之所以有这样的疑问,是因为它们仅限于一种特定的学习方式。关键是要根据数据的大小调整你的学习模型:

  如果您正在构建一个在文档和查询中收录数百万个不同术语的搜索排名系统,并且您有 1000 个标记样本,那么您应该手动设计文档和查询特征、TF-IDF 和其他几个高度 获得点积转换后的特征之间。您将拥有 1000 个样本,十多个特征。

  如果您有一百万个样本,请使用正则化和特征选择来(可能)使文档特征列和查询特征列相交。这样您就可以获得数百万个功能;但是如果你使用正则化,你会得到更少的特征。您将拥有数千万个样本,可能会产生 100,000 个特征。

  如果您有数十亿或数千亿个样本,您可以使用特征选择和正则化按文档和查询标记组合特征列。您将拥有 10 亿个样本,1000 万个特征。统计学习理论很少设置硬性限制,但可以提供一个很好的起点。

  最后,根据规则 28 决定使用哪些功能。

  规则 22:清理不再使用的功能。

  未使用的功能会产生技术债务。如果您发现自己没有使用某个功能并且将其与其他功能组合不起作用,请将其从您的基础架构中删除。您需要保持基础架构清洁,以便您可以尽快尝试最有可能产生良好结果的功能。如有必要,其他人可以随时添加您的功能。

  在决定添加或保留哪些功能时,请考虑覆盖范围。即对应的特征覆盖了多少个样本?比如你有一些个性化特征,但只有8%的用户有个性化特征,那它就不会很好用。

  同时,一些特征可能会超过它们的权重。例如,如果您有一个仅覆盖 1% 数据的特征,但具有该特征的样本中有 90% 是正样本,那么这是一个很好的添加特征。

  系统人工分析

  在进入机器学习的第三阶段之前,重要的是要关注在任何机器学习课程中都学不到的东西:如何检查现有模型并改进它们。这更像是一门艺术而不是一门科学,但有几个反模式值得避免。

  规则 23:您不是典型的最终用户。

  这可能是让团队陷入困境的最简单方法。虽然 fishfood(团队内的原型制作)和 dogfood(公司内的原型制作)有很多优势,但员工应该看看是否满足绩效要求。虽然显然应该避免糟糕的更改,但任何看起来合理的更改都应该在更接近生产的情况下进行测试,或者通过要求非专业人士在众包平台上回答付费问题,或者通过要求真实用户进行在线实验。

  有两个原因。首先,你离代码太近了。您可能专注于帖子的特定方面,或者您只是在其中投入了太多情绪(例如确认偏见)。其次,你的时间很宝贵。考虑一下可以在众包平台上以九名工程师一小时会议的成本购买多少合同人类标签。

  如果您真的想获得用户反馈,请使用 UX 方法。在流程的早期创建用户角色(参见 Bill Buxton 的 Sketching User Experiences 书中的描述),然后进行可用性测试(参见 Steve Kruger 的 Don't Make Me Think One 书中的描述)。用户角色是指创建虚构用户。例如,如果您的团队成员都是男性,那么值得设计一个 35 岁的女性用户角色(使用用户特征完成)并查看它产生的结果,而不是仅仅查看 10 25-40 年的结果老男性。让真实用户在可用性测试期间体验您的 网站(本地或远程)并观察他们的反应也可以让您对事物有全新的看法。

  规则 24:衡量模型之间的差异。

  在向任何用户展示新模型之前,您可以进行的最简单(有时也是最有用)的测量之一是评估新模型的结果与生产的不同之处。例如,如果您有一项排名任务,请针对整个系统中的一批示例查询运行这两个模型,并查看结果的对称差异有多大(按排名位置加权)。如果差异非常小,您可以说不进行实验不会有太大变化。如果差异很大,那么您需要确保此更改会带来良好的结果。查看具有较大对称差异的查询可以帮助您了解更改的性质。但是,请确保您的系统是稳定的。确保模型与其自身之间的对称差异很小(理想情况下为零)。

  规则 25:在选择模型时,实用性比预测能力更重要。

  您的模型可能会尝试预测点击率。但归根结底,关键问题是你如何处理这个预测。如果您使用该预测对文档进行排名,则最终排名的质量比预测本身更重要。如果您尝试预测文档是垃圾邮件的概率,然后选择要阻止的内容的权衡点,则允许内容的精度更为重要。大多数时候,这两项应该是一致的:如果不一致,则优势可能很小。因此,如果更改改善了日志丢失但降低了系统性能,请寻找其他功能。当这种情况频繁发生时,是时候重新审视模型的目标了。

  规则 26:寻找测量误差中的模式并创建新特征。

  假设您看到模型“获取”了错误的训练样本。在分类任务中,此类错误可能是误报或误报。在对任务进行排序时,此类错误可能是误报和误报,其中正例的排名低于负例。最重要的是,机器学习系统知道它弄错了样本,如果有机会,它会修复该错误。如果您为模型提供允许其纠正错误的功能,则模型将尝试使用它。

  另一方面,如果您尝试从系统不认为错误的样本中创建特征,则该特征将被系统忽略。例如,假设有人在 Play 应用搜索中搜索“免费游戏”。假设热门搜索结果之一是相关性较低的有趣应用。因此,您为“有趣的应用程序”创建了一个功能。但是,如果您要最大化安装量并且用户在搜索免费游戏时安装有趣的应用程序,那么“有趣的应用程序”功能将无法满足您的需求。

  如果模型让您的某些样本出错,请查找当前特征集之外的模式。例如,如果系统似乎正在降级内容较长的帖子,请添加帖子长度。不要添加过于具体的特征。如果您要添加帖子长度,请不要试图猜测长度的含义,只需添加十几个或更多特征并让模型处理它(参见规则 21)。这是实现目标的最简单方法。

  规则 27:尝试量化观察到的异常行为。

  当现有的损失函数没有捕获他们不喜欢的某些系统属性时,您的团队中的一些成员开始感到沮丧。在这一点上,他们应该尽其所能将投诉转化为具体数字。例如,如果他们认为 Play Search 中有太多“有趣的应用”,他们可以通过人工评分来识别有趣的应用。(在这种情况下,您可以使用人工标记的数据,因为相对较小的查询子集占流量的很大一部分。)如果您的问题是可衡量的,您可以开始将它们用作特征、目标或指标。一般规则是“先量化,后优化”。

  规则28:请注意,短期行为相同并不意味着长期行为相同。

  假设您的新系统查看每个 doc_id 和 exact_query,并计算每个查询的每个文档的点击概率。您发现在并行分析和 A/B 测试中,它的行为几乎与您当前的系统相同,因此您发布了它,因为它很简单。但是,您发现它没有显示任何新应用程序。为什么?那是因为您的系统只根据自己的查询历史显示文档,所以它不知道应该显示新文档。

  了解此类系统长期行为的唯一方法是仅使用在线时获取的数据来训练模型。这是非常困难的。

  训练应用偏差

  训练应用偏差是训练效果和应用效果之间的差异。这种偏差的原因可能是:

  我们注意到谷歌的生产机器学习系统也存在训练应用偏差,这会对性能产生负面影响。最好的解决方案是明确监控以避免在系统和数据变化时引入容易被忽视的偏差。

  规则 29:确保训练与应用一样有效的最佳方法是保存应用时使用的特征集,然后将这些特征通过管道传输到日志以供训练时使用。

  即使您不能对每个样本都这样做,也可以对一小部分样本进行验证,以验证应用程序和训练之间的一致性(参见规则 37)。采取这一步的谷歌团队有时会对结果感到惊讶。在 YouTube 主页上切换到此应用程序录制功能不仅大大提高了质量,而且还降低了代码复杂度。有许多团队已经在他们的基础设施上采用了这种方法。

  规则 30:按重要性对采样数据进行加权,不要丢弃它们!

  当数据过多时,总是倾向于使用前文件而忽略后文件。这是错误的做法。尽管可以丢弃从未向用户展示过的数据,但对于其他数据,按重要性加权是最佳选择。按重要性加权意味着如果您决定以 30% 的概率对样本 X 进行抽样,则赋予其 10/3 的权重。当按重要性加权时,您仍然可以使用规则 14 中讨论的所有校准属性。

  规则 31:如果您在训练和应用期间关联表中的数据,请注意表中的数据可能会发生变化。

  假设您将文档 ID 与收录这些文档的特征(例如评论或点击次数)的表相关联。表中的功能在训练时和应用时可能会有所不同。然后,您的模型可能会在训练和应用同一文档时对同一文档进行不同的预测。避免此类问题的最简单方法是在应用特性时记录特性(参见规则 32)。如果表只是缓慢变化,您还可以每小时或每天创建表的快照,以获得非常接近的数据。请注意,这仍然不能完全解决问题。

  规则 32:在训练和应用程序管道之间尽可能重用代码。

  批处理不同于在线处理。对于在线处理,您必须在每个请求到达时对其进行处理(例如,您必须对每个查询进行单独的查找),而对于批处理,您可以组合任务(例如,进行关联)。申请的时候是在线处理,训练的时候是批处理。但是,有一些方法可以重用代码。例如,您可以专门为您的系统创建一个对象,其中所有查询结果和关联都可以以非常易于阅读的方式存储,并且可以轻松测试错误。然后,采集到所有信息后,您可以在应用程序和培训期间使用通用方法在人类可读对象(特定于您的系统)和机器学习所需的任何格式之间建立一座桥梁。这消除了训练应用偏差的来源。由此推断,在训练和应用时,尽量不要使用两种不同的编程语言。如果这样做,几乎不可能共享代码。

  规则 33:如果您根据 1 月 5 日之前的数据生成模型,请根据 1 月 6 日及之后的数据测试模型。

  通常,要衡量模型的性能,您应该使用在模型训练的所有数据之后的日期采集的数据,因为这可以更好地反映系统在应用于生产时的行为。如果您根据 1 月 5 日之前的数据构建模型,请根据 1 月 6 日及之后的数据测试模型。您通常会发现模型在使用新数据时表现不如以前,但应该不会太糟糕。由于可能存在一些日常影响,您可能预测的不是平均点击率或转化率,而是曲线下面积(表示正类样本得分高于负类样本的概率)类样本)应该非常接近。

  规则 34:在关于过滤的二元分类中(例如,垃圾邮件检测或识别有趣的电子邮件),在短期内牺牲一点性能以获得非常干净的数据。

  在过滤任务中,标记为负分类的样本不会显示给用户。假设您的过滤器在应用时会阻止 75% 的负面分类样本。您可能希望从显示给用户的实例中提取额外的训练数据。例如,如果用户将您的过滤器未阻止的电子邮件标记为垃圾邮件,您可能希望从中学习。

  但是这种方法引入了抽样偏差。如果您在应用期间将所有流量的 1% 标记为“保留”并将所有保留样本发送给用户,则可以采集更清晰的数据。过滤器现在阻止至少 74% 的负面分类样本。这些保留的样本可以成为训练数据。

  请注意,如果过滤器阻止了 95% 或更多的负分类样本,则此方法不太可行。即便如此,如果你想衡量你的应用程序的性能,你可以以较低的采样率(例如 0.1% 或 0.001%)。一万个样本足以非常准确地评估性能。

  规则 35:注意对问题排序的内在偏见。

  当你彻底改变你的排名算法,导致不同的排名结果时,你实际上改变了你的算法稍后将处理的数据。在这一点上,您应该围绕其设计模型存在固有的偏见。具体方法有很多。以下是如何让您的模型支持它已经看到的数据。

  对涵盖更多查询的特征(而不是仅涵盖一个查询的特征)进行更高的正则化。通过这种方式,模型将偏爱特定于一个或几个查询的特征,而不是泛化到所有查询的特征。这种方法有助于防止非常流行的查询结果出现在不相关的查询中。请注意,这与更传统的建议背道而驰:对具有更多唯一值的特征列进行更高的正则化。

  只有特征被允许具有正权重。这确保了任何好的特征都比“未知”特征更合适。

  不选择仅处理文档数据的功能。这是第一条规则的极端版本​​。例如,即使给定的应用程序是热门下载(无论查询如何),您也不希望在任何地方都显示它。这很容易做到,无需选择仅处理文档数据的功能。您不想到处展示特定流行应用程序的原因是用户可以找到他们需要的所有应用程序至关重要。例如,如果用户搜索“观鸟应用”,他/她可能会下载“愤怒的小鸟”,但这绝对不是他/她想要的应用。展示此类应用程序可能会提高下载率,但最终无法满足用户的需求。

  规则 36:避免带有位置特征的反馈循环。

  内容的位置会极大地影响用户与其交互的可能性。如果您将应用放在首位,您的应用会获得更高的点击率,从而让您认为用户更有可能点击该应用。处理此类问题的一种方法是添加位置特征,即关于网页中内容位置的特征。您可以使用位置特征训练模型,让模型学习(例如)为特征“1stposition”赋予更高的权重。因此,该模型为具有“1stposition=true”特征的样本的其他因素分配了较低的权重。然后,在应用时,您不会为任何实例提供位置特征,或为所有实例提供相同的默认特征,因为您在决定以什么顺序显示它们之前对候选实例进行评分。

  请注意,由于训练和测试之间的这种不对称性,在位置特征和模型的其余部分之间保持一定的分离是很重要的。理想的情况是模型是位置特征函数和其余特征函数的总和。例如,不要将位置特征与任何文档特征相结合。

  规则 37:衡量培训/应用偏差。

  一般来说,有很多情况会导致偏见。此外,您可以将其分为以下部分:

  机器学习阶段 3:缓慢增长、优化细化和复杂模型

  有迹象表明第二阶段即将结束。一是月度增速开始走弱。您将开始在指标之间进行权衡:在一些实验中,您会看到一些指标上升而另一些指标下降。事情变得有趣起来。随着增长变得越来越困难,机器学习系统必须变得更加复杂。注意:本节中的纯理论规则比前两节要多。我们已经看到很多团队对机器学习的第一阶段和第二阶段非常满意。但到了第三阶段,他们必须找到自己的方式。

  规则 38:如果目标不一致并成为问题,不要在新功能上浪费时间。

  当您的测量值稳定时,您的团队开始关注当前机器学习系统目标范围之外的问题。如前所述,如果现有算法目标没有涵盖产品目标,则需要修改算法目标或产品目标。例如,您可以针对点击、+1 或下载进行优化,但发布决策部分取决于人工评估者。

  规则 39:发布决策代表长期的产品目标。

  Alice 有一个减少预测安装次数的逻辑损失的想法。她添加了一个功能。减少了逻辑损耗。当她进行在线实验时,她发现安装率有所提高。然而,在发布评审会上,注意到日活跃用户数下降了 5%。结果,团队决定不发布该模型。Alice 很失望,但现在她意识到发布决定取决于多个条件,其中只有一些条件可以直接通过机器学习进行优化。

  事实上,现实世界并不是网络游戏的世界:没有“健康点”来决定产品的表现如何。团队必须使用他们采集的统计数据来尝试有效地预测系统未来的表现。他们需要关注参与度、每日活跃用户 (DAU)、30 天 DAU、收入和广告商投资回报率。这些仅在 A/B 测试中可衡量的指标代表了让用户满意、增加用户、让合作伙伴满意和货币化的长期目标,此外,您可以将它们视为发布质量和有用产品的代理,五年后,公司蒸蒸日上。

  只有当所有指标都变得更好(或至少没有变得更糟)时,才能轻松做出发布决定。如果团队可以在复杂的机器学习算法和简单的启发式算法之间进行选择,并且对于所有这些指标,简单的启发式算法提供了更好的结果,那么应该选择启发式算法。此外,所有可能的度量值都没有明确排名。具体来说,考虑以下两种情况:

  如果当前系统为A,则团队不太可能切换到B。如果当前系统为B,则团队不太可能切换到A。这似乎与理性行为背道而驰;但是,对变化指标的预测可能成功,也可能不成功,因此这两种变化都有很大的风险。每个指标都涵盖了团队关注的一些风险。

  此外,没有一个指标涵盖团队最关心的问题,“我的产品在五年内将走向何方”?

  另一方面,个人更倾向于选择可以直接优化的目标。大多数机器学习工具也支持这样的环境。在这样的环境下,快速创建新功能的工程师可以源源不断地发布。一种称为“多目标学习”的机器学习已经开始解决这个问题。例如,您可以提出约束满足问题,为每个指标设置下限,并优化一些指标的线性组合。即便如此,并非所有指标都可以轻松地作为机器学习目标:如果用户单击文档或安装应用程序,那是因为显示了内容。但是要弄清楚用户访问您的 网站 的原因要困难得多。如何预测整个 网站 未来的成功是一个 AI 完备的问题:

  规则 40:保持集成学习简单。

  采用原创特征并直接对内容进行排名的统一模型是最容易调试和理解的。然而,集成学习模型(结合其他模型分数的模型)可以取得更好的结果。为简单起见,每个模型应该是只接受来自其他模型的输入的集成学习模型,或者是接受多个特征的基础模型,但不能同时接受两者。如果在单独训练的模型之上还有其他模型,则将它们组合起来可能会导致不良行为。

  使用简单模型进行集成学习(仅将“基础”模型的输出用作输入)。此外,您需要对这些集成学习模型施加属性。例如,基础模型生成的分数增加不应导致集成学习模型的分数降低。此外,如果输入模型在语义上是可解释的(例如,校准的),这是理想的,因为这样基本模型的变化不会干扰集成学习模型。此外,强制要求如果基分类器的预测概率增加,则集成学习模型的预测概率不会降低。

  规则 41:在效果趋于稳定后,寻找与现有信号质量不同的新信息源并添加到其中,而不是优化现有信号。

  您添加了一些关于用户的人口统计信息和一些关于文档中单词的信息。您探索了模板并调整了正则化。但在几个季度发布中,关键指标的改进从未超过 1%。现在怎么办?

  是时候开始为不同的特征构建基础架构了,例如用户在过去一天、一周或一年中访问的文档的历史记录,或者其他属性的数据。您可以使用 Wikidata 条目或公司内部信息(例如,Google 的知识图)。利用深度学习。开始调整您对 ROI 的期望,并相应地工作。与任何工程项目一样,您必须权衡添加新功能的好处与增加复杂性的成本。

  规则 42:不要期望多样性、个性化或相关性与您认为的流行度密切相关。

  一组内容中的多样性可以具有多种含义,其中内容来源的多样性是最常见的。个性化意味着每个用户都能获得适合其个人需求的结果。相关性意味着特定查询的结果比任何其他查询更适合该查询。因此,所有三个属性都具有与规范不同的定义。

  但常态往往难以超越。

  请注意,如果您的系统正在衡量点击次数、访问时间、观看次数、+1、转发等,那么您正在衡量内容的受欢迎程度。团队有时会尝试学习具有多样性的个性化模型。为了实现个性化,他们添加了支持系统进行个性化(代表用户兴趣的部分特征)或多样化(指示相应文档是否具有与其他返回文档相同的特征,例如作者或内容的特征)的特征,以及然后发现这些特征的权重(或有时不同的信号)比预期的要低。

  这并不意味着多样性、个性化或相关性不重要。正如前面的规则所指出的,您可以进行后处理以增加多样性或相关性。如果您看到您的长期目标有所增加,您可以声明除了受欢迎程度之外,多样性/相关性也很有价值。然后,您可以继续使用后处理方法或根据多样性或相关性直接修改目标。

  规则 43:你的朋友在不同的产品上基本保持不变,但你的兴趣却不同。

  Google 的团队取得了很大进展,他们采用了一个模型来预测产品中连接的紧密程度,并使用该模型对其他产品进行准确的预测。你的朋友保持不变。另一方面,我看到几个团队在多个产品的个性化方面遇到了困难。是的,当时它似乎应该工作。但现在好像没有了。有时可行的是使用来自一个属性的原创数据来预测另一个属性的行为。另外,请注意,仅知道用户具有其他属性的历史记录也会有所帮助。例如,用户在两个产品上的活动可能表明问题本身。

  相关资源

  Google 内部和外部都有很多关于机器学习的文档。

  谢谢

  感谢 David Westbrook、Peter Brandt、Samuel Ieong、Chenyu Zhao、Li Wei、Michalis Potamias、Evan Rosen、Barry Rosenberg、Christine Robson、James Pine、Tal Shaked、Tushar Chandra、Mustafa Ispir、Jeremiah Harmsen、Konstantinos Katsiapis、Glen Anderson、 Dan Duckworth、Shishir Birmiwal、Gal Elidan、Su Lin Wu、Jaihui Liu、Fernando Pereira 和 Hrishikesh Aradhye 对本文档进行了各种更正、建议和有用的示例。另外,感谢 Kristen Lefevre、Suddha Basu 和 Chris Berg 对早期版本的帮助。任何错误、遗漏或(喘气!)不受欢迎的意见都是我的责任。

  附录

  本文档的多个地方都提到了几个 Google 产品。为了提供更多上下文,我将在下面简要描述一些最常见的示例。

  YouTube 概览

  YouTube 是一种流媒体视频服务。YouTube 的 Watch Next 和 YouTube Homepage 团队都使用机器学习模型对推荐视频进行排名。“看下一个”推荐在当前视频结束后观看的视频,首页向浏览首页的用户推荐视频。

  谷歌播放概述

  Google Play 有许多模型可以解决各种问题。机器学习用于 Play 搜索、Play 主页上的个性化推荐以及“用户还安装了以下应用”。

  Google+ 概览

  Google+ 在各种情况下使用机器学习技术,例如在对用户可见的帖子的“提要”中排名帖子时,在“趋势”(当前非常流行的帖子)中排名帖子时,当你认识的人时是排名,等等。

  原创地址:#human_analysis_of_the_system

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线