我正在尝试使用令人敬畏的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
CF
下面是我的模型配置,到目前为止我尝试过使用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)
对此方面的任何帮助表示赞赏。
答案 0 :(得分:1)
你没有提到你正在尝试的协同过滤算法,但为了这个目的,它可能比Word2Vec
更好。 (Word2Vec
并没有做得太糟糕;你为什么期望它更好?)
备用元参数可能会做得更好。
例如,window
是可能相互影响的令牌之间的最大距离,但是每个目标令牌培训中使用的有效窗口随机选择从1到window
,作为一种方式给附近的代币更多的重量。因此,当某些训练文本比window
大得多时(如示例行中),某些相关性将被忽略(或者加权不足)。除非排序非常重要,否则巨型window
(MAX_INT?)可能会做得更好,甚至是排序无关的相关方法(例如纯PV-DBOW Doc2Vec
模式下的dm=0
,每个令牌都用作doc-tag。
根据您拥有的数据量,size
可能过大或过小。不同的min_count
,negative
计数,更高的' iter' epochs'或sample
级别可能会更好。 (甚至即使你已经修改过的东西,只有在其他变化到位后才会有所帮助。)