MobileTeleSystems / RecTools

RecTools - library to build Recommendation Systems easier and faster than ever before
Apache License 2.0
287 stars 37 forks source link

LightFMWrapperModel doesn't work with loss="warp-kos" #174

Closed chezou closed 3 months ago

chezou commented 3 months ago

What happened?

When I try to fit with LightFMWrapperModel by setting loss="warp-kos", it fails with the error.

NotImplementedError: k-OS loss with sample weights not implemented.

This is because sample_weight to be passed to LightFM model is fixed with ui_coo.

Possible fix can be:

diff --git a/rectools/models/lightfm.py b/rectools/models/lightfm.py
index 693d7ae..32dad45 100644
--- a/rectools/models/lightfm.py
+++ b/rectools/models/lightfm.py
@@ -77,12 +77,13 @@ class LightFMWrapperModel(FixedColdRecoModelMixin, VectorModel):
         ui_coo = dataset.get_user_item_matrix(include_weights=True).tocoo(copy=False)
         user_features = self._prepare_features(dataset.get_hot_user_features(), dataset.n_hot_users)
         item_features = self._prepare_features(dataset.get_hot_item_features(), dataset.n_hot_items)
+        sample_weight = None if self._model.loss == "warp-kos" else ui_coo

         self.model.fit(
             ui_coo,
             user_features=user_features,
             item_features=item_features,
-            sample_weight=ui_coo,
+            sample_weight=sample_weight,
             epochs=self.n_epochs,
             num_threads=self.n_threads,
             verbose=self.verbose > 0,

Expected behavior

Train successfly.

Relevant logs and/or screenshots

Detailed Traceback ``` ╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮ │ /Users/ariga/src/td-misc/aki/rectools-test/./src/rectools_test/training.py:362 in run_all │ │ │ │ 359 │ │ │ 360 │ s_time = time.time() │ │ 361 │ model = make_base_model(algorithm=algorithm, config=config) │ │ ❱ 362 │ model.fit(prep_data.dataset) │ │ 363 │ train_time = time.time() - s_time │ │ 364 │ logger.info(f"Finished training: elapsed time: {train_time:.4f} seconds") │ │ 365 │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ add_cold = False │ │ │ │ algorithm = 'lightfm' │ │ │ │ alpha = 10.0 │ │ │ │ ann = False │ │ │ │ arg_params = { │ │ │ │ │ 'algorithm': 'lightfm', │ │ │ │ │ 'factors': 32, │ │ │ │ │ 'num_threads': 16, │ │ │ │ │ 'regularization': 0.1, │ │ │ │ │ 'alpha': 10.0, │ │ │ │ │ 'iterations': 10, │ │ │ │ │ 'verify_negative_samples': True, │ │ │ │ │ 'max_k': 100, │ │ │ │ │ 'similarity': 'bm25', │ │ │ │ │ 'k': 5, │ │ │ │ │ ... +12 │ │ │ │ } │ │ │ │ begin_from = None │ │ │ │ config = LightFMConfig( │ │ │ │ │ no_components=32, │ │ │ │ │ learning_rate=0.05, │ │ │ │ │ k=5, │ │ │ │ │ n=10, │ │ │ │ │ item_alpha=0.0, │ │ │ │ │ user_alpha=0.0, │ │ │ │ │ loss='warp-kos', │ │ │ │ │ learning_schedule='adagrad', │ │ │ │ │ max_sampled=10, │ │ │ │ │ random_state=42, │ │ │ │ │ num_threads=16, │ │ │ │ │ epochs=1 │ │ │ │ ) │ │ │ │ df = │ │ │ │ │ │ user_id item_id weight │ │ │ │ datetime time │ │ │ │ 0 3zBJUlWtPNoZ0uN83ODbyg 2bXm0SynOfxDzfrdrCyXqg 4.0 │ │ │ │ 2005-02-16 03:23:22 1706854726 │ │ │ │ 1 3zBJUlWtPNoZ0uN83ODbyg 3g6XqkBikTTbZmTukbeGnw 4.0 │ │ │ │ 2005-02-16 03:29:39 1706854726 │ │ │ │ 2 3zBJUlWtPNoZ0uN83ODbyg PP3BBaVxZLcJU54uP_wL6Q 5.0 │ │ │ │ 2005-02-16 04:06:26 1706854726 │ │ │ │ 3 XCsZ3hWa_6oP1WkWvK7pmg U3grYFIeu6RgAAQgdriHww 5.0 │ │ │ │ 2005-03-01 16:57:17 1706854726 │ │ │ │ 4 XCsZ3hWa_6oP1WkWvK7pmg Aes-0Q_guDeYewMapFs_vg 2.0 │ │ │ │ 2005-03-01 16:59:37 1706854726 │ │ │ │ ... ... ... ... │ │ │ │ ... ... │ │ │ │ 6990275 lmiiFd9KC15fs4xtEoXRvw XDMno4l95AXgYOd0yDtHZA 5.0 │ │ │ │ 2022-01-19 19:48:13 1706854726 │ │ │ │ 6990276 2Mb0st9WVyccaz6sKNLHWw M88FFZZ2o_7QKpCFA_8RtA 5.0 │ │ │ │ 2022-01-19 19:48:16 1706854726 │ │ │ │ 6990277 3TQKP7KlNRdrI2gOkG7slg jVg-KTXEFIeAq47DTp4Hrw 5.0 │ │ │ │ 2022-01-19 19:48:19 1706854726 │ │ │ │ 6990278 i1PMqye40QWNkJ0MYGHuzg J0joPXxmN-_9Lzafspqdbw 5.0 │ │ │ │ 2022-01-19 19:48:25 1706854726 │ │ │ │ 6990279 IH0ToaZ8hJXO2pVieN7dpQ VItkA7pL82rCZdxHH8vBGA 5.0 │ │ │ │ 2022-01-19 19:48:45 1706854726 │ │ │ │ │ │ │ │ [6990280 rows x 5 columns] │ │ │ │ elapsed_time = 9.071298122406006 │ │ │ │ epochs = 1 │ │ │ │ factors = 32 │ │ │ │ inverse = False │ │ │ │ item_alpha = 0.0 │ │ │ │ item_col = 'item_id' │ │ │ │ iterations = 10 │ │ │ │ k = 5 │ │ │ │ learning_rate = 0.05 │ │ │ │ loss = 'warp-kos' │ │ │ │ max_k = 100 │ │ │ │ max_sampled = 10 │ │ │ │ model = │ │ │ │ n = 10 │ │ │ │ num_threads = 16 │ │ │ │ path = PosixPath('dataset/yelp.parquet') │ │ │ │ popularity = 'n_users' │ │ │ │ prep_data = PreparedData( │ │ │ │ │ dataset=Dataset( │ │ │ │ │ │ user_id_map=IdMap( │ │ │ │ │ │ │ external_ids=array(['3zBJUlWtPNoZ0uN83ODbyg', │ │ │ │ 'XCsZ3hWa_6oP1WkWvK7pmg', │ │ │ │ │ '3MYdpmHeNwC6FquRWi3YOg', ..., 'z0cTE8PN7rqkAVoI7Eg11A', │ │ │ │ │ 'JoxuuaffA-5SyimAW2M6FA', 'FsogojqkrFuhNsZCYknuNA'], │ │ │ │ dtype=object) │ │ │ │ │ │ ), │ │ │ │ │ │ item_id_map=IdMap( │ │ │ │ │ │ │ external_ids=array(['2bXm0SynOfxDzfrdrCyXqg', │ │ │ │ '3g6XqkBikTTbZmTukbeGnw', │ │ │ │ │ 'PP3BBaVxZLcJU54uP_wL6Q', ..., 'OyPQNwQtCuYkFuV3FlsnnA', │ │ │ │ │ '5NcxXrvBBFst_oyAlbjZjg', 'dtOMOcHGL6LsrXsObi7jpw'], │ │ │ │ dtype=object) │ │ │ │ │ │ ), │ │ │ │ │ │ interactions=Interactions( │ │ │ │ │ │ │ df= user_id item_id weight │ │ │ │ datetime │ │ │ │ 0 0 0 4.0 2005-02-16 03:23:22 │ │ │ │ 1 0 1 4.0 2005-02-16 03:29:39 │ │ │ │ 2 0 2 5.0 2005-02-16 04:06:26 │ │ │ │ 3 1 3 5.0 2005-03-01 16:57:17 │ │ │ │ 4 1 4 2.0 2005-03-01 16:59:37 │ │ │ │ ... ... ... ... ... │ │ │ │ 3513731 226038 86335 4.0 2019-07-25 15:15:54 │ │ │ │ 3513732 204231 136418 5.0 2019-07-25 15:17:46 │ │ │ │ 3513733 196724 8668 4.0 2019-07-25 15:18:23 │ │ │ │ 3513734 204231 130186 5.0 2019-07-25 15:19:21 │ │ │ │ 3513735 180853 137613 4.0 2019-07-25 15:19:26 │ │ │ │ │ │ │ │ [3513736 rows x 4 columns] │ │ │ │ │ │ ), │ │ │ │ │ │ user_features=None, │ │ │ │ │ │ item_features=None │ │ │ │ │ ), │ │ │ │ │ train_df= user_id │ │ │ │ item_id weight datetime time │ │ │ │ 0 3zBJUlWtPNoZ0uN83ODbyg 2bXm0SynOfxDzfrdrCyXqg 4.0 │ │ │ │ 2005-02-16 03:23:22 1706854726 │ │ │ │ 1 3zBJUlWtPNoZ0uN83ODbyg 3g6XqkBikTTbZmTukbeGnw 4.0 │ │ │ │ 2005-02-16 03:29:39 1706854726 │ │ │ │ 2 3zBJUlWtPNoZ0uN83ODbyg PP3BBaVxZLcJU54uP_wL6Q 5.0 │ │ │ │ 2005-02-16 04:06:26 1706854726 │ │ │ │ 3 XCsZ3hWa_6oP1WkWvK7pmg U3grYFIeu6RgAAQgdriHww 5.0 │ │ │ │ 2005-03-01 16:57:17 1706854726 │ │ │ │ 4 XCsZ3hWa_6oP1WkWvK7pmg Aes-0Q_guDeYewMapFs_vg 2.0 │ │ │ │ 2005-03-01 16:59:37 1706854726 │ │ │ │ ... ... ... ... │ │ │ │ ... ... │ │ │ │ 3513731 vaRtbJJjR-AFGGjsIsH_Gw CBWmYHLgtFrOJs7SCcQn0g 4.0 │ │ │ │ 2019-07-25 15:15:54 1706854726 │ │ │ │ 3513732 D3Epetlc7J9aeoOJzCTIXA urMU-l8ak4qjTvYT-DC0eA 5.0 │ │ │ │ 2019-07-25 15:17:46 1706854726 │ │ │ │ 3513733 WspwIQyKn6icthQ83scA2g P6iHMvttUL4HJ0fXbb_gow 4.0 │ │ │ │ 2019-07-25 15:18:23 1706854726 │ │ │ │ 3513734 D3Epetlc7J9aeoOJzCTIXA XXXpyqzP0B2i8J2eWr2Zig 5.0 │ │ │ │ 2019-07-25 15:19:21 1706854726 │ │ │ │ 3513735 wXdbkFZsfDR7utJvbWElyA pVwMHUYFMuwmRe6M--ZzwA 4.0 │ │ │ │ 2019-07-25 15:19:26 1706854726 │ │ │ │ │ │ │ │ [3513736 rows x 5 columns], │ │ │ │ │ test_df= user_id │ │ │ │ item_id weight datetime time │ │ │ │ 3513736 pZmp3Y4N4vy-ukk_5HEUGg RyndNvh5DEsywX76cAkpeg 5.0 │ │ │ │ 2019-07-25 15:20:43 1706854726 │ │ │ │ 3513737 x_oKLABbfrx626bZtmLKhw f88P1gIbRpRzsYAHj9hGdA 1.0 │ │ │ │ 2019-07-25 15:22:48 1706854726 │ │ │ │ 3513738 pZmp3Y4N4vy-ukk_5HEUGg TghFJ7xWtTLg1bVDrAeAqQ 3.0 │ │ │ │ 2019-07-25 15:23:03 1706854726 │ │ │ │ 3513739 Mr65i6SGEcG0sLcUkhNyHg e1S4RgmEpIJ2iONMV4oxeQ 4.0 │ │ │ │ 2019-07-25 15:23:20 1706854726 │ │ │ │ 3513740 5kL_t1bDR4HLDq_xNo5KZw 5xRZFazPsVLZXijsYwR7Ng 5.0 │ │ │ │ 2019-07-25 15:23:54 1706854726 │ │ │ │ ... ... ... ... │ │ │ │ ... ... │ │ │ │ 4392164 teauejBc7ynvX_oBuAJl1g NGMLSJq_qDgFfZc2-4xwEg 1.0 │ │ │ │ 2022-01-19 19:43:47 1706854726 │ │ │ │ 4392165 BlvDcYBfjf55OuCLfixEsQ Eo0psaCr_gcty9QqyUy46Q 5.0 │ │ │ │ 2022-01-19 19:44:03 1706854726 │ │ │ │ 4392166 u2a88PlFOY9E590qO-h5_g P8tNjsI6jE--HsvfeW-Mcw 5.0 │ │ │ │ 2022-01-19 19:45:56 1706854726 │ │ │ │ 4392167 lmiiFd9KC15fs4xtEoXRvw XDMno4l95AXgYOd0yDtHZA 5.0 │ │ │ │ 2022-01-19 19:48:13 1706854726 │ │ │ │ 4392168 IH0ToaZ8hJXO2pVieN7dpQ VItkA7pL82rCZdxHH8vBGA 5.0 │ │ │ │ 2022-01-19 19:48:45 1706854726 │ │ │ │ │ │ │ │ [878433 rows x 5 columns], │ │ │ │ │ test_users=array(['pZmp3Y4N4vy-ukk_5HEUGg', │ │ │ │ 'x_oKLABbfrx626bZtmLKhw', │ │ │ │ │ 'Mr65i6SGEcG0sLcUkhNyHg', ..., 'zFuCgAuMsomU1FMomDCHhQ', │ │ │ │ │ 'Q6owJNgoa1fS9JjYR3r7Ug', '7SFUWbb33dOR8lmO51h3dg'], │ │ │ │ dtype=object), │ │ │ │ │ catalog=array(['2bXm0SynOfxDzfrdrCyXqg', │ │ │ │ '3g6XqkBikTTbZmTukbeGnw', │ │ │ │ │ 'PP3BBaVxZLcJU54uP_wL6Q', ..., 'OyPQNwQtCuYkFuV3FlsnnA', │ │ │ │ │ '5NcxXrvBBFst_oyAlbjZjg', 'dtOMOcHGL6LsrXsObi7jpw'], │ │ │ │ dtype=object) │ │ │ │ ) │ │ │ │ rating_col = 'rating' │ │ │ │ regularization = 0.1 │ │ │ │ report = False │ │ │ │ s_time = 1723246349.69756 │ │ │ │ similarity = 'bm25' │ │ │ │ test_method = 'tsbr' │ │ │ │ time_col = 'timestamp' │ │ │ │ tol = 0.0 │ │ │ │ top_k = 10 │ │ │ │ tune = False │ │ │ │ tune_time = 0.0 │ │ │ │ user_alpha = 0.0 │ │ │ │ user_col = 'user_id' │ │ │ │ verify_negative_samples = True │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/ariga/src/td-misc/aki/rectools-test/.venv/lib/python3.11/site-packages/rectools/models/ba │ │ se.py:67 in fit │ │ │ │ 64 │ │ ------- │ │ 65 │ │ self │ │ 66 │ │ """ │ │ ❱ 67 │ │ self._fit(dataset, *args, **kwargs) │ │ 68 │ │ self.is_fitted = True │ │ 69 │ │ return self │ │ 70 │ │ │ │ ╭───────────────────────────────────────── locals ──────────────────────────────────────────╮ │ │ │ args = () │ │ │ │ dataset = Dataset( │ │ │ │ │ user_id_map=IdMap( │ │ │ │ │ │ external_ids=array(['3zBJUlWtPNoZ0uN83ODbyg', 'XCsZ3hWa_6oP1WkWvK7pmg', │ │ │ │ │ '3MYdpmHeNwC6FquRWi3YOg', ..., 'z0cTE8PN7rqkAVoI7Eg11A', │ │ │ │ │ 'JoxuuaffA-5SyimAW2M6FA', 'FsogojqkrFuhNsZCYknuNA'], dtype=object) │ │ │ │ │ ), │ │ │ │ │ item_id_map=IdMap( │ │ │ │ │ │ external_ids=array(['2bXm0SynOfxDzfrdrCyXqg', '3g6XqkBikTTbZmTukbeGnw', │ │ │ │ │ 'PP3BBaVxZLcJU54uP_wL6Q', ..., 'OyPQNwQtCuYkFuV3FlsnnA', │ │ │ │ │ '5NcxXrvBBFst_oyAlbjZjg', 'dtOMOcHGL6LsrXsObi7jpw'], dtype=object) │ │ │ │ │ ), │ │ │ │ │ interactions=Interactions( │ │ │ │ │ │ df= user_id item_id weight datetime │ │ │ │ 0 0 0 4.0 2005-02-16 03:23:22 │ │ │ │ 1 0 1 4.0 2005-02-16 03:29:39 │ │ │ │ 2 0 2 5.0 2005-02-16 04:06:26 │ │ │ │ 3 1 3 5.0 2005-03-01 16:57:17 │ │ │ │ 4 1 4 2.0 2005-03-01 16:59:37 │ │ │ │ ... ... ... ... ... │ │ │ │ 3513731 226038 86335 4.0 2019-07-25 15:15:54 │ │ │ │ 3513732 204231 136418 5.0 2019-07-25 15:17:46 │ │ │ │ 3513733 196724 8668 4.0 2019-07-25 15:18:23 │ │ │ │ 3513734 204231 130186 5.0 2019-07-25 15:19:21 │ │ │ │ 3513735 180853 137613 4.0 2019-07-25 15:19:26 │ │ │ │ │ │ │ │ [3513736 rows x 4 columns] │ │ │ │ │ ), │ │ │ │ │ user_features=None, │ │ │ │ │ item_features=None │ │ │ │ ) │ │ │ │ kwargs = {} │ │ │ │ self = │ │ │ ╰───────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/ariga/src/td-misc/aki/rectools-test/.venv/lib/python3.11/site-packages/rectools/models/li │ │ ghtfm.py:81 in _fit │ │ │ │ 78 │ │ user_features = self._prepare_features(dataset.get_hot_user_features(), dataset. │ │ 79 │ │ item_features = self._prepare_features(dataset.get_hot_item_features(), dataset. │ │ 80 │ │ │ │ ❱ 81 │ │ self.model.fit( │ │ 82 │ │ │ ui_coo, │ │ 83 │ │ │ user_features=user_features, │ │ 84 │ │ │ item_features=item_features, │ │ │ │ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │ │ │ dataset = Dataset( │ │ │ │ │ user_id_map=IdMap( │ │ │ │ │ │ external_ids=array(['3zBJUlWtPNoZ0uN83ODbyg', │ │ │ │ 'XCsZ3hWa_6oP1WkWvK7pmg', │ │ │ │ │ '3MYdpmHeNwC6FquRWi3YOg', ..., 'z0cTE8PN7rqkAVoI7Eg11A', │ │ │ │ │ 'JoxuuaffA-5SyimAW2M6FA', 'FsogojqkrFuhNsZCYknuNA'], dtype=object) │ │ │ │ │ ), │ │ │ │ │ item_id_map=IdMap( │ │ │ │ │ │ external_ids=array(['2bXm0SynOfxDzfrdrCyXqg', │ │ │ │ '3g6XqkBikTTbZmTukbeGnw', │ │ │ │ │ 'PP3BBaVxZLcJU54uP_wL6Q', ..., 'OyPQNwQtCuYkFuV3FlsnnA', │ │ │ │ │ '5NcxXrvBBFst_oyAlbjZjg', 'dtOMOcHGL6LsrXsObi7jpw'], dtype=object) │ │ │ │ │ ), │ │ │ │ │ interactions=Interactions( │ │ │ │ │ │ df= user_id item_id weight datetime │ │ │ │ 0 0 0 4.0 2005-02-16 03:23:22 │ │ │ │ 1 0 1 4.0 2005-02-16 03:29:39 │ │ │ │ 2 0 2 5.0 2005-02-16 04:06:26 │ │ │ │ 3 1 3 5.0 2005-03-01 16:57:17 │ │ │ │ 4 1 4 2.0 2005-03-01 16:59:37 │ │ │ │ ... ... ... ... ... │ │ │ │ 3513731 226038 86335 4.0 2019-07-25 15:15:54 │ │ │ │ 3513732 204231 136418 5.0 2019-07-25 15:17:46 │ │ │ │ 3513733 196724 8668 4.0 2019-07-25 15:18:23 │ │ │ │ 3513734 204231 130186 5.0 2019-07-25 15:19:21 │ │ │ │ 3513735 180853 137613 4.0 2019-07-25 15:19:26 │ │ │ │ │ │ │ │ [3513736 rows x 4 columns] │ │ │ │ │ ), │ │ │ │ │ user_features=None, │ │ │ │ │ item_features=None │ │ │ │ ) │ │ │ │ item_features = None │ │ │ │ self = │ │ │ │ ui_coo = <267533x138087 sparse matrix of type '' │ │ │ │ │ │ with 3361529 stored elements in COOrdinate format> │ │ │ │ user_features = None │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/ariga/src/td-misc/aki/rectools-test/.venv/lib/python3.11/site-packages/lightfm/lightfm.py │ │ :550 in fit │ │ │ │ 547 │ │ # Discard old results, if any │ │ 548 │ │ self._reset_state() │ │ 549 │ │ │ │ ❱ 550 │ │ return self.fit_partial( │ │ 551 │ │ │ interactions, │ │ 552 │ │ │ user_features=user_features, │ │ 553 │ │ │ item_features=item_features, │ │ │ │ ╭──────────────────────────────────── locals ────────────────────────────────────╮ │ │ │ epochs = 1 │ │ │ │ interactions = <267533x138087 sparse matrix of type '' │ │ │ │ │ │ with 3361529 stored elements in COOrdinate format> │ │ │ │ item_features = None │ │ │ │ num_threads = 16 │ │ │ │ sample_weight = <267533x138087 sparse matrix of type '' │ │ │ │ │ │ with 3361529 stored elements in COOrdinate format> │ │ │ │ self = │ │ │ │ user_features = None │ │ │ │ verbose = False │ │ │ ╰────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/ariga/src/td-misc/aki/rectools-test/.venv/lib/python3.11/site-packages/lightfm/lightfm.py │ │ :622 in fit_partial │ │ │ │ 619 │ │ if interactions.dtype != CYTHON_DTYPE: │ │ 620 │ │ │ interactions.data = interactions.data.astype(CYTHON_DTYPE) │ │ 621 │ │ │ │ ❱ 622 │ │ sample_weight_data = self._process_sample_weight(interactions, sample_weight) │ │ 623 │ │ │ │ 624 │ │ n_users, n_items = interactions.shape │ │ 625 │ │ (user_features, item_features) = self._construct_feature_matrices( │ │ │ │ ╭──────────────────────────────────── locals ────────────────────────────────────╮ │ │ │ epochs = 1 │ │ │ │ interactions = <267533x138087 sparse matrix of type '' │ │ │ │ │ │ with 3361529 stored elements in COOrdinate format> │ │ │ │ item_features = None │ │ │ │ num_threads = 16 │ │ │ │ sample_weight = <267533x138087 sparse matrix of type '' │ │ │ │ │ │ with 3361529 stored elements in COOrdinate format> │ │ │ │ self = │ │ │ │ user_features = None │ │ │ │ verbose = False │ │ │ ╰────────────────────────────────────────────────────────────────────────────────╯ │ │ │ │ /Users/ariga/src/td-misc/aki/rectools-test/.venv/lib/python3.11/site-packages/lightfm/lightfm.py │ │ :386 in _process_sample_weight │ │ │ │ 383 │ │ if sample_weight is not None: │ │ 384 │ │ │ │ │ 385 │ │ │ if self.loss == "warp-kos": │ │ ❱ 386 │ │ │ │ raise NotImplementedError( │ │ 387 │ │ │ │ │ "k-OS loss with sample weights " "not implemented." │ │ 388 │ │ │ │ ) │ │ 389 │ │ │ │ ╭──────────────────────────────────── locals ────────────────────────────────────╮ │ │ │ interactions = <267533x138087 sparse matrix of type '' │ │ │ │ │ │ with 3361529 stored elements in COOrdinate format> │ │ │ │ sample_weight = <267533x138087 sparse matrix of type '' │ │ │ │ │ │ with 3361529 stored elements in COOrdinate format> │ │ │ │ self = │ │ │ ╰────────────────────────────────────────────────────────────────────────────────╯ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ NotImplementedError: k-OS loss with sample weights not implemented. ```

Operating System

macOS Sonoma

Python Version

Python 3.11.9

RecTools version

0.7.0