推荐场景下的类别编码方式-Hash编码

对于Category的特征,我们通常有两种方法把它变成一个数字:Label编码和hash编码;使用sklearn的LabelEncoder可以实现把Label编码成数字。

现在主要介绍使用hash方法对类别进行编码

1.在大型工业场景下,会源源不断地出现新的item,新的用户,新的id,原先的one-hot和W必须得到不断扩充,一种有效的方法是对特征本身做hash,将得到的数字作为它的ID,只要每台机器的hash算法一样,出来的值就是一样的。
2.特征抽取中,可以对query id化,query的3-gram稀疏特征,即:在query上做步长为3的滑窗,然后加hash方法转为ID,如MurmurHash,这样1个query可以得到多个稀疏ID特征,分别进行嵌入,然后sum-pooling转成1个向量。
3.hash编码是把每一个Category的字符串通过hash函数映射为0~一个固定的范围。它的优点是不用提前知道Category的所有可能值。
4.hash表示的最大好处是它可以处理(至少是处理,处理的好不好是另一回事)所有类型的特征,只要你是能写出来的,就可以用string表示,只要你能用string表示,你就能hash。实际中完全可以先全部hash跑起来,然后再细分有些特征需不需要特别处理。
5.业内有很多优质的Hash方法,比如MurmurHash、CityHash。
6.经过哈希处理的数据将原始字符串映射到固定长度的数据。系统通过某种算法生成经过哈希处理的数据,这样可以保护原文的安全性。那么如果类别属性有上百种,并且分布比较平均那么直接用独热编码就会造成特征冗余或维度爆炸的问题。

 

 

数据hash方法转为ID示例(基于MurmurHash):

 

 实际使用时直接使用fh.transform做映射

posted @ 2022-01-20 22:45  今夜无风  阅读(564)  评论(0编辑  收藏  举报