示例#1
0
    def __init__(self, user_vectors, user_biases, item_vectors, item_biases):

        self._user_vectors = align(user_vectors)
        self._user_biases = align(user_biases)
        self._item_vectors = align(item_vectors)
        self._item_biases = align(item_biases)

        self._lib = get_lib()
示例#2
0
    def _predict_bench(self, user_id, out):

        return self._lib.predict_xnor_256(align(self._user_vectors[user_id]),
                                          self._item_vectors,
                                          self._user_biases[user_id],
                                          self._item_biases,
                                          self._user_norms[user_id],
                                          self._item_norms, out)
示例#3
0
    def predict(self, user_id, item_ids=None):

        if item_ids is None:
            item_ids = slice(0, None, None)

        return self._lib.predict_float_256(align(self._user_vectors[user_id]),
                                           self._item_vectors[item_ids],
                                           self._user_biases[user_id],
                                           self._item_biases[item_ids])
示例#4
0
def test_predict_float_256():

    lib = get_lib()

    num_items = 1024

    for latent_dim in (1, 5, 16, 32, 128, 256):
        user_vector = align(np.random.random(latent_dim).astype(np.float32))
        item_vectors = align(np.random.random((num_items, latent_dim)).astype(np.float32))
        user_bias = 1.0
        item_biases = align(np.random.random(num_items).astype(np.float32))

        expected = _predict_float_256(user_vector,
                                      item_vectors,
                                      user_bias,
                                      item_biases)
        ffi_result = lib.predict_float_256(user_vector,
                                           item_vectors,
                                           user_bias,
                                           item_biases)

        assert np.allclose(expected, ffi_result)
示例#5
0
    def __init__(self, user_vectors, user_biases, item_vectors, item_biases):

        assert item_vectors.shape[1] >= 32

        self._user_norms = align(np.abs(user_vectors).mean(axis=1))
        self._item_norms = align(np.abs(item_vectors).mean(axis=1))

        self._user_vectors = align(binarize_array(user_vectors))
        self._user_biases = align(user_biases)
        self._item_vectors = align(binarize_array(item_vectors))
        self._item_biases = align(item_biases)

        self._lib = get_lib()