Операции с рекомендационными встраиваниями

Вопрос или проблема

Я обучил систему рекомендаций, чтобы рекомендовать игры Steam на основе тегов игр. Пример вывода показан ниже, где GAME — это игра, рекомендованная на основе similarity (показателя схожести).

Игра для рекомендации: Total War: WARHAMMER

GAME: Total War: WARHAMMER                     Схожесть: 1.0
GAME: Phantom Doctrine                         Схожесть: 0.97
GAME: Total War: THREE KINGDOMS                Схожесть: 0.96
GAME: Warhammer 40,000: Dawn of War II         Схожесть: 0.96
GAME: Total War: WARHAMMER II                  Схожесть: 0.95
GAME: Warhammer 40,000: Dawn of War II Chaos Rising Схожесть: 0.94

Игра для рекомендации: Age of Empires II: Definitive Edition

GAME: Age of Empires II: Definitive Edition    Схожесть: 1.0
GAME: Rise of Nations: Extended Edition        Схожесть: 0.97
GAME: Age of Empires II (2013)                 Схожесть: 0.97
GAME: Stronghold Crusader HD                   Схожесть: 0.96
GAME: Age of Mythology: Extended Edition       Схожесть: 0.95
GAME: Medieval II: Total War Kingdoms          Схожесть: 0.95

Модель, используемая здесь, основана на встраиваниях, которые определяются нейронной сетью. После обучения у меня есть две матрицы, содержащие встраивания:

  1. Матрица Игр: n игр * размер встраивания
  2. Матрица Тегов: n тегов * размер встраивания

Размер встраивания для обеих матриц одинаков, и показатель схожести вычисляется по косинусному расстоянию между игрой в вопросе и всеми другими играми.

Можно ли найти игры, схожие с другими играми, исключая данный тег? Например, у TOTAL WAR: WARHAMMER есть следующие теги:

  • Стратегия
  • Фэнтези
  • RTS
  • Война
  • Грандиозная стратегия

Скажем, мне нравится эта игра, но мне не нравится элемент Фэнтези, могу ли я как-то убрать элемент Фэнтези при формировании рекомендации? Сработает ли простая операция, такая как Total War: WARHAMMER встраивание – Фэнтези встраивание, а затем поиск схожих совпадений?

Одним из вариантов является обучение единого пространства встраивания со всей информацией.

Если вы используете Word2Vec в Genism, положительные и отрицательные операции встроены. Это похоже на то, как вычисляются аналогии слов.

Код будет выглядеть примерно так:

import gensim

word2vec_model = gensim.models.Word2Vec(docs)
word2vec_model.most_similar(positive=['Total War', 'WARHAMMER'],  
                            negative=['Fantasy'])

Ответ или решение

Чтобы ответить на вопрос о том, возможно ли находить похожие игры, исключая определённые теги, необходимо понимать, как работают векторные представления (эмбеддинги) в контексте рекомендательных систем.

Основная идея

Да, вы можете использовать операцию вычитания векторов, чтобы исключить влияние определённого тега, например, тега "Фэнтези". Вы можете вычесть эмбеддинг тега "Фэнтези" из эмбеддинга игры "Total War: WARHAMMER" и затем найти похожие игры на получившийся вектор. Эта операция хорошо подходит для случая, когда используется метод, поддерживающий такие операции, как, например, Word2Vec.

Шаги

  1. Получите эмбеддинги игр и тегов: У вас уже есть матрицы эмбеддингов для игр и тегов. Убедитесь, что эмбеддинг для "Total War: WARHAMMER" и "Фэнтези" уже доступны.

  2. Вычислите новый вектор:

    new_vector = games_matrix[game_id] - tags_matrix[fantasy_tag_id]

    Здесь game_id — индекс игры "Total War: WARHAMMER", а fantasy_tag_id — индекс тега "Фэнтези".

  3. Найдите похожие игры: После получения нового вектора, вы можете вычислить косинусное сходство между этим вектором и всеми остальными эмбеддингами игр:

    similarities = cosine_similarity(new_vector, games_matrix)
  4. Сортировка результатов: На основе вычисленных сходств вы можете сортировать игры и выводить результаты, игнорируя влияние тега "Фэнтези".

Пример приложения

Если вы используете библиотеку Gensim, которая поддерживает операции с эмбеддингами, вы можете сделать это следующим образом:

import gensim

# Предполагаем, что word2vec_model уже обучена и содержит эмбеддинги
similar_games = word2vec_model.most_similar(positive=['Total War', 'WARHAMMER'],  
                                             negative=['Fantasy'])

Этот подход позволит найти игры, схожие с "Total War: WARHAMMER", без влияния тега "Фэнтези".

Заключение

Использование эмбеддингов и операций с ними, таких как вычитание векторов, является мощным инструментом для построения рекомендаций. Это позволяет пользователям изменять свои предпочтения, исключая определённые аспекты контента, и обеспечивает более персонализированный опыт. Следует отметить, что для получения наилучших результатов необходимо тщательно настроить модель эмбеддингов и тестировать её на разных данных, чтобы убедиться в ее точности и адекватности.

Оцените материал
Добавить комментарий

Капча загружается...