Option to redraw negatives that coincide with the target in `CatalogUniformSampler`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
- Type d'issue
- Fonctionnalité
- Clarté
- Clairement spécifiée
- Activité
- Active
- Domaine
- machine-learning
Piste de recherche
Commencez par rectools/models/nn/transformers/negative_sampler.py et lisez CatalogUniformSampler.get_negatives ; comparez la gestion des collisions avec _NegativeSampler dans rectools/fast_transformers/unisrec/model.py. Ajoutez le comportement optionnel via negative_sampler_kwargs, en conservant le comportement par défaut, et examinez les tests unitaires du sampler. Le travail est terminé lorsque les négatifs en collision sont tirés à nouveau lorsque le comportement est activé et que le comportement existant est conservé par défaut.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Feature Description
Add an opt-in parameter to CatalogUniformSampler (for example avoid_positive_collisions: bool = False) that redraws sampled negatives equal to the target item at the same position. It would be enabled through the existing negative_sampler_kwargs:
SASRecModel(loss="gBCE", n_negatives=256, negative_sampler_kwargs={"avoid_positive_collisions": True})
The default would keep the current behaviour, so existing configs and seeded results do not change.
Why this feature?
CatalogUniformSampler.get_negatives (rectools/models/nn/transformers/negative_sampler.py) samples negatives uniformly from all catalog items (as its docstring says) using torch.randint, without excluding the target. With BCE, gBCE or sampled_softmax, the same item can then be scored as both the positive and a negative in one loss term.
The UniSRec model added in 0.19.0 already handles this: _NegativeSampler in rectools/fast_transformers/unisrec/model.py redraws colliding negatives once. The transformer models in rectools.models.nn (SASRec, BERT4Rec, HSTU) have no such option, although users can subclass TransformerNegativeSamplerBase to get it.
The collision probability per negative is 1 / n_items. With n_negatives=256:
| catalog size | share of negatives equal to the target | share of positions with at least one such negative |
|---|---|---|
| 3,416 (ML-1M as used in the SASRec/gSASRec papers) | 0.03% | 7.2% |
| 500 | 0.2% | 40% |
| 100 | 1.0% | 92% |
On a synthetic dataset with 100 items (2,000 users, 22 interactions each), SASRecModel with loss="sampled_softmax" and n_negatives=256 reached NDCG@10 of about 0.127 (RecTools NDCG(k=10), default settings). Redrawing colliding negatives until none were left changed this by -0.0009 on average over 3 seeds, which is within run-to-run noise. So I don't expect a measurable metric gain; the aim is consistency with UniSRec and sampling negatives the way the gBCE sampling rate alpha = n_negatives / (n_items - 1) already assumes.
Additional context
I have a small patch ready (one redraw pass, same as _NegativeSampler, plus unit tests and a changelog entry) and can open a PR if this is welcome.
- Langage dominant
- Python
- Étoiles
- 457
- Forks
- 55
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de MTSWebServices/RecTools
-
Is it not possible to `load` transformer model on cpu onlyPeut-être pris @maxteneff l’a pris il y a 22 jours. Ouvertebug good first issue
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
MTSWebServices/RecTools#286 · 3 commentaires ·
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 35/100
MTSWebServices/RecTools#269 · 4 commentaires ·
-
enhancement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
MTSWebServices/RecTools#249 ·
-
enhancement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
MTSWebServices/RecTools#243 ·
-
enhancement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
MTSWebServices/RecTools#242 ·
Toutes les issues de MTSWebServices/RecTools
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 87/100
Les mainteneurs répondent en général sous 7 jours
-
S9.7: Methodology pageOuvertearea: web priority: P1 story
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
nfiasco/Quant-Time-Machine#151 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
autowarefoundation/autoware_carla_scenario#2019 ·
Les mainteneurs répondent en général sous 1 jour
-
Broken links found in docsOuvertedocs pydanty:is-working
Difficulté 1/5 1-3 heures Accessibilité débutants 85/100
pydantic/pydantic-ai#12892 ·
Les mainteneurs répondent en général sous 1 jour