有时,人们会转向Yandex来查找名字突然冒出来的电影。 它们描述了情节,令人难忘的场景和生动的细节:例如,[男人选择红色或蓝色药丸的电影名称是什么]。 我们决定研究被遗忘电影的描述,并找出电影中人们最想起的东西。
今天,我们将不仅共享与我们
研究的链接,还将简要讨论Yandex的语义搜索如何演变。 您将学到什至根本无法提出确切要求的技术,哪些技术可以帮助搜索找到答案。
此外,我们还添加了带有真实人物要求示例的谜语滑块-就像搜索引擎一样,尝试猜测答案。
所有搜索引擎均以单词搜索开始。 Yandex从一开始就已经能够考虑俄语的形态,但是从网络页面上的查询中搜索单词仍然是相同的。 我们保留了每个单词的所有已知页面的列表。 如果请求中包含一个短语,那么就可以跨单词列表-这就是答案。 在网站数量很少的那些日子里,效果很好,而且排名问题还不是那么尖锐。
Runet发展了,站点变得越来越多。 单词交叉因子增加了两个因子。 一方面,用户自己帮助了我们。 我们开始考虑选择哪些站点以及选择哪些查询。 没有完全匹配的字词,但是网站可以解决人为问题吗? 这是一个有用的信号。 另一方面,有助于评估页面重要性的站点之间的链接可以解救。
三个因素很少。 特别是当他们经常由非常有才华的搜索引擎优化人员尝试时。 但是,手工消化比较困难。 从这里开始了机器学习的时代。 在2009年,我们引入了基于梯度提升的Matrixnet(此技术后来成为更高级的开源库
CatBoost的基础 )。
从那时起,出现了越来越多的因素,因为我们不再需要手动寻找它们之间的关系。 一辆汽车为我们做到了。
对于搜索中所有后续更改的故事,不仅帖子,而且书籍也足够,因此,我们将尝试着眼于最重要的内容。
排名不仅是长期比较查询词和页面的比较。 两个例子。
早在2014年,我们就引入了具有特征查询功能的文档注释技术。 假设过去有一个请求(来自巴西的有关肉王的系列),对此已经知道了一个很好的答案。 然后另一个用户输入一个查询(巴西系列中有一个肉王和一个牛奶王),机器还不知道该问题的答案。 但是这些查询有很多常用词。 这表明在第一个请求上找到的页面可能与第二个相关。
另一个例子。 让我们查询一下[有肉王和奶王的巴西系列]和[一系列致命的遗产]。 在它们的总数中,只有一个单词-“系列”,这对于请求的显式匹配是不够的。 在这种情况下,我们开始考虑搜索历史。 如果在发布中两个不同的请求都在同一站点上,那么我们可以假定这些请求是可互换的。 这很有用,因为现在我们将使用两个查询的文本来搜索以找到更多有用的页面。 但这仅适用于已经至少有一些统计信息的重复请求。 如何处理新请求?
缺乏统计信息可以通过内容分析来弥补。 在分析同类数据(文本,语音,图像)时,神经网络表现出了最佳的表现。 2016年,我们首先向Habr社区介绍
了Palekh技术 ,该
技术成为在Search中广泛使用神经网络的起点。
我们开始训练神经网络,以比较请求文本和页面标题的语义(语义)接近度。 两个文本在多维空间中以矢量的形式表示,因此它们之间夹角的余弦很好地预测了人选择页面的可能性,因此也可以预测语义。 这样,即使在没有单词交集的文本中,您也可以评估其含义的接近程度。
同样,我们开始比较查询文本,以识别它们之间的链接。 一个来自搜索引擎引擎的真实例子:对于一个查询[关于甲基苯丙胺的煮沸方式的美国系列]的查询,是神经网络发现的词组[含义不佳]和[破坏不佳]含义相似。
请求和标头已经很好,但是我们没有放弃在页面全文中使用神经网络的希望。 此外,当我们收到用户请求时,便开始在数百万个索引页面中选择最佳页面,但在Palekh中,我们仅在排名靠前(L3)的最新阶段才使用神经网络模型-约有150个最佳文档。 这可能会导致丢失正确答案。

原因是可以预测的-资源有限且对响应速度的要求很高。 计算的严格限制与一个简单的事实有关:您不能强迫用户等待。 但是后来我们想出了一些办法。
在2017年,我们提出了Korolev搜索更新,其中不仅包括扩展使用神经网络,还包括在架构方面进行的认真工作以节省资源。 更详细地讲,我们已经在Habré上的另一篇文章中介绍了层图和其他细节,但现在我们将提醒大家。
您可以预先计算该矢量并将其保存在搜索数据库中,而不用获取文档标题并在查询执行期间计算其语义矢量。 换句话说,我们可以提前完成大部分工作。 当然,同时,我们需要更多的空间来存储向量,但这节省了我们的处理器时间。 但这还不是全部。
我们建立了一个额外的索引。 它基于以下假设:如果您为每个单词或短语获取了足够大的最相关文档的列表,以查询多个单词,则其中将有与所有单词同时相关的文档。 实际上,这意味着这一点。 对于所有单词和常用单词对,将形成一个附加索引,其中包含页面列表及其与查询的初步相关性。 也就是说,我们将部分工作从阶段L0转移到索引阶段,然后再次保存。
结果,架构的变化和负载的重新分配使我们不仅可以在L3阶段使用神经网络,而且可以在L2和L1阶段使用神经网络。 而且,预先形成矢量的能力以及对性能的要求不那么严格,使我们不仅可以使用页面标题,还可以使用其文本。
更多就是更多。 随着时间的流逝,我们在排名的最早阶段就开始使用神经网络。 我们教神经网络识别单词顺序及其相对位置的隐式模式。 甚至揭示不同语言文字的语义相似性。 这些领域中的每一个都被吸引到单独的文章中,我们将在不久的将来尝试与他们一起返回。
今天,我们再次回顾了搜索引擎如何在模糊的查询和缺乏信息的情况下学会寻找答案。 通过描述来搜索电影不仅是此类要求的特例,而且是
研究的重要课题。 从中您将学到:电影中人们最想起的东西,与不同国家的不同流派和电影摄影作品相关联,哪些情节动作给人留下了特别的印象。