【推荐系统】wss课程-特征交叉

总结:

工业界推荐的精排模型全都是pointwise。

特征交叉01-FM

线性模型对输入的特征取加权和,作为对目标的预估。如果先做特征交叉,再用线性模型,通常可以取得更好的效果。如果做二阶特征交叉,那么参数量为O(特征数量平方),计算量大,而且容易造成过拟合。因式分解机(Factorized Machine, FM)用低秩矩阵分解的方式降低参数量,加速计算。任何可以用线性模型(比如线性回归、逻辑回归)解决的问题,都可以用 FM 解决。

已经不太常用

 

 b是偏移项, 第二项是对 d 个特征的连加,其中 w下标 i表示每个特征的权重。把线性模型的输出记作 p,是对目标的预估,如果做二分类可以用 sigmoid 激活函数。

这个线性模型有 d+1个参数,线性模型的预测是特征的加权和,d个特征 x1到 xd只有相加,特征没有交叉。在推荐系统中,特征交叉是很有必要的,可以让模型的预测更准确。

前两项是线性模型,与前面一直,xixj 是两个特征的交叉,uij 是权重。两个特征不仅相加还可以相乘,可以提升模型的表达能力。举个梨子,假设特征是房屋的大小,还有周边楼盘的每平米的单价,目标是估计房屋的价格,仅用2个特征的加权和是估计不准房屋的价格的,如果做特征交叉两个特征相乘就可以把房价估计的很准,所以交叉特征有用。

如果有 d 个特征,那么模型参数量正比于 d^2,大多数参数是特征交叉的权重 u,如果 d 较小模型没有问题,但如果 d 很大,那么参数数量就太大了,计算代价会很大,而且容易出现 overfit。

如何减少参数数量?重点关注交叉的特征的权重小 u,可以把所有的权重小 uij 组成矩阵大 U,小 uij是大 U 的第 i 行第 j 列的一个元素。矩阵大 U 有d 行和 d 列,d 的参数数量,U 是对称矩阵,可以对大 U 做低秩近似,用矩阵大 V 和大 V 转置来近似矩阵大 U,k 远小于 d,k 是超参,自己设置,k 越大,大 V 乘以大 V 转置就越接近矩阵大 U。

u_{ij} = v^T_iv_j(将 uij近似为向量 vi和vj的内积,降低参数数量)

FM 用向量 vi 和 vj 的内积作为交叉特征的权重,FM的参数数量是矩阵 大 V 的大小,k 是超参数远比 d 小,FM 的好处在于参数数量更少,从 d^2降到 kd。使得推理的计算量更小不容易出现过拟合。

FM就是在线性模型后面加上交叉项,效果显著比线性模型好,好处是减少了参数数量。xhs 的召回和排序已经不再使用 FM。

17:12-17:37(理论6分钟,15分钟) 

特征交叉02-DCN 深度交叉网络

Deep & Cross Networks (DCN) 译作“深度交叉网络”,可以用于召回双塔模型、粗排三塔模型、精排模型。DCN 由一个深度网络和一个交叉网络组成,交叉网络的基本组成单元是交叉层 (Cross Layer)。这节课最重点的部分就是交叉层。

DCN可以代替全连接层。

多目标排序模型

 

排序MMOE 模型,专家网络可以使用任意结构

哪些模型可以应用DCN

  1. 双塔模型:物品塔和用户塔
  2. 多目标:shared bottom
  3. MMoE Multigate Mixture of Experts

交叉层是交叉网络的基本组成单元。

输入为 x0 经过 i 层之后输出为 xi,详细讲解第 i 个交叉层结构。把向量 xi 输入全连接层,全连接输出向量y,把最底层的输入向量 x0 与 向量y 做哈达玛乘积(逐元素相乘),如果 x0与 y 都是8维向量,那么他们的乘积也是8维的向量,把输出的向量记作 z,向量 xi 和 z分别是输入和输出,两个向量的形状一样,两个向量相加得到 xi+1,类似于resnet中的跳跃连接。

