使用implicit搭建实时推荐系统

标签: 数据 程序 Python 推荐算法 | 发表时间:2019-10-11 19:05 | 作者:标点符
出处:https://www.biaodianfu.com

Implicit简介

Implicit是一个开源的系统过滤项目,其包含多种流行的推荐算法,主要应用场景是针对隐性反馈行为进行推荐。包含的算法主要有:

Implicit使用

数据准备

Implicit输入需要使用的数据格式为user_id/item_id/rating,其中对于隐性评分的场景,可以根据具体情况进行设置,比如:

  • 按照浏览时间设置不同的rating
  • 按照浏览深度设置不同的rating(是否看过图片、点评等)
  • 按照不同行为设置不同的rating(浏览、收藏、加购)

模型训练

import pandas as pd
import numpy as np
import scipy.sparse as sparse
import implicit

df = pd.read_csv("./data/user_visit.csv")
df['user_label'], user_idx = pd.factorize(df['user_id '])
df['item_label'], item_idx = pd.factorize(df['item_id '])

sparse_item_user = sparse.csr_matrix((df['rating'].astype(float), (df['item_label'], df['user_label'])))
sparse_user_item = sparse.csr_matrix((df['rating'].astype(float), (df['user_label'], df['item_label'])))
model = implicit.als.AlternatingLeastSquares(factors=50, regularization=0.1, iterations=50)
model.fit(sparse_item_user)

data = {
    'model.item_factors': model.item_factors,
    'model.user_factors': model.user_factors,
    'item_labels': item_idx,
}
als_model_file = "user_visit.npz"
np.savez(als_model_file, **data)

注意:

  • 这里使用了ALS算法,具体模型参数怎么调优目前还没有好的解决方案,给出的参数是随意给的。
  • 这里将模型结果存储到.npz文件中,便于后期直接使用,而不是每次使用时都要训练。
  • 需要对原先的user_id,item_id进行重新编码,否则会报错

模型使用

# 加载模型
data = np.load(als_model_file, allow_pickle=True)
model = implicit.als.AlternatingLeastSquares(factors=data['model.item_factors'].shape[1])
model.item_factors = data['model.item_factors']
model.user_factors = data['model.user_factors']
model._YtY = model.item_factors.T.dot(model.item_factors)
item_labels = data['item_labels']

# 基于酒店推荐:
item_id= 1024
item_lable = list(item_labels).index(item_id)
related = model.similar_items(item_lable, N=10)
for item_lable, score in related:
print(item_labels[item_lable], score)

# 基于用户推荐
user_id = 10
user_label = list(user_idx).index(user_id)
sparse_user_items = sparse_item_user.T.tocsr()
recommendations = model.recommend(user_label, sparse_user_items)
for item_id, score in recommendations:
    print(item_idx[item_id], score)

实时推荐

实时推荐的方案是使用离线模型结合实时行为进行推荐,而不是把整个模型部署到线上实时运行。中间主要区别是用户ID是不存在的,所以不能使用userid进行直接推荐。具体实现方式如下:

item_ids = [1024,2046]
item_weights = [2,3]
user_label = 0
user_items = None
item_lb = item_lb = [list(item_labels).index(i) for i in item_ids]
user_ll = [0] * len(item_ids)
confidence = [10] * len(item_ids) if item_weights is None else item_weights
user_items = sparse.csr_matrix((confidence, (user_ll, item_lb)))
recommendations = model.recommend(user_label, user_items, N=10, recalculate_user=True)
for item_id, score in recommendations:
print(item_labels[item_id], score)

#根据返回的结果,获取推荐理由:
itemid = list(item_labels).index(2048)
model.explain(user_label, user_items, itemid, user_weights=None, N=1)

参考资料:

相关 [implicit 实时 推荐系统] 推荐:

使用implicit搭建实时推荐系统

- - 标点符
Implicit是一个开源的系统过滤项目,其包含多种流行的推荐算法,主要应用场景是针对隐性反馈行为进行推荐. ALS(alternating least squares),最小交替二乘法. BRP(Bayesian Personalized Ranking),贝叶斯个性化排序. 使用Cosine, TFIDF 或 BM25的近邻模型.

实时推荐系统的3种方式

- - zzm
自从1992年施乐的科学家为了解决信息负载的问题,第一次提出协同过滤算法,个性化推荐已 经经过了二十几年的发展. 1998年,林登和他的同事申请了“item-to-item”协同过滤技术的专利,经过多年的实践,亚马逊宣称销售的推荐占比 可以占到整个销售GMV(Gross Merchandise Volume,即年度成交总额)的30%以上.

