【问题标题】:Azure Search - unexpected ranking in results - how to work around TF-IDF?Azure 搜索 - 结果中的意外排名 - 如何解决 TF-IDF?
【发布时间】:2017-08-03 08:52:25
【问题描述】:

我了解 Azure 搜索使用 TF-IDF 算法进行排名和评分。不幸的是,这给我们带来了返回结果的问题,到目前为止,自定义评分配置文件的调整对我们没有帮助。

这是一个问题的例子:

为简单起见,假设我们的搜索文档只有两个字段 - IndividualName 和 EntityName。由于我们的源数据点的配置方式,许多我们的记录/文档(不是全部)在这两个字段中有重复数据。这对于我们的架构设置方式来说是不可避免的。

现在假设我们对 John Anderson 进行搜索。这是查询字符串:

searchMode=Any&search=+(%22John Anderson%22~3)&searchFields=IndividualName,EntityName&queryType=Full&$top=50&$count=true

假设我们在结果中有两个文档 - 一个在 IndividualName 和 EntityName 字段中有“Richard John Anderson”,第二个结果有 John Anderson,但仅在 IndividualName 字段中。 EntityName 字段为空。问题是 Richard John Anderson 文档的得分/排名高于 John Anderson 文档。我只能推测这是由于 TF-IDF 算法,它对 Richard John Anderson 的排名更高,因为它在文档中看到了两次。

您可以想象,这对我们来说毫无意义。我们必须能够将 John Anderson 文档恢复为排名最高的文档,因为这是搜索的名称,而不是 Richard John Anderson。

我们尝试了这个作为查询,看看它是否有帮助,但它没有:

search=+((IndividualName:"John Anderson" || EntityName:"John Anderson")^10 || (IndividualName:"John Anderson"~3 || EntityName:"John Anderson"~3))&searchFields=IndividualName,EntityName&queryType=Full

这就是为什么线程的主题行询问我们如何为我们的文档规避或减少对 TF-IDF 的重视。对我们来说,完全匹配比词频更重要。将 EntityName 字段排除在查询之外不是一种选择。我们已经尝试了一些自定义评分和字段提升,但到目前为止,无济于事。希望 MS Azure 搜索团队可以在这里提供帮助。

标签: azure-cognitive-search


【解决方案1】:

在您的示例中,两个文档都包含您要查找的确切短语“John Anderson”。搜索引擎对匹配该短语的次数越多的文档得分越高,这是设计使然。 如果您希望短语匹配字段的全部内容,最好的方法是将indexAnalyzer 设置为keyword

要详细了解 Azure 搜索中的搜索查询处理工作,请阅读:How full text search works in Azure Search

【讨论】:

  • 嗨@Yanoosh 感谢您的回复。我不确定这是否会解决我们的问题,但我需要更好地了解关键字分析器才能确定。是否有任何文档专门针对关键字分析器,以便我了解它的功能并确保它不会影响我们当前的功能?您在答案中链接的文档没有特别突出显示它。归根结底,我们只需要做任何事情,本质上就是减少对词频的重视,或者完全忽略它。我们出售的数据类型与我们无关。
  • 关键字分析器为整个输入流发出一个标记 - 它不会破坏它。我分享的文档解释了这将对您查询以这种方式处理的文档的能力产生什么影响。具体来说,您查询的术语将需要与文档的内容完全匹配。您可以在此处找到有关分析器的更多信息:docs.microsoft.com/en-us/rest/api/searchservice/… 并使用分析 API 测试分析器的行为:docs.microsoft.com/en-us/rest/api/searchservice/test-analyzer
  • 感谢您一直以来的关注,非常感谢。关键字分析器可以与邻近度一起使用吗?换句话说,我们仍然需要能够带回“John G. Anderson”的记录。似乎关键字分析器会阻止这种情况发生,但如果允许与关键字结合使用 2 的接近度,那么我们就可以了。其次,如果我们使用关键字分析器,Richard John Anderson 是否仍会在结果中返回?我们需要它,只是排名低于约翰安德森。
  • 嗨@Yahnoosh,我还有一个问题:如果我要在 Bing 中搜索 John Anderson,John Anderson 的网页不是总是会在结果列表中高于网页吗理查德·约翰·安德森?不要过于简单化,但我需要做些什么才能让 Azure 搜索更像 Bing?
  • 他们会吗?两个文档都包含您要查找的短语。根据您的描述,您需要对仅包含您正在寻找的短语而没有其他术语的更高文档进行排名。在这种情况下,创建两个字段,一个以标准方式处理,一个使用关键字分析器处理,并使用评分配置文件或术语提升(如您的示例中)相应地提升匹配项。
猜你喜欢
  • 2020-09-01
  • 2020-08-06
  • 2012-07-02
  • 2021-01-24
  • 2017-06-19
  • 2012-08-08
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多