如何解决基于Transformer的BST推荐模型新电影预测报错问题
解决BST模型预测错误的方案
错误原因分析
- Cast int32 to string is not supported:输入数据的形状或类型与模型输入层不匹配,导致模型内部触发非法类型转换。问题出在
sequence_movie_ids、sequence_ratings这类序列输入的格式上,用DataFrame存储列表列会导致张量转换时类型混乱。 - ValueError: setting an array element with a sequence:Pandas的列表列无法直接转换为模型要求的二维张量,模型期望序列类输入是
(样本数, 序列长度)的二维数组,而非一维的列表集合。
正确的输入数据构建方式
直接用numpy数组构建完全匹配模型输入形状的张量,避免用DataFrame存储列表类型的列:
import numpy as np # 构建符合model.input_shape要求的输入数据 input_data = { # 单值字段:形状为(1, 1),对应模型的(None, 1) 'user_id': np.array([[0]], dtype=np.int32), 'target_movie_id': np.array([[0]], dtype=np.int32), 'sex': np.array([[0]], dtype=np.int32), 'age_group': np.array([[0]], dtype=np.int32), 'occupation': np.array([[0]], dtype=np.int32), # 序列字段:形状为(1, 3),对应模型的(None, 3) 'sequence_movie_ids': np.array([[1, 2, 3]], dtype=np.int32), 'sequence_ratings': np.array([[4.0, 4.0, 4.0]], dtype=np.float32) } # 执行预测 predictions = model.predict(input_data) print(predictions)
实现电影推荐的正确流程
如果你的目标是推荐用户下一部观看的电影,上述代码仅能预测对target_movie_id=0的评分,需要遍历所有候选电影并预测评分,再选取Top-N:
# 假设已从训练数据中提取去重后的所有电影ID列表 all_movie_ids = [1, 2, 3, ..., 1682] # 替换为真实电影ID集合 # 构建批量输入:将所有电影作为target_movie_id batch_size = len(all_movie_ids) input_data_batch = { 'user_id': np.repeat([[0]], batch_size, axis=0), 'target_movie_id': np.array([[mid] for mid in all_movie_ids], dtype=np.int32), 'sex': np.repeat([[0]], batch_size, axis=0), 'age_group': np.repeat([[0]], batch_size, axis=0), 'occupation': np.repeat([[0]], batch_size, axis=0), 'sequence_movie_ids': np.repeat([[1,2,3]], batch_size, axis=0), 'sequence_ratings': np.repeat([[4.0,4.0,4.0]], batch_size, axis=0) } # 批量预测所有电影的评分 all_predictions = model.predict(input_data_batch, batch_size=32) # 按评分倒序排序,取Top5推荐 sorted_indices = np.argsort(all_predictions.flatten())[::-1] top5_movies = [all_movie_ids[i] for i in sorted_indices[:5]] print("Top5推荐电影ID:", top5_movies)
关键注意事项
- 所有输入张量的形状必须与
model.input_shape严格匹配:单值字段为(N,1),序列字段为(N,3)(N为样本数)。 - 输入数据类型要与模型训练时一致:整数字段用
int32,评分字段用float32。 - 电影ID必须是模型训练时经过预处理的整数索引,不能直接使用原始电影ID。
内容的提问来源于stack exchange,提问作者Piethon
相关产品推荐
相关产品推荐

