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

    相关文章

    mysql的基础语句和外键查询及其语句详解(推荐)

    《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

    利用Python快速搭建Markdown笔记发布系统

    《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

    Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

    《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

    Linux系统中卸载与安装JDK的详细教程

    《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

    Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

    《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

    SpringCloud动态配置注解@RefreshScope与@Component的深度解析

    《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

    Python 中的异步与同步深度解析(实践记录)

    《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

    Python Dash框架在数据可视化仪表板中的应用与实践记录

    《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

    基于Flask框架添加多个AI模型的API并进行交互

    《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

    Python GUI框架中的PyQt详解

    《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid