4

我正在使用 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 集的确切要求的文档。

预先感谢您帮助澄清此错误消息。

4

2 回答 2

3

在 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 模型。

于 2020-06-23T22:54:09.770 回答
0

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

喜欢

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

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

于 2020-06-18T10:53:56.497 回答