8

我是一名学生,正在进行一项研究以增强搜索引擎的现有算法。

我想知道如何评估我已经改进的搜索引擎,以量化算法改进了多少。

我应该如何比较新旧算法?

谢谢

4

10 回答 10

12

这通常是通过创建一个测试套件来完成的,然后评估搜索响应对这些问题的回答程度。在某些情况下,响应应该是明确的(如果您slashdot在搜索引擎中键入您希望获得slashdot.org的热门),因此您可以将这些视为具有“正确”答案的一类硬查询。

大多数其他查询本质上是主观的。为了最大限度地减少偏见,您应该让多个用户尝试您的搜索引擎并对结果进行评分以与原始结果进行比较。下面是一个做类似事情的计算机科学论文的例子:

http://www.cs.uic.edu/~liub/searchEval/SearchEngineEvaluation.htm

关于算法的具体比较,虽然很明显,但您测量的内容取决于您有兴趣了解的内容。例如,您可以比较计算效率、内存使用情况、爬取开销或返回结果的时间。如果您试图产生非常具体的行为,例如针对某些参数运行专家搜索(例如文献搜索),那么您需要明确地对此进行测试。

相关性的启发式也是一个有用的检查。例如,当有人使用可能与“编程相关”的搜索词时,您是否倾向于从 获得更多结果stackoverflow.com?如果您这样做,您的搜索结果会更好吗?如果您要为特定站点或域提供一组信任权重(例如,对技术结果进行评级.edu.ac.uk域更可信),那么您需要测试这些权重的有效性。

于 2009-10-01T14:56:56.133 回答
10

首先,让我先说,感谢您尝试将传统研究方法应用于搜索引擎结果。许多 SEO 在您之前已经这样做了,并且通常将其保留给自己,因为分享“惊人的发现”通常意味着您无法再利用或占据上风,这表示我将尽我所能分享一些建议和要寻找的东西.

  1. 确定您要改进算法的哪一部分?

不同的搜索执行不同的算法。

广泛搜索

例如,在广义搜索中,引擎往往会返回各种结果。这些结果的共同部分包括

  1. 新闻提要
  2. 产品
  3. 图片
  4. 博客文章
  5. 本地结果(这基于地理 IP 查找)。

这些结果类型中的哪一种会因词而异。

示例: Cats返回猫的图像,新闻,Shoes返回本地购买的鞋子。(这是基于我 10 月 6 日在芝加哥的 IP)

广义上返回结果的目标是为每个人提供一点点的一切,让每个人都开心。

区域修饰符

通常,只要将区域术语附加到搜索中,它就会极大地修改结果。如果您搜索“Chicago web design”,因为附加了 Chicago 一词,结果将以前 10 个区域结果开头。(这些是地图右侧的一条线),超过 10 个列表后将显示一般的“结果时尚”。

“前十名本地”中的结果往往与下面的自然列表中的结果大不相同。这是因为本地结果(来自谷歌地图)依赖完全不同的数据进行排名。

示例:在您的网站上使用区号为芝加哥的电话号码将有助于本地搜索结果......但不会影响一般搜索结果。与地址、黄皮书列表等相同。

结果速度

目前(截至 2009 年 6 月 10 日)谷歌正在 beta 测试“咖啡因”这个引擎构建的主要亮点是它在几乎一半的时间内返回结果。尽管您现在可能不认为 Google 很慢……当每小时发生数百万次搜索时,加速算法很重要。

减少垃圾邮件列表

我们都发现经历过充满垃圾邮件的搜索。Google Caffeine 的新版本http://www2.sandbox.google.com/就是一个很好的例子。在过去的 10+ 中,最大的在线战斗之一发生在搜索引擎优化器和搜索引擎之间。游戏谷歌(和其他引擎)利润丰厚,而谷歌大部分时间都在与之抗争。

一个很好的例子是谷歌咖啡因的新版本。到目前为止,我的研究以及 SEO 领域的其他一些人发现这是 5 年来第一个比以前的构建更重视 Onsite 元素(例如关键字、内部站点链接等)的构建。在此之前,每一次“发布”似乎都越来越偏爱入站链接……这是第一次向“内容”退后一步。

测试算法的方法。

  1. 比较同一引擎的两个版本。这目前可以通过比较咖啡因(参见上面的链接或谷歌、谷歌咖啡因)和当前的谷歌来实现。

  2. 比较不同地区的本地结果。尝试查找诸如网页设计之类的搜索词,它们会返回没有本地关键字修饰符的本地结果。然后,使用代理(通过 google 找到)从不同位置进行搜索。您需要确保您知道代理位置(在 google 上找到一个可以告诉您 IP 地址地理 IP 邮政编码或城市的网站)。然后你可以看到不同区域如何返回不同的结果。

警告...不要选择锁匠这个词...并且要警惕在返回结果时有大量垃圾邮件列表的任何条款。Google 本地很容易发送垃圾邮件,尤其是在竞争激烈的市场中。

  1. 按照先前答案中的说明进行操作,比较用户需要多少“点击返回”才能找到结果。您应该知道,目前,没有主要引擎使用“跳出率”作为网站准确性的指标。这可能是因为它很容易让您的结果看起来有 4-8% 范围内的跳出率,而实际上没有那么低……换句话说,它很容易玩。

  2. 跟踪用户对给定术语平均使用多少搜索变体,以便找到所需的结果。这是一个很好的指标,可以很好地表明引擎对查询类型的智能猜测(如本答案中提到的那样)。

**免责声明。这些观点基于我截至 2009 年 10 月 6 日的行业经验。关于 SEO 和引擎的一件事是它们每天都在变化。谷歌明天可能会发布咖啡因,这会改变很多……也就是说,这就是搜索引擎优化研究的乐趣!

