学习排名编辑

学习排名功能目前处于技术预览阶段,可能会在未来的版本中进行更改或删除。Elastic 将努力修复任何问题,但此功能不受官方 GA 功能的支持 SLA 的约束。

此功能是在 8.12.0 版本中引入的,并且仅适用于某些订阅级别。有关更多信息,请参阅 https://elastic.ac.cn/subscriptions

学习排名 (LTR) 使用经过训练的机器学习 (ML) 模型为您的搜索引擎构建排名函数。通常,该模型用作第二阶段重新排序器,以提高由更简单的第一阶段检索算法返回的搜索结果的相关性。LTR 函数接收文档列表和搜索上下文,并输出排名后的文档。

Learning To Rank overview
图 9. 学习排名概述

搜索上下文编辑

除了要排序的文档列表之外,LTR 函数还需要一个搜索上下文。通常,此搜索上下文至少包含用户提供的搜索词(上例中的 text_query)。搜索上下文还可以提供排名模式中使用的其他信息。这可以是有关执行搜索的用户的信息(例如人口统计数据、地理位置或年龄);有关查询的信息(例如查询长度);或查询上下文中的文档(例如标题字段的分数)。

判断列表编辑

LTR 模型通常在判断列表上进行训练,该列表是一组具有相关性等级的查询和文档。判断列表可以是人工生成的,也可以是机器生成的:它们通常从行为分析中填充,通常需要人工审核。判断列表确定给定搜索查询的理想结果排序。LTR 的目标是使模型尽可能地拟合判断列表排名,以用于新的查询和文档。

判断列表是用于训练模型的主要输入。它由一个数据集组成,该数据集包含查询和文档对,以及它们对应的相关性标签。相关性判断通常是二元的(相关/不相关)或更细粒度的标签,例如 0(完全不相关)到 4(高度相关)之间的等级。以下示例使用分级相关性判断。

Judgment list example
图 10. 判断列表示例

判断列表的注意事项编辑

虽然判断列表可以由人工手动创建,但也有一些技术可以利用用户参与数据(例如点击或转化)来自动构建判断列表。

判断列表的数量和质量将极大地影响 LTR 模型的整体性能。在构建判断列表时,应仔细考虑以下几个方面。

  • 大多数搜索引擎可以使用不同的查询类型进行搜索。例如,在电影搜索引擎中,用户可以通过标题搜索,也可以通过演员或导演搜索。在判断列表中保持每种查询类型的示例数量平衡至关重要。这可以防止过度拟合,并允许模型在所有查询类型中有效地泛化。
  • 用户提供的正面示例通常多于负面示例。通过平衡正面和负面示例的数量,您可以帮助模型更准确地学习区分相关内容和不相关内容。

特征提取编辑

仅凭查询和文档对本身并不能提供足够的训练 LTR 所用 ML 模型的信息。判断列表中的相关性分数取决于许多属性或*特征*。必须提取这些特征,以确定各种组件如何组合以确定文档相关性。判断列表加上提取的特征构成了 LTR 模型的训练数据集。

这些特征属于以下三个主要类别之一:

  • **文档特征**:这些特征直接从文档属性派生而来。例如:电子商务商店中的产品价格。
  • **查询特征**:这些特征直接从用户提交的查询中计算得出。例如:查询中的单词数。
  • **查询-文档特征**:用于提供查询上下文中有关文档的信息的特征。例如:title 字段的 BM25 分数。

为了准备训练数据集,将特征添加到判断列表中。

Judgment list with features
图 11. 具有特征的判断列表

要在 Elasticsearch 中执行此操作,请在构建训练数据集时以及在查询时的推理过程中使用模板化查询来提取特征。以下是模板化查询的示例:

[
  {
    "query_extractor": {
      "feature_name": "title_bm25",
      "query": { "match": { "title": "{{query}}" } }
    }
  }
]

模型编辑

LTR 的核心当然是 ML 模型。模型使用上述训练数据结合目标进行训练。在 LTR 的情况下,目标是根据某些排名指标(例如 nDCGMAP),相对于判断列表以最佳方式对结果文档进行排名。模型仅依赖于训练数据中的特征和相关性标签。

LTR 领域正在快速发展,人们正在尝试许多方法和模型类型。在实践中,Elasticsearch 专门依赖梯度提升决策树(GBDT)模型进行 LTR 推理。

请注意,Elasticsearch 支持模型推理,但训练过程本身必须在 Elasticsearch 之外使用 GBDT 模型进行。在当今使用最广泛的 LTR 模型中,LambdaMART 提供了强大的排名性能和低推理延迟。它依赖于 GBDT 模型,因此非常适合 Elasticsearch 中的 LTR。

XGBoost 是一个著名的库,它提供了 LambdaMART 的 实现,使其成为 LTR 的热门选择。我们在 eland 中提供了帮助程序,以方便将经过训练的 XBGRanker 模型集成到 Elasticsearch 中作为您的 LTR 模型。

训练和部署 LTR 模型 中详细了解训练,或查看我们在 elasticsearch-labs 存储库中提供的 交互式 LTR 笔记本

Elastic Stack 中的 LTR编辑

在本指南的后续页面中,您将学习: