使用TFRS获取推荐结果时返回张量而非实际值,求解决方法
解决TFRS推荐结果张量映射为实际值的问题
你当前得到的是候选item的ID张量,要获取有意义的实际推荐内容,核心是建立ID到真实内容的映射关系,再将张量转换为可读取的格式,以下是两种实用方法:
方法一:提前构建ID-内容映射字典
从movies数据集中提取item ID和对应的目标字段(比如标题),构建映射字典:
# 假设movies数据集包含movie_id和title字段 id_to_title = {} for movie in movies.as_numpy_iterator(): id_to_title[movie["movie_id"]] = movie["title"]
之后将预测得到的ID张量转为numpy数组,批量映射为实际内容:
_, candidate_ids = index({"user_id": tf.constant(["42"])}) # 扁平化张量并转为numpy数组 candidate_ids_np = candidate_ids.numpy().flatten() # 映射为实际标题 recommended_titles = [id_to_title[mid] for mid in candidate_ids_np] print(f"用户42的推荐内容:{recommended_titles}")
方法二:构建索引时直接存储内容(更便捷)
修改候选数据集的映射逻辑,让索引直接存储内容而非ID,后续预测可直接获取结果:
# 定义映射函数,返回候选嵌入向量和对应的标题 def map_candidate_with_title(movie): embedding = model.candidate_model(movie) return embedding, movie["title"] # 用带标题的数据集构建索引 index.index_from_dataset(candidates=movies.batch(128).map(map_candidate_with_title)) # 直接获取推荐标题 _, recommended_titles = index({"user_id": tf.constant(["42"])}) # 转为numpy数组查看实际值 print(f"用户42的推荐内容:{recommended_titles.numpy().flatten()}")
注意事项
如果你的内容字段是字符串类型,转numpy后会得到字节串,需要解码为普通字符串:
recommended_titles = [title.decode('utf-8') for title in recommended_titles.numpy().flatten()]
内容的提问来源于stack exchange,提问作者anaconda
相关产品推荐
相关产品推荐

