Я реализую модель item2vec, используя идею word2vec
с API tf.estimator для рекомендации продукта.
Нет проблем с реализацией обучающей части с помощью tf.estimator. Процесс такой же, как у word2vec, и я вижу каждую транзакцию как предложение. Разница лишь в том, как генерировать учебные данные: (target_item, context_item)
пары После обучения проблемы псевдоклассификации я мог использовать обученный вектор внедрения для каждого элемента, чтобы измерить отношения между ними.
Проблема в том, что для оценки это не типичная контролируемая оценка обучения, т.е. используя в качестве входных данных eval-данные, проходя через тот же график, мы получаем прогнозы и точность.
Входные данные для оценки, которые я хотел бы использовать, имеют совершенно иной формат, чем входные данные для обучения.
Формат входных данных Eval: (target_item, {context_item1, context_item2, ...})
. С помощью этого я мог получить top_k ближайших элементов для каждого context_items, а затем посмотреть, входит ли target_item в коллекцию этих ближайших элементов, чтобы из него можно было получить коэффициент попадания.
Однако, tf.estimator.EstimatorSpec()
для mode = MODE.EVAL
требует loss
в качестве ввода. Значит ли это, что оценка может использовать только часть тренировочного графика? Что я могу сделать, если у меня нет функции потерь для оценки в моем случае, так как оценка больше не проходит классификацию?
Большое спасибо.