推荐系统遇上深度学习(一零六)-神经网络与逻辑推理相结合的NLR框架

本文主要是介绍推荐系统遇上深度学习(一零六)-神经网络与逻辑推理相结合的NLR框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天跟大家分享一篇比较有意思的文章,将逻辑推理的思路应用在推荐系统中,一起来看下吧。

1、背景

协同过滤是推荐系统中一种非常重要的方法。目前协同过滤的方法大都基于相似度匹配的思想,即学习用户和商品的表示,然后利用相似度函数来进行推荐,如基于矩阵分解的思路(下图中的(a)),使用内积函数作为匹配函数计算相似度得分。在此基础上,基于上下文的CF,进一步考虑了上下文信息如时间、地点、文本图片等信息,如下图中的(b)方法。

基于相似度匹配思路的协同过滤方法在现实世界许多推荐系统中取得了不错的效果。但论文认为推荐是认知任务而不是感知任务,不仅仅需要具备模式识别和匹配的能力,还需要认知推理的能力,因为用户的未来行为可能不会简单地由其与先前行为的相似性来决定,而是由用户关于下一步行为的认知推理决定。例如,当用户买过一个笔记本电脑之后,下一步不会继续买相似的笔记本电脑,而是有更大的可能去买电脑配件。

用户认知推理的过程可以表示成逻辑表达式的形式,如(a∨b)∧¬c-->v(其中∨表示或,∧表示与,¬表示非)表达的含义是如果用户喜欢a或者b,同时不喜欢c,那么他有可能喜欢v。从把推荐当作一个认知推理任务的角度来说,我们希望推荐模型能够发现和归纳数据中存在的逻辑关系。

那么如何让模型具备更好的推理能力呢?接下来,我们首先介绍下逻辑符号定义,然后再介绍论文提出的NEURAL LOGIC RECOMMENDATION(NLR)框架。

2、逻辑符号&表达式介绍

三个基本的逻辑符号分别是逻辑与∧、逻辑或∨和逻辑非¬。进一步,(x∧y)称为逻辑子式,(x∧y)V(a∧b∧c)称为逻辑表达式。

逻辑表达式需要满足一些定律,如两次取非等于原式:¬(¬x)=x,再比如常用的德摩根定律:¬(x∧y)等价于¬x∨¬y,¬(x∨y)等价于¬x∧¬y。一些常用的逻辑等式关系如下表所示:

另一个常用的逻辑操作称为material implication(实质蕴含),它等价于下面的逻辑运算:

x-->y的含义是,x为真,则y也为真,而¬x∨y要想为真,在x为真的情况下,y必为真(因为¬x是假),所以二者是等价的。

好了,介绍了逻辑符号和表达式的含义之后,接下来介绍NLR框架。

3、NLR框架

本节,我们先介绍基于隐式反馈的推理模型,再介绍基于显式反馈的推理,二者的过程较为相似,因此基于显式反馈的推理只会进行粗略的介绍。

3.1 基于隐式反馈的推理

隐式反馈的数据中,我们仅能知道用户与哪些item进行过交互,但并不知道用户是否真的喜欢这些item,假设用户交互过a,b,c三个item,接下来我们想要判断用户是否对v感兴趣,即判断下面的逻辑表达式是否正确:

基于第二节中的介绍,上式可以进一步转换成:

image.png

再基于德摩根定律,进行进一步转换:

ok,那么我们就可以基于上面两个公式中任意一个来构造网络。c出于简单的考虑,选择了后一个公式(后一个公式只用到了两种逻辑运算,而前一个公式包含三种逻辑运算)。由此构造的网络结构如下图所示:

假设用户u1与v1,v2,v3有过交互,并预测用户是否会与v4进行交互。首先,用户和item都会转换为对应的embedding,并进行拼接,得到<u1,v1>,<u1,v2>,<u1,v3>,<u1,v4>。接下来,通过如下的非线性变换进行转换:

eji表示用户i和item j的embedding经过转换后得到的向量。接下来,我们的目标就是计算如下的逻辑表达式是否为真:

这里,各种逻辑操作均是通过一个多层全连接网络实现,例如逻辑非¬对应的网络输入原始向量,输出一个表示非关系的向量;逻辑或输入两个原始向量,输出一个表示二者或关系的向量。那么,上式的网络结构表示如下:

由于我们需要计算的是多个向量的逻辑或,而逻辑或网络输入的是两个向量,所以需要采用一种循环的方式得到最后的向量。

计算得到逻辑表达式的结果之后,如何计算v4的推荐得分呢?这里,引入两个随机初始化且不会进行梯度更新的向量T和F,分别代表True和False。如果表达式最终计算得到的向量与T接近,则认为v4应该被推荐,反之,则不进行推荐。距离计算使用cosine距离。

