Gorse 合并来自多个推荐器的推荐,并对它们进行排序以产生最终的推荐列表。
type 是排序器类型。支持的排序器是: none 表示不执行排序。fm 使用因子分解机对推荐物品进行排序。
recommenders 是其推荐被合并和排序的推荐器的名称。值应为以下之一: latest 使用最新的物品推荐器。collaborative 使用协同过滤推荐器。non-personalized/NAME 使用名称为 NAME 的非个性化推荐器。item-to-item/NAME 使用名称为 NAME 的物品到物品推荐器。user-to-user/NAME 使用名称为 NAME 的用户到用户推荐器。
early_stopping.patience 是在没有改进的情况下,因子分解机训练将停止的 epoch 数。默认为 10。
在演示项目 GitRec 中,因子分解机用于对来自多个推荐器的推荐物品进行排序:
- 来自最新物品推荐器的最新仓库。
- 协同过滤推荐。
- 来自非个性化推荐器的过去一周最受关注的仓库。
- 来自物品到物品推荐器的相似仓库。
- 来自用户到用户推荐器的相似用户的积极反馈中的仓库。
[recommend.ranker]
type = "fm"
recommenders = ["latest", "collaborative", "non-personalized/most_starred_weekly", "item-to-item/neighbors", "user-to-user/neighbors"]
与矩阵分解的学习算法不同,负反馈用于因子分解机训练。训练数据集由下式构成
D={((x1,…,xf,…,xF),1)∣(u,i)∈R}∪{((x1,…,xf,…,xF),0)∣(u,i)∈/R}
输入向量 x 的维度是物品、用户、物品标签和用户标签数量的总和:F=∣I∣+∣U∣+∣LI∣+∣LU∣。对于一对 (u,i),x 中的每个元素定义为
xf={I(f=u)0<f≤∣I∣ I(f−∣I∣=u)∣I∣<f≤∣I∣+∣U∣ I(f−∣I∣−∣U∣∈Li)∣I∣+∣U∣<f<≤∣I∣+∣U∣+∣LI∣ I(f−∣I∣−∣U∣−∣LU∣∈Lu)∣I∣+∣U∣+∣LI∣<f<≤F
输入向量 x 的预测输出是
y^=w0+i=1∑nwixi+i=1∑nj=i+1∑n⟨vi,vj⟩xixj
其中必须估计的模型参数是:w0∈R,w∈Rn,V∈Rn×k。而 ⟨⋅,⋅⟩ 是两个向量的点积。参数通过带有 SGD 的 logit 损失进行优化。损失函数是
C=(x,y)∈D∑−ylog(y^)−(1−y)log(1−y^)
每个参数的梯度是
∂θ∂y^={1,extifθextisw0 xi,extifθextiswi xi∑j=1nvj,fxj−vi,fxi2,extifθextisvi,f