干杯

于 2009-10-07T23:47:46.570 回答
2

为了评估某件事,你必须定义你对它的期望。这将有助于定义如何测量它。
然后,您将能够衡量改进。

关于搜索引擎,我想您可能能够衡量其查找事物的能力,以及返回相关内容的准确性。

这是一个有趣的挑战。

于 2009-10-01T14:21:44.600 回答
2

如果这是您的目标,我认为您不会找到最终的数学解决方案。为了评价给定的算法,您需要必须达到的标准和目标。

  • 你要比较的基准是什么?
  • 您将什么归类为“改进”?
  • 你认为什么是“成功的搜索”?
  • 你的测试组有多大?
  • 你的测试是什么?

例如,如果您的目标是改进页面排名的过程,那么请决定您是在判断算法的效率还是准确性。判断效率意味着您为代码安排一致的大数据集并记录结果。然后,您将使用您的算法来改进时间。

如果您的目标是提高准确性,那么您需要定义什么是“不准确”。如果您搜索“Cup”,您只能说提供的第一个站点是“最佳”,前提是您自己可以准确定义“Cup”的最佳答案是什么。

我对你的建议是缩小你的实验范围。定义您认为需要改进的搜索引擎的一两个品质并努力改进它们。

于 2009-10-05T21:09:10.107 回答
2

信息科学家通常使用精确度召回率作为信息检索系统(如搜索引擎)的两个相互竞争的质量衡量标准。

因此,您可以衡量您的搜索引擎相对于 Google 的性能,例如,计算前 10 名中相关结果的数量(称为精确度)以及您认为应该在前 10 名中的该查询的重要页面数量但不是(称之为召回)。

您仍然需要在某些查询集上手动比较每个搜索引擎的结果,但至少您将有一个指标来评估它们。这两者的平衡也很重要:否则,您可以通过不返回任何结果来轻松获得完美的精确度,或者通过返回网络上的每个页面作为结果来完美召回。

关于精度和召回率的维基百科文章非常好(并定义了同时考虑两者的F 度量)。

于 2009-10-08T19:30:55.710 回答
1

在评论中你说“我听说过一种方法来衡量搜索引擎的质量,通过计算用户在找到他想要的链接之前需要点击多少次后退按钮,但我可以使用这种技术,因为你需要用户测试您的搜索引擎,这本身就是一件令人头疼的事情”。好吧,如果您将您的引擎免费放在网络上几天并做一些广告,您可能会得到至少几十次尝试。随机向这些用户提供旧版本或新版本,并衡量这些点击量。

其他可能性:假设谷歌在定义上是完美的,并将你的答案与它的某些查询进行比较。(也许是你的前十个链接到他们在谷歌的同行的距离总和,例如:如果你的第二个链接是谷歌的第十二个链接,那就是 10 距离)。这是一个巨大的假设,但更容易实现。

于 2009-10-07T21:52:02.297 回答
0

您必须清楚地识别出积极和消极的品质,例如一个人得到他们正在寻求的答案的速度,或者他们在途中得到多少“错误”的答案。如果正确答案是 #5 但返回结果的速度快了 20 倍,这是否是一种改进?对于每个应用程序,类似的事情会有所不同。在企业知识库搜索中,正确答案可能更重要,但电话支持应用程序可能需要快速答案。

没有参数,任何测试都不能说是胜利。

于 2009-10-01T14:42:01.307 回答
0

接受这样一个事实,即搜索结果的质量最终是主观的。您应该有多种评分算法进行比较:旧的、新的和一些控制组(例如,按 URI 长度或页面大小或一些类似的故意破坏的概念进行评分)。现在选择一堆查询你的算法,比如说一百个左右。假设您最终总共有 4 个算法。制作一个 4x5 表,显示每个算法中查询的前 5 个结果。(你可以选择前十名,但前五名更为重要。)一定要随机化出现在每一列中的算法。然后在这个东西前面放一个人,让他们选择他们最喜欢的 4 个结果集中的哪一个。在整个查询集中重复。尽可能多地重复。

于 2009-10-11T18:26:57.213 回答
0

http://www.bingandgoogle.com/

创建一个这样的应用程序来比较和提取数据。然后用你需要寻找的 50 种不同的东西进行测试,然后与你想要的结果进行比较。

于 2009-10-11T22:55:00.547 回答
0

我不得不专业地测试搜索引擎。这就是我所做的。

搜索包括模糊逻辑。用户将在网页中键入“Kari Trigger”,搜索引擎将检索诸如“Gary Trager”、“Trager, C”、“Corey Trager”等条目,每个条目的分数从 0->100,这样我可以从最有可能到最不可能对它们进行排名。

首先,我重新设计了代码,以便它可以从网页中删除,以批处理模式使用搜索查询的大文件作为输入。对于输入文件中的每一行,批处理模式会写出顶部搜索结果及其得分。我从我们的生产系统中收集了数千个实际搜索查询,并通过批处理设置运行它们以建立基线。

从那时起,每次我修改搜索逻辑时,我都会再次运行批处理,然后将新结果与基线进行比较。我还编写了一些工具,以便更轻松地查看差异中有趣的部分。例如,我并不关心旧逻辑是否将“Corey Trager”返回为 82,而新逻辑是否将其返回为 83,因此我的工具会将它们过滤掉。

我无法通过手工制作测试用例来完成这么多的工作。我只是没有想象力和洞察力来创建好的测试数据。现实世界的数据要丰富得多。

所以,回顾一下:

1) 创建一种机制,让您区分运行新逻辑的结果与先前逻辑的结果。2) 使用大量真实数据进行测试。
3) 创建工具来帮助您处理差异、滤除噪声、增强信号。

于 2009-10-12T20:11:28.380 回答