讲个故事5.0

一、DORL的输入

1.1 训练集

训练集共有两个,分别为dataset_train和train_collector。dataset_train用于训练用户模型,即训练论文图6中的GPM,该训练过程有验证集无测试集;train_collector用于学习策略,即学习论文图6中的Policy πθ,该学习过程有测试集。学习πθ需要用户对πθ推荐的视频进行反馈,而训练好的GPM可以模拟用户,从而对πθ进行离线地学习。

1.1.1 dataset_train

该训练集用于训练用户模型,即训练论文图6中的GPM。
dataset_train = {StaticDataset:37592418}。
该训练集中共7176个用户和10728个视频,以及37592418条交互记录。该训练集主要由①x_numpy、②y_numpy、③x_columns以及④y_columns构成。分别表示交互记录、用户观看视频的标准观看率、对输入GPM的的用户特征(1个)与视频特征(6个)的具体描述以及指定的GPM的输出。
Alt

图1
① x_numpy

x_numpy={ndarray:(37592418,14)},表示交互记录
第一行数据为:
在这里插入图片描述

图2

具体字段解释如下:
在这里插入图片描述

图3

其中,第一组交互记录即0-6列为正样本,7-13列为负样本。正样本表示用户观看该视频的标准化观看时长较长,负样本表示用户观看该视频的标准化观看时长较短或未观看过该视频。

② y_numpy

y_numpy={ndarray:(37592418,1)},用户观看视频的标准观看率
第一行数据为:
在这里插入图片描述

图4

具体字段解释如下:
在这里插入图片描述

图5
③ x_columns

x_columns= {list:(7)} ,表示对输入GPM的的用户特征(1个)与视频特征(6个)的具体描述。
[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’:表示用户向量的向量名称为user_id
group_name=‘default_group’:表示用户向量所属分组为default_group
在这里插入图片描述

图6

其中,embedding_dim均为默认值8。输入模型的user_id最大值7176-1,经过随机算法,会将每个user_id变为一个8维的向量。
在这里插入图片描述

图7
④ y_columns

y_columns= {list:(1)} ,指定了GPM的输出为“y”。
第一行的数据为:
DenseFeat(name=‘y’, dimension=1, dtype=‘float32’)
name=‘y’:表示输出的列名为y
dimension=1:该输出列的维度为1。
dtype:表示输出列的数据类型为32位浮点数。
Alt

图8 ### 1.1.2 train_collector train_collector = {Collector}. 该训练集用于学习策略,即学习论文图6中的Policy π~θ~。 该训练集中共100个用户与3327个视频。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/198c249f14af46069ac048a398e5ce60.png)
图9

train_collector由act、obs、obs_next以及rew组成。
act:表示下一时刻为用户推荐的视频id
obs = {ndarray:(100,2)}
obs的第一行数据为:
在这里插入图片描述

图10

具体字段解释如下:
在这里插入图片描述

图11

obs_next:表示下一时刻为用户推荐的视频id
rew:表示用户观看推荐的视频后,得到的奖励

1.2 验证集

1.2.1 dataset_val

dataset_val= {DataFrame:(4676570,9)}.
该验证集用于验证论文图6中的GPM。
共1411个用户和3327个视频,以及4676570条交互记录。
dataset_val与1.1.1训练集的字段基本一致,不同的是dataset_val的x_numpy中仅有正样本。
Alt

图12

该验证集由x_numpy、y_numpy、x_columns、y_columns以及下面的①和②组成。

① df_user_val

df_user_val= {DataFrame:(1411,0)}
表示验证集中用户id为0-1410。

② df_item_val

df_item_val= {DataFrame:(3327,5)},表示3327个视频,每个视频有5个特征。
第一行的数据为:
在这里插入图片描述

图13

具体字段解释如下:
在这里插入图片描述

图14

其中103表示103号视频

1.3 测试集

1.3.1 test_collector_set

test_collector_set = {Collector},该测试集用于测试πθ
共100个用户与3327个视频。
在这里插入图片描述

图15

test_collector_set 由act、obs、obs_next以及rew组成。
act:表示下一时刻为用户推荐的视频id
obs = {ndarray:(100,2)}:表示当前时刻为用户推荐的视频
obs的第一行数据为:
在这里插入图片描述

图16

具体字段解释如下:
在这里插入图片描述

图17

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

二、DORL的输出

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

三、优化目标

优化目标为:最小化损失
损失函数如下:
Alt

图18

其中,θk表示集成用户模型中的第k个子模型,σ2θk(xi)表示θk对样本xi的预测方差,fθk表示θk对样本xi的预测值。yi表示样本xi的真实标签值。

四、评价指标

实验规定:在前N(N=4)轮推荐中只要有一个推荐视频所属的类别与当前推荐的视频所属类别相似,则结束交互,并且最多交互30轮。
随着N的增大,用户对相似内容的容忍度越低。
在这里插入图片描述

图19

4.1 累积奖励Rtra

将所有用户从开始至退出得到的所有奖励进行累加,得到Rtra。Rtra越大表示推荐效果越好。

4.2 交互轨迹的长度Length

将所有用户从开始至退出进行交互的轮数累加并取平均,得到Length。Length越大表示推荐效果越好。

4.3 单轮奖励Reach

Reach=Rtra/Length。Reach越大表示推荐效果越好。

4.4 MCD

Majority Category Domination (MCD),表示标记为主导类别的物品在推荐结果中所占的比例。假设某一用户共交互了10轮。推荐的10个视频中所属类别为主导类别的有3个,则其MCD为3/10=0.3 。将所有用户的MCD累加并取平均,得到MCD。
MCD越大表示推荐结果中的马太效应越强,即推荐效果越差。

五、算法步骤

5.1 小数据集

在这里插入图片描述

图20

在这里插入图片描述

图21

在这里插入图片描述

图22

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

图23

在这里插入图片描述

图24

4.2 计算损失

在这里插入图片描述

图25

通过梯度下降,最小化loss,使得用户模型可以更好地模拟真实用户。

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

假设只为0号用户进行推荐。
act={ndarray:(1,)}:表示下一时刻为用户推荐的视频id
obs = {ndarray:(1,2)}:
obs的第一行数据为:
在这里插入图片描述

图26

具体字段解释如下:
在这里插入图片描述

图27

obs_next={ndarray:(1,2)}:表示下一时刻为用户推荐的视频id
rew={ndarray:(1,)}:表示为用户推荐的视频,经计算得到的奖励
初始时,act和rew为一维空数组,obs_next为二维空数组,状态state为None,obs = [0 5] 0表示该用户为0号用户,5表示可以对0号用户推荐0-4号视频。
首先,将act、rew、obs 、obs_next以及state传入πθ,假设πθ将为0号用户推荐2号视频。则更新act=[2] obs_next=[0 2]表示接下来为0号用户推荐2号视频,然后将act传给GPM模拟视频推荐。
计算奖励rew:
Alt

图28

更新obs = [0 2],表示当前时刻为0号用户推荐的是2号视频。
由于此时推荐过的视频数量为1,未达到关注的推荐数量(2),因此不更新state。
然后为0号用户进行下一次推荐。
再次将act、rew、obs 、obs_next以及state传入πθ,假设推荐的是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
在这里插入图片描述

图29

推荐动作an为41维的向量,表示了推荐的视频以及它的信息,an共分为7个字段,分别为视频id、视频所属的第一个类别、视频所属的第二个类别、视频所属的第三个类别、视频所属的第四个类别以及视频的标准化时长。
奖励 r ~ {\widetilde r} r 为1维向量,表示奖励的大小。
由图24知当前时刻为t,上一时刻为t-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]
e → a t − 1 \overset{\rightarrow}{e}_{a_{t-1}} eat1 r ~ t − 1 \widetilde{r}_{t-1} r t1进行水平拼接,得到:
[-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]
e → a t \overset{\rightarrow}{e}_{a_t} eat r ~ t \widetilde{r}_t r t进行水平拼接,得到:
[-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]
然后再次将act、rew、obs 、obs_next以及更新后的state传入πθ,继续对0号用户进行推荐……

六、对GPM(Gaussian Process Model)的调研

6.1 输入

特征向量
输入数据通常是一个特征矩阵,其中每一行代表一个样本,每一列代表一个特征。特征可以是任何与预测任务相关的信息,例如用户特征、项目特征等。对应图21中df_complete_x

6.2 输出

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1537777.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ollama安装(ubuntu20.04)

Ollama是一款开源的自然语言处理工具,它可以帮助开发者快速构建文本处理应用。 ollama官网: https://ollama.ai/ 一、ollama 自动安装 linux统一采用sh脚本安装,一个命令行搞定。 curl -fsSL https://ollama.com/install.sh | sh二、ollama 手动安装 o…

springboot实战学习笔记(2)

目录 1、手动创建springboot工程,选择Maven构建。 2、Maven生成的,可能需要再main目录下new一个resources目录,再在其下目录new一个配置文件。 3、 pom文件中让当前的工程继承父工程依赖:、删去无用依赖。 4、引入后端环境所需要的…

Chainlit集成Langchain并使用通义千问AI知识库高级检索(多重查询)网页对话应用教程

前言 之前写过几篇利用Chainlit集成Langchain和国内通义千问大模型集成的知识库检索增加的网页对话应用的技术文章。文章中关于Langchain的知识库检索只是入门级别的教学,本篇文章针对Langchain的知识库高级检索技术和之前对话应用的代码进行完善。 本次主要改进的…

Flask-JWT-Extended登录验证

