特征工程
在开发学习排名 (LTR) 解决方案时,您可能会遇到以下常见的特征工程任务。
获取原始词项统计信息
许多 LTR 解决方案在其训练中使用原始词项统计信息,例如以下各项:
- 总词项频率(
raw_ttf
): 某个词项在整个索引中出现的总次数。 - 文档频率(
raw_df
): 某个词项出现的文档数量。 - 词项频率(
raw_tf
): 某个词项在特定文档中出现的次数。 - 经典 IDF(
classic_idf
): 逆文档频率 (IDF) 计算log((NUM_DOCS+1)/(raw_df+1)) + 1
。
学习排名插件提供了 match_explorer
查询原语,可以为您提取这些统计信息,如以下示例所示:
POST tmdb/_search
{
"query": {
"match_explorer": {
"type": "max_raw_df",
"query": {
"match": {
"title": "rambo rocky"
}
}
}
}
}
该查询返回词项 rambo
和 rocky
之间最高的文档频率。
您可以结合这些统计信息使用 max
、min
、sum
和 stddev
等操作来获取所需信息。
词项位置统计信息
您可以在 type
前加上所需的操作(min
、max
、avg
),以计算词项位置的相应统计信息。如果文档中不存在这些词项,则结果将为 0
。
可用统计信息包括以下各项:
min_raw_tp
(最小原始词项位置):此统计信息查找文档中任何搜索词项的最早位置。例如,对于查询dance monkey
,如果dance
出现在位置 [2, 5, 9],而monkey
出现在位置 [1, 4],则最小值为 1。max_raw_tp
(最大原始词项位置):此统计信息查找文档中任何搜索词项的最晚位置。以上述示例为例,最大值为 9。avg_raw_tp
(平均原始词项位置):此统计信息计算任何查询词项的平均词项位置。以上述示例为例,dance
的平均值为 5.33 [(2+5+9)/3)],monkey
的平均值为 2.5 [(1+4)/2],总体平均值为 3.91。unique_terms_count
:提供查询中唯一搜索词项的数量。
文档特定特征
在开发 LTR 解决方案时,您可能需要结合文档特有的特征,而不是查询与文档之间关系的特征。这些文档特有的特征可以包括与流行度或时效性相关的指标。
function_score
查询提供了提取这些文档特定特征的功能。以下示例查询展示了如何使用它来将 vote_average
字段作为特征:
{
"query": {
"function_score": {
"functions": [{
"field_value_factor": {
"field": "vote_average",
"missing": 0
}
}],
"query": {
"match_all": {}
}
}
}
}
在该示例中,查询的分数由 vote_average
字段的值决定,该值可以是文档流行度或质量的衡量标准。
索引漂移
处理定期更新的索引时,务必考虑您观察到的趋势和模式可能不会随时间保持不变。随着用户行为、内容和其他因素的变化,您的索引可能会发生漂移。例如,在电子商务商店中,您可能会发现凉鞋在夏季很受欢迎,但在冬季几乎找不到。同样,在一个时期内驱动购买或参与度的特征在另一个时期可能不那么重要。
后续步骤
了解记录特征分数。