Kroomsa搜索引擎的详细介绍

简介

在你的网站上实施的搜索算法极大地影响了访客的参与。一个合适的搜索算法的实施可以大大减少对标准搜索引擎的依赖,如谷歌的每一个查询,从而增加参与度。传统的方法是看你查询中的术语或短语,根据句法匹配来寻找相关内容。由于你可以在多种语境中使用一个句子或一个词,所以单靠这种方法是无效的,其结果往往是一击即中或一击即失。在VWO,作为一个有趣的辅助项目,我们开发了一种算法,使用语义匹配来寻找与你的查询相关的内容。我们将这种方法作为一个现代搜索引擎Kroomsa来实施。一个为好奇心而设的搜索引擎。Kroomsa通过让用户在会议期间接触到相关而有趣的内容来吸引他们。下面是Kroomsa的运行情况

目前的工作

像谷歌这样的搜索引擎巨头使用的算法会考虑许多因素,包括你的查询词、相关性和页面的可用性、来源的专业性、以及你的位置和其他设置。这些特征是动态加权的,所应用的权重根据你查询的性质而变化。这些算法通过现场实验和与外部搜索质量评估员的协调得到了严格的评估。 我们提出的方法不像该领域以前的工作那样复杂或细致,但它改进了仅仅依靠句法匹配的传统搜索算法。我们使用一个深度学习模型来理解查询的意图和背景,以便将其与适当的内容相匹配。它使我们能够将用户查询映射到甚至不包含确切短语的文件。例如,查询 "工作桌 "可以与 "学习桌 "的相关内容相匹配。

动机

Kroomsa作为一个产品,与VWO目前提供的产品并不一致。它从未打算以目前的形式成为最终产品,但却是测试其核心算法--相似性搜索的一个很好的途径。我们结合文献中的各种现有技术,开发了这种算法,以确定与查询相关的信息。我们围绕它建立了一个现代搜索引擎的模型,以便从可能感兴趣的客户那里获得反馈。我们的目标是将搜索算法的成熟版本打包成一个附加组件,让我们的客户可以在他们的网站上部署。

概述

Kroomsa以相似性搜索为核心,向用户提供相关的但又耐人寻味的信息。任何机器学习算法的性能都取决于数据的质量。因此,在详细介绍算法之前,让我们探讨一下我们为Kroomsa收集的数据集。

数据集

Kroomsa的存在是为了用你可能想知道的相关信息回答你的问题。要做到这一点,我们需要一个有真实问题和适当答案的数据源。我们为此选择了Reddit。 自QnA成立以来,我们总共搜刮了7个QnA子版块,通过启发式方法,我们确保所选的问题是有效的,其答案是相关的。

预处理

在开发一个实用的机器学习方法时,预处理是必不可少的。它有助于确保不相关的数据点被过滤掉。为了决定一个QnA对的质量,我们采用了以下启发式方法:

  1. 发布的问题应该有足够的支持率。
  2. 内容应该是英文的。
  3. 内容不应违反任何准则。
  4. 顶级评论应该有足够的支持率,以便被选为相应的答案。
  5. 该帖子应该在Reddit上公开访问,并且没有被任何相关方删除。

矢量化

传统的搜索引擎使用结构化的表格,将内容映射到一个符号表示。这些符号表示远不如从机器学习方法(如word2vec)中获得的神经描述符,而且不灵活。 我们决定使用Tensorflow中的通用句子编码器(USE)来创建帖子的神经表示,因为它们不能按原样使用。USE允许对短语进行大于长度的编码,使其成为相应的嵌入。这些嵌入捕捉了输入短语的意图,从而使它们成为代表自然语言的强大工具。

相似性搜索:克鲁姆萨之心

