MTSWebServices/RecTools
RecTools - library to build Recommendation Systems easier and faster than ever before
✨ Added
- `rectools.fast_transformers` module — standalone transformer-based sequential recommenders that work directly with torch tensors, bypassing the `Dataset`/pandas pipeline. GPU-native sequence building via `build_sequences()` gives ~30x preprocessing speedup over `SASRecDataPreparator` on ML-20M ([#306](https://github.com/MTSWebServices/RecTools/pull/306))
- `FlatSASRecNet` network — flat SASRec implementation without the ItemNet hierarchy. Pre-norm transformer encoder with id-embeddings, causal masking, softmax and BCE losses ([#306](https://github.com/MTSWebServices/RecTools/pull/306))
- `UniSRecNet` network and `UniSRecModel` — sequential recommender with pretrained text embeddings (e.g. Qwen) and a learnable PCA/BN adaptor. Joint training of adaptor + transformer on pretrained embeddings. Configurable losses (softmax, BCE, gBCE, sampled_softmax), optimizers (Adam, AdamW), cosine warmup scheduler, early stopping, checkpoint save/load. `UniSRecModel.fit()` accepts raw `(user_ids, item_ids, timestamps)` tensors ([#306](https://github.com/MTSWebServices/RecTools/pull/306))
- `align_embeddings()` for mapping pretrained embedding matrices to internal item ID order ([#306](https://github.com/MTSWebServices/RecTools/pull/306))
- `SequenceBatchDataset` — lightweight torch Dataset wrapper for sequence training data ([#306](https://github.com/MTSWebServices/RecTools/pull/306))
- Configurable FFN blocks in `UniSRecNet`: `conv1d` (original paper), `linear_gelu`, `linear_relu` with adjustable expansion factor ([#306](https://github.com/MTSWebServices/RecTools/pull/306))
- @TOPAPEC @feldlime
📦 ✨ Highlights ✨
- Two-stage ranking pipeline — first-stage candidate generation + second-stage reranking is now available in RecTools, fully compatible with our `fit` / `recommend` paradigm.
✨ Added
- Two-stage candidate ranking system with `CandidateRankingModel` and supporting classes (`CandidateGenerator`, `CandidateFeatureCollector`, `Reranker`, `CatBoostReranker`, `PerUserNegativeSampler`) ([#296](https://github.com/MobileTeleSystems/RecTools/pull/296))
📋 Changed
- Used `pm-implicit` instead of `implicit` for Python>=3.10 to support Cuda 12.x ([#298](https://github.com/MobileTeleSystems/RecTools/pull/298))
📦 All contributors
- @blondered @olesyabulgakova @chezou @feldlime
✨ Added
- LiGR transformer layers from ["From Features to Transformers: Redefining Ranking for Scalable Impact"](https://arxiv.org/abs/2502.03417) ([#295](https://github.com/MobileTeleSystems/RecTools/pull/295))
- -
📦 All contributors
- @spirinamayya @blondered
✨ Added
- HSTU Model from "Actions Speak Louder then Words..." implemented in the class `HSTUModel` ([#290](https://github.com/MobileTeleSystems/RecTools/pull/290))
- `leave_one_out_mask` function (`rectools.models.nn.transformers.utils.leave_one_out_mask`) for applying leave-one-out validation during transformer models training.([#292](https://github.com/MobileTeleSystems/RecTools/pull/292))
- `logits_t` argument to `TransformerLightningModuleBase`. It is used to scale logits when computing the loss. ([#290](https://github.com/MobileTeleSystems/RecTools/pull/290))
- `use_scale_factor` argument to `LearnableInversePositionalEncoding`. It scales embeddings by the square root of their dimension — following the original approach from the "Attention Is All You Need" ([#290](https://github.com/MobileTeleSystems/RecTools/pull/290))
- Optional `context` argument to `recommend` method of models and `get_context` function to `rectools.dataset.context.py` ([#290](https://github.com/MobileTeleSystems/RecTools/pull/290))
🐛 Fixed
- [Breaking] Corrected computation of `cosine` distance in `DistanceSimilarityModule`([#290](https://github.com/MobileTeleSystems/RecTools/pull/290))
- Installation issue with `cupy` extra on macOS ([#293](https://github.com/MobileTeleSystems/RecTools/pull/293))
- `torch.dtype object has no attribute 'kind'` error in `TorchRanker` ([#293](https://github.com/MobileTeleSystems/RecTools/pull/293))
🗑️ Removed
- [Breaking] `Dropout` module from `IdEmbeddingsItemNet`. This changes model behaviour during training, so model results starting from this release might slightly differ from previous RecTools versions even when the random seed is fixed.([#290](https://github.com/MobileTeleSystems/RecTools/pull/290))
📦 All contributors
- @teodor-r @feldlime @blondered
✨ Added
- Support for resaving transformer models multiple times and loading trainer state ([#289](https://github.com/MobileTeleSystems/RecTools/pull/289))
- `extras` argument to `SequenceDataset`, `extra_cols` argument to `TransformerDataPreparatorBase`, `session_tower_forward` and `item_tower_forward` methods to `SimilarityModuleBase` ([#287](https://github.com/MobileTeleSystems/RecTools/pull/287))
🐛 Fixed
- [Breaking] Now `LastNSplitter` guarantees taking the last ordered interaction in dataframe in case of identical timestamps ([#288](https://github.com/MobileTeleSystems/RecTools/pull/288))
📦 All contributors
- @spirinamayya @nsundalov @teodor-r
✨ Added
- Python 3.13 support ([#227](https://github.com/MobileTeleSystems/RecTools/pull/227))
- `fit_partial` implementation for Transformer-based models ([#273](https://github.com/MobileTeleSystems/RecTools/pull/273))
- `map_location` and `model_params_update` arguments for the function `load_from_checkpoint` for Transformer-based models. Use `map_location` to explicitly specify the computing new device and `model_params_update` to update original model parameters (e.g. remove training-specific parameters that are not needed anymore) ([#281](https://github.com/MobileTeleSystems/RecTools/pull/281))
- `get_val_mask_func_kwargs` and `get_trainer_func_kwargs` arguments for Transformer-based models to allow keyword arguments in custom functions used for model training. ([#280](https://github.com/MobileTeleSystems/RecTools/pull/280))
📦 All contributors
- @chezou @spirinamayya @teodor-r
✨ Added
- `TransformerNegativeSamplerBase` and `CatalogUniformSampler` classes, `negative_sampler_type` and `negative_sampler_kwargs` parameters to transformer-based models ([#275](https://github.com/MobileTeleSystems/RecTools/pull/275))
- `SimilarityModuleBase`, `DistanceSimilarityModule`, similarity module to `TransformerTorchBackbone` parameters to transformer-based models `similarity_module_type`, `similarity_module_kwargs` ([#272](https://github.com/MobileTeleSystems/RecTools/pull/272))
- `TransformerBackboneBase`, `backbone_type` and `backbone_kwargs` parameters to transformer-based models ([#277](https://github.com/MobileTeleSystems/RecTools/pull/277))
- `sampled_softmax` loss option for transformer models ([#274](https://github.com/MobileTeleSystems/RecTools/pull/274))
- `out_dim` property to `IdEmbeddingsItemNet`, `CatFeaturesItemNet` and `SumOfEmbeddingsConstructor` ([#276](https://github.com/MobileTeleSystems/RecTools/pull/276))
📦 All contributors
- @spirinamayya @In48semenov @blondered
✨ Added
- `CatalogCoverage` metric ([#266](https://github.com/MobileTeleSystems/RecTools/pull/266), [#267](https://github.com/MobileTeleSystems/RecTools/pull/267))
- `divide_by_achievable` argument to `NDCG` metric ([#266](https://github.com/MobileTeleSystems/RecTools/pull/266))
📋 Changed
- Interactions extra columns are not dropped in `Dataset.filter_interactions` method [#267](https://github.com/MobileTeleSystems/RecTools/pull/267)
📦 ✨ Highlights ✨
- Transformer models are here!
✨ Added
- `SASRecModel` and `BERT4RecModel` - models based on transformer architecture ([#220](https://github.com/MobileTeleSystems/RecTools/pull/220))
- Transfomers extended theory & practice tutorial, advanced training guide and customization guide ([#220](https://github.com/MobileTeleSystems/RecTools/pull/220))
- `use_gpu` for PureSVD ([#229](https://github.com/MobileTeleSystems/RecTools/pull/229))
- `from_params` method for models and `model_from_params` function ([#252](https://github.com/MobileTeleSystems/RecTools/pull/252))
- `TorchRanker` ranker which calculates scores using torch. Supports GPU. [#251](https://github.com/MobileTeleSystems/RecTools/pull/251)
- `Ranker` ranker protocol which unify rankers call. [#251](https://github.com/MobileTeleSystems/RecTools/pull/251)
📋 Changed
- `ImplicitRanker` `rank` method compatible with `Ranker` protocol. `use_gpu` and `num_threads` params moved from `rank` method to `__init__`. [#251](https://github.com/MobileTeleSystems/RecTools/pull/251)
✨ New contributors
- @nsundalov made their first contribution in https://github.com/MobileTeleSystems/RecTools/pull/251
📦 All contributors
- @feldlime @blondered @spirinamayya @chezou @In48semenov
📦 ✨ Highlights ✨
- Bayesian Personalized Ranking Matrix Factorization (BPR-MF) algorithm is now in the framework!
- See model detail in our [extended baselines tutorial](https://github.com/MobileTeleSystems/RecTools/blob/main/examples/tutorials/baselines_extended_tutorial.ipynb)
✨ Added
- `ImplicitBPRWrapperModel` model with algorithm description in extended baselines tutorial ([#232](https://github.com/MobileTeleSystems/RecTools/pull/232), [#239](https://github.com/MobileTeleSystems/RecTools/pull/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](https://github.com/MobileTeleSystems/RecTools/pull/218))
📦 ✨ 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`.
- `fit_partial` method is introduced for `ImplicitALSWrapperModel` and `LightFMWrapperModel`. These models can now resume training from the previous point.
- LightFM Python 3.12+ support!
✨ Added
- `from_config`, `get_config` and `get_params` methods to all models except neural-net-based ([#170](https://github.com/MobileTeleSystems/RecTools/pull/170))
- `fit_partial` implementation for `ImplicitALSWrapperModel` and `LightFMWrapperModel` ([#203](https://github.com/MobileTeleSystems/RecTools/pull/203), [#210](https://github.com/MobileTeleSystems/RecTools/pull/210), [#223](https://github.com/MobileTeleSystems/RecTools/pull/223))
- `save` and `load` methods to all of the models ([#206](https://github.com/MobileTeleSystems/RecTools/pull/206))
- Model configs example ([#207](https://github.com/MobileTeleSystems/RecTools/pull/207),[#219](https://github.com/MobileTeleSystems/RecTools/pull/219))
- `use_gpu` argument to `ImplicitRanker.rank` method ([#201](https://github.com/MobileTeleSystems/RecTools/pull/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](https://github.com/MobileTeleSystems/RecTools/pull/208))
- dtype adjustment to `recommend`, `recommend_to_items` methods of `ModelBase` ([#211](https://github.com/MobileTeleSystems/RecTools/pull/211))
- `load_model` function ([#213](https://github.com/MobileTeleSystems/RecTools/pull/213))
- + 3 more
🐛 Fixed
- Implicit ALS matrix zero assignment size ([#228](https://github.com/MobileTeleSystems/RecTools/pull/228))
🗑️ Removed
- [Breaking] Python 3.8 support ([#222](https://github.com/MobileTeleSystems/RecTools/pull/222))
✨ New contributors
- @spirinamayya made their first contribution in https://github.com/MobileTeleSystems/RecTools/pull/211
- @Waujito made their first contribution in https://github.com/MobileTeleSystems/RecTools/pull/201
✨ 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. (https://github.com/MobileTeleSystems/RecTools/pull/152)
- `nbformat >= 4.2.0` dependency to `[visuals] `extra (https://github.com/MobileTeleSystems/RecTools/pull/169)
- `filter_interactions` method of `Dataset` (https://github.com/MobileTeleSystems/RecTools/pull/177)
- `on_unsupported_targets` parameter to `recommend` and `recommend_to_items` model methods (https://github.com/MobileTeleSystems/RecTools/pull/177)
- Use `nmslib-metabrainz` for Python 3.11 and upper ([#180](https://github.com/MobielTeleSystems/RecTools/pull/180))
🐛 Fixed
- `display()` method in `MetricsApp` (https://github.com/MobileTeleSystems/RecTools/pull/169)
- `IntraListDiversity `metric computation in `cross_validate` (https://github.com/MobileTeleSystems/RecTools/pull/177)
- Allow warp-kos loss for `LightFMWrapperMode`l (https://github.com/MobileTeleSystems/RecTools/pull/175)
🗑️ Removed
- [Breaking] `assume_external_ids` parameter in `recommend` and `recommend_to_items` model methods (https://github.com/MobileTeleSystems/RecTools/pull/177)
✨ New contributors
- @chezou made their first contribution in https://github.com/MobileTeleSystems/RecTools/pull/180 and https://github.com/MobileTeleSystems/RecTools/pull/175
📦 ✨ 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](https://github.com/MobileTeleSystems/RecTools/blob/main/examples/2_cross_validation.ipynb).
- 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](https://github.com/MobileTeleSystems/RecTools/blob/main/examples/tutorials/baselines_extended_tutorial.ipynb)
✨ Added
- Extended Theory&Practice RecSys baselines tutorial (https://github.com/MobileTeleSystems/RecTools/pull/139)
- `MetricsApp` to create plotly scatterplot widgets for metric-to-metric trade-off analysis (https://github.com/MobileTeleSystems/RecTools/pull/140, https://github.com/MobileTeleSystems/RecTools/pull/154)
- `Intersection` metric (https://github.com/MobileTeleSystems/RecTools/pull/148)
- `PartialAUC` and `PAP` metrics (https://github.com/MobileTeleSystems/RecTools/pull/149)
- New params (`tol`, `maxiter`, `random_state`) to the `PureSVDModel` (https://github.com/MobileTeleSystems/RecTools/pull/130)
- Recommendations data quality metrics: `SufficientReco`, `UnrepeatedReco`, `CoveredUsers` (https://github.com/MobileTeleSystems/RecTools/pull/155)
- `r_precision` parameter to `Precision` metric (https://github.com/MobileTeleSystems/RecTools/pull/155)
🐛 Fixed
- Used `rectools-lightfm` instead of pure `lightfm` that allowed to install it using poetry>=1.5.0 (https://github.com/MobileTeleSystems/RecTools/pull/165)
- Added restriction to `pytorch` version for MacOSX + x86_64 that allows to install it on such platforms (https://github.com/MobileTeleSystems/RecTools/pull/142)
- `PopularInCategoryModel` fitting for multiple times, `cross_validate` compatibility, behaviour with empty category interactions (https://github.com/MobileTeleSystems/RecTools/pull/163)
📦 ✨ 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
✨ Added
- Warm users/items support in `Dataset` ([#77](https://github.com/MobileTeleSystems/RecTools/pull/77))
- Warm and cold users/items support in `ModelBase` and all possible models ([#77](https://github.com/MobileTeleSystems/RecTools/pull/77), [#120](https://github.com/MobileTeleSystems/RecTools/pull/120), [#122](https://github.com/MobileTeleSystems/RecTools/pull/122))
- Warm and cold users/items support in `cross_validate` ([#77](https://github.com/MobileTeleSystems/RecTools/pull/77))
- [Breaking] Default value for train dataset type and params for user and item dataset types in `DSSMModel` ([#122](https://github.com/MobileTeleSystems/RecTools/pull/122))
- [Breaking] `n_factors` and `deterministic` params to `DSSMModel` ([#122](https://github.com/MobileTeleSystems/RecTools/pull/122))
- Hit Rate metric ([#124](https://github.com/MobileTeleSystems/RecTools/pull/124))
- Python `3.11` support (without `nmslib`) ([#126](https://github.com/MobileTeleSystems/RecTools/pull/126))
- Python `3.12` support (without `nmslib` and `lightfm`) ([#126](https://github.com/MobileTeleSystems/RecTools/pull/126))
📋 Changed
- Changed the logic of choosing random sampler for `RandomModel` and increased the sampling speed ([#120](https://github.com/MobileTeleSystems/RecTools/pull/120))
- [Breaking] Changed the logic of `RandomModel`: now the recommendations are different for repeated calls of recommend methods ([#120](https://github.com/MobileTeleSystems/RecTools/pull/120))
- Torch datasets to support warm recommendations ([#122](https://github.com/MobileTeleSystems/RecTools/pull/122))
- [Breaking] Replaced `include_warm` parameter in `Dataset.get_user_item_matrix` to pair `include_warm_users` and `include_warm_items` ([#122](https://github.com/MobileTeleSystems/RecTools/pull/122))
- [Breaking] Renamed torch datasets and `dataset_type` to `train_dataset_type` param in `DSSMModel` ([#122](https://github.com/MobileTeleSystems/RecTools/pull/122))
- [Breaking] Updated minimum versions of `numpy`, `scipy`, `pandas`, `typeguard` ([#126](https://github.com/MobileTeleSystems/RecTools/pull/126))
- [Breaking] Set restriction `scipy < 1.13` ([#126](https://github.com/MobileTeleSystems/RecTools/pull/126))
🗑️ Removed
- [Breaking] `return_external_ids` parameter in `recommend` and `recommend_to_items` model methods ([#77](https://github.com/MobileTeleSystems/RecTools/pull/77))
- [Breaking] Python `3.7` support ([#126](https://github.com/MobileTeleSystems/RecTools/pull/126))
📦 ✨ Highlights ✨
- Visualization app is now here! See our [extended example](https://github.com/MobileTeleSystems/RecTools/blob/main/examples/7_visualization.ipynb) for cool interactive Jupyter widgets.
- Also we introduced `EASE` model and a new popularity bias metric `AvgRecPopularity`.
✨ Added
- `VisualApp` and `ItemToItemVisualApp` widgets for visual comparison of recommendations ([#80](https://github.com/MobileTeleSystems/RecTools/pull/80), [#82](https://github.com/MobileTeleSystems/RecTools/pull/82), [#85](https://github.com/MobileTeleSystems/RecTools/pull/85), [#115](https://github.com/MobileTeleSystems/RecTools/pull/115))
- Methods for conversion `Interactions` to raw form and for getting raw interactions from `Dataset` ([#69](https://github.com/MobileTeleSystems/RecTools/pull/69))
- `AvgRecPopularity (Average Recommendation Popularity)` to `metrics` ([#81](https://github.com/MobileTeleSystems/RecTools/pull/81))
- Added `normalized` parameter to `AvgRecPopularity` metric ([#89](https://github.com/MobileTeleSystems/RecTools/pull/89))
- Added `EASE` model ([#107](https://github.com/MobileTeleSystems/RecTools/pull/107))
📋 Changed
- Loosened `pandas`, `torch` and `torch-light` versions for `python >= 3.8` ([#58](https://github.com/MobileTeleSystems/RecTools/pull/58))
🐛 Fixed
- Bug in `Interactions.from_raw` method ([#58](https://github.com/MobileTeleSystems/RecTools/pull/58))
- Mistakes in formulas for Serendipity and MIUF in docstrings ([#115](https://github.com/MobileTeleSystems/RecTools/pull/115))
- Examples reproducibility on Google Colab ([#115](https://github.com/MobileTeleSystems/RecTools/pull/115))
✨ Added
- Ability to pass internal ids to `recommend` and `recommend_to_items` methods and get internal ids back ([#70](https://github.com/MobileTeleSystems/RecTools/pull/70))
- `rectools.model_selection.cross_validate` function ([#71](https://github.com/MobileTeleSystems/RecTools/pull/71), [#73](https://github.com/MobileTeleSystems/RecTools/pull/73))
📋 Changed
- Loosened `lightfm` version, now it's possible to use 1.16 and 1.17 ([#72](https://github.com/MobileTeleSystems/RecTools/pull/72))
🐛 Fixed
- Small bug in `LastNSplitter` with incorrect `i_split` in info ([#70](https://github.com/MobileTeleSystems/RecTools/pull/70))
📦 Summary
- Enhanced examples
- Optimised DSSM inference
- Updated high border of `attrs` version to `24.0.0`
✨ Added
- LightFM wrapper inference speed benchmark ([#60](https://github.com/MobileTeleSystems/RecTools/pull/60))
- iALS with features quality benchmark ([#60](https://github.com/MobileTeleSystems/RecTools/pull/60))
📋 Changed
- Updated `attrs` version ([#56](https://github.com/MobileTeleSystems/RecTools/pull/56))
- Optimized inference for vector models with EUCLIDEAN distance using `implicit` library topk method ([#57](https://github.com/MobileTeleSystems/RecTools/pull/57))
- Changed features processing example ([#60](https://github.com/MobileTeleSystems/RecTools/pull/60))
📦 ✨ 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 🎉
✨ Added
- `MRR (Mean Reciprocal Rank)` to `metrics` ([#29](https://github.com/MobileTeleSystems/RecTools/pull/29))
- `F1beta`, `MCC (Matthew correlation coefficient)` to `metrics` ([#32](https://github.com/MobileTeleSystems/RecTools/pull/32))
- Base `Splitter` class to construct data splitters ([#31](https://github.com/MobileTeleSystems/RecTools/pull/31))
- `RandomSplitter` to `model_selection` ([#31](https://github.com/MobileTeleSystems/RecTools/pull/31))
- `LastNSplitter` to `model_selection` ([#33](https://github.com/MobileTeleSystems/RecTools/pull/32))
- Support for `Python 3.10` ([#47](https://github.com/MobileTeleSystems/RecTools/pull/47))
📋 Changed
- Bumped `implicit` version to `0.7.1` ([#45](https://github.com/MobileTeleSystems/RecTools/pull/45))
- Bumped `lightfm` version to `1.17` ([#43](https://github.com/MobileTeleSystems/RecTools/pull/43))
- Bumped `pylint` version to `2.17.6` ([#43](https://github.com/MobileTeleSystems/RecTools/pull/43))
- Moved `nmslib` to extras ([#36](https://github.com/MobileTeleSystems/RecTools/pull/36))
- Moved `lightfm` to extras ([#51](https://github.com/MobileTeleSystems/RecTools/pull/51))
- Renamed `nn` extra to `torch` ([#51](https://github.com/MobileTeleSystems/RecTools/pull/51))
- Optimized inference for vector models with COSINE and DOT distances using `implicit` library topk method ([#52](https://github.com/MobileTeleSystems/RecTools/pull/52))
- Changed initialization of `TimeRangeSplitter` (instead of `date_range` argument, use `test_size` and `n_splits`) ([#53](https://github.com/MobileTeleSystems/RecTools/pull/51))
- + 1 more
🐛 Fixed
- Bugs with new version of `pytorch_lightning` ([#43](https://github.com/MobileTeleSystems/RecTools/pull/43))
- `pylint` config for new version ([#43](https://github.com/MobileTeleSystems/RecTools/pull/43))
- Cyclic imports ([#45](https://github.com/MobileTeleSystems/RecTools/pull/45))
🗑️ Removed
- `Markdown` dependancy ([#54](https://github.com/MobileTeleSystems/RecTools/pull/54))
📋 Changes
- 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.
# First release Base library version
