Exemple #1
0
 def setUpClass(cls):
     cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
         num_users=15, num_items=30, interaction_density=.5, num_user_features=200, num_item_features=200,
         n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5
     )
     tf.reset_default_graph()
     set_session(None)
Exemple #2
0
    def test_basic_usage(self):
        # Build the model with default parameters
        model = TensorRec()

        # Generate some dummy data
        interactions, user_features, item_features = generate_dummy_data(
            num_users=100, num_items=150, interaction_density=.05)

        # Fit the model
        model.fit(interactions,
                  user_features,
                  item_features,
                  epochs=5,
                  verbose=True)

        # Predict scores for user 75 on items 100, 101, and 102
        predictions = model.predict(user_ids=[75, 75, 75],
                                    item_ids=[100, 101, 102],
                                    user_features=user_features,
                                    item_features=item_features)

        # Calculate and print the recall at 10
        r_at_k = recall_at_k(model,
                             interactions,
                             k=10,
                             user_features=user_features,
                             item_features=item_features)
        print(np.mean(r_at_k))

        self.assertIsNotNone(predictions)
Exemple #3
0
    def setUpClass(cls):

        cls.n_users = 15
        cls.n_items = 30

        cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
            num_users=cls.n_users,
            num_items=cls.n_items,
            interaction_density=.5,
            num_user_features=200,
            num_item_features=200,
            n_features_per_user=20,
            n_features_per_item=20,
            pos_int_ratio=.5,
            return_datasets=True)

        cls.standard_model = TensorRec(n_components=10)
        cls.standard_model.fit(cls.interactions,
                               cls.user_features,
                               cls.item_features,
                               epochs=10)

        cls.unbiased_model = TensorRec(n_components=10, biased=False)
        cls.unbiased_model.fit(cls.interactions,
                               cls.user_features,
                               cls.item_features,
                               epochs=10)
Exemple #4
0
 def test_fit(self):
     interactions, user_features, item_features = generate_dummy_data(
         num_users=10, num_items=10, interaction_density=.5)
     model = TensorRec(n_components=10)
     model.fit(interactions, user_features, item_features, epochs=10)
     # Ensure that the nodes have been built
     self.assertIsNotNone(model.tf_prediction_dense)
Exemple #5
0
    def setUpClass(cls):

        cls.n_user_features = 200
        cls.n_item_features = 150

        cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
            num_users=15,
            num_items=30,
            interaction_density=.5,
            num_user_features=cls.n_user_features,
            num_item_features=cls.n_item_features,
            n_features_per_user=20,
            n_features_per_item=20,
            pos_int_ratio=.5)

        set_session(None)
        cls.temp_dir = tempfile.mkdtemp()
        cls.interactions_path = os.path.join(cls.temp_dir,
                                             'interactions.tfrecord')
        cls.user_features_path = os.path.join(cls.temp_dir,
                                              'user_features.tfrecord')
        cls.item_features_path = os.path.join(cls.temp_dir,
                                              'item_features.tfrecord')

        write_tfrecord_from_sparse_matrix(cls.user_features_path,
                                          cls.user_features)
        write_tfrecord_from_sparse_matrix(cls.item_features_path,
                                          cls.item_features)
        write_tfrecord_from_sparse_matrix(cls.interactions_path,
                                          cls.interactions)
Exemple #6
0
    def setUpClass(cls):

        cls.n_users = 15
        cls.n_items = 30

        cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
            num_users=cls.n_users,
            num_items=cls.n_items,
            interaction_density=.5,
            num_user_features=200,
            num_item_features=200,
            n_features_per_user=20,
            n_features_per_item=20,
            pos_int_ratio=.5)

        cls.standard_model = TensorRec(
            n_components=10,
            n_tastes=3,
            user_repr_graph=NormalizedLinearRepresentationGraph(),
            attention_graph=LinearRepresentationGraph())
        cls.standard_model.fit(cls.interactions,
                               cls.user_features,
                               cls.item_features,
                               epochs=10)

        cls.unbiased_model = TensorRec(
            n_components=10,
            n_tastes=3,
            biased=False,
            user_repr_graph=NormalizedLinearRepresentationGraph(),
            attention_graph=LinearRepresentationGraph())
        cls.unbiased_model.fit(cls.interactions,
                               cls.user_features,
                               cls.item_features,
                               epochs=10)
Exemple #7
0
    def setUpClass(cls):

        # Blow away an existing session to avoid 'tf_map_func not found' error
        set_session(None)

        cls.n_users = 15
        cls.n_items = 30

        int_ds, uf_ds, if_ds = generate_dummy_data(
            num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200,
            num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5
        )

        cls.temp_dir = tempfile.mkdtemp()
        cls.interactions = os.path.join(cls.temp_dir, 'interactions.tfrecord')
        cls.user_features = os.path.join(cls.temp_dir, 'user_features.tfrecord')
        cls.item_features = os.path.join(cls.temp_dir, 'item_features.tfrecord')

        write_tfrecord_from_sparse_matrix(cls.interactions, int_ds)
        write_tfrecord_from_sparse_matrix(cls.user_features, uf_ds)
        write_tfrecord_from_sparse_matrix(cls.item_features, if_ds)

        cls.standard_model = TensorRec(n_components=10)
        cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)

        cls.unbiased_model = TensorRec(n_components=10, biased=False)
        cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
