Ошибка обучения CreateML Recommender: идентификаторы элементов в рекомендательной модели должны быть пронумерованы 0, 1,, num_items - 1

Я использую CreateML для создания модели Recommender с использованием неявного набора данных в формате: User ID, Item ID. Данные загружаются в CreateML как CSV, содержащий около 400 тыс. Строк.

При попытке «обучить» модель я получаю следующую ошибку:

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"

Я попытался изменить как Item ID, так и User 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, так и при использовании CreateML на игровой площадке Swift. Я также попытался удалить дубликаты и убедился, что максимальный идентификатор для каждого столбца равен (num_items - 1).

Я безуспешно искал документацию о том, какие именно требования предъявляются к набору идентификаторов.

Заранее благодарим вас за любую помощь в прояснении этого сообщения об ошибке.


person mpmontanez    schedule 08.06.2020    source источник
comment
У меня такая же ошибка сегодня. Удалось ли починить вашу модель?   -  person Paweł Madej    schedule 16.06.2020
comment
@ PawełMadej Пока не повезло: /   -  person mpmontanez    schedule 16.06.2020
comment
Добавить исключение в тег   -  person Akshat Zala    schedule 18.06.2020
comment
Вы можете прояснить @AkshatZala?   -  person mpmontanez    schedule 19.06.2020


Ответы (2)


Мне удалось обсудить эту проблему с разработчиками Apple CoreML во время WWDC2020. Они описали это как известную ошибку, которая будет исправлена ​​в будущей ОС (Big Sur). Обход этой ошибки:

В наборе данных CSV создайте записи для одного пользователя, который взаимодействует со ВСЕМИ элементами, и создайте записи для одного элемента, с которым взаимодействуют ВСЕ пользователи.

Используя pandas в python, я, по сути, реализовал следующее:

# 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, я успешно сгенерировал модель CoreML с помощью CreateML.

person mpmontanez    schedule 23.06.2020
comment
Я понял, что это работает с вашим примером pandas рабочего процесса, но пробовали ли вы добавить столбец рейтинга для обучения MLRecommender? всякий раз, когда я добавляю этот столбец, я получаю ту же ошибку. без рейтинговой колонки модели поездов без проблем - person Paweł Madej; 05.07.2020
comment
Да, я пробовал это только с рейтингами 0 и 1 и обнаружил, что все «фиктивные» оценки должны быть 1. Если бы они были равны 0, я бы получил исходную ошибку. - person mpmontanez; 07.07.2020
comment
Хм, может быть, это проблема, с которой я столкнулся в последнюю очередь. Большое спасибо за этот намек. Я проверю это сегодня - person Paweł Madej; 08.07.2020
comment
Работает ... впервые нормализация данных + рейтинг ›0 ура :) - person Paweł Madej; 08.07.2020
comment
Я написал небольшой пост об этой проблеме. надеюсь, что это поможет другим pawelmadej.com/post/mlrecommender-in-practice - person Paweł Madej; 08.07.2020
comment
Большой! Рад, что это сработало, и хороший пост, Павел. Спасибо за крик. - person mpmontanez; 09.07.2020

Попробуйте добавить безымянный первый столбец к вашим данным csv, который считает строки от 0 ... количество элементов - 1

нравиться

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

Думаю, сегодня, после добавления этой колонки, она у меня начала работать. Я использую UUID для идентификатора пользователя и идентификатора элемента в моей модели обучения. и обязательно отсортируйте строки по itemID, чтобы все для одного itemID были близки друг к другу

person Paweł Madej    schedule 18.06.2020
comment
Спасибо за предложение, Павел. Я попытался создать столбец индекса, используя UUID и отсортировав его по идентификатору элемента, но все равно получаю ту же ошибку, что и выше. Уникальны ли идентификаторы ваших товаров во всем наборе данных? Я предполагаю, что user_id к item_id должно быть отношением много: много (несколько пользователей могут оценивать одну цитату, один пользователь может оценивать несколько кавычек), но мне интересно, неверно ли это предположение. - person mpmontanez; 19.06.2020
comment
У меня есть много: много отношений в этом наборе данных. Для этой цели я подготовил сценарий для создания тестовой модели: gist.github.com/nysander/03609236c22c935bb25ad20e9a - person Paweł Madej; 20.06.2020
comment
Спасибо, Павел. Я обсудил проблему с инженерами Apple и опубликовал ответ. - person mpmontanez; 24.06.2020