为用户推荐电影

场景概述

简介

根据某在线影片租赁商会的用户们对影片的历史评分数据,可通过BML平台的训练与预测,可为这些用户推荐其感兴趣的影片。本案例将介绍使用协同过滤算法CF做推荐电影的实现过程。下面我们依次按照数据准备、添加数据集、训练模型和应用模型的顺序,演示使用BML平台完成电影推荐的过程。

样例数据

您依照数据准备总的内容准备您自己的数据,也可以直接使用百度智能云准备好的样例数据:

  • 一份训练数据,用来训练模型和离线预测,数据路径:bos://bml-sample-data/movie_recommendation/train_data。

场景实现流程图

数据准备

您可以跳过此步骤直接使用样例数据中提供的数据。也可按照如下说明准备自己的输入数据:

原始数据格式如下:

1309617,user_1309617,9756 4,14718 4
1530887,user_1530887,8467 3,12317 4,3756 4,4829 4,11837 3,2712 4,9856 3,8552 3,15394 3,10627 3,14718 4,15237 2,14646 3,8982 3,4389 4,985 4
1283020,user_1283020,13102 3
877131,user_877131,16703 4,9756 3
664824,user_664824,15205 3,12966 4,9756 4,11658 3

格式说明:

  • 每一行代表一条样本,即每个用户所对应的所有影片评分(评分范围为0~5分)。用逗号(,)隔开。
  • 第1列:代表用户ID。
  • 第2列:代表用户名,可以为空但要保留逗号分隔符。
  • 第3列(含)以后:代表用户给影片(空格前的ID)的评分(空格后的数值)。

创建数据集

数据集是百度机器学习BML数据管理的基本单位,各种算法的模型训练、离线预测过程只接收数据集作为算法的输入。添加数据集是以存储在BOS上的原始数据为数据输入,生成的数据集在BML系统中可同时且多次进行模型训练,离线预测。

本示例中创建数据集:

  • 基于训练数据生成数据集“RecommendMovie_trainData”,用于得到训练模型和离线预测。

具体操作如下:

  1. 打开“产品服务>百度机器学习BML-实验列表”,点击“创建实验”,进入创建实验页面。

  2. 系统自动生成了实验名称“experiment_20160623”,可在右侧配置区修改。

  3. 点击左侧导航的“数据输入输出”,拖拽“输入数据源”至中间空白处,在右侧参数配置区配置如下参数:

    • 数据源路径:输入BOS Bucket路径地址:bos://bml-sample-data/movie_recommendation/train_data/netflix_data。BML数据集只获得该路径下的非目录的文件作为输入,不会递归处理子目录下的文件。路径支持匹配符格式,如果需要递归的获得目录下子目录输入数据,请在Input参数中添加匹配符表达式(和标准的linux的ls的匹配符一致)。如需要获得所有两层子目录下的part00-part03开头的所有文件,则路径格式为:bos://bucketName/object/*/*/part0[0-3]*。目前支持.gz格式的压缩文件。
    • 数据格式:选择“BML专属”。
    • 数据类型:选择“稀疏带权”。协同过滤CF算法只支持稀疏带权的数据格式,样例数据符合稀疏带权的格式。
    • 描述:输入描述信息。

  4. 拖拽左侧导航的“输出数据集”至中间空白处,在右侧参数配置区定义数据集名称“RecommendMovie_trainData”。

  5. 连接“输入数据源”与“输出数据集”。
  6. 保存当前的数据集为实验,以便后期复用,请点击页面上方的保存图标,则该数据集保存至实验列表。
  7. 页面自动跳转至“产品服务>百度机器学习BML-实验列表”,点击实验“experiment_20160623”对应的运行按钮开始创建数据集。

  8. 可在“产品服务>百度机器学习BML-数据集列表”页查看到数据集“RecommendMovie_trainData”。数据集的创建过程是一个异步的持续过程,根据输入数据量的大小和BML系统的繁忙程度将耗费不同的时间(完成后会有站内信通知),您可以根据数据集的状态判断数据集是否创建成功,只有状态为完成的数据集才可以作为后续机器学习流程的输入单位,对于状态为创建中的数据集可以进行停止操作。

  9. 点击“RecommendMovie_trainData”,可查看该数据集的详情。

