石塔西面试题解答(部分)

发布于 2024-02-10  542 次阅读


特征工程

  • 为什么说,用物料的后验消费数据做召回存在“幸存者偏差”?能将这些消费数据用于排序吗?

    后验消费数据是历史交互的统计总和,可以描述一个物料相对于其他物料的平均受欢迎程度。后验消费数据高的商品可以看作热门商品,若使用其做召回,将使召回的物料分布改变,新物品或者冷门物品将被打压。可以用于排序,但是也应当对其做一些正则操作。

  • 使用物料的后验消费数据做召回,会放大“马太效应”,对新物料不友好,如何缓解?

    使用物料发布时间对后验消费数据进行正则、专门增加新物料召回通路


  • 解释什么是bias特征?你能举出哪些bias特征的例子?

    bias特征属于上下文特征的一部分,指的是例如位置差异等的场景特征,导致了一批物品虽然出现在同一个上下文中,但是无法平等的进行比较。这样的偏差可能包括位置差异、时间差异等。

  • bias特征怎样接入模型?能否和其他正常特征一起喂入DNN底层?为什么?

    bias特征不应该改变最终的排序顺序,因此需要使用线性层接入最终的输出。


  • 某男性新用户对“体育”这个分类的喜好程度未知,如何填充?

    取男性的平均值或中值

  • 某新物料的后验指标未知,如何填充?

    其实不是未知,而是就是0,如果有使用发布时间对后验指标进行正则,可以忽略。

  • 对观看次数、观看时长这样的特征,如何做标准化?

    输出数值特征:对数转换

    输出onehot:基于决策树的分桶、基于统计的频率或者数值范围分桶

  • 某个物料曝光2次,被点击1次,如何计算它的CTR?

    点击次数/曝光次数=0.5


  • 有一个特征“某文章过去1天的点击率是10%”,如何将其构建成一个类别特征,并喂入推荐模型?

    基于模型:使用决策树

    基于统计:统计所有文章过去一天的点击数,根据频率等分,或者根据点击数等分

Embedding

  • 为什么说Embedding提升了推荐算法的扩展性?

    Embedding将推荐算法从"精确匹配"转化为"模糊查找"。相对于一般的特征,Embedding的维度更丰富,且描述的是在一个嵌入空间中的一个向量,满足相似物品在空间中距离更接近。在使用了Embedding技术以后,对于系统未曾见过的用户或物品,通过Embedding的相似性,也能够提供合理的推荐,从而增强了模型的泛化能力。在双塔结构中,loss引导对齐用户Embedding和物品Embedding于同一个向量空间,两种异质对象得到对齐,从而实现用户向量直接检索物品。

  • FFM针对FM的改进在哪里?

    特征与其他特征进行交叉时,使用不同的隐向量

  • 简述阿里Co-Action Network的基本思想?

    物品Embedding拆解成k份,每一份reshape成矩阵,则有k个矩阵,这k个矩阵作为k层mlp的参数矩阵,用户Embedding经过这k层mlp与物品Embedding交叉。

     


  • 简述Parameter Server是如何应对推荐系统“高维稀疏”的数据环境的?

     

  • 什么是异步并发(ASP)中的“梯度失效”问题?即使如此,为什么在推荐系统中仍然常用?

