У меня есть проблема с предварительной обработкой функций, которая слишком сложна для решения.
Я хочу создать «перекрестную особенность» из 3 других, позвольте мне подробнее:
Моя проблема с ML - рекомендовать товар пользователям.
В моем примере есть функции о пользователях и функции об элементе. Я пытаюсь предсказать, понравится ли пользователю этот элемент или нет.
Мы используем примеры тензорного потока.
Одной из функций моего пользователя является «сопоставление» идентификаторов элементов с «привязанностью» пользователя к ним. Давайте назовем это «карта сродства предметов»
Само сродство вычисляется другим процессом.
Поскольку в Примерах Tensorflow нет типа карты, у нас есть 2 функции: одна - упорядоченный список идентификаторов элементов, другая - упорядоченный список сходств. Они синхронны. Таким образом, моя «карта сродства предметов» фактически представлена функциями item_affinities_ids
и item affinities
.
Да, я использую информацию о сходстве предметов и пытаюсь предсказать сходство других предметов. Но они отличаются, входные данные рассчитываются для другого варианта использования продукта, чем тот, который я пытаюсь предсказать.
У меня также есть третья функция, которая является item_id
элемента, для которого я пытаюсь вычислить новое сходство.
В наивном NumPy я мог бы сделать это так:
item_name = np.array(["item-a"])
item_affinities_ids = np.array(["item-0", "item-a", "item-b"])
item_affinities = np.array([0.2, 0.3, 0.4])
indices = np.where(item_affinities_ids == item_name)
return item_affinities[indices]
Теперь, где все может быть сложнее, в реальной жизни:
- Я хочу реализацию тензорного потока (TFT или собственный TF).
- Мы используем TF v.13
- «Карта сходства предметов» может отсутствовать. Таким образом, два результирующих
item_affinities_ids
и item affinities
представлены как SparseTensor
с. Однако, если есть один, другой тоже, и они гарантированно будут синхронными (того же размера, того же порядка).
- Мы делаем прогнозирование и обучение на примерах примеров, поэтому первое измерение каждого из моих (разреженных) тензоров - batch_size> 1.
-
item_id
может не существовать в «карте сродства предметов». В этом случае я хочу значение по умолчанию (0.0).
Я ищу реализацию тензорного потока, которая бы отвечала всем этим требованиям.
Пока что у меня есть:
# using constants for the demonstration. In real life it would be tensors.
item_name = tf.constant([["item-a"], ["item-3"]])
item_affinities_ids = tf.constant([["item-0", "item-a", "item-b"], ["item-2", "item-1", "item-3"]])
item_affinities = tf.constant([[0.2, 0.3, 0.4], [0.2, -0.9, 0.4]])
return tf.boolean_mask(item_affinities, tf.equal(item_affinities_ids, item_name))
Но он не обрабатывает SparseTensor и случай, когда item_id отсутствует в списке item_affinities
.
Я ищу кого-нибудь, кто поможет мне с этим.