Gensim:Word2Vec推荐者准确性改进

时间:2018-02-10 06:32:47

标签: word2vec gensim recommendation-engine

我正在尝试使用令人敬畏的gensim库在https://arxiv.org/pdf/1603.04259.pdf中实现类似的功能但是当我与Collaborative Filtering进行比较时,我无法提高结果的质量。

我有两个模型,一个建立在Apache Spark上,另一个模型使用gensim Word2Vec on grouplens 2000万个评级数据集。我的apache spark模型托管在AWS http://sparkmovierecommender.us-east-1.elasticbeanstalk.com上 我在当地运行gensim模型。然而,当我比较结果时,我看到10次CF模型9的优异结果(如下面的例子更类似于搜索电影 - 对Marvel电影的亲和力)

例如: - 如果我搜索Thor电影,我会得到以下结果

Gensim

  • 美国队长:第一复仇者(2011)
  • X战警:头等舱(2011)
  • 人猿星球的崛起(2011)
  • 钢铁侠2(2010)
  • X战警起源:金刚狼(2009)
  • 绿灯侠(2011)
  • Super 8(2011)
  • Tron:Legacy(2010)
  • 变形金刚:月之黑暗(2011)

CF

  • 美国队长:第一复仇者
  • 钢铁侠2
  • 雷神:黑暗世界
  • 钢铁侠
  • 复仇者联盟
  • X战警:头等舱
  • 钢铁侠3
  • 星际迷航
  • 美国队长:冬兵>

下面是我的模型配置,到目前为止我尝试过使用window,min_count和size参数但没有太大的改进。

word2vec_model = gensim.models.Word2Vec(
    seed=1,
    size=100, 
    min_count=50, 
    window=30)

word2vec_model.train(movie_list, total_examples=len(movie_list), epochs=10)

对此方面的任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

你没有提到你正在尝试的协同过滤算法,但为了这个目的,它可能比Word2Vec更好。 (Word2Vec并没有做得太糟糕;你为什么期望它更好?)

备用元参数可能会做得更好。

例如,window是可能相互影响的令牌之间的最大距离,但是每个目标令牌培训中使用的有效窗口随机选择从1到window,作为一种方式给附近的代币更多的重量。因此,当某些训练文本比window大得多时(如示例行中),某些相关性将被忽略(或者加权不足)。除非排序非常重要,否则巨型window(MAX_INT?)可能会做得更好,甚至是排序无关的相关方法(例如纯PV-DBOW Doc2Vec模式下的dm=0,每个令牌都用作doc-tag。

根据您拥有的数据量,size可能过大或过小。不同的min_countnegative计数,更高的' iter' epochs'或sample级别可能会更好。 (甚至即使你已经修改过的东西,只有在其他变化到位后才会有所帮助。)