第 128 题:高基数类别特征的降维,实体嵌入 vs 聚类哈希?
题目
高基数类别特征的降维,实体嵌入 vs 聚类哈希?
完整讲解
一、高基数类别特征的问题
用户 ID、物品 ID、店铺 ID 等高基数类别特征,若 one-hot 或大嵌入表,维度或参数量巨大,且长尾 ID 样本极少、嵌入难学。降维即在保留有用信息的前提下压缩表示,常用实体嵌入与聚类哈希两类思路。
二、实体嵌入(Entity Embedding)
- 做法:为每个实体(ID)学习一个 $d$ 维嵌入向量,嵌入表大小 = 基数 × $d$。通过任务目标(点击率、转化等)端到端训练,嵌入自动学到与目标相关的表示;相似实体在空间中接近。
- 降维:相对 one-hot(维度=基数),嵌入将每个实体压成 $d$ 维($d \ll$ 基数),即语义降维。若仍需进一步压参数量,可对嵌入做二次降维:PCA、自编码器、或训练时用共享低维子空间(如矩阵分解式 $U \in \mathbb{R}^{n \times k}, V \in \mathbb{R}^{k \times d}$,实体用 $U$ 的一行,$k \ll \min(n,d)$)。
- 优点:表达力强、可学习语义;冷启动可用属性或图传播补嵌入。
- 缺点:参数量仍为 $O(\text{基数} \times d)$;长尾实体嵌入稀疏更新、可能不准。
三、聚类哈希(Clustering / Hashing)
- 做法:先将高基数 ID 聚类成 $K$ 个簇(如用行为共现、图结构、或嵌入空间 k-means),每个实体归属某簇;或用哈希将 ID 映射到 $B$ 个桶。检索或特征使用时用簇 ID 或桶 ID(低基数 $K$ 或 $B$)代替原 ID,再做嵌入或 one-hot。即「ID → 簇/桶 → 嵌入」,参数量 $O(K \cdot d)$ 或 $O(B \cdot d)$。
- 优点:参数量与基数解耦、可控;新 ID 可通过聚类/哈希规则映射到某簇或桶,冷启动自然。
- 缺点:同一簇/桶内多实体共享表示,粒度变粗、有信息损失;聚类与哈希质量依赖设计。
四、选型与结合
- 精度优先、资源允许:实体嵌入;必要时对嵌入再做 PCA/共享子空间降维。
- 内存与冷启动优先:聚类或哈希降基数再嵌入;可「高频实体单独嵌入 + 长尾走聚类/哈希」混合。
- 实体嵌入 + 聚类:先学嵌入,再在嵌入空间做 k-means 得到簇,用「簇嵌入 + 簇内残差」或仅簇嵌入,兼顾表达与参数。
面试要点
- 能说明高基数问题及实体嵌入(每 ID 一向量、任务驱动学习)的降维与二次降维方式。
- 能说清聚类哈希:ID→簇/桶→低维 ID→嵌入,参数量可控、粒度变粗;可与冷启动结合。
- 能对比二者并给出混合策略(高频嵌入+长尾聚类/哈希)。
记忆要点
- 实体嵌入:每实体 $d$ 维、任务学习;相对 one-hot 为语义降维;可再 PCA/子空间压参数量。
- 聚类哈希:ID→簇或桶→低基数→嵌入;参数可控、粒度粗、冷启动友好。
- 混合:高频嵌入+长尾聚类/哈希;或嵌入空间聚类后簇嵌入+残差。