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()
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)
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])
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)
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()