精排

  • FTRL是如何保证“在线学习”的稳定性的?

     

  • FTRL是如何保证解的稀疏性的?

     

  • FTRL是如何解决高维稀疏特征受训机会不均匀的问题的?

     


  • FM相对LR的优势在哪里?

    • 不能只回答自动交叉
    • 是如何解决交叉特征太稀疏、受训机会少的问题的?
    • 是如何提高扩展性的?

    结构上,FM增加了自动二阶特征交叉的结构,可以更好的建模偏好。

    针对特征学习embeding向量解决交叉特征太稀疏、受训机会少的问题,因为embeding学习到一个分布,对比lr的记忆式有更好的泛化性能。

    扩展性的提高也是由于embeding,具体原因参照为什么embeding可以提高推荐系统扩展性

  • FM对所有特征两两交叉,岂不是的复杂度?

    正常以lr的思想,若有n个特征,则模型参数矩阵为:一阶特征的参数矩阵+二阶交叉特征的参数矩阵。二阶交叉特征的参数矩阵大小为,其代表着某一特征对其他任意特征都有特定的参数,从而有着的复杂度。而FM针对每个特征学习Embedding,假设有n个特征,其特征embedding后维度为k,则最后embdding矩阵的维度为而并不是

    总的来说,FM算法通过对每个特征学习embedding向量,而不是针对每一个特征交叉对学习embedding向量。

  • FM的缺点有哪些?

    FM只能进行二阶特征的自动交叉,且交叉方式仅仅为向量相乘,且由于只针对特征学习Embedding,不具备建模不同类别特征共现影响的能力

  • FFM相对于FM的改进有哪些?为什么要这么改进?

    增加特征领域的概念,

  • FFM相比于FM的缺点在哪里?(提示:效率)

    参数增加,学习效率和推理效率都降低,也提高过拟合风险


  • Wide & Deep是如何做到兼顾“记忆”与“扩展”的?

    lr实现记忆能力,dnn实现泛化能力

  • 什么样的特征进Deep侧?什么样的特征进Wide侧?

    特征embedding后进入deep,大规模稀疏特征id等进入wide侧

  • Wide & Deep论文原文中说,训练Wide & Deep侧分别使用了两种优化器,你觉得有哪些道理?

     


  • DCN解决的是什么问题?

    质疑DNN用于模拟任意阶数特征交叉的能力,使用DCN结构显式模拟指定阶特征交叉

  • DCN v1和v2的差别在哪里?

     

  • DCN有哪些缺陷?(提示:输入输出的维度)

    所有层输入输出的维度固定相同


  • 简述基于Transformer做特征交叉的原理?
  • Transformer做特征交叉的缺点有哪些?(提示:输入输出维度、时间复杂度)

  • 你在建模行为序列中的每个元素时,一般会包含哪些信息?如何Embedding?

  • 每个用户的行为序列长度不同,如何处理?Truncate很简单,关键是如何解决Padding的问题?

    • 不解决的话,两个完全不同的序列,因为被填充的大量的0,而被模型认为相似
    • 提示:可以看看TensorFlow Transformer的源码,看看人家是如何解决的?

 

  • Target Attention的时间复杂度
  • Self-Attention的时间复杂度

  • DIN的建模思路是怎样的?怎么理解“千物千面”?

     

  • 每到“双十一”之类的促销季,用户的购买行为与他之前短期行为有较大不同,应该如何建模?

    • 其实就是长序列建模的问题,简单套用SIM不是不可以,但是仍然有效率问题
    • 开放问题,考察候选人的经验,以及思路是否开阔

 

  • 简述SIM的建模思想?你觉得它的优缺点有哪些?
  • 如果想在召回或粗排中建模用户长序列,怎么做?

