SetMIR: Multi-Interest Retrieval as Set Prediction
Xiaodong Liu, Congfei Zhang, Hsiang-wei Chao, Siman Wang, Xiao Bai, Tong Zhao, Jingxiao Ma, Wen Zhang, Zhe Liu, Shantanu Aggarwal, Di Huang, William Leach, Yunzhi Zhou, Yajun Wang, Jinchao Li, Yu Zhang
cs.IR
2026-08-31
SetMIR treats multi-interest retrieval as set prediction, issuing 6.70 ANN calls on average. Online CVR rises 3.11% over Snap DPA's current mix.
Industrial retrieval is usually a two-tower ANN: one user vector, one item vector, a few thousand candidates. One vector cannot hold streetwear, baby clothes, and skincare from the same week. Multi-interest retrieval issues K user vectors, then collapses onto a few duplicated interests and still dispatches all K ANN calls even when some of them are empty.
Snap's SetMIR treats multi-interest retrieval as set prediction. A fixed bank of K learnable queries produces a variable-size set. Hungarian matching assigns targets one-to-one at train time; a presence head decides how many ANN calls to issue at serve time.
A 40-event history is looked up in frozen content embeddings, then given positional encodings and a learned event-type embedding. The event scale α starts at 0, so the model lives in content space first and only later mixes in click / add-to-cart / purchase intensity. A 2-layer transformer encodes history; K=10 queries cross-attend through a 6-layer decoder. Each query emits an L2-normalized retrieval vector and a sigmoid presence score. Hidden size is 128, about 33M parameters.
Targets are high-intent items (purchase > add-to-cart > swipe-up) in a future 3-day window, deduplicated and capped at 15. Hungarian matching pairs queries to targets by embedding dot product plus the presence logit. Matched queries take in-batch InfoNCE; unmatched queries only learn "absent." A margin-0.3 repulsion penalizes active queries that stay too close. At inference, presence threshold τ=0.3 drops idle queries, cosine NMS at 0.9 drops near-duplicates, each survivor retrieves ⌈N/K̃⌉ items, and scores merge by max.
Offline eval is Snap Dynamic Product Ads logs, about 1M test users and 5.3M target products. Metrics are normalized so SetMIR equals 100%. Baselines always dispatch K=10.
| Method | ANN calls | R@1 | R@10 | MRR |
| MIND | 10.00 | 45.7% | 52.9% | 44.4% |
| ComiRec-SA | 10.00 | 67.4% | 89.8% | 80.0% |
| KuaiFormer | 10.00 | 43.0% | 52.0% | 42.2% |
| SetMIR (argmax) | 2.16 | 62.1% | 63.5% | 56.4% |
| SetMIR | 6.70 | 100% | 100% | 100% |
ComiRec-SA already matches SetMIR at R@100 (99.9%) and still lags at the head. Replacing Hungarian matching with argmax collapses to about two live interests and 63.5% of R@10. Dropping the presence loss raises calls to 8.23 and cuts R@10 to 91.4%. Dropping diversity raises mean query cosine from 0.298 to 0.321. Scaling K from 1 to 10 lifts R@10 to 155% of the single-vector run; K=7 already reaches 99.8% of K=10. Presence gating alone cuts 10 calls to 7.73 and slightly raises R@1; NMS then lands at 6.70, 0.8% R@10 below full dispatch.
Online, SetMIR is added as a new source with the global quota unchanged: CVR +3.11%, CTR +0.21% versus the current mix. Inside the treatment arm, against item-to-item retrieval with the same embeddings, index, and quota, CTR is +44% and CVR is +51%.
For teams already running multi-query ANN, interest collapse is handled in the objective rather than by an extra regularizer: one-to-one matching plus an explicit absence target. The presence head spends budget per request and keeps recall after dropping 33% of calls. The architecture is close to Kuaishou's KuaiFormer; the gap is the supervision, not a deeper transformer.
The item tower is frozen, so this compares interest extractors, not end-to-end two-towers. Offline numbers are relative by company policy, so they do not translate to absolute recall against published tables.
There is no standalone limitations section. Visible gaps: frozen item embeddings put MIND/DCM on a different track; DCM and KuaiFormer are reimplemented from papers without official code; the A/B ran about a week with undisclosed traffic; an unmatched query means the interest did not appear in the future window, not that the user lacks it. NMS at 0.9 is loose, so diversity is mostly a training effect.