You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决基于Transformer的BST推荐模型新电影预测报错问题

解决BST模型预测错误的方案

错误原因分析

  1. Cast int32 to string is not supported:输入数据的形状或类型与模型输入层不匹配,导致模型内部触发非法类型转换。问题出在sequence_movie_ids、sequence_ratings这类序列输入的格式上,用DataFrame存储列表列会导致张量转换时类型混乱。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:05:29