如何处理电影推荐中的发行年份差异

我参与了一个电影推荐项目。我们使用gensim开发了一个doc2vec模型。如果需要,可以查看gensim的文档。https://radimrehurek.com/gensim/models/keyedvectors.html#gensim.models.keyedvectors.WordEmbeddingsKeyedVectors.most_similar

训练了模型后,当我根据演员阵容查找某部电影的前10部相似电影时,返回的都是年代久远的电影,发行年份为1960年、1950年等。因此,我尝试将发行年份作为参数加入gensim模型,但仍然显示旧电影。我该如何解决发行年份差异问题呢?我希望在查看某部电影的前10个推荐时,这些电影的发行年份差异较小(比如过去10年的电影,而不是更早的)。我该如何实现这一点?

doc2vec模型的代码

def d2v_doc(titles_df):    tagged_data = [TaggedDocument(words=_d, tags=[str(titles_df['id_titles'][i])]) for i, _d in enumerate(titles_df['doc'])]    model_d2v = Doc2Vec(vector_size=300,min_count=10, dm=1)    model_d2v.build_vocab(tagged_data)    model_d2v.train(tagged_data,epochs=100,total_examples=model_d2v.corpus_count)    return model_d2v

titles_df数据框包含以下列(id_titles, title, release_year, actors, director, writer, doc)

col_names = ['actors', 'director','writer','release_year']titles_df['doc'] = titles_df[col_names].apply(lambda x: ' '.join(x.astype(str)), axis=1).str.split()

前10部相似电影的代码

def titles_lookup(similar_doc,titles_df):    df = pd.DataFrame(similar_doc, columns =['id_titles', 'simialrity'])    df = pd.merge(df, titles_df[['id_titles','title','release_year']],on='id_titles',how='left')    print(df)def demo_d2v_title(model,titles_df, id_titles):    similar_doc = model.docvecs.most_similar(id_titles)    titles_lookup(similar_doc,titles_df)def demo(model,titles_df):    print('hunt for red october')    demo_d2v_title(model,titles_df, 'tt0099810')

电影 – “hunt for red october” 的前10部相似电影的输出

   id_titles    similarity               title             release_year0  tt0105112    0.541722             Patriot Games           1992.01  tt0267626    0.524941       K19: The Widowmaker           2002.02  tt0112740    0.496758              Crimson Tide           1995.03  tt0052151    0.471951       Run Silent Run Deep           1958.04  tt1922685    0.464007                   Phantom           2013.05  tt0164184    0.462187      The Sum of All Fears           2002.06  tt0058962    0.459588      The Bedford Incident           1965.07  tt0109444    0.456760  Clear and Present Danger           1994.08  tt0063121    0.455807         Ice Station Zebra           1968.09  tt0146309    0.452572             Thirteen Days           2001.0

从输出中可以看到,我仍然得到了旧电影。请帮助我解决这个问题。提前感谢。


回答:

Doc2Vec 只知道文本相似性;它没有其他字段的概念。

因此,如果您想根据文本相似性之外的某些标准来筛选匹配结果,这些标准仅在Doc2Vec模型外部表示,您需要在单独的步骤中进行操作。

所以,您可以使用.most_similar(),并设置topn=len(model.docvecs)参数 – 以获取所有排名的电影。然后,根据年份与您期望的年份相差过大的电影筛选结果集。最后,将结果集修剪到您真正想要的前N个电影。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注