Min-Hash和推荐系统

- - xlvector - Recommender System
前几年看Google News Recommendation的那篇Paper,对里面提到的MinHash的算法基本没有注意,因为之前的习惯都是只注意论文的模型那块,至于怎么优化模型一般都只是扫一眼. 不过最近看了大量的Google Paper,发现Google在实现一个算法方面确实有很多独到之处. 其实,Min-Hash是LSH(Locality Sensitive Hash)的一种,我之前对LSH的了解仅仅限于知道它能把两个相似的东西Hash成两个汉明距离接近的2进制数.

推荐系统实战

- - 博客园_首页
推荐算法:基于特征的推荐算法. 推荐算法准确度度量公式:. 其中,R(u)表示对用户推荐的N个物品,T(u)表示用户u在测试集上喜欢的物品集合. 集合相似度度量公式(N维向量的距离度量公式):. 其中,N(u)表示用户u有过正反馈的物品集合. 其中,S(u,k)表示和用户u兴趣最接近的K个用户集合;N(i)表示对物品i有过正反馈的用户集合;w(u,v)表示用户u和用户v的兴趣相似度;r(v,i)表示用户v对物品i的兴趣.

推荐系统杂谈

- - 后端技术杂谈 | 飒然Hang
推荐系统是近些年非常火的技术,不管是电商类软件还是新闻类app,都号称有精准的推荐系统能给你推送你最感兴趣的内容. 现象级的资讯类app“今日头条”就得益于此成为了势头非常猛的一款产品. 本文就针对推荐系统讲述一些相关概念和实践经验. 首先需要明确的就是推荐系统的目标,一般来说不外乎以下几个:. 用户满意性:首当其冲的,推荐系统主要就是为了满足用户的需求,因此准确率是评判一个推荐系统好坏的最关键指标.

个性化推荐系统综述

- Tony - 所有文章 - UCD大社区
上个月写过一篇产品推荐的文章,详情请见《我所了解的产品推荐》,内容很泛,多为工作心得. 本周读了几篇相关的论文,收获颇多,分享点干货. 以下内容摘自《个性化推荐系统的研究进展》,该文发表于2009年1月的《自然科学进展》专题评述,作者是刘建国、周涛、汪秉宏. 我略去了具体的算法和许多公式,重点看原理、思路和比较.

推荐系统开源工具 – SVDFeature

- Roger - Resys China
SVDFeature是我们(上海交大Apex实验室)在参加KDDCUP 2011期间开发的. 通过这个工具,我们和港科大(HKUST)的联合小组InnerPeace在KDDCUP 2011中获得Track 1第三名,并创造单模型最好成绩. 在此分享给大家,并希望和大家有更多的交流. (1)基于feature的可扩展性 —— SVDFeature实现了我们的基础模型feature-based matrix factorization.

Reculike : 开源论文推荐系统

- votis - Resys China
今天这篇博文主要总结一下reculike的系统架构. 两周前我们宣布发布了reculike的alpha版. 本着分享的原则,今天在这儿介绍一下我们的各个模块的设计方法. 我们这个项目一开始叫paperlens,这是因为我们想学习业界的前辈movielens,开发一个源代码和数据都开源的系统. 关于数据的开源,我想当用户数达到一定程度后,每个月会dump一次我们所有的数据库(密码等隐私信息除外),放到网络上供大家下载.

推荐系统那些事儿1

- - 冰火岛
知识库:用户知识库,Item知识库,用户评分数据(显性和隐性)等.不同的业务背景不一样,譬如电商,社交网络,视频,app应用等. 协同过滤引擎:根据用户评分数据集,通过collaborative filtering方法,计算用户喜欢的top N item. 数据格式: userid, itemid,score.

下一代个性化推荐系统

- - 技术改变世界 创新驱动中国 - 《程序员》官网
本文结合技术及社会需求发展的大背景,讲述了当前推荐系统的价值及所面临的挑战,并指出了下一代个性化推荐系统的设计思路及需要注意的问题. 作为个性化推荐系统核心的协同过滤(Collabora-tive Filtering)算法,是Goldberg等人在1992年的一篇学术论文中最早提出的. 他们在这篇文章中提出一种方法,在一个新闻组中,根据 用户下载的新闻计算他们之间在口味上的相似程度,并利用这种相似程度为他们进一步推荐相关的新闻.