到这里看似已经结束了,但我们仍忽略了一个比较重要的问题,上述将三个基本的逻辑运算定义为了神经网络的形式,那么各网络的输出是否符合逻辑运算的基本形式呢?逻辑非对应的网络输出的结果是否是输入向量的非呢?这里我们通过一系列的正则项损失进行约束。

以逻辑非为例,两次逻辑非的结果和原结果应该相同,那么很容易以此为条件设计正则项损失,即计算连续经过两次逻辑非网络得到的向量,与输入向量的距离,距离越大,则损失越大:

其余不同逻辑运算的正则项损失计算如下表所示,本文不再详述:

模型训练采用pairwise的形式,即对同一个用户,同时计算一个正样本和一个负样本的推荐得分,并且希望正样本的得分比负样本得分尽可能高。而最终的损失包含两部分,一部分是pairwise的损失(又包括bpr loss和l2 loss),另一部分是逻辑正则项loss。具体计算公式如下:

3.2 基于显式反馈的推理

使用显式反馈数据进行推理的过程与使用隐式反馈数据过程类似,假设用户对v1和v2有正向的反馈,对v3有负向反馈,那么是否给用户推荐v4可以表示成如下的逻辑表达式:

进一步转换得到:

这里使用两次逻辑非运算而非直接使用原始向量,其目的是为了使逻辑非网络学习得更好。其余过程与使用隐式反馈数据计算过程相似,不再赘述。

4、实验结果及分析

最后来简单看一下实验结果。首先是本文提出的NLR框架与baseline模型的对比,其中NLR-I代表基于隐式反馈数据训练的模型,NLR-E代表基于显式反馈模型训练的模型,从下表数据看,NLR效果远好于各baseline模型,而NLR-E效果好于NLR-I。

再来看一下逻辑正则损失对于模型的提升效果,NLR-Emod代表没有加入逻辑正则损失训练得到的模型,可以看到,其效果是差于NLR-E的,因此逻辑正则损失对于模型效果的提升,具有正向的作用。

好了,论文还是比较有意思的,感兴趣的同学可以翻阅原文哟~


http://www.taodudu.cc/news/show-8123356.html

相关文章:

  • 初识DetNet:确定性网络的前世今生
  • 【智能制造】TSN联手OPC UA,将是阿里、腾讯、华为们直达工业4.0的特快通道?
  • docker 笔记整理
  • 作为前端必须知道的HTML知识
  • Docker实用篇-Docker的基本操作(各种命令、镜像和容器、数据卷挂载)、Dockerfile自定义镜像(基于现有镜像创建)、Docker-Compose(集群部署)、Docker镜像仓库(私)
  • Hexo搭建博客教程
  • 两个linux 共享文件夹,多学一点(二)——在 Linux 下挂载 Windows 共享目录、使用 scp 命令在两台 Linux 间传输数据...
  • Go并发编程基础
  • GoLang之标准库Context包
  • go-etcd
  • go语言中的context
  • 有趣的 Go HttpClient 超时机制
  • Go并发编程-Context包
  • go语言Context标准库
  • Go 的标准库 Context 理解
  • 【搞定Go语言】第3天7:Go标准库Context
  • 29. Go语言标准库之Context
  • Go并发编程学习总结
  • Context标准库
  • Golang 标准库context.Context
  • Go标准库Context包:单个请求多个goroutine 之间与请求域的数据、取消信号、截止时间等相关操作
  • 20-Go语言之context
  • Golang 标准库context的基本使用
  • MySQL 5.5 NDB集群查看日志
  • 程序员能考哪些证书?
  • 程序员可以考哪些证书
  • —— GPS测量原理及应用复习-2 ——
  • 搞清楚电场Ex,Ey,Ez,normE(电场模)场分布的影响,看懂了这些不需要看磁场就能明白基本上所有的场分布知识...
  • Cesium最新基础教程系列4—坐标转换(平面坐标系,笛卡尔空间直角坐标系,弧度,经纬度,屏幕坐标)
  • 【内网流量操控技术六】icmp隧道之icmpsh
  • 这篇关于推荐系统遇上深度学习(一零六)-神经网络与逻辑推理相结合的NLR框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/324710

    相关文章

    Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

    《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

    Python与DeepSeek的深度融合实战

    《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

    CSS3 最强二维布局系统之Grid 网格布局

    《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

    前端 CSS 动态设置样式::class、:style 等技巧(推荐)

    《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

    Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

    《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

    Java中实现订单超时自动取消功能(最新推荐)

    《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

    shell脚本自动删除30天以前的文件(最新推荐)

    《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

    Java深度学习库DJL实现Python的NumPy方式

    《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

    最长公共子序列问题的深度分析与Java实现方式

    《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

    在不同系统间迁移Python程序的方法与教程

    《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创