CreateML Recommender 训练错误:推荐模型中的项目 ID 必须编号为 0、1、...、num_items - 1

Posted

技术标签:

【中文标题】CreateML Recommender 训练错误:推荐模型中的项目 ID 必须编号为 0、1、...、num_items - 1【英文标题】:CreateML Recommender Training Error: Item IDs in the recommender model must be numbered 0, 1, ..., num_items - 1 【发布时间】:2020-09-27 21:46:48 【问题描述】:

我正在使用 CreateML 使用以下格式的隐式数据集生成 Recommender 模型:用户 ID、项目 ID。数据以大约 400k 行的 CSV 格式加载到 CreateML。

在尝试“训练”模型时,我收到以下错误:

Training Error: Item IDs in the recommender model must be numbered 0, 1, ..., num_items - 1

我的数据集格式如下:

"user_id","item_id"
"e7ca1b039bca4f81a33b21acc202df24","f7267c60-6185-11ea-b8dd-0657986dc989"
"1cd4285b19424a94b33ad6637ec1abb2","e643af62-6185-11ea-9d27-0657986dc989"
"1cd4285b19424a94b33ad6637ec1abb2","f2fd13ce-6185-11ea-b210-0657986dc989"
"1cd4285b19424a94b33ad6637ec1abb2","e95864ae-6185-11ea-a254-0657986dc989"
"31042cbfd30c42feb693569c7a2d3f0a","e513a2dc-6185-11ea-9b4c-0657986dc989"
"39e95dbb21854534958d53a0df33cbf2","f27f62c6-6185-11ea-b14c-0657986dc989"
"5c26ca2918264a6bbcffc37de5079f6f","ec080d6c-6185-11ea-a6ca-0657986dc989"

我尝试将项目 ID 和用户 ID 都修改为枚举 ID,但我仍然收到训练错误。示例:

"item_ids","user_ids"
0,0
1,0
2,0
2,0
0,225
400,225
409,225
0,282
0,4
8,4
8,4

我在 CreateML UI 中和在 Swift Playground 中使用 CreateML 时都收到此错误。我还尝试删除重复项并验证每列的最大 ID 为 (num_items - 1)。

我搜索了有关 ID 集的确切要求的文档,但没有运气。

提前感谢您帮助澄清此错误消息。

【问题讨论】:

我今天也有同样的错误。你设法修复了你的模型吗? @PawełMadej 还没有运气:/ 在标签中添加异常 你能澄清一下@AkshatZala 吗? 【参考方案1】:

我在 WWDC2020 期间与 Apple 的 CoreML 开发人员讨论了这个问题。他们将此描述为一个已知错误,将在即将推出的操作系统(Big Sur)中修复。此错误的解决方法是:

在 CSV 数据集中,为与所有项目交互的单个用户创建记录,并为与所有用户交互的单个项目创建记录。

在 python 中使用 pandas,我基本上实现了以下内容:

# Find the unique item ids
item_ids = ratings_df.item_id.unique()

# Find the unique user ids
user_ids = ratings_df.user_id.unique()

# Create a 'dummy user' which interacts with all items
mock_item_interactions_df = pd.DataFrame('item_id': item_ids, 'user_id': 'mock-user')
ratings_with_mocks_df = ratings_df.append(mock_item_interactions_df)

# Create a 'dummy item' which interacts with all users
mock_item_interactions_df = pd.DataFrame('item_id': 'mock-item', 'user_id': user_ids)
ratings_with_mocks_df = ratings_with_mocks_df.append(mock_item_interactions_df)

# Export the CSV
ratings_with_mocks_df.to_csv('data/ratings-w-mocks.csv', quoting=csv.QUOTE_NONNUMERIC, index=True)

使用这个 CSV,我成功地使用 CreateML 生成了一个 CoreML 模型。

【讨论】:

我使用您的示例 pandas 工作流进行了此操作,但是您是否尝试为 MLRecommender 培训添加评分列?每当我添加此列时,我都会返回相同的错误。没有评级列模型火车没有问题 是的,我只尝试了 0 和 1 的评分,发现所有的“模拟”评分都必须是 1。如果它们是 0,我会得到最初的错误。 嗯,也许这是我最后遇到的问题。非常感谢这个提示。我今天会检查它 它起作用了……第一次标准化数据+评级> 0 yay :) 太棒了!很高兴它的工作和不错的帖子,帕维尔。谢谢你的呼喊。【参考方案2】:

尝试将未命名的第一列添加到您的 csv 数据中,该数据的行数从 0 ... 项目数 - 1

喜欢

"","userID","itemID","rating"
0,"a","x",1
1,"a","y",0
...

我认为今天添加此专栏后它开始为我工作。我在训练模型中使用 UUID 作为 userID 和 itemID。并确保按 itemID 对行进行排序,以便一个 itemID 的所有内容彼此靠近

【讨论】:

感谢帕维尔的建议。我尝试使用 UUID 创建索引列并按项目 ID 排序,但我仍然收到上面发布的相同错误。您的项目 ID 在整个数据集中是唯一的吗?我假设 user_id 到 item_id 应该是多:多关系(多个用户可以评价一个报价,一个用户可以评价多个报价),但我想知道这个假设是否不正确。 我在这个数据集中有很多:很多关系。为此,我准备了脚本来生成测试模型:gist.github.com/nysander/03609236c22c935bb25a91a9a6afd20e 谢谢帕维尔。我与 Apple 的工程师讨论了这个问题并发布了答案。

以上是关于CreateML Recommender 训练错误:推荐模型中的项目 ID 必须编号为 0、1、...、num_items - 1的主要内容,如果未能解决你的问题,请参考以下文章

尝试训练数据模型时出现 Swift CreateML 错误。非常感谢任何输入

创建 ML - 对象检测训练 - 意外错误

CreateML 数据分析已停止

Create ML 中的“指定数据源中的空表”错误

使用 CreateML 训练图像分类器的最佳图像分辨率是多少?

具有 CreateML MLTextClassifier 类的 iOS 训练模型无法从 JSON 中过滤