решаю задачу коллаборативной фильтрации пользователей.
На входе вектора (нули и единицы) для каждого пользователя, которые описывают кликнул пользователь на продукт или нет.
У меня была идея, что если пропустить такие вектора через VAE, то на скрытом слое (2 мерный или 3 мерный) отпечатается какая-то фундаментальная информация о близости пользователей, которую я бы потом смог использовать для коллаб фильтрации...
Насколько это вообще здравая затея? У меня этот вопрос возник потому что на выходе из VAE входящие вектора как-то плохо восстанавливаются =/ Я не понимаю почему. Входящий вектор длинной 250, скрытый длиной 3. Для лосса пробовал использовать BCEWithLogitsLoss (выход VAE без активации), пробовал DICE. С дайсом все вообще очень плохо, хотя мне казалось что DICE как раз бы должен лучше всего работать =/
Возможно мало данных? Пытаюсь учить на данных от 500 пользователей =/
Скорее всего, эта идея и не особо будет работать, так как вы подаёте автокодировщику некоторые данные, которые несут информацию разве что в совокупности. То есть, конкретный вектор такого вида, который вы описали, не содержит в себе каких-либо признаков, которые были бы существенно информативными для восстановления через автокодировщик. При решении подобных задач обычно используют методы, связанные со сходством пользователей на основе этих векторов (грубо говоря, пользователь будет действовать примерно также, как действуют похожие на него пользователи). Одним из классических подходов для этих целей является декомпозиция матрицы (пользователь, продукт) на произведение из двух матриц: (пользователь, <абстрактный признак>), (<абстрактный признак>, продукт) через классические методы разложения матриц. Почему бы для начала не взять его?
Как я прочитал, часто решают эту задачу используя Cosine similarity векторов пользователей. У меня была идея, что раз уж одинаковость векторов (входных) говорит о близости пользователей, то и скрытый вектор VAE тоже сможет представлять из себя близкое положение пользователей. Но на каком-то более фундаментальном уровне =/ Ведь для того, чтобы раскодировать одинаковый вектор, нужно чтобы и скрытый был тоже близким или таким-же... Какая-то такая вот гипотеза была
Обсуждают сегодня