训练模型

使用协同过滤CF算法作为推荐电影模型的训练算法,训练模型具体操作如下:

  1. 在“产品服务>百度机器学习BML-实验列表”页面,点击已创建的实验“experiment_20160623”,进入该实验页面。
  2. 点击左侧“模型训练”,拖拽“协同过滤CF”至中间空白处,系统自动生成了模型名称“my_cf_model”,可在右侧参数配置区修改。请保持其余参数的默认值不变,还需要设定与该影片相似度的topN影片,在模型训练中,保持默认值不变。相似度计算方式参数设定影片之间相似度的计算方式,保留默认的方式不变。
  3. 连接“输出数据集”与“协同过滤CF”。

  4. 点击上方的运行按钮后开始训练模型。

  5. 在“产品服务>百度机器学习BML-模型列表”页面可查看已创建的模型“my_cf_model”。模型的训练过程同样是一个异步的持续过程,根据输入数据量的大小和BML系统的繁忙程度完成时间也不同(完成后会有站内信通知)。

  6. 点击“my_cf_model”可查看到模型训练的配置及状态信息,您可以根据模型的状态判断模型是否成功训练完成,对于状态为创建中的模型可以进行停止操作。若由于数据问题或高阶参数设置的不合理导致的模型训练失败情况,也会给出相应的错误提示。同样只有成功训练完成的模型才能进行后续的评估和应用,下图是已完成的模型“my_cf_model”的模型详情页。

应用模型推荐电影

下面将介绍如何运用这个模型为用户推荐可能感兴趣的影片。

本例中应用模型采用离线预测的方式,百度机器学习BML的离线预测以数据集为输入单位,因此需要将离线预测的原始数据先添加数据集。用于预测的数据集须与训练数据集的数据格式保持一致.

在本例中使用已创建的数据集“RecommendMovie_userData”和已评估过的CF模型“my_cf_model”做离线预测。具体操作如下:

  1. 在“产品服务>百度机器学习BML-实验列表”页面,点击已创建的实验“experiment_20160623”,进入实验页面。
  2. 点击左侧导航的“离线预测”,并拖拽离线预测至中间空白处,在右侧参数配置区选择本次预测结果在BOS上的存储路径,请确保对输出路径有写权限,如果路径不存在则创建路径,如果已经存在该路径,系统根据用户填写的路径构造输出路径。
  3. 连接“输出数据集”与“离线预测”,连接“my_cf_model”与“离线预测”。

  4. 点击上方的运行按钮开始模型的离线预测。同样的,模型离线预测也是一个异步的持续过程,根据数据量的大小和BML系统的繁忙程度,完成时间会不同(完成后会有站内信通知)。

  5. 在“产品服务>百度机器学习BML-模型列表”页面点击模型“my_cf_model”,可在“本模型预测信息”页查看预测信息,包含本次预测所用的数据集,结果输出及状态信息。若由于数据问题或高阶参数设置的不合理导致的预测失败,也会给出相应的错误提示。

  6. 成功完成的离线预测,会将该次离线预测的预测结果输出到设置的BOS路径中,您可自行查看和后续使用。离线预测的预测结果格式为:

    • 每一行是针对一个用户的推荐,第一列为用户ID。
    • 第二列及第二列以后为推荐的Top N个项目。
    • 预测结果是以半角逗号“,”分隔的,每个推荐项目以空格分隔,空格前为项目ID,空格后为推荐分值。

最终生成的预测结果内容如下:

0,8238 5,7795 5,16030 5,4930 5,6514 5,12912 5,...,6963 5;
1,7455 5,1906 5,6659 5,13456 5,12390 5,925 5,...,8396 5;

结果的含义是“用户id,推荐的项目id1 推荐分数,推荐的项目id2 推荐分数,...,推荐的项目idN 推荐分数N”