第 78 题:嵌入表压缩,哈希技巧(Hashing Trick)的冲突率与精度损失?
题目
嵌入表压缩,哈希技巧(Hashing Trick)的冲突率与精度损失?
完整讲解
一、嵌入表与压缩动机
推荐模型中有大量 embedding 表(用户 ID、物品 ID、类目等),表大小为「词表大小 × 嵌入维度」,常占模型绝大部分参数与显存。嵌入表压缩在基本不损效果的前提下减小表规模,便于部署与训练。
二、哈希技巧(Hashing Trick)
- 做法:不维护「ID → 嵌入」的大表,而是用哈希函数 $h(id) \to {1,\ldots,B}$ 将 ID 映射到大小为 $B$ 的桶,多个 ID 共享同一桶的嵌入(即共享同一向量)。表规模从 $V \times d$ 降为 $B \times d$,$B \ll V$。
- 冲突率:若 $V$ 个 ID 均匀落入 $B$ 个桶,期望每桶 $V/B$ 个 ID;冲突率可理解为「共享同一嵌入的 ID 数」比例。冲突会导致不同 ID 得到相同表示,表达力下降,尤其高频 ID 与低频 ID 冲突时,低频 ID 表示被「带偏」。
- 精度损失:冲突多 → 区分度下降,CTR/AUC 可能下降;可通过增大 $B$、或多哈希(如 2 个哈希各取一嵌入再相加/拼接)缓解冲突、减小精度损失,但 $B$ 增大会增加显存。
三、工程要点
- $B$ 的选择:在显存与精度间折中;工业上常见 $B$ 为 $10^5 \sim 10^7$ 量级,视词表与资源定。
- 多哈希、可学习哈希或混合(部分 ID 保留专属嵌入、长尾用哈希)可进一步平衡冲突与参数。
面试要点
- 能说明哈希技巧:$h(id)\to {1,\ldots,B}$,多 ID 共享 $B$ 个嵌入,表规模 $B\times d$。
- 能分析冲突率与精度:冲突多 → 不同 ID 同表示 → 表达力与精度下降;增大 $B$ 或多哈希可缓解。
- 能提及 $B$ 的显存-精度折中、多哈希与混合策略。
记忆要点
- 哈希技巧:ID→桶 $B$,表 $B\times d$;冲突 = 多 ID 共一嵌入。
- 冲突多 → 精度损;增大 $B$、多哈希或混合可缓解。
- 工程:$B$ 显存-精度折中;多哈希/混合策略。