智能推荐技术 | 粗精迁移排序算法
admin
2022-05-03 07:32:56
0

原标题:智能推荐技术 | 粗精迁移排序算法

迁移排序(transfer to rank, ToR)是一种简单有效的算法,包含浏览和评分两个阶段。它首先使用用户的浏览行为数据进行全局偏好学习,然后利用评分行为数据来进一步优化候选物品列表。ToR模型虽然在一定程度上模拟了用户的购物过程,但忽略了用户在购买选择上的差异,也就是说,某些用户虽然给物品打了高分,但他们不一定会购买该物品。为了解决此问题,粗精迁移排序(coarse-to-fine transfer to rank, CoFiToR)将用户购物过程进一步细分为三个阶段,即浏览阶段(E阶段)、评分阶段(S阶段)和购买阶段(P阶段),对应于三个具体问题:

(1)用户是否会浏览一个物品?

(2)用户浏览一个物品后,会给它评多少分?

(3)用户最终是否会购买该物品?

01

算法流程

CoFiToR的算法流程如算法3-1所示。它包含三个阶段,不同阶段之间通过候选物品列表来实现知识的共享和迁移。需要说明的是,CoFiToR的三个阶段是相对独立的,因此,每个阶段的模型可以根据实际需要进行更改,阶段的数量也可以灵活增减。

算法3-1 CoFiToR算法

02

代码实现

CoFiToR的算法代码采用Java语言编写,工具是JDK 1.8和代码编辑器Eclipse。它具有三个阶段,第一阶段采用加强版本的BPR算法,其中采样、对评分进行归一化和计算损失函数的代码如下:

publicstaticvoidtrainthrows IOException

{

for( intiter = 0; iter < num_iterations; iter++) {

for( intiter2 = 0; iter2 < num_train; iter2++) {

// 随机采样一个(u,i,r_ui)三元组

intidx = ( int) Math. floor(Math.random * num_train);

intu = indexUserTrain[idx];

inti = indexItemTrain[idx];

floatrating = indexRatingTrain[idx];

// 对评分进行归一化

floatr_ui = 0f;

if(rtype == 5){

intloc = ( int)rating;

r_ui = rating_weight[loc];

}

elseif(rtype == 10){

intloc = ( int)(rating* 2);

r_ui = rating_weight[loc];

}

// 获取训练集中用户u的评分记录

Map Item_Rating = TrainData.get(u);

intj = i;

while( true) {

// 随机采样一个物品j

j = ( int) Math. floor(Math.random * m) + 1;

// 判断物品j是否是负样本

if(ItemSetTrain.contains(j) && !Item_Rating.containsKey(j))

{

break;

} else{

continue;

}

}

// 计算损失函数

floatr_uij = biasV[i] - biasV[j];

for( intf = 0; f < d; f++) {

r_uij += U[u][f] * (V[i][f] - V[j][f]);

}

floatEXP_r_uij = ( float) Math. pow(Math.E, r_uij);

floatloss_uij = -1f/ ( 1f+ EXP_r_uij);

}

}

}

第二阶段采用PMF算法,其中采样和计算损失函数的代码如下:

publicstaticvoidtrain

{

for( intiter = 0; iter < num_iterations; iter++) {

for( intiter_rand = 0; iter_rand < num_train_target; iter_rand++) {

// 随机采样一个(u,i,r_ui)三元组

intrand_case = ( int) Math. floor(Math.random * num_train_target);

intuserID = indexUserTrain[rand_case];

intitemID = indexItemTrain[rand_case];

floatrating = ratingTrain[rand_case];

// 计算预测公式和误差

floatpred = 0;

floaterr = 0;

for( intf = 0; f < d; f++) {

pred += U[userID][f] * V[itemID][f];

}

pred += g_avg + biasU[userID] + biasV[itemID];

err = rating - pred;

}

}

}

第三阶段采用原始的BPR算法,可以参考第一阶段的代码实现。

实例讲解

智能推荐系统

往期回顾

智能推荐系统

智能推荐技术——推荐系统常用数据集和验证方法

下期预告

智能推荐系统

智能推荐技术——粗精迁移排序算法

智能推荐技术——偏好感知迁移学习算法

智能推荐技术——RIB算法

03

参考书籍

《智能推荐技术》

作者:潘微科 明仲 林晶

定价:69.8元

内容简介

本书围绕电商、资讯等众多实际应用背后的内核,即智能推荐技术,系统介绍经典和前沿技术,包括基于邻域、矩阵分解、深度学习、迁移学习、联邦学习等的建模方法和推荐算法。

本书围绕用户行为数据的建模问题组织内容,全书共分6部分:

第1部分(第1章)为背景和基础;

第2部分(第2~4章)为单行为推荐,是指仅对一种显式反馈(如评分)或一种隐式反馈(如浏览)数据进行建模;

第3部分(第5~6章)为多行为推荐,是指同时考虑浏览和购买等包含多种行为的数据;

第4部分(第7~8章)为序列推荐,是指同时关注用户行为和这些行为的先后顺序;

第5部分(第9~10章)为联邦推荐,更加关注用户行为中的隐私和数据安全问题;

第6部分(第11章)为总结与展望。全书综合梳理了多个智能推荐问题和相关技术,分析了方法的优缺点和内在联系,并在每章结束时提供了详细的参考文献和有针对性的习题。

本书可以作为计算机科学与技术、软件工程等相关专业的研究生和高年级本科生的教材,也可以作为推荐系统工程师的参考手册。

04

精彩推荐

  • 微信小程序游戏开发│猜数字小游戏(附源码+视频)

  • Flink编程基础│Scala编程初级实践

  • Flink编程基础│FlinkCEP编程实践

  • Flink编程基础│DataStream API编程实践

  • Flink编程基础│DataSet API编程实践

  • 数 据分析实战│客户价值分析

  • 数据分析实战│价格预测挑战

  • 数据分析实战│时间序列预测

  • 数据分析实战│KaggleTitanic生存预测

相关内容