Skip to content

Releases: MobileTeleSystems/RecTools

0.10.0

16 Jan 20:21
fb59ed6
Compare
Choose a tag to compare

✨ Highlights ✨

Bayesian Personalized Ranking Matrix Factorization (BPR-MF) algorithm is now in the framework!
See model detail in our extended baselines tutorial

All updates

Added

  • ImplicitBPRWrapperModel model with algorithm description in extended baselines tutorial (#232, #239)
  • All vector models and EASEModel support for enabling ranking on GPU and selecting number of threads for CPU ranking. Added recommend_n_threads and recommend_use_gpu_ranking parameters to EASEModel, ImplicitALSWrapperModel, ImplicitBPRWrapperModel, PureSVDModel and DSSMModel. Added recommend_use_gpu_ranking to LightFMWrapperModel. GPU and CPU ranking may provide different ordering of items with identical scores in recommendation table, so this could change ordering items in recommendations since GPU ranking is now used as a default one. (#218)

0.9.0

11 Dec 15:31
a1c1a2f
Compare
Choose a tag to compare

✨ Highlights ✨

  • Models initialisation from configs is introduced! As well as getting hyper-params and getting configs. We have one common function for all models: model_from_config. And we have methods for specific models: from_config, get_config, get_params.
  • Models saving and loading is introduced with load_model common function and model methods save and load.
    Please see details for configs and save+load usage in example. All models support new functions except DSSMModel.
  • fit_partial method is introduced for ImplicitALSWrapperModel and LightFMWrapperModel. These models can now resume training from the previous point.
  • LightFM Python 3.12+ support!

All updates

Added

  • from_config, get_config and get_params methods to all models except neural-net-based (#170)
  • fit_partial implementation for ImplicitALSWrapperModel and LightFMWrapperModel (#203, #210, #223)
  • save and load methods to all of the models (#206)
  • Model configs example (#207,#219)
  • use_gpu argument to ImplicitRanker.rank method (#201)
  • keep_extra_cols argument to Dataset.construct and Interactions.from_raw methods. include_extra_cols argument to Dataset.get_raw_interactions and Interactions.to_external methods (#208)
  • dtype adjustment to recommend, recommend_to_items methods of ModelBase (#211)
  • load_model function (#213)
  • model_from_config function (#214)
  • get_cat_features method to SparseFeatures (#221)
  • LightFM Python 3.12+ support (#224)

Fixed

  • Implicit ALS matrix zero assignment size (#228)

Removed

  • [Breaking] Python 3.8 support (#222)

New contributors

@spirinamayya made their first contribution in #211
@Waujito made their first contribution in #201

0.8.0

28 Aug 14:57
8a3b716
Compare
Choose a tag to compare

✨ Highlights ✨

Option for debiased calculation to all of the TruePositive-based metrics (both ranking & classification). See our Debiased metrics calculation user guide for full info. Pass debias_config during metric's initialization to enable this feature.

All updates

Added

  • debias_config parameter for classification and ranking metrics.
  • New parameter is_debiased to calc_from_confusion_df, calc_per_user_from_confusion_df methods of classification metrics, calc_from_fitted, calc_per_user_from_fitted methods of auc and rankning (MAP) metrics, calc_from_merged, calc_per_user_from_merged methods of ranking (NDCG, MRR) metrics. (#152)
  • nbformat >= 4.2.0 dependency to [visuals] extra (#169)
  • filter_interactions method of Dataset (#177)
  • on_unsupported_targets parameter to recommend and recommend_to_items model methods (#177)
  • Use nmslib-metabrainz for Python 3.11 and upper (#180)

Fixed

  • display() method in MetricsApp (#169)
  • IntraListDiversity metric computation in cross_validate (#177)
  • Allow warp-kos loss for LightFMWrapperModel (#175)

Removed

  • [Breaking] assume_external_ids parameter in recommend and recommend_to_items model methods (#177)

New contributors

@chezou made their first contribution in #180 and #175

0.7.0

29 Jul 14:19
e682847
Compare
Choose a tag to compare

✨ Highlights ✨

  • Interactive MetricsApp widget is now here! Extremely useful for metrics trade-off analysis. Has options to color models on plot based on their hyper-params. Check screenshots in cross-validation example.
  • A lot of new metrics: recommendations DQ, PartilAUC based ranking metrics, recommendations intersection between multiple models, r-precision. All computations are highly optimized and fully compatible with cross_validate
  • Theory & Practice RecSys Baselines Extended Tutorial

All updates

Added

  • Extended Theory&Practice RecSys baselines tutorial (#139)
  • MetricsApp to create plotly scatterplot widgets for metric-to-metric trade-off analysis (#140, #154)
  • Intersection metric (#148)
  • PartialAUC and PAP metrics (#149)
  • New params (tol, maxiter, random_state) to the PureSVDModel (#130)
  • Recommendations data quality metrics: SufficientReco, UnrepeatedReco, CoveredUsers (#155)
  • r_precision parameter to Precision metric (#155)

Fixed

  • Used rectools-lightfm instead of pure lightfm that allowed to install it using poetry>=1.5.0 (#165)
  • Added restriction to pytorch version for MacOSX + x86_64 that allows to install it on such platforms (#142)
  • PopularInCategoryModel fitting for multiple times, cross_validate compatibility, behaviour with empty category interactions (#163)

0.6.0

13 May 15:08
6a83a9e
Compare
Choose a tag to compare

✨ Highlights ✨

  • Added support of recommendations for cold and warm users/items
  • Added support for Python 3.11 and 3.12
  • Stopped supporting Python 3.7 and old versions of some dependencies

All updates

Added

  • Warm users/items support in Dataset (#77)
  • Warm and cold users/items support in ModelBase and all possible models (#77, #120, #122)
  • Warm and cold users/items support in cross_validate (#77)
  • [Breaking] Default value for train dataset type and params for user and item dataset types in DSSMModel (#122)
  • [Breaking] n_factors and deterministic params to DSSMModel (#122)
  • Hit Rate metric (#124)
  • Python 3.11 support (without nmslib) (#126)
  • Python 3.12 support (without nmslib and lightfm) (#126)

Changed

  • Changed the logic of choosing random sampler for RandomModel and increased the sampling speed (#120)
  • [Breaking] Changed the logic of RandomModel: now the recommendations are different for repeated calls of recommend methods (#120)
  • Torch datasets to support warm recommendations (#122)
  • [Breaking] Replaced include_warm parameter in Dataset.get_user_item_matrix to pair include_warm_users and include_warm_items (#122)
  • [Breaking] Renamed torch datasets and dataset_type to train_dataset_type param in DSSMModel (#122)
  • [Breaking] Updated minimum versions of numpy, scipy, pandas, typeguard (#126)
  • [Breaking] Set restriction scipy < 1.13 (#126)

Removed

  • [Breaking] return_external_ids parameter in recommend and recommend_to_items model methods (#77)
  • [Breaking] Python 3.7 support (#126)

0.5.0

22 Mar 13:41
4e94b64
Compare
Choose a tag to compare

✨ Highlights ✨

Visualization app is now here! See our extended example for cool interactive Jupyter widgets.
Also we introduced EASE model and a new popularity bias metric AvgRecPopularity.

All updates

Added

  • VisualApp and ItemToItemVisualApp widgets for visual comparison of recommendations (#80, #82, #85, #115)
  • Methods for conversion Interactions to raw form and for getting raw interactions from Dataset (#69)
  • AvgRecPopularity (Average Recommendation Popularity) to metrics (#81)
  • Added normalized parameter to AvgRecPopularity metric (#89)
  • Added EASE model (#107)

Changed

  • Loosened pandas, torch and torch-light versions for python >= 3.8 (#58)

Fixed

  • Bug in Interactions.from_raw method (#58)
  • Mistakes in formulas for Serendipity and MIUF in docstrings (#115)
  • Examples reproducibility on Google Colab (#115)

0.4.2

01 Dec 14:24
5a7e674
Compare
Choose a tag to compare

Added

  • Ability to pass internal ids to recommend and recommend_to_items methods and get internal ids back (#70)
  • rectools.model_selection.cross_validate function (#71, #73)

Changed

  • Loosened lightfm version, now it's possible to use 1.16 and 1.17 (#72)

Fixed

  • Small bug in LastNSplitter with incorrect i_split in info (#70)

0.4.1

31 Oct 15:12
14036d9
Compare
Choose a tag to compare

Summary

  • Enhanced examples
  • Optimised DSSM inference
  • Updated high border of attrs version to 24.0.0

All updates

Added

  • LightFM wrapper inference speed benchmark (#60)
  • iALS with features quality benchmark (#60)

Changed

  • Updated attrs version (#56)
  • Optimized inference for vector models with EUCLIDEAN distance using implicit library topk method (#57)
  • Changed features processing example (#60)

0.4.0

27 Oct 19:44
3b2dc65
Compare
Choose a tag to compare

✨ Highlights ✨

We have much simplified RecTools installation with pip and poetry. If you faced problems before, we recommend to try version 0.4.0 and above

  • [Breaking] Bumped implicit from 0.4.4 to ^0.7.1
  • [Breaking] Moved nmslib and lightfm to extras. Renamed nn extra to torch
  • [Breaking] Improved TimeRangeSplitter interface: no need for pre-computing fold borders any more
  • New metrics:MRR, F1Beta, MCC
  • New splitters for cross-validation:RandomSplitter, LastNSplitter
  • Significantly optimized inference speed for latent factors models (iALS, LightFM, PureSVD)
  • Python 3.10 support 🎉

All updates

Added

  • MRR (Mean Reciprocal Rank) to metrics (#29)
  • F1beta, MCC (Matthew correlation coefficient) to metrics (#32)
  • Base Splitter class to construct data splitters (#31)
  • RandomSplitter to model_selection (#31)
  • LastNSplitter to model_selection (#33)
  • Support for Python 3.10 (#47)

Changed

  • Bumped implicit version to 0.7.1 (#45)
  • Bumped lightfm version to 1.17 (#43)
  • Bumped pylint version to 2.17.6 (#43)
  • Moved nmslib to extras (#36)
  • Moved lightfm to extras (#51)
  • Renamed nn extra to torch (#51)
  • Optimized inference for vector models with COSINE and DOT distances using implicit library topk method (#52)
  • Changed initialization of TimeRangeSplitter (instead of date_range argument, use test_size and n_splits) (#53)
  • Changed split infos key names in splitters (#53)

Fixed

  • Bugs with new version of pytorch_lightning (#43)
  • pylint config for new version (#43)
  • Cyclic imports (#45)

Removed

  • Markdown dependancy (#54)

Release v0.3.0

12 Nov 17:53
41ac4e2
Compare
Choose a tag to compare
  • Optimized IdMap. In the new version internal ids are not sorted.
  • Significantly optimized TimeRangeSplit. Renamed to TimeRangeSplitter. Changed interface.
  • Fixed bug in MAP metric calculation.