训练 Matchbox 推荐器
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
使用 Matchbox 算法训练贝叶斯推荐器
类别:机器学习/定型
模块概述
本文介绍如何使用机器学习 Studio (经典) 中的 "定型 Matchbox 推荐器" 模块来训练推荐模型。
机器学习中的建议算法基于Microsoft Research开发的Matchbox模型。 若要下载详细描述算法的纸张,请单击 Microsoft Research 网站上的此链接。
“训练 Matchbox 推荐器”模块可读取用户-项-分级三元组的数据集,并可选择读取一些用户和项功能。 它将返回训练的 Matchbox 推荐器。 然后,可以使用训练的模型生成建议、查找相关用户或查找相关项,方法是使用 评分 Matchbox 推荐器 模块。
有关建议模型和 Matchbox 推荐器的详细信息
建议系统的主要目标是向系统的用户推荐一个或多个项目。 项目示例可能为电影、餐馆、书籍或歌曲。 用户可以是具有项目首选项的人员、一组人员或其他实体。
推荐器系统有两种主要方法。
- 第一种是“基于内容”方法,该方法同时使用用户和项目的特性。 可以按年龄和性别等属性来描述用户,可按作者和制造商等属性来描述项。 你可以在社交婚介网站上找到基于内容的建议系统的典型示例。
- 第二种方法是“协作筛选”,它仅使用用户和项的标识符,并从用户对项给出的评分的(稀疏)矩阵中获取有关这些实体的隐含信息。 我们可以通过某个用户已评级的项目以及对相同项目进行了评级的其他用户来了解该用户。
Matchbox 推荐器结合了这些方法,将协作筛选与基于内容的方法结合使用。 因此,它被视为“混合推荐器”。
工作原理:如果用户对系统而言相对“较新”(系统尚未获取多少用户信息),可通过使用有关用户的特征信息来改进预测,从而解决众所周知的“冷启动”问题。 但是,一旦从特定用户收集了足够数量的评分,就可以根据特定评分而不是仅根据他们的特征对其进行完全个性化的预测。 因此,可从基于内容的建议平稳过渡到基于协同筛选的建议。 即使用户或项目特性不可用,Matchbox 也仍将在协作筛选模式下工作。
有关 Matchbox 推荐器及其基础概率算法的更多详细信息,请参阅相关的研究论文: Matchbox:大规模 Bayesian 推荐推荐。 此外,机器学习博客还有一篇标题为 "推荐" 的文章,其中提供了有关建议算法的高级简介。
如何配置定型 Matchbox 推荐器
准备数据
在尝试使用该模块之前,数据必须已采用建议模型预期的格式。 需要“用户-项-评分”三元组的训练数据集,也可以在单独的数据集中分别包含用户特征和项目特征(如果可用)。
若要将源数据划分为定型和测试数据集,请使用拆分数据模块中的推荐器 Split选项。
所需的用户-项-评分数据集
用于定型的输入数据包含正确格式的正确数据类型,这一点非常重要:
- 第一列必须包含用户标识符。
- 第二列必须包含项目标识符。
- 第三列包含用户-项目对的评级。 评分值必须是数字或分类。
在训练过程中,评级值不能完全相同。 此外,如果为数值,最小和最大评级值之间的差异必须小于100,理想情况下不能超过20。
机器学习 Studio 中的 "餐馆分级" 数据集 (经典) (单击 "保存的数据集",然后) 演示所需的格式:
userID | placeID | rating |
---|---|---|
U1077 | 135085 | 2 |
U1077 | 135038 | 2 |
在此示例中,你可以看到单个用户对两个单独的餐馆进行了评级。
用户功能数据集(可选)
“用户特征”的数据集必须包含用户的标识符,并使用用户-项-评分数据集第一列中提供的相同标识符。 其余列可以包含任意数量的用于描述用户的特征。
有关示例,请参阅机器学习 Studio 中的 "餐馆客户数据集 (经典) "。 典型的一组用户功能如下所示:
userID | 音 | Dress_preference | 运输 | smoker |
---|---|---|---|---|
U1004 | family | 非正式 | 页脚 | FALSE |
U1005 | friends | 无首选项 | 汽车所有者 | TRUE |
项目特征数据集(可选)
项目特征的数据集必须在其第一列中包含项标识符。 其余列可以包含任意数量的项目的描述性特征。
有关示例,请参阅在机器学习 Studio 中提供的餐馆功能数据数据集 (经典) (单击 "保存的数据集",然后) 示例。 一组典型的项功能 (在这种情况下,该项是餐馆) ,如下所示:
placeID | 酒 | Smoking_area | price | Rambience |
---|---|---|---|---|
135106 | Wine-Beer | 无 | low | family |
132667 | No_Alcohol_Served | 允许 | 中 | 休闲 |
定型模型
将" 训练 Matchbox 推荐器 "模块添加到工作室中的试验 (经典) ,并连接到训练数据。
如果你有一个单独的用户特征和/或项特征数据集,请将它们连接到 训练 Matchbox 推荐器 模块。
用户特征数据集:将描述用户的数据集连接到第二个输入。
项目特征数据集:将描述项的数据集连接到第三个输入。
对于 "训练批数",键入在训练期间用于划分数据的批数。
基于此值,在训练期间,用户-项评级三元组数据集分为多个部分或批。
由于 训练 Matchbox 推荐 器并行运行批处理,因此建议将训练批数设置为可用核心数(如果整个训练数据适合内存)。 否则,训练批数应设置为训练数据确实适合内存的可用内核数的最低倍数。
默认情况下,训练数据拆分为四 (4) 批。 仅拆分用户-项-评级三元组数据集。 用户或项功能不会拆分,因为不需要拆分功能。
对于 "特征数",键入应为每个用户和项学习的潜在特征数。
特征数越高,预测通常越准确;但是,训练速度会变慢。 特征数通常介于 2-20 之间。
对于 "建议算法迭代次数",指示算法应处理输入数据多少次。
Matchbox 推荐器是使用消息传递算法训练的,该算法可以多次访问输入数据。 此数字越高,预测越准确;但是,训练速度较慢。 通常情况下,循环访问次数介于 1-10 之间。
运行试验,或仅选择"训练 Matchbox 推荐器 "模块,然后选择" 运行所选项"。
示例
有关如何使用建议模型在 机器学习的示例,请参阅以下示例Azure AI 库:
- 电影推荐器示例:演示如何使用推荐模型进行训练、评估和评分。
技术说明
本部分包含实现详情、使用技巧和常见问题解答。
使用提示
如果特征列具有缺失值,则非缺失值的模式将用作缺失值的替换。
将重新缩放所有用户和项特征,以便具有单位长度,以便其最大绝对值为 1。 不对特性值进行转换,从而可以保持其稀疏度。
限制
建议 (当前不支持联机) 或持续训练模型机器学习。 如果要捕获用户对建议的响应,并使用这些响应来改进模型,建议定期重新训练整个模型。 增量训练无法进行,但可以将滑动窗口应用于训练数据,以确保在使用最新数据时最大程度地减少数据量。
估计推荐器内存使用情况
目前,Matchbox 16 * N\(4\T + 2\R)
的内存占用下限是字节,其中 N 表示训练数据集中的用户-项评级三倍数, T 表示潜在特征数, R 表示训练数据集) 中最低和最大评级 (之间的差。
序列化的 Matchbox 16 * T\(U\R + I + X + Y)
推荐器模型的大小约为字节,其中 U 表示用户数, I 表示项数, X 表示用户特征数, Y 表示项特征数。
预期输入
名称 | 类型 | 说明 |
---|---|---|
用户-项-分级三元组的训练数据集 | 数据表 | 按用户列出的项分级,表示为三元组(用户、项、分级) |
用户特征的训练数据集 | 数据表 | 包含描述用户特征的数据集 (可选) |
项特征的训练数据集 | 数据表 | 包含描述项的特征的数据集 (可选) |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
特征数量 | >=0 | Integer | 10 | 指定要与推荐器一起使用的特征数 (可选) |
推荐算法迭代数 | >=1 | Integer | 5 | 指定在训练建议模型时要执行的最大迭代数 (可选) |
训练批数 | >=1 | Integer | 4 | 指定要与推荐器一起使用的训练批数 (可选) |
Outputs
名称 | 类型 | 说明 |
---|---|---|
经过训练的 Matchbox 推荐器 | ILearner 接口 | 经过训练的 Matchbox 推荐器 |
例外
异常 | 描述 |
---|---|
错误 0022 | 如果输入数据集中的选定列数不等于预期数量,将出现异常。 |
错误 0036 | 如果提供了给定用户或项的多种特征,将出现异常。 |
错误 0018 | 如果输入数据集无效,将出现异常。 |
错误 0035 | 如果没有提供给定用户或项的任何特征,将出现异常。 |
错误 0034 | 如果给定的用户项对存在多个评分,将出现异常。 |
错误 0053 | 如果 Matchbox 推荐没有用户特性或项目,则会发生异常。 |
错误 0003 | 如果一个或多个输入为 NULL 或为空,将出现异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。