Skip to content
/ tasty Public

cf based recommendation system library written in golang

License

Notifications You must be signed in to change notification settings

lilee/tasty

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

tasty是一个帮助你构建推荐系统的工具包,目前特性,测试都不完善,不能用于生产环境。但可以用于推荐系统入门学习

tasty采用了对商业友好的Apache License v2发布

tasty目前实现了最基本的协同过滤推荐算法,目前包括:

  1. 基于用户的协同过滤
  2. 基于项目的协同过滤

相似度算法目前仅实现了皮尔逊相关系数,后续会不断完善,如:

  1. 欧几里德距离
  2. 余弦相似度
  3. Tanimoto系数

使用

tasty参考了Mahout的接口设计,使用方法和Mahout比较相似。

下面是一个基于项目协同过滤的例子

package main

import (
    "fmt"
    "github.com/lilee/tasty/cf/model"
    "github.com/lilee/tasty/cf/recomender"
    "github.com/lilee/tasty/cf/similarity"
)

func main() {
    m := model.NewGenericDataModel()
    add := func(userId, itemId uint64, value float64) {
        p := model.NewGenericPreference(userId, itemId, value)
        m.AddPreference(p)
    }
    // A用户喜欢物品a,c
    // B用户喜欢物品a,b,c
    // C用户喜欢物品a
    // 物品a,c同时被用户喜欢,说明物品a,c的相似度很高
    // C用户喜欢a物品,则可以将c物品推荐给用户C
    add(1, 1, 5.0)
    add(1, 3, 4.0)
    add(2, 1, 4.0)
    add(2, 2, 5.0)
    add(2, 3, 5.0)
    add(3, 1, 5.0)
    // 使用皮尔逊相关系数相似度算法
    s := similarity.NewPearsonCorrelationSimilarity(m)
    // 基于项目的协同过滤
    r := recommender.NewGenericItemBasedRecommender(m, s)
    items, err := r.Recommend(3, 1)
    if err != nil {
        panic(err)
    }
    for _, item := range(items) {
        fmt.Println("item:", item)
    }

    //Output:
    // item: (3, 5.000000)
}
  • DataModel提供了存储及访问用户偏好的接口
  • Similarity实现了计算两个用户相似度的方法
  • Recommender使用上面两个模块向指定用户提供TopN推荐

程序运行输出是:

item: (3, 5.000000)

表示将推荐物品c,并且系统预测用户C对物品c的可能评分是5分

TODO

未来一个月内的计划

  1. 完善文档
  2. 完善单元测试
  3. 实现基本的离线评测方法
  4. 实现基于隐语义模型的协同过滤算法
  5. 完善向量相似度算法

About

cf based recommendation system library written in golang

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages