人工智能之推荐系统实战系列(协同过滤,矩阵分解,FM与DeepFM算法)

一.推荐系统介绍和应用

(1)推荐系统通俗解读

推荐系统就是来了就别想走了。例如在大数据时代中京东越买越想买,抖音越刷越是自己喜欢的东西,微博越刷越过瘾。

(2).推荐系统发展简介

1)推荐系统无处不在,它是根据用户的行为决定推荐的内容。用户每天在互联网中都会留下足迹,这样就会越来越多的用户画像。

2)为什么要推荐系统

卖的好的商品就那几种,其它就不管了吗?答案是否定的。80%的销售来自20%的热门商品,要想提高销售效率,需把不好卖的商品推荐出去。

3)推荐系统发展

<1>亚马逊1998年用简单的协同过滤做了推荐系统,能提高30%的销售额。<2>2015年深度学习崛起(有数据喂过来,机器自动来提特征等操作了,不用人为主观来判断了),推荐也随着改变。<3>今天是百花齐放,各大论文层出不穷。

(3).应用领域与多方位评测指标

1)广告都是钱,如地图导航,地图导航上的附近吃,玩,住的广告,单击进去,要收费。

2)不仅只是推荐产品,还可帮助完成决策,例如图模型做的事情太多了,真是万物互联。例如可能认识的好友推荐

3)知识图谱也是做好产品的必备技能,这样图模型才能做得好。

(4)任务流程与挑战概述

1)推荐系统里的常用词

item:商品;embedding:隐向量,用数值能让计算机识别的向量,例如对用户商品评分矩阵的分解;召回:粗略计算要返回的结果;打分:要排名得有一个统一的标准;重排:最终结果排序。

2)推荐系统经典流程

<1>模式是离线+近线+在线(召回+粗排+精排)。

<2>离线通常跑较大模型与算法,先得到当前数据的大致结果。

<3>粗排通常跟用户走,用户做了什么推荐结果也更新

<4>精排需根据业务规则返回结果,例百度中前几名的结果交的广告钱肯定交得更多。

3)推荐系统的难点与挑战

<1>人的标签与画像不再是难点,但人的兴趣等会变,你的推荐结果也要更新吧,这时特征工程也肯定要变才行,所以构建特征工程现在是难点。

<2>冷启动怎么办?例用户与商品冷启动,例用户新进来抖音,抖音不知道它的特征标签,画像等,那抖音推什么给他呢?抖音肯定不会放过每个用户。

(5)常用技术点分析

1)embedding方向:如何更好地表示数据,让计算机更好地读懂数据,肯定不用one-shot(例如一个商品在100个城市中,其中只用一个1表示某个城市,其它99个都是用0表示来编码,这样做就会出现稀疏庞大的矩阵,因为99个0没太多实际意义)。隐向量embedding的方法在推荐中几乎无处不用,例如常见的点击率估计的FM与DEEPFM算法中。

2)向量就是把内容转成计算机能识别的数字,例如一句话当中把每个字都转成不同维度的能让计算机识别的向量来,那一句话就能让计算机理解读懂了。向量是数值,能参与计算与建模,也是我们做特征提取过程中最需要解决的问题。

3)nlp方向:如何基于文本数据来推荐?感觉有点难。文本处理方法较多,例 如LDA,词向量,矩阵分解等。

4)知识图谱方向:2021年以来最火的技术点,肯定要用到推荐系统中。数据越多越能体现知识图谱的强大,万物互联。

5)cv方向:卷积,图卷积,图像与视频数据也是用户行为的体现。卷积不仅应用图像与视频数据中,矩阵数据都可以尝试卷积。

(6)与深度学习的结合

1)深度学习就是end2end的结构,先设计出一个网络,然后输入数据到网络中,最后等输出结果。把深度学习认为把复杂问题简单化的过程。

2)为什么需要深度学习?

宏观:人工特征工程难度大,深度学习可把特征做得更好。

二.推荐系统中常用的协同过滤与矩阵分解

(1)协同过滤与矩阵分解简介

物以类聚,人以群分

1)协同过滤

<1>基于用户的协同过滤算法

<2>基于商品的协同过滤算法

2)矩阵分解

<1>矩阵分解(如何得到用户对所有商品的评价)

<2>矩阵分解中隐式与显式分解情况

(2)基于用户与商品的协同过滤

1)基于用户的协同过滤(实际运用比较少)

用户的协同过滤关键是相似度计算设计好

<1>首先找到相似用户(相似度计算)

<2>属性特征,行为特征等都可以当作计算输入。

<3>例如user1中意1,2,3,4;而user2中意2,3。如果这二个用户计算后相似度较高,那就可把1与4推荐给user2

2)用户的协同过滤的不足

<1>因为用户的数据量是庞大的,构建的矩阵将很稀疏并且计算复杂度也很高。例如商品多,但用户买的商品却极少。又例如用户与商品都比较大时,计算矩阵相似度就很难了。

<2>人是善变的,用户特征也要随时要变

<3>用户冷启动问题

3)商品的协同过滤(实际运用中这个比较常用)

<1>还是要先得到用户与商品的交互数据

<2>若发现物品1,3经常一起出现,我们认为他两相关性较高,那这时user2买了物品2与3,所以可以把物品1也可推荐给user2了。

(3)相似度计算与推荐实例

用户与电影实例:

例如excel中的横向表示用户,纵向表示电影,现在估计出用户5对电影1的打分。首先算出商品1的协同过滤(即电影1与2,3,等等的相似度值);然后取相似度值为前2的商品出来当作加权系数,分别是0.64与0.52;而用户5对相似度值前2的商品做了打分,分别是2与3分;这时就可加权平均估算出用户5对电影1的打分:(0.64*2+0.52*3)/(0.64+0.52)

(4)矩阵分解的目的与效果

例如1亿用户与1000万商品构成的矩阵计算时间是很久的,那现在就需想一个中介来作为桥梁,把这矩阵分解后计算。

矩阵分解是推荐系统中使用最多的方法了。

例如现有数据横向表示歌曲,列向表示用户,当用户听过某首歌曲就对应行列中打上1,否则空白,这时要预测这空白处的值(将听过就1,否则打上0),这个矩阵看上去就是一个很稀疏的矩阵来的。

矩阵分解原理就是:原矩阵假设为m*n的,就如上面的m表示用户,n表示歌曲,那对它预测时可用上面说的协同过滤方法。当然现在是用矩阵分解来做,原理是 m*n的矩阵=m*k的矩阵一乘以k*n的矩阵二,例如矩阵一中k表示用三维的向量表示每个用户的特征,同理矩阵二中k表示用三维的向量表示每个歌曲的特征,这样两边矩阵的规模是一样的(shape值一致)。即前一矩阵的列等以后一矩阵的行就可用矩阵乘法。

(5)矩阵分解中的隐向量

通过上面的矩阵分解原理可知隐向量其实就是特征的高维表达,只不过很难去理解。而最终目的是预测大矩阵中的空白值,我们做法就是给定目标函数,这时可想到用机器学习中的回归等算法,然后对这二个分解后的小矩阵进行优化,最终把大矩阵(m*n)中空白的值补充完整,相当于更新了剩下的向量值。最后还原回大矩阵。

(5)目标函数简介

1)原始目标函数与回归方程很像,最终目的就是优化后的2个小矩阵还原回去后越接近大矩阵越好。小矩阵优化还是用梯度下降,并加上正则惩罚项,防止某些值异常大。

2)对原始目标函数进行改进,因为用户可能对商品打分很低或商品本身就很好的固有属性,所以在原始目标函数中对每一个用户与商品分别加入一个偏置项作为向量的一部分参与计算。

3)公式为:设用户矩阵为X,商品矩阵为Y,R为评分的大矩阵,a为惩罚项系数。则有

min(sum(R-X转置*Y)的平方)+a*(sum(X的平方+sum(Y的平方)),其中sum表示求累加和。可把前一部分的min(sum(R-X转置*Y)的平方)当作回归,后半部分a*(sum(X的平方)+sum(Y的平方))当作正则化,而正则化一般通用格式就是a*(矩阵的平方)。这里的平方是指向量相乘,不是某个貝体值。

(6)隐式情况分析

1)上面说的用户直接对歌曲打分并构建出向量特征的情形是属于显式情况;而通常收集的数据是用户的行为,没那么直接的,例如观看的时间,点击次数等指标,像这种就是属于隐式情况。

2)这种隐式数据怎么求解呢?

<1>首先定义个置信度,例置信度公式为C=1+k*X,其中X是单击次数,k是置信度系数,1是默认常数表示置信度默认值(即没点击商品,C都是为1)。这公式告式告式我们单击次数越多,置信度越大。置信度值Y越大越要向用户推荐商品。

<2>重新定义评分,规则是有点击(不管点击次数是多少)的就设为1,否则为0,设评分值为P。这里点击次数越多为什么评分越高呢?因为它公式中还有一个置信值来控制。虽然没有评分,但这里自定义出一个评分出来。最后得到隐式情况的最新优化目标的公式为:

G(X,Y)=(sum(C)*((P-X转置*Y)的平方))+a*(sum(X的平方+sum(Y的平方)),其中C表示置信度值,其它与显式中说明的一样。

<3>从上面隐式这个公式可知置信度值C越大,则预测准备点,否则它的损失值就越大了。

<4>隐式公式求解:也是交替使用最小二乘法来求解,固定Y优化X,再固定X优化Y。

六.点击率估计FM与DeepFM算法

(1)CTR(点击通过率:即用户点这个广告的概率)估计与其经典方法概述

人家认为深度学习的逻辑回归或线性神经网络或树模型都可做这种二分类问题,因为输入就是一个广告矩阵数据,但实际上没那么简单,用户是否点击广告与多个因素和环境有关的,所以将用FM与DeepFM算法来搞,FM与DeepFM算法是要解决特征工程中的特征间的组合。

(2)二项式特征的作用与挑战

1)特征情况:特征维度高,主要还涉及很多离散型的特征,通常都是通过one-shot来处理,所以稀疏性高。如果还考虑特征间的组合,这样计算起来是相当吓人的。

2)如何解决高维并且非常稀疏的特征?

<1>我们知道最终是解决特征间组合带来的问题,这是直接用二阶多项式来解决。二阶多项式的公式:Y(X)=W0+sum(Wi*Xi)+sumsum(Wij*Xi*Xj)

其中Wi,Wij都表示权重值,sum是指累加和。其中前部分W0+sum(Wi*Xi)是线性模型(其中W0当作是偏置项),即W0+sum(Wi*Xi)表示的是一阶特征,而后面的sumsum(Wij*Xi*Xj)是二阶部分。我们最终目的是算出权重参数值来,对于这个公式求解,你也许认为和一阶类似直接用梯度下降(偏导)来算,但是这真的会没问题吗?像Xi*Xj这二个稀疏矩阵(好多为0)相乘后大概率会为0,那这样用梯度下梯来算就没意义了。所以用以前这种直接用梯度下降来算是有问题的。而且sumsum是相乘的(累加后再相乘),如果维度很大时,计算也会很恐怖的。

(3)二阶公式推导与化简

(4)FM算法解析

1)上面公式二阶部分的Wij可用两个隐向量内积表示,向量是可由多少个维度表示的。设Wij=<Vi,Vj>,其中Vi与Vj是二个隐向量,它的计算主要是对二阶部分做内积展开,合并同类项与合并成平方项等操作,其实FM是借用隐向量来求解权重值。

2)原公式中的二项式计算的时间复杂度是O(n的平方),现在只需求kn(其中n是指隐向量个数,k是维度,维度值通常不大,例k=4),就好像大矩阵mn=(小矩阵mk)*(小矩阵kn)。那这些隐向量V又怎么表示出来,感觉还要进行预训练,很麻烦一样噢,解决方法就直接用升级版本DeepFM。

3)特征间组合较多时,自然会想到好兄弟:神经网络。因为可把神经网络想像成特征提取器,当特征庞大到无法人为处理时就用神经网络给我们来做吧。

(5)DeepFM整体架构解读

1)FM融合到神经网络中

<1>不管用啥算法,但凡用深度学习做,都更简单了。

<2>整体架构:FM+DNN(即隐藏层,全连接),最后在(FM输出结果+DNN输出结果)上加多一个sigmoid输出概率结果

<3>embedding是FM的重点,它不但是输入进行embedding,权重值也是进行embedding

<4>还是需要进行特征组合的

(6)输入层所需数据样例

输入的一条样本假设有7个特征(用field表示),每个特征由向量组成,向量又可以是大于等于1维的向量。例如由男生/女生;哈尔滨/沈阳/长春;打篮球/不打篮球这7个特征组成,当取男生,哈尔滨,打篮球时对应的索引值是0,2,5。这三个索引对应的数据值假设均为1,其余四个为0,这里是指取这些特征就用1表示。在做embedding时,传入的通常为索引值,而不是实际数据。

(7)embedding层的作用与总结

1)其实是设计多组权重参数

2)其中包括了一阶与二阶的

3)权重参数就是embedding

七.DeepFM算法实战

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.11 sqlite3数据库【数据库的相关操作指令、函数】

练习&#xff1a; 将 epoll 服务器 客户端拿来用 客户端&#xff1a;写一个界面&#xff0c;里面有注册登录 服务器&#xff1a;处理注册和登录逻辑&#xff0c;注册的话将注册的账号密码写入数据库&#xff0c;登录的话查询数据库中是否存在账号&#xff0c;并验证密码是否正确…

Python(十九)实现各大跨境船公司物流查询数据处理优化

一、前言 之前已经实现了常用 跨境物流船司 基础信息查询功能&#xff0c;如下所示 实现各大跨境船公司[COSCO/ZIM/MSK/MSC/ONE/PIL]的物流信息查询&#xff1a;https://blog.csdn.net/Makasa/article/details/145484999?spm1001.2014.3001.5501 然后本章在其基础上做了一些…

基于微信小程序的博物馆预约系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

深度学习框架TensorFlow怎么用?

大家好呀&#xff0c;以下是使用 TensorFlow 的详细步骤&#xff0c;从安装到构建和训练模型&#xff1a; 一、安装 TensorFlow 安装 Python&#xff1a;TensorFlow 基于 Python&#xff0c;确保已安装 Python&#xff08;推荐 Python 3.8 及以上版本&#xff09;。可通过 Pyt…

如何在华为harmonyOS上调试软件

1、设置-》关于手机-》HarmonyOS 版本连按多下&#xff0c;输入锁屏密码。显示开发者模式已打开。 2、设置-》搜索“开发人员选项”-》开启“开发人员选项”选项。 3、在 开发者选项 中找到 “USB 调试” 并开启。 4、开启 “仅充电时允许 ADB 调试”。 5、设置中开启 &quo…

fpga系列 HDL:Quartus II JTAG 间接配置文件 Indirect Configuration File (.jic) AS模式烧录

先编译生成pof文件 File->Convert Programming Files 转换文件 Tools->Programer 烧录

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …

【大模型知识点】什么是KV Cache?为什么要使用KV Cache?使用KV Cache会带来什么问题?

1.什么是KV Cache&#xff1f;为什么要使用KV Cache&#xff1f; 理解此问题&#xff0c;首先需理解自注意机制的计算和掩码自注意力机制&#xff0c;在Decoder架构的模型中&#xff0c;每生成一个新的token&#xff0c;便需要重新执行一次自注意力计算&#xff0c;这个过程中…

【STM32】HAL库Host MSC读写外部U盘及FatFS文件系统的USB Disk模式

【STM32】HAL库Host MSC读写外部U盘及FatFS文件系统的USB Disk模式 在先前 分别介绍了FatFS文件系统和USB虚拟U盘MSC配置 前者通过MCU读写Flash建立文件系统 后者通过MSC连接电脑使其能够被操作 这两者可以合起来 就能够实现同时在MCU、USB中操作Flash的文件系统 【STM32】通过…

本地生活服务平台开发进入发展热潮

