讲个故事4.0

一、DORL的输入

1.1 dataset_train

dataset_train = {StaticDataset:37592418},用作预训练模型的训练集。
共7176个用户和10728个视频,产生了37592418条交互记录。
Alt

1.1.1 x_numpy

x_numpy={ndarray:(37592418,14)}
第一行数据为:
Alt
0.00000:表示0号用户
3649.00000:表示3649号视频
10.00000:表示该视频的第一个所属类别为类别10
0.00000:表示该视频无第二个所属类别
0.00000:表示该视频无第三个所属类别
0.00000:表示该视频无第四个所属类别
-0.11252:表示该视频的标准化时长为-0.11252
2860.00000:表示2860号用户
7905.00000:表示7905号视频
4.00000:表示该视频的第一个所属类别为类别4
0.00000:表示该视频无第二个所属类别
0.00000:表示该视频无第三个所属类别
0.00000:表示该视频无第四个所属类别
-0.11123:表示该视频的标准化时长为-0.11123
其中,第一组交互记录即0-6列为正样本,7-13列为负样本。正样本表示用户观看该视频的标准化观看时长较长,负样本表示用户观看该视频的标准化观看时长较短或未观看过该视频。

1.1.2 y_numpy

y_numpy={ndarray:(37592418,1)}
第一行数据为:
Alt
0.40106:表示x_numpy的第一行中正样本对应的用户观看对应视频的标准化观看率为0.40106。即0号用户观看3649号视频的标准化观看率为0.40106.

1.1.3 x_columns

x_columns= {list:(7)} ,表示输入模型的用户特征与视频特征(共7个)。
[SparseFeatP(name, vocabulary_size, embedding_dim, use_hash, dtype, embedding_name, group_name)]

第一行的数据为:
SparseFeatP(name=‘user_id’, vocabulary_size=7176, embedding_dim=8, use_hash=False, dtype=‘int32’, embedding_name=‘user_id’, group_name=‘default_group’)
name=‘user_id’:表示用户id
vocabulary_size=7176:表示用户的总数为7176
embedding_dim=8:表示用户id经过嵌入层后向量维度为8维
use_hash=False:表示不使用哈希技术对用户id进行编码。
dtype=‘int32’:表示用户id的数据类型为32位的整数
embedding_name=‘user_id’:表示用户id的向量名称为user_id
group_name=‘default_group’:表示用户id所属分组为default_group
在这里插入图片描述
其中,embedding_dim均为默认值8。输入模型的user_id最大值7176-1,经过模型的embedding层,会将每个user_id变为一个8维的向量。
在这里插入图片描述

1.1.4 y_columns

y_columns= {list:(1)} ,表示模型输出的特征(共1个)

第一行的数据为:
DenseFeat(name=‘y’, dimension=1, dtype=‘float32’)
name=‘y’:表示输出的列名为y
dimension=1:该输出列的维度为1。
dtype:表示输出列的数据类型为32位浮点数。
Alt

1.2 dataset_val

df_val= {DataFrame:(4676570,9)},用作预训练模型的验证集。
共1411个用户和3327个视频,产生了4676570条交互记录。
Alt
其中,x_numpy、y_numpy、x_columns、y_columns与dataset_train所表示的含义基本一致(x_numpy中仅有正样本)。

1.2.1 df_user_val

df_user_val= {DataFrame:(1411,0)}
表示验证集中,用户仅用0-1413这1411个索引进行表示,索引即为用户id。

1.2.2 df_item_val

df_item_val= {DataFrame:(3327,5)},表示3327个视频,每个视频有5个特征。
[feat0 feat1 feat2 feat3 duration_normed]
每个元素代表的含义如下:
feat0~feat3 :视频所属类别,共31个类别,表示为1-31。每个视频所属类别至多有4个,若少于4个则用0填充。
duration_normed:视频的标准时长

第一行的数据为:
Alt
103 [13 0 0 0 -0.42551],其中:
103:表示103号视频
13:表示该视频属于类别13
0:表示该视频无第二个所属类别
0:表示该视频无第三个所属类别
0:表示该视频无第四个所属类别
-0.148742:表示该视频的标准时长为-0.148742

1.3 train_collector

train_collector = {Collector},用作学习策略的训练集
共100个用户与3327个视频。
在这里插入图片描述
其中obs = {ndarray:(100,2)}
obs的第一行数据为:
在这里插入图片描述
788:表示788号用户
3327:表示可以推荐给该用户的视频id为0-3326

act表示下一时刻为用户推荐的视频id
obs_next表示下一时刻为用户推荐的视频id
rew表示为用户推荐的视频,经计算得到的奖励

1.4 test_collector_set

test_collector_set = {Collector},用作学习策略的测试集
共100个用户与3327个视频。
在这里插入图片描述
其中obs = {ndarray:(100,2)}。
obs的第一行数据为:
在这里插入图片描述
306:表示306号用户
3327:表示可以推荐给该用户的视频id为0-3326

act表示下一时刻为用户推荐的视频id
obs_next表示下一时刻为用户推荐的视频id
rew表示为用户推荐的视频,经计算得到的奖励

二、DORL的输出

