每个此类事件都伴随着互联网用户的兴趣激增。人们不仅想阅读发生的事情,而且还希望看图片。他们去寻找图片,期望在那里找到几小时前可能还不存在的新鲜,相关的图片。兴趣出乎意料地出现,并在几天之内降到几乎为零。
这种情况的特殊之处在于,传统的搜索引擎并非针对这种情况而设计的。此外,内容新鲜度的标准与良好搜索的其他重要属性相抵触:相关性,权威性等。不仅需要寻找新内容,而且还需要保持结果的平衡,需要特殊的技术。
我叫Denis Sakhnov,今天我将讨论一种为Yandex.Images提供新鲜内容的新方法。还有我的同事Dmitry Krivokon克里沃孔将分享有关指标和新鲜图像排名的详细信息。您将了解质量评估的旧方法和新方法。我们还将提醒您有关YT,Logbroker和RTMR的信息。
为了使图像搜索在查询的那部分中能很好地工作,对它的答案应包含新内容,您需要解决以下任务:
- 学习快速查找和下载新照片。
- 学习快速处理它们。
- 了解如何根据图片快速收集文档以进行搜索(随着故事的进行,这一点将变得更加清晰)。
- 制定搜索新鲜内容的质量标准。
- 了解如何根据质量要求对SERP中的内容进行排名和混合。
让我们从第一点开始。
1.获取图片
互联网上有很多站点,其中许多站点定期发布某些内容,包括图片。为了使人们能够在“图像”搜索中看到所有这些内容,机器人必须到达该站点并下载内容。这通常是搜索的工作方式:我们会相对较快地浏览我们知道的站点并获取新图片。但是,当涉及到内容现在突然变得相关时,该模型就会失败。由于Internet庞大,因此不可能“立即”下载世界上所有站点的HTML文档并快速消化所有内容。全世界至少没有一个人解决了这个问题。
有人可能会想到以这种方式解决问题的方法:跟踪请求的突发事件,首先仅处理那些以某种方式与请求匹配的源。但这在纸面上听起来不错。首先,要检查某物与某物的对应关系,您需要手头已有内容。其次,如果我们在请求高峰后开始做某事,那么我们已经来晚了。听起来很疯狂,您需要先找到新鲜的内容。但是,您如何预测意外情况?
正确答案是不可能的。我们对火山喷发的时间一无所知。但我们知道通常会在哪些网站上显示新鲜有用的内容。我们从这一侧出发。我们开始使用机器学习的公式,该公式根据内容的质量和相关性对抓取程序进行优先级排序。让SEO原谅我们:我们不会在这里详细介绍。机器人的任务是尽快将HTML文档发送给我们。只有在那之后,我们才能查看它们的填充并找到新文本,图片链接等。
图像链接很好,但到目前为止对搜索而言并不是特别有用。首先,您需要将它们下载给我们。但是同样,有太多新的图像链接无法立即下载。而且这里的问题不仅在于我们的资源:网站所有者也不希望Yandex意外地打扰他们。因此,我们使用机器学习来确定图像下载的优先级。这些因素是不同的,其中有很多,我们将不解释所有内容,但是例如,我们可以说图片在不同资源上出现的频率也会影响优先级。
现在,我们有了图像链接的列表。然后我们将它们下载到我们自己。我们使用我们自己的Logbroker服务。这东西充当运输巴士,成功地幸免于巨量的交通。几年前,我们的同事Alexey Ozeritsky已经在Habré上谈论了这项技术。
这是逻辑上完成第一阶段的地方。我们已经确定了来源并成功提取了一些图片。仅剩一点点:学习如何与他们合作。
2.过程画面
图片本身当然很有用,但仍需要准备。它的
工作方式如下:1.在无状态计算服务RTHub中,准备了不同大小的版本。这是搜索所必需的,可以方便地在结果中显示缩略图,并在单击时提供源站点的原始内容。
2.计算神经网络特征。在具有GPU的机器上离线(即提前而不是在排名时)启动神经网络,其结果将是图像特征向量。并计算出有用的分类器的值:美感,美学,不适当的内容等。我们仍然需要所有这些。
3.然后使用从图片中计算出的信息,将副本粘贴在一起。这很重要:用户不太可能会对以相同图片为准的搜索结果感到满意。同时,它们可能略有不同:在某些地方切掉了边缘,在某些地方添加了水印,等等。我们分两个阶段进行复制品的粘贴。首先,使用神经网络向量对近距离图片进行粗略的聚类。在这种情况下,群集中的图片的含义甚至可能不一致,但这使我们可以并行处理它们。然后,在每个群集内,我们通过在图片中搜索锚点来粘合重复项。请注意:神经网络非常适合寻找相似的图像,但是较少的“时尚”工具对于查找完全重复的图像更为有效;神经网络可能太聪明了,看到“一样就不同了”。
因此,到本阶段结束时,我们已经制作了具有不同版本的现成图片,通过粘贴重复副本,使用预先计算的神经网络和其他功能进行传递。提交排名?不,还为时过早。
3.我们将图片收集到文档中
文档是我们参与排名的实体的名称。从用户的角度来看,它可能看起来像是指向页面的链接(搜索站点),图片(搜索图像),视频(搜索视频),咖啡壶(搜索商品)或其他东西。但是,在搜索结果中每个单元的内部,都有大量的异构信息。在我们的案例中-不仅是图片本身,其神经网络和其他功能,还包括有关图片放置页面的信息,在这些页面上描述图片的文字,用户行为的统计信息(例如,点击图片)。总计-这是文档。并且在直接进行搜索之前,必须先收集文档。并且,在此不适合形成图像的常规搜索基础的机制。
主要挑战在于,文档的不同部分在不同的时间和不同的位置生成。同一Logbroker可以下载有关页面和文本的信息,但不能同时下载图片和信息。实时用户行为数据通过RTMR日志处理系统获得。所有这些都独立于图片存储。要收集文档,您需要始终绕过不同的数据源。
我们使用MapReduce构成图像的主要搜索基础。这是一种处理大量数据的有效,可靠的方法。但是对于新鲜度的任务,这是不合适的:我们需要非常快速地从存储中接收形成每个文档所需的所有数据,这与MapReduce不对应。因此,在新鲜度循环中,我们使用不同的方法:异构信息进入RTRobot流数据处理系统,该系统使用KV存储来同步不同的数据处理流程和容错能力。
在新鲜度循环中,我们使用基于YT系统的动态表作为KV存储... 实际上,这是我们可能需要的所有内容的存储库。具有非常快速的访问。正是在这里,我们立即要求提供所有有用的内容,这些内容可用于搜索图片,收集文档,并使用LogBroker将其传输到搜索服务器,然后将准备好的数据从中添加到搜索数据库。
多亏了一个独立的电路来处理新鲜度,该电路涵盖了所有阶段(从在网络上搜索图像到准备文档),因此我们能够每秒处理数百个新图像,并将它们平均在出现后的几分钟内进行搜索。
但是仅仅带图片进行搜索是不够的。您需要能够在有用的搜索结果中显示它们。在这里,我们继续下一步-确定实用程序。我请德米特里克里沃孔...
4.我们衡量质量
优化搜索质量的一般方法始于选择一个指标。在Yandex图像搜索中,指标的类型大致如下:
其中
n是我们评估的问题的第一张图像(文档)的数量;
p_i-搜索结果中的位置权重(位置越高,权重越大);
r_i-相关性(图片与请求的匹配程度);
w_i…m_i-响应质量的其他组成部分(新鲜,美观,大小...);
f(...)是汇总这些组件的模型。
简而言之,搜索结果中有用的图片越多,该表达式的数量就越高。
关于f(...)模型的几句话。她从两两对比照片中学习到。一个人看到一个请求和两张图片,然后选择最佳的一张。如果重复多次,该模型将学会预测哪个质量要素对于特定请求最重要。
例如,如果要求提供黑洞的新鲜照片,则新鲜度分量具有最高系数。如果是关于热带岛屿,那就是美丽,因为很少有人在寻找丑陋岛屿的业余照片,因此他们通常需要精美的照片。在这种情况下,图片的视觉效果越好,一个人继续使用该服务的可能性就越大。但是,我们不要为此而分心。
因此,排名算法的任务是优化该指标。但是您无法估计每天数以百万计的请求:这是一个巨大的负担,首先是toloker。因此,为了进行质量控制,我们在固定的时间段内分配了一个随机样本(购物篮)。
似乎存在一个度量标准,其中已经考虑了新鲜度组件,并且选择了一些质量控制请求。您可以关闭此主题并转到排名。但不是。
如果是新照片,则会出现问题。在评估算法时,我们必须能够理解,当在搜索中输入请求时,我们会对用户的请求做出很好的响应。去年的新要求现在可能不是这样。还有别的东西会是一个很好的答案。因此,固定的一揽子请求(例如,每年)是不合适的。
作为解决此问题的第一种方法,我们尝试完全不用篮子。按照一定的逻辑,我们开始将新鲜的图像混合到输出中,然后研究用户行为。如果它变得更好(例如,人们更积极地点击结果),则混合很有用。但是这种方法有一个缺陷:质量评估直接取决于我们算法的质量。例如,如果对于某些请求,我们的算法失败并且不混合内容,则将没有任何可比较的内容,这意味着我们将不了解那里是否需要新鲜的内容。因此,我们了解到,需要一个独立的评估系统来显示我们算法的当前质量,而不依赖于它们。
我们的第二种方法如下。是的,由于新请求的可变性,我们无法使用固定的购物车。但是,我们可以将不需要新鲜度的篮子部分作为底部,并每天在其中添加新鲜部分。为此,我们创建了一种算法,该算法在用户请求流中选择最有可能需要新图片响应的那些请求。此类查询通常具有意外的详细信息。当然,我们使用手动验证来滤除噪音和碎屑并适应特殊情况。例如,查询可能仅与特定国家相关。在这种情况下,我们不再依靠经纪人,而是依靠评估员:此类工作需要特殊的经验和知识。
要求[黑洞照片]
这样,我们不仅将这样的新请求添加到购物车中以进行质量评估,而且还可以在找到请求时保存搜索结果。这样,我们不仅可以评估响应的主要质量,还可以评估搜索对事件的反应速度。
因此,让我们总结一下初步结果。为了更好地应对新的询问,我们不仅确保了快速交付给搜索和图像处理的能力,而且还重新发明了衡量质量的方法。有待弄清楚我们正在测量的质量。
5.排名
让我提醒您,上面我们描述了从第一种方法到评估图像搜索质量到第二种方法的过渡:从结果混合到每天有新要求的接受篮补充。范例已经改变-算法本身需要改变。从外部向读者解释它并不容易,但是我会尝试的。如果您有任何疑问,请随时在评论中提问。
以前,这些方法是通过与我所讨论的解决方案类似的方式实现的我们的同事Alexey Shagraev。有一个主要的文档来源(主要搜索索引)。此外,还有其他新文档来源,因此进入搜索的速度至关重要。无法根据单一逻辑对来自不同来源的文档进行排名,因此我们使用了一个相当平凡的方案来将来自新来源的文档混合到主要问题中。接下来,我们比较了不带其他文件和带其他文件的主要搜索结果的指标。
现在情况有所不同。是的,来源在物理上仍然有所不同,但是就指标而言,新的图片来源无关紧要。如果普通的机器人设法到达它,它也可以从主要来源获得。在这种情况下,度量标准将与通过不同来源获取相同图片时的情况相同。新方法具有查询和结果的有意义的新鲜度,并且源体系结构不再那么重要。结果,主要文档和最新文档都使用相同的模型进行排名,这使我们可以使用比以前更简单的逻辑将新鲜的图像混合到搜索结果中:通过在单个模型的输出处按值排序。当然,这也影响了质量。
继续。要对事物进行排名,您需要一个将在其上训练模型的数据集。对于新鲜图像-具有新鲜内容示例的数据集。我们已经有一个基本的数据集,我们需要学习如何向其中添加新鲜度示例。在这里,我们想起了已经用于质量控制的接收篮。新请求每天都在变化,这意味着第二天我们可以接收昨天的新请求并将其添加到数据集中进行训练。同时,我们不会冒重新培训的风险,因为同一数据不会同时用于培训和控制。
由于过渡到新方案,新鲜图像搜索结果的质量已大大提高。如果早期的培训主要基于对新请求的用户统计信息,并且由于这个原因,我们已经收到了当前排名算法的反馈,那么现在,培训的基础是客观地收集请求篮,这完全取决于用户请求的流程。这使我们能够学习如何显示新的结果,即使以前没有。此外,由于合并了主要轮廓线和新鲜轮廓线的等级管线,后者的发展速度显着加快(一个来源的所有改进现在都自动到达了第二个来源)。
不可能在一篇文章中详细介绍Yandex图像搜索团队已完成的所有工作。我们希望我们成功地解释了寻找新鲜图片的功能。以及为什么在搜索的所有阶段都需要进行更改,以便用户可以快速找到Pluto的新照片或任何其他相关信息。