向量 xi+1是第 i个交叉层的输出,x0和 xi 是交叉层的输入,这个交叉层的参数全都在于『全连接层』中,其余操作是向量哈达玛乘积和向量加法,无参数。

Hadamard Product:哈达玛乘积,逐元素相乘。

可以把交叉层写成这样的公式,交叉层的输入是两个向量 x0和 xi,x0是整个神经网络最底层的输入,xi 是神经网络第 i层的输入。全连接层的输出是向量和输入 xi 的大小一样。矩阵 W 和向量 b 是全连接层中的参数(也是交叉层的全部参数),参数需要在训练中用梯度去更新。

输入x0和全连接层的输出做哈达玛乘积(要求左右两边向量形状相同),将结果与向量 xi 相加。将输入与输出相加是 resnet 中的跳跃链接,防止梯度消失。

xi+1是交叉层的输出,形状和 x0和xi 是一样的,每个交叉层的输入和输出都是形状一样向量的。 

向量 x0是交叉网络的输入,送入交叉层,交叉层输出向量 x1。

把上一层的输出 x1输入下一个交叉层,x0还需要输入,这个交叉层输出向量 x2。

可以一直重复这个结构。

x3为交叉网络的输出。

第二个已经没用了,大家没必要去看了。

DCN将交叉网络与普通的全连接网络结合起来。

推荐系统中召回和排序模型的输入是用户特征,物品特征,其他特征,做 concatenate然后输入两个神经网络,上面为全连接网络,下面为交叉网络,两个网络并联,两个网络各输出一个向量,将两个向量 concatenation输入一个全连接层,输入一个向量。

双塔中的用户塔和物品塔都可以是DCN,MMOE中的专家神经网络也可以是 DCN。

22:36-23:04(理论7分钟,18分钟)

特征交叉03-LHUC(PPnet)

这节课介绍 LHUC 这种神经网络结构,只能用于精排。LHUC 的起源是语音识别,后来被应用到推荐系统,快手将其称为 PPNet,现在已经在业界广泛落地。与 DCN 类似。

 这是标准的排序模型,shared bottom用什么网络都可以。

语音识别的输入是一段语音信号,我们希望用神经网络对输入的信号进行变换得到更有效的表征,然后识别出语音中的文字。 语音是人说的,不同的人声音不一样,所以最好加入个性化(说话者特征),最简单的特征是说话者的 id emb。

lhuc网络结构:把语音信号输入fc,输出向量。把说话者的特征输入另一个nn,输出另一个向量。

nn 包含多个 fc,最后一个 fc 的激活函数是 sigmoid*2,单独作用到每个元素上。蓝色向量每一个都介于0-2之间。红色和蓝色的向量形状必须完全一致,因为要计算哈达玛乘积。

将语音信号特征和说话者特征相融合。语音信号有的特征被放大,有的特征被缩小,可以做到个性化。

哈达玛乘积得到向量,形状和输入向量一致,把这个向量输入下一个fc,输出形状相同的向量。

 把说话者特征也输入到一个 nn。这个 nn 有多个 fc,最后一个 fc 激活函数也是sigmoid*2,输出向量是对说话者的表征。

上栗子,LHUC只重复了 2个模块,重复了2次哈达玛乘积,实践中可以更深。

 都是说话者特征!都是 sigmoid*2!与语音信号做哈达玛乘积会放大和缩小特征实现个性化。

在推荐系统中,输入为物品特征(语音信号),用户特征(说话者特征)。

23:06-23:24(4,18)

特征交叉04-SENet和Bilinear 交叉

这节课介绍几种方法:

  • 1. SENet 是计算机视觉中的一种技术,可以用在推荐系统中对特征做动态加权。
  • 2. 双线性(bilinear)特征交叉可以提升排序模型的表现。有很多种 bilinear 交叉的方法。
  • 3. FiBiNet 是将 SENet 与 Bilinear 模型结合。
  • 4. 这两种方法用在排序模型上都有收益。

推荐系统用到的离散特征(红点),做 emb得到很多向量。

senet主要对这些特征进行变化。

 假设有 m个特征,每个特征 k 维,把所有特征表示为 m*k 的矩阵,对矩阵的行做 avg pool得到一个 m 维向量,向量的每个元素对应一个离散特征。比方说第一个特征对应用户 id。

用一个fc 与 relu 激活函数将一个 m 维的向量压缩为 m/r 的向量,r是压缩比例(大于1)。

再用一个 fc+sigmoid恢复出一个 m 维的向量,橙色向量的元素都介于0-1之间,使用橙色向量对输入向量进行加权,把向量逐行乘在矩阵上,得到粉色矩阵,大小与输入矩阵一样。

比方说学出物品 id 对物品重要性不高,那么就给物品 id emb降权。

 但 m个向量的维度可以不同(可以不同时等于 k),不会影响 senet。

senet 对每个向量做 avg pool,得到 m 维向量,再用2个 fc得到另一个 m 维向量,用来对 m 个向量做加权。最终 senet输出右边 m 个向量,与左边蓝色形状完全相同。

 

概括:

  • 本质对离散特征做 field-wise 加权。
  • m个特征,m 个 fields,权重向量 m维。 senet 会根据所有特征自动判断每个 field的特征重要性,重要的field权重高。

上面 senet 对特征做 field wise加权,下一部分是field 之间的特征交叉。 把两个 field 做交叉得到一个新的特征。比方说,把用户所在地点和物品所在地点各自做 emb,然后把两个向量做交叉。

具体讲怎样交叉两个向量?

内积和哈达玛乘积是两个最简单的特征交叉方法。

内积:xi,xj 是两个特征的 emb,fij 是实数。

如果有 m 个 fields(m种离散特征)则有 m^2个实数。推荐中 m数量不大,也就几十。

---

哈达玛:

如果有 m 个 fields,则有 m^2个向量(太多)。通常来说用哈达玛乘积做特征交叉,必须要人工选择一些 pair,而不能对 m 个 fields 两两交叉。

以上都要求特征的维度一致,即 k 维向量。形状不一样就不能计算内积和哈达玛乘积。

bi cross 一种更先进的特征交叉方法,有内积和哈达玛乘积两种交叉方式。

xi,xj是特征 emb,形状可以相同也可以不同。fij 是实数。  

m^2个 fij (交叉特征的数量)还好。但是 wij 太多了不行,实际需要很多的 wij矩阵(举例 ab之间需要,ac 之间还需要)

若有 m个离散特征(fields),则有 m^2/2个参数矩阵。假如每个参数矩阵大小都是64*64,有1000个参数矩阵,那么 bi cross 的参数量是400万,参数量太大不可行。

需要人工指定重要的特征做交叉,不能所有特征做两两交叉。

区别用哈达玛乘积替换内积。先求括号内容,再求哈达玛乘积,输出 fij 向量。

特征间两两交叉,m 个 fields 产生 m^2个向量。m^2个向量做 concat,得到的向量维度太大且大多数是无意义的。还是要人工指定 pair。

1. senet让重要特征权重大;

2. 让两种特征的 emb 向量做特征交叉。

FiBiNet

把 senet 和 bi cross结合起来就是 fibinet。

离散特征(用户 id,物品 id,物品类目)-> emb-> 用一个向量表示一个特征。这些特征做 concat得到一个高维向量(以前把这个向量直接作为排序模型的输入)。

fibinet 则对emb做 bi cross 得到很多交叉特征,拼接为一个向量。

senet 对 emb向量做加权得到同样大小的向量。小红书没有用红框的 bi corss,直接对 senet的输出做 concat。

完整结构。红框为与其他简单精排模型的区别。senet 和 bi cross 在精排模型中有效。借鉴方法但没有照搬。