输出为:给用户推荐的视频id

三、优化目标

优化目标为:最小化损失
损失函数如下:
Alt
其中,θk表示集成用户模型中的第k个子模型,σ2θk(xi)表示θk对样本xi的预测方差,fθk表示θk对样本xi的预测值。yi表示样本xi的真实标签值。

四、算法步骤

4.1 小数据集

在这里插入图片描述
在这里插入图片描述
df_x_complete即为Pretrain中的x,Pretrain中的y为用户观看视频的真实的标准化观看时长。
在这里插入图片描述

离线数据集中的标准化观看率有正有负,标准化观看率越大说明用户越喜欢该视频。但具体计算标准化观看率的方法不明。因此,小数据集中的预测矩阵中有正有负。
在这里插入图片描述
在这里插入图片描述

4.2 计算损失

在这里插入图片描述
通过梯度下降,最小化loss,使得用户模型可以更好地模拟真实用户。

4.3 学习策略、进行推荐并计算奖励

为0号用户进行推荐,初始时,推荐动作act为空数组,状态state为None,观察矩阵为初始矩阵obs = [0 5],表示可以对0号用户推荐的视频为0-4。
首先,将obs = [0 5]传入policy,假设policy将为0号用户推荐2号视频。更新act=[2] obs_next=[0 2],将act传给用户模型模拟视频推荐。计算奖励rew:
Alt
更新obs = [0 2]表示当前时刻为0号用户推荐了2号视频。
然后,继续为0号用户进行下一次推荐,假设推荐1号视频,则更新obs_next = [0 1] ,action=[1],计算奖励rew=0.15-0.01*0.0001+0.05(0.7872+0.4471)=0.21171.更新obs = [0 1]表示当前时刻为0号用户推荐了1号视频
因为此时推荐过的视频数量已达到关注的推荐数量(2),更新state
在这里插入图片描述
当前时刻为t,上一时刻为t-1.
动作an的嵌入为41维,其中,1-8维表示视频id,9-16维表示视频所属的第一个类别,17-24维表示视频所属的第二个类别,25-32维表示视频所属的第三个类别,33-40维表示视频所属的第四个类别,第41维表示视频的标准化时长。
奖励 r ~ {\widetilde r} r 的嵌入为1维,表示奖励的大小。

t-1时刻:
e → a t − 1 \overset{\rightarrow}{e}_{a_{t-1}} eat1=[-0.04520299 0.08088709 -0.15539388 0.31831533 -0.09131385 0.05895899, 0.2556744 -0.14113604 0.051513 -0.03810431 -0.05060479 -0.0384757, 0.02586577 -0.03976231 -0.03038354 0.02185742 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. -0.14874157]
r ~ t − 1 \widetilde{r}_{t-1} r t1=[0.32927]
水平拼接为
[-0.04520299 0.08088709 -0.15539388 0.31831533 -0.09131385 0.05895899, 0.2556744 -0.14113604 0.051513 -0.03810431 -0.05060479 -0.0384757, 0.02586577 -0.03976231 -0.03038354 0.02185742 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. -0.01234 0.32927]
t时刻:
e → a t \overset{\rightarrow}{e}_{a_t} eat=[-0.04520299 0.08088709 -0.15539388 0.31831533 -0.09131385 0.05895899, 0.2556744 -0.14113604 0.051513 -0.03810431 -0.05060479 -0.0384757, 0.02586577 -0.03976231 -0.03038354 0.02185742 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. -0.14874157]
r ~ t \widetilde{r}_t r t=[0.21171]
水平拼接为
[-0.02567394 0.03882603 -0.02900135 0.52271 -0.0178257 0.14830327, 0.26527008 -0.05114506 0.08045326 -0.02176466 -0.01744899 -0.02215503, 0.03756568 -0.01000033 0.00845384 0.01802633 0.04524125 -0.0528275, 0.03109292 -0.02242708 0.03707033 0.02108514 0.0557649 0.01112855, 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0. -0.3105719 0.21171]
得到 s → t + 1 \overset{\rightarrow}{s}_{t+1} st+1=[−0.0354,0.0599,−0.0922,0.4205,−0.0546,0.1036,0.2605,−0.0961,0.0660,−0.0299,−0.0340,−0.0005,−0.0249,−0.0110,0.0199,0.0226,−0.0264,0.0155,−0.0112,0.0185 0.0105,0.0279,0.0056, 0.02109 0.05576 0.01113.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.−0.1615,0.2710]

五、对GPM的调研

GPM(Gaussian Process Model)的输入和输出如下:

5.1 输入

特征向量
输入数据通常是一个特征矩阵,其中每一行代表一个样本,每一列代表一个特征。特征可以是任何与预测任务相关的信息,例如用户特征、项目特征、环境变量等。对应4.1的df_x_complete
超参数
超参数与模型有关,GPM通过动态调整超参数,以获得更好的结果。

5.2 输出

预测均值
对于给定的输入样本,模型输出的预测均值.对应原文图6中的fθk
预测方差
模型还会输出预测的方差,表示对预测均值的不确定性。方差越大,说明模型对该预测的不确定性越大。对应原文图6中的σ2θk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值