召回

  • 传统的协同过滤,User CF和Item CF,哪个在工业界更常用?为什么?

    Item CF常用,相对用户数来说物品数目更稳定且更少

  • 大规模、分布式的CF是如何实现的?

    spark之类的分布式引擎

  • 基于矩阵分解的协同过滤,要分解的矩阵是超级稀疏的,分解这样的矩阵,需要事先将它缺失的地位都填充0吗?

     


  • 召回模型中如何处理用户行为序列?

    • 回答简单的Pooling的,是常规操作
    • 有没有可能也做target attention?拿什么当target?

    无参数pooling:均值或者时间权重

    聚类:pinnersage

    模型:建模召回问题为长期行为序列预测近期行为序列,以拉进长短期序列距离为目标训练模型


  • NCE Loss的基本思想与计算公式

    NCE Loss建模一个二分类问题,即正样本还是噪音

  • NEG Loss的基本思想与计算公式?它与NCE Loss是什么关系?

     

  • Marginal Hinge Loss的基本思想与计算公式

  • BPR Loss的基本思想与计算公式


  • Sampled Softmax的基本思想与计算公式
  • Sampled Softmax中温度修正的作用?调高温度有什么影响?调低温度有什么影响?
  • 采样修正的Q(t)应该如何设置?

  • 从算法机理来阐述热门物料对模型的影响?

    • 大家都知道热门物料对推荐结果的个性化造成负面影响,我需要你回答出它是如何造成这一负面影响的

    算法的本质是通过物品、用户及其历史共现关系对于未发生共现关系的用户与物品进行预测。如果所有的物料的被交互频率都是一致的,那么模型能均匀学习所有物料的信息。但是在推荐场景中大量物料属于长尾(低流行度、低频次),而只有少数物料属于头部(高流行度、高频次)。更少的交互频次导致了更少的样本,从而导致模型对于物品了解得更少,进一步导致不被推荐,加剧长尾效应,这种恶性循环称为马太效应。

  • 为了打压热门物料,热门物料当正样本,应该降采样还是过采样?

    降采样

  • 为了打压热门物料,热门物料当负样本,应该降采样还是过采样?为什么?

    过采样,热门物品在其他非推荐页面出现频率高,可能被看过的频率大,需要过采样。


  • Word2Vec中,Skip-Gram和CBOW有什么区别?哪种算法对于罕见词、罕见搭配更友好?

  • Airbnb的I2I召回,相比于word2vec,在正样本上有哪些创新?合理性在哪里?

  • Airbnb的I2I召回,相比于word2vec,在负样本上有哪些创新?合理性在哪里?

  • Airbnb的U2I召回,是如何解决“预订样本”太稀疏这个问题的?

  • Airbnb的U2I召回,在负样本上有哪些创新?

  • 直接套用Word2Vec用作召回,在正样本的选择上有哪些局限性?

    • Airbnb是如何突破这一局限性的?
    • 阿里的EGES是如何突破这一局限性的?

  • 阐述FM用于召回的原理与作法

    • 线下如何训练

       

    • 线上如何预测

      用户隐向量ann检索物品

    • 如何做到对新用户更友好

      特征尽量使用分类,而不是一个更细粒度的精确值


  • 召回随机负采样在实践中到底是怎么做的?提示:

    • 你可以离线采样,借助Spark在更大范围内采样,怎么实现?
    • 你可以Batch内负采样,怎么实现?
    • 你可以混合负采样,怎么实现?
    • 阐述以上几种方法的优劣

  • GCN与DNN在迭代公式上的区别在哪里?(提示:GCN没那么玄,真的只是一个小差别)

  • 如何在一个超大规模图上,训练GCN召回模型?希望听到:

    参考pinsage

    • Mini-Batch的训练细节

      随机选取样本,根据逻辑采样正样本(个性化pagerank分数接近的)与负样本(个性化pagerank分数稍远与随机采样),再分别对这些样本点随机游走采样出邻居节点从而构建成以样本点为根的树形子图

    • 邻居采样,挑出重要邻居

      随机游走

    • 邻居采样时有小Trick,否则会造成数据泄漏

      需要忽略正样本

 

  • 如何在一个超大规模图上,进行GCN推理,得到各节点的Embedding?

    • 希望候选人意识到推理与训练的不同

      全量邻居

    • 要避免重复计算节点的Embedding

      MapReduce分级缓存

    • 要避免“邻居采样”那样的随机性

       

粗排

  • 你对改进粗排有什么思路?或者说,你觉得制约粗排模型性能的有哪些因素?

  • 粗排双塔与召回双塔的异同?提示有以下4方面的不同

    • 物料向量的存储方式
    • 样本,特别是负样本的选择
    • 损失函数的设计
    • 最终用户向量与物料向量的交互方式

 

  • 你知道双塔模型有哪些改进变形?

  • 用精排蒸馏粗排应该怎么做?

    • 提示:共同训练?两阶段?用什么Loss?各有什么优缺点?
    • 思考:蒸馏的假设有问题吗?
  • 粗排环节存在哪些“样本选择偏差”?如何纠偏?

重排

  • 常用的打散方式有哪些?
  • MMR的核心思路是什么?

  • 基于DPP的重排的核心思想是什么?
  • 如何构建DPP中的核矩阵L?基于怎样的先验假设?
  • 怎么证明如此构建的L是符合我们的先验假设的?

  • 基于上下文感知的重排模型的原理和流程

    • 如何构建样本?
    • 如何构建Loss?
    • 都应该包含哪些特征?
    • 模型训练完毕后,如何排序?(提示:顺序在训练时是已知的,但是预测时是未知的)

