def _load_movie_emb(self, movie_emb_path: str, emb_key: str): if Config.EMB_DATA_SOURCE == Config.DATA_SOURCE_FILE: print("Loading movie embedding from %s ..." % movie_emb_path) valid_emb_count = 0 with open(movie_emb_path) as f: for movie_raw_emb_data in f: movie_emb_data = movie_raw_emb_data.split(":") if len(movie_emb_data) == 2: m = self.get_movie_by_id(int(movie_emb_data[0])) if m is None: continue m.emb = Utility.parse_emb_str(movie_emb_data[1]) valid_emb_count += 1 print( "Loading movie embedding completed. %d movie embeddings in total." % valid_emb_count) else: print("Loading movie embedding from Redis ...") movie_emb_keys = RedisClient.get_instance().keys( emb_key + "*") # type: Set[str] valid_emb_count = 0 for movieEmbKey in movie_emb_keys: movie_id = movieEmbKey.split(":")[1] m = self.get_movie_by_id(int(movie_id)) if m is None: continue m.emb = Utility.parse_emb_str( RedisClient.get_instance().get(movieEmbKey)) valid_emb_count += 1 print( "Loading movie embedding completed. %d movie embeddings in total." % valid_emb_count)
def _load_user_emb(self, user_emb_path: str, emb_key: str): if Config.EMB_DATA_SOURCE == Config.DATA_SOURCE_FILE: print("Loading user embedding from %s ..." % user_emb_path) valid_emb_count = 0 with open(user_emb_path) as f: for user_raw_emb_data in f: user_emb_data = user_raw_emb_data.split(":") if len(user_emb_data) == 2: u = self.get_user_by_id(int(user_emb_data[0])) if u is None: continue u.emb = Utility.parse_emb_str(user_emb_data[1]) valid_emb_count += 1 print( "Loading user embedding completed. %d user embeddings in total." % valid_emb_count)
def get_rec_list(user_id: int, size: int, model: str): user = DataManager.get_instance().get_user_by_id(user_id) if user is None: return list() CANDIDATE_SIZE = 800 candiadtes = DataManager.get_instance().get_movies(CANDIDATE_SIZE, "rating") if Config.EMB_DATA_SOURCE == Config.DATA_SOURCE_REDIS: user_emb_key = "uEmb:" + str(user_id) user_emb = RedisClient.get_instance().get(user_emb_key) if user_emb is not None: user.set_emb(Utility.parse_emb_str(user_emb)) ranked_list = ranker(user, candiadtes, model) if len(ranked_list) > size: return ranked_list[:size] return ranked_list