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

    相关文章

    Python将大量遥感数据的值缩放指定倍数的方法(推荐)

    《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

    在C#中获取端口号与系统信息的高效实践

    《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

    JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

    《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

    Golang的CSP模型简介(最新推荐)

    《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

    2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

    《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

    高效管理你的Linux系统: Debian操作系统常用命令指南

    《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

    Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

    《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

    windows系统下shutdown重启关机命令超详细教程

    《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

    五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

    《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

    Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

    《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作