相似性搜索指的是一类通常搜索对象空间的算法,其中的比较器是对之间的相似性。但是,要大规模地做到这一点是一项具有挑战性的任务。由于搜索引擎必须快速找到相关的内容和用户发布的查询的答案,使用劣质的实现方式会导致用户的体验变差。 我们决定使用Facebook开发的名为FAISS的库。它在十亿规模的数据集上拥有高达8.5倍的性能提升,是之前最先进的方法。FAISS还提供了最先进的GPU实现的搜索算法,与基于CPU的方法相比,提供了显著的速度和改善了用户体验。 Kroomsa使用了一个用FAISS创建的512维平面索引。该索引使用欧氏距离来衡量不同帖子的向量表示之间的相似性。在使用USE对每个查询进行编码后,基于欧氏距离的相似性搜索将从数据库中获取20个最相关的QnA对。对应于最相似的QnA对的答案是指定的答案。而其他几对则被显示为耐人寻味的内容,供用户探索。

表情符号:一个有趣的补充

为了使我们的文本问题和答案生动化,我们决定给它们附加相关的情感。驱动Kroomsa的核心逻辑也有助于发现相关的表情符号。 我们策划了一个数据集,将表情符号映射到最能描述其传达的情绪的相关标签上。然后使用distilbert-base-nli-stsb-mean-tokens模型将这些标签转换为其神经表征。我们执行了一个相似性搜索,为我们数据库中的每个QnA对找到最相关的表情符号。Kroomsa将这些表情符号与每个帖子一起显示,以提高用户参与度。

评估算法

评估搜索引擎的结果并不是一项微不足道的任务。像谷歌这样的巨头使用在线实验和搜索质量评估员来评估其搜索算法的质量。由于其资源密集的性质,我们通过收集的反馈来评估我们的方法。"计划使用Kroomsa而不是Youtube,进入一个兔子洞,接触新的想法"。一位用户写道,作为反馈,肯定了搜索算法的质量。另一位用户补充说,由于没有任何SEO,Kroomsa显示的结果令人耳目一新。虽然反馈大多是积极的,但许多用户指出,缺乏信息来源是影响他们体验的明显缺陷。

让我们讨论一下性能方面和硬件要求,以获得令人满意的实施。为了测试Kroomsa的性能,我们使用了Siege,一个允许你模拟用户访问网站的基准测试工具。50个合成用户同时在Kroomsa上发布请求,进行负载测试。

我们很快就发现了我们的方法有几个问题。

  • 平均响应时间慢
  • 记录的最坏情况下的响应时间是5.31秒。

响应时间慢和负载下性能差的原因是搜索的详尽性。我们还对整个过程中的不同环节进行了计时,以提供一个整体的观点,即哪个阶段需要多少时间。

  • 嵌入。使用USE将查询转换为矢量表示的时间。
  • Faiss。搜索索引的时间
  • Mongo。映射和检索数据库中的搜索结果的时间。

注:每个时间的测量单位是秒

使用非穷举算法意味着以速度换取准确性。所以我们决定改用基于GPU的穷举搜索的实现。它成倍地提高了系统的性能,而不牺牲准确性。 使用最便宜的GPU,使我们的服务器成本增加到原来的2.61倍,我们在处理时间上获得了10倍的加速。基于GPU的实现在2.7秒内处理了100个请求,而CPU的实现为27.2秒。我们还测试了异步批处理,即把并发的请求进行批处理,并作为单个请求一起发送给系统。它能够在0.12秒内处理100个请求,这意味着处理时间提高了225倍。 使用GPU可以在不牺牲精度的情况下提高10倍速度。仅仅这一变化就大大改善了引擎的响应速度。

结论:开源的Kroomsa

在开发Kroomsa的过程中,我们在每一步都遇到了多个路障,需要严格的研究和迅速的实施来解决。处理缩放、算法精度和效率等问题,使我们接触到了该领域最先进的方法。我们在有限的时间内收集了来自用户的宝贵反馈。这让我们对这种方法的潜力充满信心。由于与我们的产品堆栈不一致,我们相信我们的社区在这一点上可以比我们更好地利用它,因此我们决定在这里将整个项目开源。

分类:
阅读
标签: