学习排序

编辑

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

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

Learning To Rank overview
图 8. 学习排序概述

搜索上下文

编辑

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

判断列表

编辑

LTR 模型通常在判断列表上进行训练,该列表是一组带有相关性等级的查询和文档。 判断列表可以由人工或机器生成:它们通常来自行为分析,并经常进行人工审核。 判断列表确定给定搜索查询的结果的理想排序。 LTR 的目标是使模型尽可能地适应新查询和文档的判断列表排名。

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

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

关于判断列表的说明

编辑

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

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

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

特征提取

编辑

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

这些特征分为三个主要类别:

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

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

Judgment list with features
图 10. 带有特征的判断列表

为了在 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 中提供了帮助程序,以方便将经过训练的 XGBRanker 模型集成到 Elasticsearch 中作为您的 LTR 模型。

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

Elastic Stack 中的 LTR

编辑

在本指南的下一页中,您将学习到