Exemple #8
0
    def setUpClass(cls):
        cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
            num_users=15, num_items=30, interaction_density=.5, num_user_features=200, num_item_features=200,
            n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5
        )

        cls.standard_model = TensorRec(n_components=10)
        cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
Exemple #9
0
 def setUpClass(cls):
     cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
         num_users=10, num_items=12, interaction_density=.5)
     model = TensorRec(n_components=10)
     model.fit(cls.interactions,
               cls.user_features,
               cls.item_features,
               epochs=10)
     cls.model = model
Exemple #10
0
    def test_predict(self):
        interactions, user_features, item_features = generate_dummy_data(
            num_users=10, num_items=20, interaction_density=.5)
        model = TensorRec(n_components=10)
        model.fit(interactions, user_features, item_features, epochs=10)

        predictions = model.predict(user_features=user_features,
                                    item_features=item_features)

        self.assertEqual(predictions.shape,
                         (user_features.shape[0], item_features.shape[0]))
Exemple #11
0
    def test_predict(self):
        interactions, user_features, item_features = generate_dummy_data(
            num_users=10, num_items=10, interaction_density=.5)
        model = TensorRec(n_components=10)
        model.fit(interactions, user_features, item_features, epochs=10)

        predictions = model.predict(user_ids=[1, 2, 3],
                                    item_ids=[4, 5, 6],
                                    user_features=user_features,
                                    item_features=item_features)

        self.assertEqual(len(predictions), 3)
    def setUpClass(cls):

        cls.n_users = 15
        cls.n_items = 30

        cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
            num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200,
            num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5,
            return_datasets=True
        )

        cls.standard_model = TensorRec(n_components=10)
        cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)

        cls.unbiased_model = TensorRec(n_components=10, biased=False)
        cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
    def test_fit(self, name, user_repr, item_repr, n_user_features,
                 n_item_features, n_components):
        interactions, user_features, item_features = generate_dummy_data(
            num_users=15,
            num_items=30,
            interaction_density=.5,
            num_user_features=n_user_features,
            num_item_features=n_item_features,
            n_features_per_user=20,
            n_features_per_item=20,
            pos_int_ratio=.5)
        model = TensorRec(n_components=n_components,
                          user_repr_graph=user_repr(),
                          item_repr_graph=item_repr())
        model.fit(interactions, user_features, item_features, epochs=10)

        # Ensure that the nodes have been built
        self.assertIsNotNone(model.tf_prediction)
    def setUpClass(cls):

        cls.n_user_features = 200
        cls.n_item_features = 150

        cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
            num_users=15, num_items=30, interaction_density=.5, num_user_features=cls.n_user_features,
            num_item_features=cls.n_item_features, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5
        )

        set_session(None)
        cls.temp_dir = tempfile.mkdtemp()
        cls.interactions_path = os.path.join(cls.temp_dir, 'interactions.tfrecord')
        cls.user_features_path = os.path.join(cls.temp_dir, 'user_features.tfrecord')
        cls.item_features_path = os.path.join(cls.temp_dir, 'item_features.tfrecord')

        write_tfrecord_from_sparse_matrix(cls.user_features_path, cls.user_features)
        write_tfrecord_from_sparse_matrix(cls.item_features_path, cls.item_features)
        write_tfrecord_from_sparse_matrix(cls.interactions_path, cls.interactions)
    def setUpClass(cls):

        cls.n_users = 15
        cls.n_items = 30

        cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
            num_users=cls.n_users, num_items=cls.n_items, interaction_density=.5, num_user_features=200,
            num_item_features=200, n_features_per_user=20, n_features_per_item=20, pos_int_ratio=.5
        )

        cls.standard_model = TensorRec(n_components=10,
                                       n_tastes=3,
                                       user_repr_graph=NormalizedLinearRepresentationGraph())
        cls.standard_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)

        cls.unbiased_model = TensorRec(n_components=10,
                                       n_tastes=3,
                                       biased=False,
                                       user_repr_graph=NormalizedLinearRepresentationGraph())
        cls.unbiased_model.fit(cls.interactions, cls.user_features, cls.item_features, epochs=10)
    def test_fit_fail_on_bad_dims(self):
        interactions, user_features, item_features = generate_dummy_data(
            num_users=15,
            num_items=30,
            interaction_density=.5,
            num_user_features=30,
            num_item_features=20,
            n_features_per_user=20,
            n_features_per_item=20,
            pos_int_ratio=.5)

        with self.assertRaises(ValueError):
            model = TensorRec(
                n_components=25,
                user_repr_graph=FeaturePassThroughRepresentationGraph(),
                item_repr_graph=LinearRepresentationGraph())
            model.fit(interactions, user_features, item_features, epochs=10)

        with self.assertRaises(ValueError):
            model = TensorRec(
                n_components=25,
                user_repr_graph=LinearRepresentationGraph(),
                item_repr_graph=FeaturePassThroughRepresentationGraph())
            model.fit(interactions, user_features, item_features, epochs=10)
Exemple #17
0
 def setUpClass(cls):
     cls.interactions, cls.user_features, cls.item_features = generate_dummy_data(
         num_users=10, num_items=20, interaction_density=.5)