gorse推荐系统简介

 

gorse是一个开源的推荐系统,目前还在持续开发中。该计划旨在为各种在线服务提供一个快速的推荐系统解决方案。

以下就gorse的使用途径和方法进行一些说明。

1、gorse能提供什么

当前的gorse提供的推荐服务按类别可以分为个性化推荐和非个性化推荐,它们具体包含的内容如下:

1.1 非个性化推荐

  1. 热门推荐:在一定时间(或不限定时间)内发布的最受用户欢迎的n条数据;
  2. 最新推荐:选择n条最近发布的数据;
  3. 相似推荐:推荐n条与当前数据类似的数据(当前并不是根据数据与数据之间的特征相似度进行推荐,而是根据数据和数据之间的用户相似度进行推荐)
1.2 个性化推荐
个性化推荐系统使用了机器学习模型来得出用户的推荐数据。
训练模型分别采用了排序模型(BPR/ALS/CCD)和CTR模型(factorization machines)。当输入的数据存在标签(tag,label)时CTR预估模型被启用,反之则不启用。根据CTR模型是否被使用,推荐算法的过程也略有不同。
  1.  通过排序模型得到n条未被当前用户看过的数据,
  2. 根据CTR模型是否被启用
    1. CTR模型被启用:在以上n条数据的末尾插入m条最新的数据,通过CTR模型重新进行排序
    2. CTR模型未被启用:在以上n条数据中随机插入m条最新的数据
需要注意的是,以上的模型训练过程并不是即时响应的,而是在离线过程中进行计算。以上得到数据会被放到缓存系统中,通过在线服务提供给用户。当推荐数据不足时,会采取以下措施:
  1. 收集与这些推荐数据相似的数据,并去除已读数据
  2. 若是以上数据不足时,从最新推荐或热门推荐中取出数据,并去除已读数据。

2、gorse如何工作

2.1 构成组件
gorse是一个独立的推荐系统,和其它服务的通讯主要通过http服务;在gorse内部各系统之间则通过gRPC服务进行通讯。
              

gorse是一个单节点训练的分布式预测推荐系统。gorse将数据存放在数据库中(当前支持mysql和mongodb),中间数据则缓存在redis里。该集群包含了一个主节点,多个工作节点和服务节点:
  • 主节点负责模型训练,非个性化数据推荐,配置管理和人员管理
  • 服务节点负责提供RESTful APIs给外界,并提供在线推荐数据
  • 工作节点负责为每个用户生成个性化推荐数据
除此以外,管理员还可以通过主节点提供的仪表盘(当前默认为promethus)进行数据监控。

2.2 工作流程
在将gorse接入到服务中以后,其工作流程大致如下:
  1. 收集用户反馈数据到数据库中,
  2. 从数据库拉取反馈数据到训练模型中,
  3. 后台生成所有离线推荐数据并进行缓存,
  4. 在线服务将缓存数据推荐给用户
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)。
反馈类型可以大致分为三类:
  1. positive_feedback_types(正向反馈类)指用户喜欢某个item,
  2. click_feedback_types(点击反馈类)指用户喜欢某个被gorse推荐的item,
  3. read_feedback_type(访问反馈类)指用户访问了某个item,
其中click_feedback_types一定是由gorse推荐的items的反馈数据,positive_feedback_types则是通过其他途径得到的items的反馈数据。

4、在线评估
    评估推荐的好坏,可以计算click feedback / read feedback 的值。

2.4 模型更新

模型训练和模型查找都是在主节点完成的。主节点会定期拉取数据对排序模型和CT模型进行拟合。
1、模型搜索
    gorse中每个模型都有很多超参,通常是根据经验进行人工设定。为了帮助用户摆脱超参调优,gorse中集成了随机搜索来进行超参优化。
    模型搜索的过程如下:
  1. 每隔search_period分钟,从数据库中拉取数据,
  2. 对每个推荐模型,进行search_trials次试验,
  3. 每次实验时:
    1. 对超参数组合进行采样,
    2. 使用超参进行模型训练,
    3. 更新最佳模型
2、模型训练
  1. 每隔fit_jobs分钟,从数据库中拉取数据,
  2. 使用模型搜索得到的最佳超参进行模型训练

3、如何使用gorse

3.1 准备
    1、存储数据的数据库
    目前支持mysql,mongodb,postgres;
    mysql至少在5.7版本及以上,否则需要修改源代码;

参考资料

评论

此博客中的热门博文

日志合并结构树(LSM)的原理与实现