RecSys - DHE (Deep Hash Embedding)

2023-11-07 06:40
文章标签 hash deep embedding dhe recsys

本文主要是介绍RecSys - DHE (Deep Hash Embedding),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文:Learning to Embed Categorical Features without Embedding Tables for Recommendation

1. Introduction

  embedding learning 很重要,是模型的奠基石。本文面向类别特征(如id类)。但在RecSys中面临很多挑战:
   - huge vocabulary size:RecSys 中类别特征高基数维(翻译无能,原文high-cardinality)
   - Dynamic nature of input:user 和 item 对应词表实时变化,新出现老消失
  - Highly-skewed data distribution: 高倾向度的分布,对于长尾表现欠佳

  one-hot编码再查找embedding矩阵是常规操作,但词表巨大且难适应表外词,而hash会导致碰撞。而Deep Hash Embedding = multi-hash + dense抽取网络,contribution:
  - 多头hash获得编码向量取代one-hot
   - dense抽取取代embedding矩阵查找,更参数有效,且解决了可训练和表达性问题。
  - 通过在编码中集成side feature,来泛化特征值
在这里插入图片描述

2. one-hot编码演进

  类别特征的编码通用框架: e → = T ( v ) = F ∘ E ( v ) \overrightarrow{e} = \mathscr{T}(v) = F\circ E(v) e =T(v)=FE(v),其中,E将特征值映射到某特定空间中,F解码生成embedding向量 e → \overrightarrow{e} e

  演化:
   1. one-hot编码 + lookup:矩阵随vocabulary线性增长;新词问题
   2. hash降维 + one-hot + lookup:冲突问题
  3. multi-hash(一般k=2) + one-hot + lookup

  本质上都是基于one-hot编码和浅层神经网络(lookup <=> 1 layer)

3. DHE

3.1 Encoding Design

  需要满足以下条件:
   - 独一性:不冲突
   - 同等相似性:尤其对于id类特征,必须保证相似程度是同等的;如8二进制编码 100 0 ( 2 ) 1000_{(2)} 1000(2)与9的 100 1 ( 2 ) 1001_{(2)} 1001(2)比与7的 011 1 ( 2 ) 0111_{(2)} 0111(2)看起来更等价,容易误导后续解码阶段
  - 高维:高维空间更易划分,便于后续解码
   - 高Shannon信息熵:简单来说每一维都要有用

3.2 Dense Hash Encoding

  1. 用多个hash func 讲特征值s转为k维向量 E ( s ) = [ H ( 1 ) ( s ) , H ( 2 ) ( s ) . . . , H ( k ) ( s ) ] E(s) = [H^{(1)}(s), H^{(2)}(s)..., H^{(k)}(s)] E(s)=[H(1)(s),H(2)(s)...,H(k)(s)],每个 H ( i ) H^{(i)} H(i)将s映射到{1,2…,m}
  2. 为了numeric stability,神经网络input必须是典型的实值和归一化的。因此受GANs引入随机噪声生成图片启发,找到合适的转化:Uniform Distribution 和 Gaussian Distribution
  3. k取很大保证高维性。计算可即时并行完成,不需要存储

3.3 Deep Embedding Network

  用神经网络来拟合框架中F的映射过程,存储在隐层参数中。不同与deep network易过拟合,deep embedding network欠拟合:
   - ReLU激活函数是分段线性的,表达不足,更换为Mish (𝑓 (𝑥)=𝑥 · tanh(ln(1 + 𝑒𝑥 )))
   - BN使训练更稳定表现更好,但dropout等正则化无效

3.4 Side Features Enhanced Encodings for Generalization

  类别特征不同值潜在特征表示不包含任何内在的相似性,因此很难扩展到其余值

  one-hot编码形式对于各特征表示的更新是独立的,视为分散结构;而DHE任何特征值表示权重更新都会影响其与特征值表示,这种集中结构能泛化的可能性更大。因此,引入side features(如泛化特征)组合起来作为模型input
(如对于每个电影,引入其影片分类,评分等)

3.5 Summary

  DHN = dense hash encoding + deep embedding network
   - dense hash encoding:完全确定的,不可学习,实时计算,不许存储
   - deep embedding network:用NN代替词表查找,缺陷在于计算。而由于网络的可变,DHE还能很好适应于online learning场景和power-law distributions (越流行模型记忆越深刻)

4. Experiment

4.1 评估

对于每种embedding分别用浅层网络GMF(Generalized Matrix Function)和MLP作为推荐模型,接受embedding作为输入,进行CTR预测。

4.2 baseline

model说明
Full Embedding
The Hashing Trickhash降维
Bloom Embeddingmulti-hash 生称二进制编码 + 1 linear layer
Hash Embedding (HashEmb)multi-hash + weight sum(权重学习获得)
Hybrid Hashing常见特征值用one-hot编码,其余的用double hash
CompositionalEmbedding两种互补的hash来避免冲突

5. Conclusion

  future work:
  - 处理multivalent特征,如词袋
   - 用DHE联合建模多个特征
   - 词表和NN结合平衡效率和表现

这篇关于RecSys - DHE (Deep Hash Embedding)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361918

相关文章

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

usaco 1.2 Milking Cows(类hash表)

第一种思路被卡了时间 到第二种思路的时候就觉得第一种思路太坑爹了 代码又长又臭还超时!! 第一种思路:我不知道为什么最后一组数据会被卡 超时超了0.2s左右 大概想法是 快排加一个遍历 先将开始时间按升序排好 然后开始遍历比较 1 若 下一个开始beg[i] 小于 tem_end 则说明本组数据与上组数据是在连续的一个区间 取max( ed[i],tem_end ) 2 反之 这个

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

uva 10029 HASH + DP

题意: 给一个字典,里面有好多单词。单词可以由增加、删除、变换,变成另一个单词,问能变换的最长单词长度。 解析: HASH+dp 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

POJ 1198 双广+Hash

此题采用双广可从bfs的O(16^8)降低到O(2*16^4); 坐标0-7,刚好3位存储, 需要24位存储四个坐标(x,y),也就是[0,2^24) 。 很好的一题。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import

C# Hash算法之MD5、SHA

MD5我们用的还是比较多的,一般用来加密存储密码。但是现在很多人觉MD5可能不太安全了,所以都用上了SHA256等来做加密(虽然我觉得都差不多,MD5还是能玩)。 还是跟上一篇说的一样,当一个算法的复杂度提高的同时肯定会带来效率的降低,所以SHA和MD5比较起来的话,SHA更安全,MD5更高效。 由于HASH算法的不可逆性,所以我认为MD5和SHA主要还是应用在字符串的"加密"上。 由于