1. 介绍 """安装:pip install Flask-JWT-Extended创建对象 初始化与app绑定jwt JWTManager(app) # 初始化JWTManager设置 Cookie 的选项:除了设置 cookie 的名称和值之外,你还可以指定其他的选项,例如:过期时间 (max_age)&…

一款.NET开源的i茅台自动预约小助手

前言 今天大姚给大家分享一款.NET开源、基于WPF实现的i茅台APP接口自动化每日自动预约(抢茅台)小助手:HyggeImaotai。 项目介绍 该项目通过接口自动化模拟i茅台APP实现每日自动预约茅台酒的功能,软件会在指定时间开始对管理的用…

gh-ost

优质博文:IT-BLOG-CN 一、gh-ost的作用 gh-ost是由Github提供的Online DDL工具,使用binlog代替之前的触发器做异步增量数据同步,从而降低主库负载。 基于触发器的Online DDL工具原理: 【1】根据原表结构执行alter语句&#xff…

leetcode-4. 寻找两个正序数组的中位数

题目描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出:2.0…

婚礼弹幕上墙阳光正好,爱意正浓,打造一场出圈的唯美婚礼!

原文地址 婚礼现场的弹幕功能可以给整个场景增添温暖和喜庆的氛围。通过手机发送祝福,让亲友可以即时将祝福传达给新人,同时这些祝福以弹幕的形式在大屏幕上滚动展示,增加了现场互动的乐趣。墙上新闻搭配的功能则更加抢眼,不仅可…

基于代理的分布式身份管理方案

目的是使用分布式的联合计算分发去替换掉区块链中原有的类第三方可信中心的证书机制,更加去中心化。 GS-TBK Group Signatures with Time-bound Keys. CS-TBK 算法 Complete subtree With Time-bound Keys,该算法是用来辅助检测用户的签名是否有效&…

LabVIEW提高开发效率技巧----使用快捷键

在LabVIEW的开发过程中,熟练掌握和运用快捷键可以极大地提升工作效率,减少重复性操作所花费的时间。快捷键不仅可以加快编程速度,还能让开发者更加专注于逻辑实现和功能设计。细问问将详细介绍LabVIEW中的常用快捷键,特别是强大的…

【变化检测】基于HANet建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下: 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、HANet模型训练与预测 4、Onnx运行及可视化 运行环境:Python3.8,torch1.12.0cu113,onnxruntime1.19.2【这里装CPU版,GPU版低于1.19.2算子报错】 likyo…

一招解决微软copilot提示:该服务在您所在的地区不可用

随着windows 11的推出很多网友都开始注意到了微软copilot AI助手。科技快速发展当前AI已经是一个家喻户晓的名词了, 尤其是一些之前体验过ai强大功能的用户,对AI更加是爱不释手。虽然win 11 版本已经将copilot集成到系统当中,然后不少网友在想要体验时却…

kali里面搭建docker容器

注意事项:kali版本,镜像源 (1)权限为管理员: sudo su (2) 更新软件包列表并升级已安装的软件包 apt-get update apt-get upgrade 出错了,应该是更新源出问题了。 (3)更换镜像源&am…

stm32开发之串口空闲中断和环形数组的最简单的组合使用

前言 本次使用的是lwrb开源的源码;测试环境使用的是stm32f407zgt6这里不介绍lwrb的内容,如有需要请自行去查阅.这里会使用到rt_container_of的宏定义(相关介绍请参考rt_thread或linux源码相关的宏定义,其表达的内容是一致的)这里使用的是threadx做为os本…

Java调用数据库 笔记05

一. 数据库(通过各种驱动来实现调用): (应用程序通过接口控制的各种数据库驱动来调用数据库-->jdbc方法) 1.创建Java的普通class类 2.加载驱动 Class.forName("com.mysql.jdbc.Driver"); 3.驱动管理类…

TCP并发服务器的实现

一请求一线程 问题 当客户端数量较多时,使用单独线程为每个客户端处理请求可能导致系统资源的消耗过大和性能瓶颈。 资源消耗: 线程创建和管理开销:每个线程都有其创建和销毁的开销,特别是在高并发环境中,这种开销…

开源 AI 智能名片链动 2+1 模式 O2O 商城小程序在社群活动中的应用与时机选择

摘要:本文探讨了开源 AI 智能名片链动 21 模式 O2O 商城小程序在社群经济中的重要性,着重分析了如何借助该小程序适时举办大型活动以维持和引爆社群活跃度。通过对活动时机选择的研究,强调了针对社群用户量身定制活动时机的必要性&#xff0c…

简单了解微服务--黑马(在更)

认识微服务 单体架构 不适合大型复杂项目 微服务架构 将单体结构的各个功能模块拆分为多个独立的项目 拆取的独立项目分别开发,在部署的时候也要分别去编译打包,分别去部署,不同的模块部署在不同的服务器上,对外提供不同的功能…

渗透测试入门学习——php表单form与POST、GET请求练习

最终效果&#xff1a; 必填项为空报错提示&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>php表单练习</title> </head> <body> <?php//php中的…

UE5学习笔记22-武器瞄准和武器自动开火

0、一些疑问的记录 1.UUserWidget类和AHUD类的区别。两者都是关于界面显示的类。 实践&#xff1a; 想让界面和用户有交互使用UUserWidget&#xff0c;如果不要交互只是显示使用AHUD类&#xff0c;例如使用UUserWidget类制作开始界面&#xff0c;游戏开始&#xff0c;游戏设置&…