冷启动

  • 新用户冷启,如何建模成一个多臂老虎机问题?
  • 新物料冷启,如何建模成一个多臂老虎机问题?

  • 怎么用Epsilon Greedy进行新用户冷启?
  • 怎么用UCB进行新用户冷启?
  • Bayesian Bandit的基本原理
  • Thompson Sampling用于新用户冷启的基本原理与流程

  • LinUCB用于新闻冷启动的基本原理与流程?

    • 这里的谁是老虎机?谁是手柄?
    • 如何建模手柄的收益?和哪些因素有关?
    • 如何求出每根手柄的参数?
    • 候选新闻集合是动态变化的,如何处理?
    • 观察到用户反馈后,如何更新每根手柄的收益分布?时间复杂度是什么?

  • 预测时遇到训练时未见过的新特征,是怎么处理的?
  • 训练时遇到训练时未见过的新特征,是怎么处理的?

  • 简述Meta-Learning的基本原理与流程

  • MAML作为一种特殊的meta-learning,特殊在哪里?

  • 简述MAML的训练流程

  • MAML应用于推荐系统的冷启动

    • 每个Task的粒度是什么?
    • 哪些参数需要从最优初值初始化?

  • 简述对比学习的训练流程和应用场景

  • 你将对比学习应用于推荐系统的什么场景?

  • 对比学习与向量化召回有什么异同?

  • 你是怎么做对比学习的?

    • 对比学习的样本从哪里来?
    • 数据增强是怎么做的?
    • 与主任务是怎么协同训练的?

  • 让你建立一个模型,预测新入库物料的后验CTR,以找到那些潜在爆款?

    • 样本怎么选?
    • 怎么设计特征?
    • 标签怎么收集?(提示:注意一下时间范围)
    • 怎么设计Loss?
    • 怎么用这个模型?

 

  • 设计对新用户友好的特征?你打算在模型中怎么用这些特征?

评估与调试

  • AUC的物理含义
  • AUC用在评价推荐性能时的缺陷
  • GAUC的计算方法
  • GAUC的缺点(提示:权重、位置)
  • NDCG的思路与计算方法

  • AUC能不能用于评价召回模型?
  • 你在评估召回模型时,主要使用哪些指标?
  • MAP的思路与计算方法

  • AB Test中应该如何划分流量?
  • 你在做AB Test时,一般会有哪些注意事项?
  • 用通俗语言解释一下什么是p-value?
  • 解释一下什么是Type I Error, Type II Error, Power?

  • 如何知道某个特征在你的模型中的特征重要性?
  • 一个多层的DNN,你想压缩一下,如何找到"滥竽充数"那一层?

  • 你碰到过“线下AUC涨了,线上AB指标没提升”的情况吗?怎么处理解决的?
  • 解释一下“特征穿越”现象,及如何解决?
  • 你碰到过“老汤模型”带来的麻烦吗?如何解决?
  • 新模型小流量上线后,我收集了一批线上数据D做测试样本,让新老模型都在D上预测并计算GAUC,我的作法有什么问题?正确方式应该怎么做?
  • 解释一下“链路一致性”问题。你有没有遇到过“链路一致性”问题?如何解决的?

其他

  • 以下你两个问题,只要你简历中出现GBDT相关项目,我一般都会问一下,能够答对的人不多

    • GBDT中的G代表梯度,那它是谁对谁的梯度?
    • 给你一个m*n的数据集,m是样本数,n是特征数,问这个梯度向量G有多长?
    • 这两个问题实际上是一体的,你只要搞清楚G的含义,自然知道它有多长
    • 这两个问题答对了,不代表你懂GBDT,但是答不上来,你肯定不懂GBDT。连G是谁对谁的梯度都搞不清楚,就好比你对外宣称自己是德华的忠实粉丝,但是人家问德华姓什么,你却回答不上来一样尴尬。

面向ACG编程