推荐嵌入操作

数据挖掘 推荐系统 嵌入
2022-03-03 19:27:42

我训练了一个推荐系统来根据游戏标签推荐 Steam 游戏。下面显示了一个示例输出,GAME根据similarity分数推荐的游戏在哪里。

推荐游戏:全面战争:WARHAMMER

GAME: Total War: WARHAMMER                     Similarity: 1.0
GAME: Phantom Doctrine                         Similarity: 0.97
GAME: Total War: THREE KINGDOMS                Similarity: 0.96
GAME: Warhammer 40,000: Dawn of War II         Similarity: 0.96
GAME: Total War: WARHAMMER II                  Similarity: 0.95
GAME: Warhammer 40,000: Dawn of War II Chaos Rising Similarity: 0.94

推荐游戏:帝国时代II:权威版

GAME: Age of Empires II: Definitive Edition    Similarity: 1.0
GAME: Rise of Nations: Extended Edition        Similarity: 0.97
GAME: Age of Empires II (2013)                 Similarity: 0.97
GAME: Stronghold Crusader HD                   Similarity: 0.96
GAME: Age of Mythology: Extended Edition       Similarity: 0.95
GAME: Medieval II: Total War Kingdoms          Similarity: 0.95

这里使用的模型基于由神经网络确定的嵌入。训练后,我有两个包含嵌入的矩阵:

  1. 游戏矩阵:n 个游戏 * 嵌入大小
  2. 标签矩阵:n 个标签 * 嵌入大小

两个矩阵的嵌入大小相同,相似度分数是通过所讨论的游戏与所有其他游戏的余弦距离来计算的。

是否有可能找到与其他游戏相似但减去给定标签的游戏​​,例如,TOTAL WAR: WARHAMMER具有以下标签:

  • 战略
  • 幻想
  • 即时战略
  • 战争
  • 大战略

假设我喜欢这个游戏但我不喜欢该Fantasy元素,我可以在推荐时以某种方式删除该Fantasy元素吗?一个简单的操作会说Total War: WARHAMMER嵌入 -Fantasy嵌入然后找到类似的匹配项吗?

1个回答

一种选择是使用所有信息训练单个嵌入空间。

如果在 Genism 中使用 Word2Vec,则内置了正负运算。这类似于单词类比的计算方式。

代码将类似于:

import gensim

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