215 похожих чатов

Ребята, нужна помощь/совет (лонгрид, извините) Решаю задачу разработки рекомендательной системы на

основе трансформера на открытом датасете MovieLens, задачу сам себе поставил для обучения

Оговорюсь, ранее не обучал трансформеры и не работал с PyTorch

Для тех кто не знаком с датасетом, дам краткое описание: там три таблички, табличка с фильмами и жанрами, табличка с пользователями и информацией по ним (пол, возраст, род деятельности) и табличка с оценками фильмов пользователями (что пользователь смотрел, когда и какую оценку по пятибальной шкале поставил).

Данные я подготовил следующим образом: объединил таблицы и сгруппировал данные по пользователям, для каждого пользователя отсортировал историю просмотров с оценками в хронологическом порядке по timestamp, организовал цепочки фильмов и оценок со сдвигом для обучения (пример: пользователь посмотрел 20 фильмов, я нарезаю данные окном 10, 9 фильмов в цепочке, 10-й как target, итого 11 цепочек).

Теперь как я вижу трансформер

Input для модели: цепочки фильмов с жанрами и оценками, которые пользователь смотрел, данные пользователя, жанр и id фильма, который требуется оценить.
Output модели: оценка нового фильма.

Теперь где я застрял:
1. Как правильно подготовить эмбеддинги и подать данные на вход трансформеру? Я вижу для себя три разных непересекающихся домена данных: данные пользователей, данные фильмов и истории просмотров. Не уверен, что корректно схлопывать все в один тензор torch.cat(tensors), не смотря на то, что я организовал одинаковую размеренность векторов. Но как обучать эмбеддинги параллельно и независимо я не знаю.

2. Как правильно заэмбеддить истории просмотров фильмов с их жанрами и истории оценок? В отличие от данных пользователя это цепочки

3. Как правильно поработать с жанрами? Была идея обучить отдельную сетку на жанрах, чтобы получить эмбэддинги и не работать с бинарным вектором размерностью 17 (всего 18 уникальных жанров). Но возможно эти эмбецдинги также обучатся в трансформере параллельно с данными пользователя и цепочками

спасибо, если ты дочитал до этого момента, буду рад любой помощи или совету 🙏

1 ответов

23 просмотра

а можно спросить одно, а зачем тебе тут торч?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта