推荐系统遇上深度学习(一零六)-神经网络与逻辑推理相结合的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

    相关文章

    Qt QCustomPlot库简介(最新推荐)

    《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

    Java内存分配与JVM参数详解(推荐)

    《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

    深度解析Java DTO(最新推荐)

    《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

    深度解析Java项目中包和包之间的联系

    《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

    Go语言中nil判断的注意事项(最新推荐)

    《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

    Spring 框架之Springfox使用详解

    《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

    深度解析Python装饰器常见用法与进阶技巧

    《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

    深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

    《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

    深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

    《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

    python 常见数学公式函数使用详解(最新推荐)

    《python常见数学公式函数使用详解(最新推荐)》文章介绍了Python的数学计算工具,涵盖内置函数、math/cmath标准库及numpy/scipy/sympy第三方库,支持从基础算术到复杂数... 目录python 数学公式与函数大全1. 基本数学运算1.1 算术运算1.2 分数与小数2. 数学函数