Elasticsearch Learning to Rank 插件中的特征评分日志记录详解
什么是特征评分日志记录
在机器学习排序(Learning to Rank)系统中,特征评分日志记录是一个关键步骤。它允许我们捕获和存储各种搜索特征的实际计算值,这些值随后将用于训练排序模型。通过记录这些特征值,我们可以分析哪些特征对搜索结果的相关性预测最有帮助。
核心组件:sltr查询
sltr
查询是Elasticsearch Learning to Rank插件中执行特征和评估模型的主要方式。在日志记录场景中,我们使用它来检索每个特征查询的评分结果。
特征集定义示例
假设我们为电影数据集定义了一个特征集:
PUT _ltr/_featureset/more_movie_features
{
"name": "more_movie_features",
"features": [
{
"name": "body_query",
"params": ["keywords"],
"template": {
"match": {"overview": "{{keywords}}"}
}
},
{
"name": "title_query",
"params": ["keywords"],
"template": {
"match": {"title": "{{keywords}}"}
}
}
]
}
这个特征集包含两个特征:基于电影概述(body)的匹配评分和基于标题(title)的匹配评分。
特征值记录的实际应用
场景一:与已有评判列表结合
当已有专家提供的评判列表时,我们需要为每个关键词-文档对记录特征值,形成完整的训练集。
- 构建过滤查询:限定只查询评判列表中包含的文档ID
- 添加sltr查询:指定要记录的特征集和参数
- 启用日志扩展:配置日志记录规范
完整请求示例:
POST tmdb/_search
{
"query": {
"bool": {
"filter": [
{"terms": {"_id": ["7555", "1370", "1369"]}},
{
"sltr": {
"_name": "logged_featureset",
"featureset": "more_movie_features",
"params": {"keywords": "rambo"}
}
}
]
}
},
"ext": {
"ltr_log": {
"log_specs": {
"name": "log_entry1",
"named_query": "logged_featureset"
}
}
}
}
响应中将包含每个文档的特征值,格式如下:
{
"_ltrlog": [
{
"log_entry1": [
{"name": "title_query", "value": 9.510193},
{"name": "body_query", "value": 10.7808075}
]
}
]
}
场景二:生产环境中的特征记录
在生产环境中,当模型通过sltr
查询执行时,只需添加适当的日志规范即可记录特征值:
"ext": {
"ltr_log": {
"log_specs": {
"name": "log_entry1",
"rescore_index": 0
}
}
}
场景三:特征集修改后的记录
特征集可以动态扩展。例如添加用户评分特征:
PUT _ltr/_feature/user_rating/_addfeatures
{
"features": [
{
"name": "user_rating",
"params": [],
"template": {
"function_score": {
"functions": {"field": "vote_average"},
"query": {"match_all": {}}
}
}
}
]
}
之后记录的特征值将包含新添加的特征。
场景四:实验性特征集的记录
可以创建全新的特征集用于实验:
PUT _ltr/_featureset/other_movie_features
{
"name": "other_movie_features",
"features": [
{
"name": "cast_query",
"params": ["keywords"],
"template": {"match": {"cast.name": "{{keywords}}"}}
},
{
"name": "genre_query",
"params": ["keywords"],
"template": {"match": {"genres.name": "{{keywords}}"}}
}
]
}
日志记录的实际应用场景
- 用户分析开发评判列表:记录用户交互时的精确特征值,用于后续相关性分析
- 模型更新维护:定期记录特征值以重新训练模型,应对数据分布变化
- 模型开发实验:在本地环境中迭代测试新特征,确定最佳模型参数
最佳实践建议
- 对于大型评判列表,使用批量搜索功能提高效率
- 实验性特征集应与生产特征集分开管理
- 定期记录生产环境特征值以监控模型性能变化
- 新特征添加后应进行充分的离线评估再部署到生产环境
通过合理利用特征评分日志记录功能,可以显著提升机器学习排序模型的开发效率和最终效果。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考