25 #include "../common/exception.hpp"
26 #include "../common/hash.hpp"
31 using jubatus::util::lang::shared_ptr;
36 namespace recommender {
46 : hash_num_(config.hash_num) {
61 vector<pair<string, float> >& ids,
62 size_t ret_num)
const {
75 vector<pair<string, float> >& ids,
76 size_t ret_num)
const {
78 for (
size_t i = 0; i < ids.size(); ++i) {
79 ids[i].second = 1 - ids[i].second;
95 vector<float> min_values_buffer(
hash_num_, FLT_MAX);
97 for (
size_t i = 0; i < sfv.size(); ++i) {
99 float val = sfv[i].second;
100 for (uint64_t j = 0; j <
hash_num_; ++j) {
101 float hashval =
calc_hash(key_hash, j, val);
102 if (hashval < min_values_buffer[j]) {
103 min_values_buffer[j] = hashval;
104 hash_buffer[j] = key_hash;
110 for (
size_t i = 0; i < hash_buffer.size(); ++i) {
111 if ((hash_buffer[i] & 1LLU) == 1) {
175 float r =
static_cast<float>(a) / static_cast<float>(0xFFFFFFFFFFFFFFFFLLU);
176 return -std::log(r) / val;
180 return string(
"minhash");
193 packer.pack_array(2);
199 if (o.type != msgpack::type::ARRAY || o.via.array.size != 2) {
200 throw msgpack::type_error();
void get_row(const std::string &row, std::vector< std::pair< std::string, float > > &columns) const
void calc_minhash_values(const common::sfv_t &sfv, core::storage::bit_vector &bv) const
void update_row(const std::string &id, const sfv_diff_t &diff)
void similar_row(const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
void neighbor_row(const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
void unpack(msgpack::object o)
void pack(framework::packer &packer) const
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
core::common::sfv_t sfv_diff_t
#define JUBATUS_EXCEPTION(e)
void pack(framework::packer &packer) const
void clear_row(const std::string &id)
framework::mixable * get_mixable() const
static const uint64_t hash_prime
void get_all_row_ids(std::vector< std::string > &ids) const
msgpack::packer< jubatus_packer > packer
bit_vector_base< uint64_t > bit_vector
static float calc_hash(uint64_t a, uint64_t b, float val)
void unpack(msgpack::object o)
static void hash_mix64(uint64_t &a, uint64_t &b, uint64_t &c)
void remove_row(const std::string &row)
core::storage::sparse_matrix_storage orig_
std::vector< std::pair< std::string, float > > sfv_t
void set_row(const std::string &row, const std::vector< std::pair< std::string, float > > &columns)
static uint64_t calc_string_hash(const std::string &s)