如何在AWS SageMaker上部署基于TF-IDF的机器学习推荐系统
核心疑问解答
你提到的两个输出都不属于可直接部署的「模型」范畴,两者的定位分别如下:
tf.fit_transform(ds['content'])的输出是全量物料文本转换后的TF-IDF特征矩阵,你拟合完成的TfidfVectorizer实例tf本身才是模型组件的一部分:它存储了文本到特征的转换规则,后续如果要对新物料做特征转换、或者实时计算相似度都需要用到这个实例。linear_kernel(tfidf_matrix, tfidf_matrix)的输出是全量物料两两之间的余弦相似度矩阵,你基于这个矩阵生成的results字典是预计算好的每个物料的Top99相似候选集,属于你线上推理可以直接读取的预计算资产。
部署所需资产说明
根据你的业务场景可以选择两种部署模式:
模式1:离线预计算模式(推荐,延迟更低)
如果你的物料库更新频率低(比如每天/每周更新一次),直接采用这种模式即可,需要打包部署的资产包括:
- 预计算好的
results字典 - 物料id和对应信息的映射表(你当前代码里的
ds数据集)
推理逻辑非常简单:接收请求传入的item_id和召回数量num,直接从results里取对应条目的前num个结果返回即可,不需要实时做任何计算。
模式2:实时计算模式(适合物料频繁更新的场景)
如果你的物料库会随时新增内容,不想每次更新都全量重算相似度,可以选择这种模式,需要打包部署的资产包括:
- 拟合完成的
TfidfVectorizer实例tf - 全量存量物料的TF-IDF特征矩阵
tfidf_matrix - 物料id和特征索引的映射表
推理逻辑:接收请求传入的item_id,先取出对应物料的TF-IDF特征,和全量特征矩阵实时计算余弦相似度,排序后取TopN结果返回。如果有新物料入库,只需要用tf转换新物料的特征加入特征矩阵即可,不需要全量重算所有相似度。
部署到SageMaker的基础步骤
你可以按照以下流程操作:
- 用
pickle或者joblib将上面选择的对应资产序列化保存到S3存储桶 - 基于SageMaker官方提供的SKLearn镜像编写推理脚本,脚本里需要实现
model_fn(加载预存的资产)、predict_fn(解析请求参数、执行推荐逻辑、返回结果)两个核心函数 - 配置SageMaker模型、端点配置,部署为可调用的REST端点
内容的提问来源于stack exchange,提问作者ajster
相关产品推荐
相关产品推荐