23:24-00:04 (8,40)

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

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

相关文章

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日,周三晚上 今天我看到了这样的两行代码: std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问: 为什么有时候用ios_base::o…

HarmonyOS应用开发者基础与高级认证题库——中级篇

系列文章目录 HarmonyOS应用开发者基础与高级认证题库——基础篇 HarmonyOS应用开发者基础与高级认证题库——中级篇 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 今天刚换了台果子手机就收到了华子鸿蒙开发认证邀请(认证链接)&#xff0…

从零开始,探索Python变量的奥秘!

在Python这个充满魔力的编程世界中,变量是一门必须深入了解的基础知识。无论你是初学者还是有经验的开发者,掌握变量的基本语法对于编写优雅、高效的代码至关重要。本篇博客将带你从零开始,深入探索Python变量的奥秘,让你在编程之…

LeetCode150道面试经典题-合并两个有序数组(简单)

合并两个有序数组 题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意&a…

UEditorPlus v3.3.0 图片上传压缩重构,UI优化,升级基础组件

UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,主要做了样式的定制,更符…

【小沐学C++】C++ 基于CMake构建工程项目(Windows、Linux)

文章目录 1、简介2、下载cmake3、安装cmake4、测试cmake4.1 单个源文件4.2 同一目录下多个源文件4.3 不同目录下多个源文件4.4 标准组织结构4.5 动态库和静态库的编译4.6 对库进行链接4.7 添加编译选项4.8 添加控制选项 5、构建最小项目5.1 新建代码文件5.2 新建CMakeLists.txt…

DataGrip 配置 HiveServer2 远程连接访问

文章目录 集群配置 HiveServer2 服务DataGrip 配置 HiveServer2 访问 Hive 集群配置 HiveServer2 服务 1.在 Hive 的配置文件 hive-site.xml 中添加如下参数&#xff1a; <!-- 指定 HiveServer2 运行端口&#xff0c;默认为&#xff1a;10000 --><property><na…

3理解图像本质-AI-python

下载Jupyter Lab 代码如下&#xff1a; import numpy as np //导入包 import matplotlib.pyplot as plt //为了显示图片要导入另一个图 %matplotlib inline //显示图片防止出错&#xff0c;在行内显示 from PIL import Image //读取图片 img Image.open(E:/ANCONDA/AI_Pyth…

Gitlab CI/CD笔记-第二天-GitOps的流水线常用关键词(1)

一、常用关键词 在Gitlab项目的根目录需要创建一个 .gitlab-ci.yaml的文件。 这个文件就是定义的流水线。Call :"Pipeline as code" 二、这条流水线怎么写&#xff1f; 一、掌握常用的关键词即可。 1.关键词分类 1.全局关键词 Global Keywards 2.任务关键词…

如何剪裁操作系统源码——移植FreeRTOS的内存管理模块到ARMV8裸片

如何剪裁操作系统源码 本文面向的需求场景是&#xff0c;为缺乏标准库实现的处理器IP移植内存管理模块&#xff0c;即为裸片部署C标准库中的 malloc() 和 free() 函数。 具体做法是——从操作系统的内存管理组件中剪裁出必要的源码&#xff0c;适配到目标处理器的开发环境&am…

极狐GitLab 全新「价值流仪表盘」使用指南

本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Haim Snir 译者&#xff1a;极狐(GitLab) 市场部内容团队 GitLab / 极狐GitLab 价值流仪表盘的使用相对简单&#xff0c;这种可以定制化的仪表盘能够让决策者识别数字化转型进程中的趋势及机遇。 如果你已经在用 GitLab…

爬虫008_流程控制语句_if_if else_elif_for---python工作笔记026

然后我们再来看一下这里的,判断,可以看到 再看一个判断,这里的布尔类型 第二行有4个空格,python的格式 注意这里,输入的age是字符串,需要转一下才行 int可以写到int(intput("阿斯顿法师打发地方")) 这样也可以