第3章 推荐算法基础与特征工程:特征类型、交叉特征、Embedding原理

核心要点:特征工程是推荐模型性能的上限。字节跳动强调实时特征(用户秒级行为),阿里巴巴侧重稀疏特征(高基数离散特征+大规模Embedding)。本章从数据处理到模型输入,系统拆解特征设计全流程。

回答框架:数据处理 → 特征设计 → 模型输入

推荐系统特征工程的标准链路可抽象为三个阶段,面试中按此思路回答可体现系统性思维:

原始数据 缺失/异常/去噪 特征构造 类别/数值/时序 交叉特征 组合/笛卡尔积/DNN Embedding 映射/预训练/在线 模型输入 稠密/稀疏拼接 数据处理 → 特征设计 → 模型输入

面试问答卡片

Q1: 推荐系统中常用的特征类型有哪些?如何处理不同类型特征?

面试官考察点:基础理解、数据类型敏感性、工程落地能力

回答框架:

  • 分类:数值型(标准化/分桶)、类别型(One-hot/Label Encoding)、时序型(窗口统计/衰减)、多值型(Bag-of-words/Weighted sum)
  • 处理原则:保持信息、压缩维度、适配模型(树模型无需归一化,神经网络需归一化)

示例回答(约80字):
“推荐特征分为数值型、类别型、时序型、多值型。数值型做分位数分桶或对数变换;类别型采用Hash映射+Embedding;时序型用滑动窗口统计均值/频次;多值型通过加权加和或Attention提取。字节实时特征用Spark Streaming做窗口聚合,阿里稀疏特征用Hash + Embeddinmg降维。

可能追问:

  • 如何处理高基数类别特征?
  • 为什么神经网络需要归一化?
  • 实时特征的时效性如何保证?
避坑提醒:不要只列举类型而忽略处理细节。面试官会追问“具体怎么处理”,务必能说出标准化公式或Hash冲突解决方案。

Q2: 如何构造交叉特征?常见方法有哪些?

面试官考察点:特征组合思路、模型范式理解、业务结合能力

回答框架:

  • 手工交叉:笛卡尔积(用户×物品类别)、业务规则(如点击率×播放时长)
  • 模型化交叉:FM(隐向量内积)、DeepFM(自动学习)、CIN(显式高阶交叉)
  • 第三方工具:GBDT+LR(树分裂自动生成交叉特征)

示例回答(约85字):
“交叉特征分人工和自动。人工常用COUNTRY×DEVICE、USER_AGE×ITEM_CATE等笛卡尔积;模型自动交叉用FM二阶交叉、DCN的CrossNet、AutoInt的Self-Attention。阿里场景偏好SHAP值筛选高收益交叉特征,亿级稀疏特征下采用Hash碰撞控制维度。

可能追问:

  • FM与DeepFM的区别?
  • 交叉特征的稀疏性问题如何解决?
  • 在实时场景下如何高效计算交叉特征?
避坑提醒:避免只回答“手工交叉”而忽略模型自动交叉。推荐从“传统→现代”演进路径回答,体现对模型的理解深度。

Q3: 请解释Embedding原理,在推荐系统中如何应用?

面试官考察点:深度学习基础、表征学习、业务落地经验

回答框架:

  • 原理:将离散变量映射为稠密向量,使语义相似对象在向量空间距离近(word2vec / NGCF)
  • 应用:物品Embedding作为特征输入、用户Embedding与物品Embedding内积计算相似度、特征交叉(如FM内积)
  • 进阶:预训练Embedding(如Item2Vec)、在线学习Embedding(实时更新)

示例回答(约90字):
“Embedding将高维稀疏特征映射到低维稠密向量,核心是最大化共现概率或对比学习。推荐中,用户/物品Embedding做向量召回;特征Embedding拼接后输入DNN;FM将Embedding内积做二阶交叉。字节实时Embedding采用增量SGD更新,阿里预训练Graph Embedding捕捉行为序列结构。

可能追问:

  • 如何处理冷门物品的Embedding?
  • Embedding维度如何选择?
  • 多模态特征如何对齐Embedding空间?
避坑提醒:不要只讲原理不讲应用。面试官希望听到你实际用过Embedding做召回或排序,准备好一个真实案例。

项目案例模板:实时特征工程与Embedding融合项目

项目名称短视频推荐实时特征及Embedding平台建设
业务背景短视频Feed流推荐需要秒级捕捉用户兴趣漂移,同时处理10亿级用户+5千万物品的稀疏特征
规模指标日均处理200亿条实时行为日志;模型在线服务QPS 8万;特征存储量1.2PB;算法上线后CTR+5.2%,人均时长+3.8%
技术栈Spark Streaming(实时特征聚合)、Flink(窗口统计)、Kafka(数据管道)、TensorFlow/PyTorch(Embedding训练)、Redis(特征缓存)、A/B测试框架
核心难点1. 实时特征延迟<200ms,需优化窗口计算(滑动窗口+布隆过滤器);2. 稀疏特征Embedding维度爆炸(采用Hash碰撞+频率截断);3. 冷启动用户Embedding用人口统计初始化
面试高频追问①实时特征流与批流一致性如何保证?②Embedding如何做增量更新?③高基数特征Hash冲突如何影响模型?如何缓解?
可迁移回答话术“我们采用Lambda架构,批流两套特征同时写入Redis,对比校验保证一致性。Embedding增量更新通过TensorFlow Distributed训练,每5分钟从Kafka拉取增量样本做梯度更新。Hash冲突采用多Hash分桶+p-RNN拼接,将冲突影响控制在0.3%以内。”
进阶提示:面试字节时,重点突出实时特征处理链路(如滑动窗口时序特征);面试阿里时,重点突出稀疏特征Hash / Embedding降维方案,以及离线大规模预训练Embedding(GraphSAGE)。