gorse推荐系统简介
gorse是一个开源的推荐系统,目前还在持续开发中。该计划旨在为各种在线服务提供一个快速的推荐系统解决方案。
以下就gorse的使用途径和方法进行一些说明。
1、gorse能提供什么
当前的gorse提供的推荐服务按类别可以分为个性化推荐和非个性化推荐,它们具体包含的内容如下:
1.1 非个性化推荐
- 热门推荐:在一定时间(或不限定时间)内发布的最受用户欢迎的n条数据;
- 最新推荐:选择n条最近发布的数据;
- 相似推荐:推荐n条与当前数据类似的数据(当前并不是根据数据与数据之间的特征相似度进行推荐,而是根据数据和数据之间的用户相似度进行推荐)
1.2 个性化推荐
个性化推荐系统使用了机器学习模型来得出用户的推荐数据。
训练模型分别采用了排序模型(BPR/ALS/CCD)和CTR模型(factorization machines)。当输入的数据存在标签(tag,label)时CTR预估模型被启用,反之则不启用。根据CTR模型是否被使用,推荐算法的过程也略有不同。
- 通过排序模型得到n条未被当前用户看过的数据,
- 根据CTR模型是否被启用
- CTR模型被启用:在以上n条数据的末尾插入m条最新的数据,通过CTR模型重新进行排序
- CTR模型未被启用:在以上n条数据中随机插入m条最新的数据
需要注意的是,以上的模型训练过程并不是即时响应的,而是在离线过程中进行计算。以上得到数据会被放到缓存系统中,通过在线服务提供给用户。当推荐数据不足时,会采取以下措施:
- 收集与这些推荐数据相似的数据,并去除已读数据
- 若是以上数据不足时,从最新推荐或热门推荐中取出数据,并去除已读数据。
2、gorse如何工作
2.1 构成组件
gorse是一个独立的推荐系统,和其它服务的通讯主要通过http服务;在gorse内部各系统之间则通过gRPC服务进行通讯。
gorse是一个单节点训练的分布式预测推荐系统。gorse将数据存放在数据库中(当前支持mysql和mongodb),中间数据则缓存在redis里。该集群包含了一个主节点,多个工作节点和服务节点:
- 主节点负责模型训练,非个性化数据推荐,配置管理和人员管理
- 服务节点负责提供RESTful APIs给外界,并提供在线推荐数据
- 工作节点负责为每个用户生成个性化推荐数据
除此以外,管理员还可以通过主节点提供的仪表盘(当前默认为promethus)进行数据监控。
2.2 工作流程
- 收集用户反馈数据到数据库中,
- 从数据库拉取反馈数据到训练模型中,
- 后台生成所有离线推荐数据并进行缓存,
- 在线服务将缓存数据推荐给用户
2.2.1 如何处理没有创建的用户和数据
如果一个用户反馈中包含的用户信息和数据是未知的时候,可以通过配置中auto_insert_user和auto_insert_item的值控制对该反馈的处理。如果允许自动创建用户和数据,则自动在数据中创建;反之则否,并忽略该反馈数据。
2.2.2 如何处理陈旧的数据
通过配置positive_feedback_ttl和item_ttl,超过该过期时间的反馈和数据会被忽略。
2.3 数据实体
gorse中包含三种实体,用户(User),数据(Item)和反馈(Feedback)。
1、 用户(User)
type User struct {
UserId string
}用户由唯一的id进行标识。
2、数据(Item)
type Item struct {
ItemId string
Timestamp time.Time
Labels []string }
数据由唯一的id进行标识。timestamp可以是该数据的创建时间,也可以是更新时间。Labels是该数据的特征标签。
3、反馈(Feedback)
type Feedback struct {
FeedbackType string
UserId string
ItemId string
Timestamp time.Time
}
反馈由三个值进行唯一标识:反馈类型(FeedbackType)、用户id(UserId)、数据id(ItemId)。
反馈类型可以大致分为三类:
- positive_feedback_types(正向反馈类)指用户喜欢某个item,
- click_feedback_types(点击反馈类)指用户喜欢某个被gorse推荐的item,
- read_feedback_type(访问反馈类)指用户访问了某个item,
其中click_feedback_types一定是由gorse推荐的items的反馈数据,positive_feedback_types则是通过其他途径得到的items的反馈数据。
4、在线评估
评估推荐的好坏,可以计算click feedback / read feedback 的值。
2.4 模型更新
模型训练和模型查找都是在主节点完成的。主节点会定期拉取数据对排序模型和CT模型进行拟合。
1、模型搜索
gorse中每个模型都有很多超参,通常是根据经验进行人工设定。为了帮助用户摆脱超参调优,gorse中集成了随机搜索来进行超参优化。
模型搜索的过程如下:
- 每隔search_period分钟,从数据库中拉取数据,
- 对每个推荐模型,进行search_trials次试验,
- 每次实验时:
- 对超参数组合进行采样,
- 使用超参进行模型训练,
- 更新最佳模型
2、模型训练
- 每隔fit_jobs分钟,从数据库中拉取数据,
- 使用模型搜索得到的最佳超参进行模型训练
3、如何使用gorse
3.1 准备
1、存储数据的数据库
目前支持mysql,mongodb,postgres;
mysql至少在5.7版本及以上,否则需要修改源代码;
参考资料


评论
发表评论