pub fn additive_multi_task<I: Clone + Eq + Hash>(
results_a: &[(I, f32)],
results_b: &[(I, f32)],
config: AdditiveMultiTaskConfig,
) -> Vec<(I, f32)>Expand description
Additive multi-task fusion (ResFlow-style).
Additive fusion of multi-task scores: α·score_a + β·score_b.
ResFlow (arXiv:2411.09705) shows additive outperforms multiplicative for e-commerce
ranking tasks. The optimal formula is typically CTR + CTCVR × 20, where CTR and
CTCVR are normalized scores from different tasks.
§Algorithm
- Normalize each list using the specified normalization method
- Compute weighted sum:
α·norm_a + β·norm_b - Sort by combined score (descending)
§Example
use rankops::{additive_multi_task, AdditiveMultiTaskConfig};
let ctr_scores = vec![("item1", 0.05), ("item2", 0.03), ("item3", 0.01)];
let ctcvr_scores = vec![("item1", 0.02), ("item2", 0.01), ("item3", 0.005)];
// ResFlow optimal: CTR + CTCVR × 20
let config = AdditiveMultiTaskConfig::new((1.0, 20.0));
let fused = additive_multi_task(&ctr_scores, &ctcvr_scores, config);