机器学习排名核心概念
本指南面向有兴趣为其 OpenSearch 系统添加机器学习 (ML) 排名功能的 OpenSearch 开发人员和数据科学家。
什么是 LTR?
排名学习 (LTR) 将机器学习应用于搜索相关性排名。这与其他经典的机器学习问题不同,例如:
- 回归:目标是根据已知信息(例如员工数量或收入)预测一个变量(例如股票价格)。输出是直接预测。
- 分类:目标是将实体归类到预定义的类别中,例如,盈利或不盈利。输出是一个类别。
LTR 的目标不是进行直接预测,而是学习一个函数(f
),该函数可以根据您对给定查询的相关性感知,以最佳顺序对文档进行排名。f
的输出不代表字面值,而是文档相对有用性的预测。
有关 LTR 的全面信息,请参阅搜索与其它机器学习问题有何不同?和什么是排名学习?。
使用判断列表定义理想排序
判断列表,也称为黄金集,提供了一种对关键字搜索的单个搜索结果进行评分的方法。这些列表根据您的预期表达了搜索结果的理想排序。
例如,使用 GitHub 上的演示,在搜索 Rambo
时,判断列表可能类似于以下内容
grade,keywords,movie
4,Rambo,First Blood # Exactly Relevant
4,Rambo,Rambo
3,Rambo,Rambo III # Fairly Relevant
3,Rambo,Rambo First Blood Part II
2,Rambo,Rocky # Tangentially Relevant
2,Rambo,Cobra
0,Rambo,Bambi # Not even close...
0,Rambo,First Daughter
此判断列表确立了查询 Rambo
的搜索结果的理想排序。然后可以使用 归一化折现累积增益 (NDCG) 和 预期倒数排名 (ERR) 等指标来评估实际搜索结果与此理想排序的匹配程度。
排名函数 f
旨在生成与判断列表紧密对齐的结果,从而在各种训练查询中最大化质量指标。这确保了最大程度地有用搜索结果。
将特征理解为相关性的构建块
排名函数 f
使用输入变量来得出预测输出。例如,在股票价格预测中,输入变量可能包括公司特定数据,如员工数量和收入。同样,在搜索相关性中,预测模型必须利用描述文档、查询及其关联的特征,例如字段中查询关键字的词频-逆文档频率 (TF–IDF) 分数。
类似地,在电影搜索的上下文中,排名函数必须使用相关特征来确定最相关的结果。这些特征可能包括
- 搜索关键字与标题字段的匹配程度,例如
titleScore
。 - 搜索关键字与描述字段的匹配程度,例如
descScore
。 - 电影的受欢迎程度,例如
popularity
。 - 电影的评分,例如
rating
。 - 搜索期间使用的关键字数量,例如
numKeywords*)
。
排名函数将变为 f(titleScore, descScore, popularity, rating, numKeywords)
。目标是以最大化搜索结果有用性的方式使用这些特征。
例如,在 Rambo
的用例中,直观上 titleScore
会很重要。然而,对于热门电影《第一滴血》(First Blood),关键字 Rambo
很可能只在描述中提到。在这种情况下,descScore
将变得相关。此外,popularity
和 rating
特征可以帮助区分续集和原创。如果现有特征不适用于此目的,则可以引入新特征 isSequel
。然后可以使用此新特征来做出更好的排名决策。
选择和试验特征是 LTR 的基础。使用未能帮助预测目标变量模式的特征可能会导致不令人满意的搜索体验,这遵循适用于任何机器学习问题的“垃圾进,垃圾出”原则。
通过记录特征来完成训练集
当您有一组定义的特征时,下一步是用每个特征的值来注释判断列表。这些值在训练过程开始时使用。例如,考虑以下判断列表
grade,keywords,movie
4,Rambo,First Blood
4,Rambo,Rambo
3,Rambo,Rambo III
...
要完成训练集,请添加以下特征
grade,keywords,movie,titleScore,descScore,popularity,...
4,Rambo,First Blood,0.0,21.5,100,...
4,Rambo,Rambo,42.5,21.5,95,...
3,Rambo,Rambo III,53.1,40.1,50,...
titleScore
表示文档标题字段中 Rambo
关键字的相关性分数,依此类推。
许多 LTR 模型都熟悉排名支持向量机 (SVMRank) 引入的一种文件格式,SVMRank 是一种早期的 LTR 方法。在这种格式中,查询被赋予 ID,并且实际的文档标识符可以从训练过程中移除。特征使用从 1
开始的序数进行标记。对于前面的示例,文件格式将是
4 qid:1 1:0.0 2:21.5 3:100,...
4 qid:1 1:42.5 2:21.5 3:95,...
3 qid:1 1:53.1 2:40.1 3:50,...
...
在实际系统中,您可能会记录这些值,然后稍后使用它们来注释判断列表。在其他情况下,判断列表可能来自用户分析,因此当您与搜索应用程序交互时,特征值会被记录。有关更多信息,请参阅记录特征。
训练排名函数
训练排名函数的主要考虑因素如下
-
排名模型:有多种模型可供训练,例如以下模型,每种模型都有其优缺点
- 基于树的模型(例如,LambdaMART、MART、随机森林)
- 基于 SVM 的模型 (SVMRank)
- 准确性较低,但训练成本较低。
- 有关更多信息,请参阅排名支持向量机。
- 线性模型
- 对判断列表执行基本线性回归。
- 在示例之外往往没有用处。
- 有关更多信息,请参阅排名学习 101 — 线性模型。
-
模型选择:模型的选择不仅取决于性能,还取决于您的经验水平以及对不同方法的熟悉程度。
测试:模型好用吗?
测试排名模型质量时,请考虑以下因素
- 判断列表限制:判断列表无法包含模型在现实世界中可能遇到的所有可能查询。重要的是在各种查询上测试模型,以评估其在训练数据之外的泛化能力。
- 过拟合:对训练数据过拟合的模型在新数据上表现不佳。为避免这种情况,请考虑以下做法
- 保留一些判断列表作为在训练过程中不使用的测试集。
- 评估模型在测试集上的性能,这反映了它在不熟悉场景中的表现。
- 监控测试 NDCG 指标,该指标在模型训练过程中应保持较高水平。
- 时间泛化:即使在部署模型后,您也应继续使用最新的判断列表测试模型的性能,以确保它不会过度拟合季节性或时间性情况。
实际问题
以下是使用排名学习插件的实际考虑因素
- 准确的判断列表:如何创建反映用户对搜索质量感知的判断列表?
- 衡量搜索质量:您应该使用哪些指标来确定搜索结果对用户是否有用?
- 数据收集基础设施:您需要什么样的基础设施来收集和记录用户行为和特征数据?
- 模型再训练:您如何知道何时需要重新训练模型?
- A/B 测试:您将如何比较新模型与当前的搜索解决方案?您将使用哪些关键绩效指标 (KPI) 来确定搜索系统的成功?
请参阅插件如何适应?,了解更多关于排名学习插件功能如何融入完整的 LTR 系统的信息。