判断
这是一个实验性功能,不建议在生产环境中使用。有关该功能的进展更新或您想留下反馈,请参阅相关的 GitHub issue。
判断是指在特定查询上下文中,为特定文档分配的相关性评分。多个判断组合在一起形成判断列表。通常,判断分为两种类型:隐式判断和显式判断。
- 隐式判断是根据用户行为得出的评分(例如,用户搜索后看到了什么并选择了什么?)。
- 显式判断传统上由人工进行,但大型语言模型(LLM)正越来越多地用于执行此任务。
搜索相关性工作台支持所有类型的判断。
- 根据符合用户行为洞察(UBI)模式规范的数据生成隐式判断。
- 通过将 OpenSearch 连接到 API 或内部/外部托管模型,使用 LLM 生成判断。
- 导入外部创建的判断。
显式判断
搜索相关性工作台提供了两种集成显式判断的方式:
- 导入在 OpenSearch 外部通过流程收集的判断。
- 使用 LLM 的 AI 辅助判断。
导入判断
您可能已经有生成判断的外部流程。无论判断类型或生成方式如何,您都可以将其导入搜索相关性工作台。
请求示例
PUT _plugins/_search_relevance/judgments
{
"name": "Imported Judgments",
"description": "Judgments generated outside SRW",
"type": "IMPORT_JUDGMENT",
"judgmentRatings": [
{
"query": "red dress",
"ratings": [
{
"docId": "B077ZJXCTS",
"rating": "3.000"
},
{
"docId": "B071S6LTJJ",
"rating": "2.000"
},
{
"docId": "B01IDSPDJI",
"rating": "2.000"
},
{
"docId": "B07QRCGL3G",
"rating": "0.000"
},
{
"docId": "B074V6Q1DR",
"rating": "1.000"
}
]
},
{
"query": "blue jeans",
"ratings": [
{
"docId": "B07L9V4Y98",
"rating": "0.000"
},
{
"docId": "B01N0DSRJC",
"rating": "1.000"
},
{
"docId": "B001CRAWCQ",
"rating": "1.000"
},
{
"docId": "B075DGJZRM",
"rating": "2.000"
},
{
"docId": "B009ZD297U",
"rating": "2.000"
}
]
}
]
}
请求正文字段
导入判断的过程支持以下参数。
参数 | 数据类型 | 描述 |
名称 | 字符串 | 判断列表的名称。 |
description | 字符串 | 判断列表的可选描述。 |
type | 字符串 | 设置为 IMPORT_JUDGMENT 。 |
judgmentRatings | 数组 | 包含判断的 JSON 对象列表。判断按查询分组,每个查询包含一个嵌套映射,其中文档 ID (docId ) 作为键,其浮点评分作为值。 |
创建 AI 辅助判断
如果您想在实验过程中使用判断,但没有人工团队或用户行为数据来根据交互计算判断,您可以使用搜索相关性工作台中的 LLM 来生成判断。
先决条件
要使用 AI 辅助判断生成,请确保您已配置以下组件:
- 用于生成判断的 LLM 连接器。有关更多信息,请参阅为第三方机器学习平台创建连接器。
- 查询集:与
size
参数一起,查询集定义了生成判断的范围。对于每个查询,将从指定索引中检索前 k 个文档,其中 k 在size
参数中定义。 - 搜索配置:搜索配置定义了如何检索文档以用于查询/文档对。
AI 辅助判断流程如下:
- 对于每个查询,使用定义的搜索配置(包括索引信息)检索前 k 个文档。查询和结果列表中的每个文档共同创建一个查询/文档对。
- 每个查询和文档配对形成一个查询/文档对。
- 然后使用预定义提示(作为静态变量存储在后端)调用 LLM,为每个查询/文档对生成一个判断。
- 所有生成的判断都存储在判断索引中,以便在未来的实验中重复使用。
要创建判断列表,请提供 LLM 的模型 ID、一个可用的查询集以及一个已创建的搜索配置。
PUT _plugins/_search_relevance/judgments
{
"name":"COEC",
"type":"LLM_JUDGMENT",
"querySetId":"5f0115ad-94b9-403a-912f-3e762870ccf6",
"searchConfigurationList":["2f90d4fd-bd5e-450f-95bb-eabe4a740bd1"],
"size":5,
"modelId":"N8AE1osB0jLkkocYjz7D",
"contextFields":[]
}
隐式判断
隐式判断来源于用户交互。有几个模型使用用户行为的信号来计算这些判断。其中一个模型是点击量超出预期点击量 (COEC),这是一个在搜索相关性工作台中实现的点击模型。用于推导相关性标签的数据基于过去的用户行为。数据遵循用户行为洞察模式规范。隐式判断的两个关键交互类型是用户查询后发生的展示和点击。实际上,这意味着 ubi_events
索引中所有在 action_name
字段中记录有 impression
或 click
的事件都用于建模隐式判断。COEC 为每个排名计算预期点击率 (CTR)。它通过将总点击次数除以在该排名观察到的总展示次数来完成此操作,这基于 ubi_events
中的所有事件。该比率代表该位置的预期 CTR。
对于查询后显示在结果列表中的每个文档,该排名上的平均 CTR 作为查询/文档对的预期值。COEC 计算查询/文档对的实际 CTR,并将其除以该基于排名的预期 CTR。这意味着,如果查询/文档对的 CTR 高于该排名的平均值,则其判断值将大于 1。反之,如果 CTR 低于平均值,则判断值将小于 1。
请注意,根据跟踪实现的不同,单个查询可能会在 ubi_events
索引中记录多次点击。因此,平均 CTR 有时会超过 1(或 100%)。对于在不同位置发生的查询-文档观察,所有展示和点击都被假定发生在最低(最佳)位置。这种方法会使最终判断偏向较低值,反映出排名较高的结果通常获得较高 CTR 的常见趋势。
请求示例
PUT _plugins/_search_relevance/judgments
{
"name": "Implicit Judgements",
"clickModel": "coec",
"type": "UBI_JUDGMENT",
"maxRank": 20
}
请求正文字段
创建隐式判断的过程支持以下参数。
参数 | 数据类型 | 描述 |
名称 | 字符串 | 判断列表的名称。 |
clickModel | 字符串 | 用于计算隐式判断的模型。仅支持 coec (点击量超出预期点击量)。 |
type | 字符串 | 设置为 UBI_JUDGMENT 。 |
maxRank | 整数 | 在判断计算中包含事件时要考虑的最大排名。 |
管理判断列表
您可以使用以下 API 检索或删除判断列表。
查看判断列表
您可以使用判断列表 ID 检索判断列表。
端点
GET _plugins/_search_relevance/judgments/<judgment_list_id>
路径参数
下表列出了可用的路径参数。
参数 | 数据类型 | 描述 |
---|---|---|
judgment_list_id | 字符串 | 要检索的判断列表的 ID。 |
请求示例
GET _plugins/_search_relevance/judgments/b54f791a-3b02-49cb-a06c-46ab650b2ade
示例响应
响应
{
"took": 36,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "search-relevance-judgment",
"_id": "b54f791a-3b02-49cb-a06c-46ab650b2ade",
"_score": 1,
"_source": {
"id": "b54f791a-3b02-49cb-a06c-46ab650b2ade",
"timestamp": "2025-06-11T06:07:23.766Z",
"name": "Imported Judgments",
"status": "COMPLETED",
"type": "IMPORT_JUDGMENT",
"metadata": {},
"judgmentRatings": [
{
"query": "red dress",
"ratings": [
{
"rating": "3.000",
"docId": "B077ZJXCTS"
},
{
"rating": "2.000",
"docId": "B071S6LTJJ"
},
{
"rating": "2.000",
"docId": "B01IDSPDJI"
},
{
"rating": "0.000",
"docId": "B07QRCGL3G"
},
{
"rating": "1.000",
"docId": "B074V6Q1DR"
}
]
},
{
"query": "blue jeans",
"ratings": [
{
"rating": "0.000",
"docId": "B07L9V4Y98"
},
{
"rating": "1.000",
"docId": "B01N0DSRJC"
},
{
"rating": "1.000",
"docId": "B001CRAWCQ"
},
{
"rating": "2.000",
"docId": "B075DGJZRM"
},
{
"rating": "2.000",
"docId": "B009ZD297U"
}
]
}
]
}
}
]
}
}
删除判断列表
您可以使用判断列表 ID 删除判断列表。
端点
DELETE _plugins/_search_relevance/judgments/<judgment_list_id>
请求示例
DELETE _plugins/_search_relevance/judgments/b54f791a-3b02-49cb-a06c-46ab650b2ade
示例响应
{
"_index": "search-relevance-judgment",
"_id": "b54f791a-3b02-49cb-a06c-46ab650b2ade",
"_version": 3,
"result": "deleted",
"forced_refresh": true,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 156,
"_primary_term": 1
}