本地生活服务平台&#xff1a;当下的发展热潮 本地生活服务平台开发模式 在当今数字化时代&#xff0c;本地生活服务平台开发已成为人们日常生活中不可或缺的一部分。只需动动手指&#xff0c;打开手机上的 APP&#xff0c;就能轻松满足各类生活需求。像某团、饿XX这样的平台&a…

LSTM变种模型

GRU GRU简介 门控循环神经网络 (Gated Recurrent Neural Network&#xff0c;GRNN) 的提出&#xff0c;旨在更好地捕捉时间序列中时间步距离较大的依赖关系。它通过可学习的门来控制信息的流动。其中&#xff0c;门控循环单元 (Gated Recurrent Unit &#xff0c; GRU) 是…

微服务与网关

什么是网关 背景 单体项目中&#xff0c;前端只用访问指定的一个端口8080&#xff0c;就可以得到任何想要的数据 微服务项目中&#xff0c;ip是不断变化的&#xff0c;端口是多个的 解决方案&#xff1a;网关 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发…

二分算法篇:二分答案法的巧妙应用

二分算法篇&#xff1a;二分答案法的巧妙应用 那么看到二分这两个字想必我们一定非常熟悉&#xff0c;那么在大学期间的c语言的教学中会专门讲解二分查找&#xff0c;那么我们来简单回顾一下二分查找算法&#xff0c;我们知道二分查找是在一个有序的序列中寻找一个数在这个序列…

C# OpenCV机器视觉:模仿Halcon各向异性扩散滤波

在一个充满创意与挑战的图像处理工作室里&#xff0c;阿强是一位热情的图像魔法师。他总是在追求更加出色的图像效果&#xff0c;然而&#xff0c;传统的图像处理方法有时候并不能满足他的需求。 有一天&#xff0c;阿强听说了 Halcon 中的各向异性扩散滤波功能&#xff0c;它…

实现:多活的基础中间件

APIRouter &#xff1a; 路由分发服务 API Router 是一个 HTTP 反向代理和负载均衡器&#xff0c;部署在公有云中作为 HTTP API 流量的入口&#xff0c;它能识别 出流量的归属 shard &#xff0c;并根据 shard 将流量转发到对应的 ezone 。 API Router 支持多种路由键&am…

DeepSeek本地化部署

DeepSeek本地化部署 本教程为一键式部署&#xff0c;适合于mac、ubuntu、windows。【开源地址】 环境要求 nodejs > 18Python > 3.10.12 步骤一&#xff1a;安装ollama客户端 官网直接安装&#xff0c;ollama官网。安装完成后使用命令&#xff1a;ollama -h&#xf…

大数据与大模型:数字时代的共生力量

引言&#xff1a;大数据与大模型的崭新时代 在数字化浪潮汹涌澎湃的当下&#xff0c;大数据与大模型无疑是最为耀眼的两颗明星 &#xff0c;深刻地改变着我们的生活、工作和思维方式。大数据&#xff0c;作为信息时代的宝藏&#xff0c;蕴含着无尽的价值。从电商平台的海量交易…

[2025年最新]2024.3版本idea无法安装插件问题解决

背景 随着大模型的持续发展&#xff0c;特别年前年后deepseek的优异表现&#xff0c;编程过程中&#xff0c;需要解决ai来辅助编程&#xff0c;因此需要安装一些大模型插件 问题描述 在线安装插件的时候会遇到以下问题&#xff1a; 1.数据一直在加载&#xff0c;加载的很满 2.点…

自动驾驶---如何打造一款属于自己的自动驾驶系统

在笔者的专栏《自动驾驶Planning决策规划》中&#xff0c;主要讲解了行车的相关知识&#xff0c;从Routing&#xff0c;到Behavior Planning&#xff0c;再到Motion Planning&#xff0c;以及最后的Control&#xff0c;笔者都做了相关介绍&#xff0c;其中主要包括算法在量产上…

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测&#xff08;Maltab&#xff09; 完整代码私信回复三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测&#xff08;Maltab&#xff09; 一、引言 1、研究背景和意义 在现代数据科学领域&#xff0c;时间序列…