推荐冷启动问题是指添加到目录中的项目没有或只有很少的交互。这主要是协同过滤算法的一个问题,因为它们依赖于项目的交互来进行推荐。解决这个问题我使用 BERT Embeddings。我嵌入所有电影类型并保存所有 . 还将新电影类型转换为BERT 嵌入并使用**最近邻。**我找到最近的 k 部电影的新电影并将它们推荐给用户。**我没有使用预训练电影嵌入层。因为每部电影都有 1 X 50 维度表示。在查询时,我需要计算每个点之间的距离,如果每个点都是 50 个或更多维度,这将非常耗时。**所以我使用 BERT Embeddings 并 为每部电影获得 1 X 1 Dimensions 表示。对于低延迟应用程序。用于此任务的数据是MovieLens数据集。
movies = pd.read_csv(PATH + 'movies.csv') movies.head()
预压:
movies['genres']=movies.genres.str.replace('Sci-Fi','science fiction') movies['genres']=movies.genres.str.replace('|',' ')
类型转换为 Bert Tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True) new=[] for i in movies['genres'].values: gen1=tokenizer(i) gen2=gen1['input_ids'] gen2.pop(0) gen2.pop(-1) new.append(sum(gen2)) movies['genres_token']=new
这里有一些类型转换数据 -
此函数根据 Tokenize 类型返回 K 最近的电影
def Recommendation_Movie(myNumber,myList,j): i=set() while len(i)<=j: i.update(myList.title[myList.genres_token==myNumber].tolist()) g=min(myList.genres_token.values, key=lambda x:abs(x-myNumber)) i.update(myList.title[myList.genres_token==g].tolist()) bgh=myList.genres_token[myList.genres_token == g].index.tolist() myList=myList.drop(index=bgh) return i
使用这种方法,它会显示与新电影相似的电影,但这种方法是过拟合的。主要目标是降低低延迟。
输出