说说自己对推荐系统的了解
介绍下推荐系统的流程
召回 -> 精排 -> 多目标混排
推荐的模型发展过程 LR widedeep 多任务(PLE详细解释) 多场景等
召回排序有哪些模型?具体是干什么的?协同过滤是怎么样的?
召回策略,协同过滤,关键词召回
召回的多样性
双塔模型优势,缺点,如何改进
分为用户塔和物品塔。这块我了解到用户塔和物品塔都是相对静止的,可能隔天才会更新。但面试官说用户塔也可以做到根据用户的行为进行实时更新。
双塔模型是做什么的,为什么不用热度推荐,相比的话dssm有什么优点
双塔模型、hard样本构建;
对于双塔模型该如何优化、使用什么损失函数
如何实现快速召回
召回主流的做法
embedding 召回, 局部敏感哈希(海量高维数据的近似最近邻查找方法)
召回的目的是什么,推荐系统一定需要召回吗?
优化工程耗时,候选池很大的时候,一定需要做召回,跟精排所用的算法无关。推荐系统最大的工程耗时是在倒排索引环节
介绍下 embedding 召回
简单说下了 node2vec, user 的 embedding 通过平均该 user 的浏览记录的 embedding 来获得。
user 的 embedding 有啥改进吗?
用注意力机制来做
itemcf 的改进点
如何提高冷门商品的推荐效果
基于深度学习的召回怎么做的
介绍基于商品属性的向量召回
哪一种召回效果最好
常见的算法模型,协同过滤、矩阵分解,FM,DCN的原理以及优缺点,最后问了一下Wide&Deep模型的原理。
wide&deep模型 为什么要有wide层结构,优缺点,如何改进?wide & deep 模型 wide 部分和 deep 部分分别侧重学习什么信息
deepfm 一定优于 wide & deep 吗
deepfm中的fm怎么做的
DCN FM FFM CIN结构 推导
FM,DCN等推荐相关的知识
DCN和 DeepFM 的特征交叉有和异同
deepfm xdeepfm基本原理
介绍一下DeepFM,Deep FM的优势
给这几个模型的性能/效果排个序
召回后搜索fassi近邻搜索的原理
召回和排序比较大的差异点
召回比较简单,要快。精排需要精确排序。
为啥排序会比召回的结果要准呢?
排序的模型更复杂,用到的特征更多。
粗排的目的是什么
粗排有哪些指标?NDCG了解吗?
排序任务为什么要建模为二分类
召回阶段多建模为多分类: 在向量召回中常用做法是对batch内进行负采样。比如设定batch_size为N,其中query_1-item_1为1个正样本,再将其他query-items组合成为N-1负样本,从而形成1:N-1样本形式,如此再使用softmax。这样做的原因在于:召回通常是需要从百万千万级别物料库挑选合适的万级别物料送给粗排,所以为了充分训练模型让其能做到这种区分,需要模拟这种情况,那如上方法是一种有效又效率较高的解决方案,即目标在于高效拉开有效样本及无效样本距离。
粗精排环节,会对点击及点击后续行为进行精细化学习,除了将正样本排序至负样本前,其目标还在于保证有意义(希望得分高)内容排在无意义内容之前,即模型打分的精准度也非常关键,排序模型通常使用曝光作为训练样本(其中符合目标的样本如点击,转化等作为正样本,其余作为负样本),此时样本只有正负两类,正样本label=1,负样本label=0,建模为二分类问题相当于预测每条样本作为正例的概率,通常使用AUC评估样本预测结果顺序准确度,偏差评估样本预测结果绝对值的准确度。
多目标混排算法有哪些
面试官想让问答的是 MMOE 这些,
如何把几个模型的分数做融合的
加权平均: 对每个模型的分数进行加权平均,权重可以根据每个模型的性能调整。例如,如果模型A的性能更好,则可以给模型A更高的权重。
投票: 对于分类问题,可以使用投票的方法。每个模型对每个样本都会给出一个预测结果,然后最终预测结果是多数模型预测的结果。
排名平均: 对于排名问题,可以对每个模型的排名进行平均,然后根据平均排名进行最终排序。
学习融合: 使用另一个模型来学习如何融合多个模型的输出。这个模型通常被称为融合模型或元模型。元模型可以是线性模型、决策树等。
堆叠: 堆叠是一种将多个基本模型的输出作为特征输入到一个元模型中的方法。元模型可以学习如何融合基本模型的输出。
如果这个权重也作为一个变量参与到训练,这种方式和你手动调参相比会有什么样的差异呢
自动化: 将权重作为变量参与训练可以使融合模型的权重自动调整,而无需手动调整。这样可以节省时间和精力,并且可以更好地适应数据的变化。
更灵活: 权重作为变量参与训练可以使融合模型更加灵活。模型可以学习到不同模型在不同情况下的权重,从而更好地适应数据的特点。
更精确: 通过训练得到的权重可能会比手动调参得到的更加精确。模型可以根据数据的实际情况学习到最优的权重组合。
泛化能力: 通过训练得到的权重可能会具有更好的泛化能力,可以在未知数据上表现更好。
复杂度: 将权重作为变量参与训练会增加模型的复杂度,可能需要更多的数据和计算资源来训练模型。
手动调参好处,特别是在某些情况下:
直观性: 手动调参可以根据直觉和经验来调整参数,有时候能够快速找到比较好的解决方案。
控制性: 手动调参可以更好地控制模型的行为,可以根据问题的特点进行有针对性的调整。
效率: 在一些情况下,手动调参可能比自动化调参更加高效,特别是在参数空间比较小或者问题比较简单的情况下。
理解模型: 通过手动调参,可以更深入地理解模型和参数之间的关系,有助于对模型进行更好的优化和改进。
综上所述,手动调参在某些情况下仍然具有一定的优势,但随着问题的复杂性增加,自动化调参的优势可能会更加明显。
怎么解决排序结果都是之前电影相似电影的结果
引入一些多样性措施,以确保推荐结果不会过于相似。以下是一些可能的方法:
多样性加权: 在计算电影相似度时,可以引入一个多样性加权因子,以降低相似度高的电影之间的权重,从而使结果更加多样化。
引入随机性: 在推荐过程中引入一定程度的随机性,使得推荐结果具有一定的随机性,从而增加多样性。
基于内容的推荐: 除了基于相似度的推荐,还可以考虑基于内容的推荐,例如考虑电影的类型、演员、导演等因素,以增加推荐结果的多样性。
用户反馈: 通过用户反馈收集信息,了解用户对推荐结果的偏好,从而调整推荐策略,增加推荐结果的多样性。
DIN模型&WDL主要区别、模型选型、分析原因
描述DIN的Attention机制,是如何实现的、输入、输出是什么
推荐算法种多任务学习有哪些 都有什么优化点
多任务学习中推荐系统中的应用
阿里的ESSM,cvr ctr ctcvr训练,还有谷歌的mmoe,腾讯的PLE等
给了一个场景,让设计一个推荐系统架构,然后分析存在哪些问题。
多任务学习的参数共享及不共享参数各自的优缺点,然后从这两个角度分别去设计模型,包含特征交叉,embedding之类的。
多模态信息应用于推荐系统
排序为什么不使用基于 pair wise 的模型
在推荐系统中,排序任务通常使用 point-wise 模型而不是 pair-wise 模型的原因有几点:
效率: Pair-wise 模型需要为每对物品生成一个训练样本,这会导致训练数据的数量大幅增加,从而增加了训练的计算成本和时间。
可扩展性: Pair-wise 模型在处理大规模数据时可能会遇到问题,因为需要考虑所有物品对的组合,导致模型参数量巨大。
优化目标: Point-wise 模型更直接地优化了排序任务的评估指标,如平均精度(MAP)或 NDCG(归一化折损累计增益),而 pair-wise 模型优化的是排序顺序的相关性,这与最终的排序质量不完全一致。
实现简单: Point-wise 模型相对于 pair-wise 模型来说更容易实现和调试,因为不需要处理物品对之间的关系。
了解 LambdaMart 算法吗
如何解决稀疏问题(回答的 hash embedding,不知道对不对)
稀疏性问题指的是用户和物品之间的交互数据很少,导致难以对用户进行准确的推荐。解决稀疏性问题的方法有几种:
基于内容的推荐: 基于内容的推荐利用物品的属性信息或用户的历史行为等内容信息来进行推荐,可以弥补用户-物品交互数据的稀疏性。
协同过滤: 协同过滤是一种利用用户-物品交互数据进行推荐的方法。可以通过邻域方法(如基于用户的协同过滤和基于物品的协同过滤)来挖掘用户和物品之间的关联,从而缓解稀疏性问题。
矩阵分解: 矩阵分解方法将用户-物品交互矩阵分解为两个低维矩阵的乘积,从而可以利用隐藏的特征表示来进行推荐。这种方法在一定程度上可以降低数据的稀疏性。
加权深度模型: 利用深度学习模型,可以将用户和物品的特征进行学习和表示,从而可以更好地捕捉用户和物品之间的关系,减轻稀疏性问题。
特征工程: 对用户和物品的特征进行合理的工程处理,可以提高推荐系统对稀疏数据的处理能力。例如,可以利用领域知识构建更加丰富的特征表示。
模型集成: 将多个推荐模型的结果进行集成,可以提高推荐系统对稀疏数据的适应能力。可以使用加权平均、投票等方式进行集成。
在模型侧如何打压热门商品
模型的线上部署流程
模型训练与评估:首先,需要在离线环境中训练和评估模型。这包括数据收集、特征工程、模型选择和训练等步骤。
模型导出:将训练好的模型导出为可部署的格式,如TensorFlow SavedModel或PyTorch的.pth文件。
模型版本管理:管理不同版本的模型,以便于回滚和比较不同版本的性能。
模型测试:在线下环境中对导出的模型进行测试,验证其在实际数据上的表现。
模型部署:将模型部署到线上环境中。这包括将模型加载到生产服务器中,并建立服务接口以供请求调用。
流量调度:设置流量调度策略,如灰度发布、AB测试等,逐步将流量引导到新模型上。
监控与调优:监控模型在线上的表现,包括性能指标、资源利用率等,及时发现并解决问题,进行模型调优。
模型回收:当模型性能下降或有新模型上线时,及时回收旧模型,释放资源。
持续集成与部署(CI/CD):建立持续集成与部署流水线,实现模型的快速迭代和部署。
点击率预估模型 点击率预估为什么选择 lgb
点击率预估任务中负样本过多怎么办
负采样:负采样是指在训练过程中对负样本进行采样,使得正负样本比例更加平衡。可以根据一定的策略对负样本进行采样,如随机采样、按照样本权重采样等。
重置类别权重:在损失函数中为正负样本设置不同的权重,使得模型更加关注正样本。可以根据正负样本的比例动态调整权重。
在线学习:采用在线学习的方式,逐步更新模型,可以更好地应对负样本过多的问题。在每次更新中,可以根据最新的数据动态调整模型参数。
数据增强:对于负样本进行数据增强,生成一些与正样本类似但又有所不同的负样本,可以提高模型对负样本的泛化能力。
改进特征工程:通过改进特征工程,提取更加有区分性的特征,可以帮助模型更好地区分正负样本。
集成学习:使用集成学习的方法,将多个模型的预测结果进行集成,可以降低模型对负样本的过度学习。
dssm为什么不能做user和item的交叉,dssm有什么优缺点,item端如何处理语义的
如果遇上一个新item,它的向量该如何计算或者处理,如何解决新user和新item进来的问题(计算相似度,热们物品向量加权填充),特征缺失该怎么办。
DSSM的优点包括:
语义表示: DSSM能够学习到文本的语义表示,能够更好地捕捉文本之间的语义相似性。
端到端训练: DSSM可以端到端地进行训练,不需要手工设计特征,能够更好地适应不同任务。
泛化能力: DSSM学习到的语义表示具有一定的泛化能力,能够适应不同场景的推荐需求。
DSSM的缺点包括:
数据需求: DSSM需要大量的训练数据来学习语义表示,对于稀疏数据或少样本情况下的推荐场景可能表现不佳。
计算资源: DSSM通常需要较大的计算资源来训练和推断,特别是在大规模数据集上训练时。
对于推荐系统中的新item处理,一种常见的方法是利用item的内容特征或其他已知信息来计算其向量表示。可以使用预训练的模型(如Word2Vec、BERT等)来生成item的语义向量,或者使用基于item内容的推荐算法来生成item向量。
对于新用户和新item进来的问题,可以考虑以下方法:
冷启动策略: 对于新用户和新item,可以采用冷启动策略,如基于热门物品的推荐、基于用户注册信息的推荐等。
特征缺失处理: 对于特征缺失的情况,可以使用默认值填充、均值填充等方法来处理,或者利用其他特征的信息进行填充。
相似度计算: 对于新item,可以使用与已有item的相似度来衡量其与用户的匹配程度,从而进行推荐。
增量训练: 对于新用户和新item,可以采用增量训练的方式,将其逐步加入到模型中进行训练,从而不断优化模型。
推荐系统冷启动问题,怎么解决
基于流行度的召回,收集喜好的机制
推荐系统中的一些带bias的场景怎么debias
对于一些兴趣特别广泛的用户,该如何处理他们的特征输入
特征选择: 选择一些与用户广泛兴趣相关的特征进行建模,而忽略一些与用户个性化兴趣相关的特征,以避免过拟合。
特征加权: 可以为不同特征设置不同的权重。
上下文信息利用: 利用用户的上下文信息来辅助推荐,比如用户当前所处的位置、时间等信息,可以更好地理解用户的需求和兴趣。
在线推荐和离线推荐有什么不同
实时性要求: 在线推荐需要实时响应用户请求,即时生成推荐结果;而离线推荐可以在后台离线计算,不需要实时性要求。
数据规模: 在线推荐需要处理实时产生的用户行为数据,数据规模较大;而离线推荐通常处理历史数据,数据规模相对较小。
计算资源: 在线推荐需要足够的计算资源支持实时推荐计算;而离线推荐可以利用批处理计算,计算资源要求相对较低。
算法选择: 由于实时性要求,在线推荐通常选择轻量级的算法和模型,如LR、GBDT等;而离线推荐可以选择更复杂的算法和模型,如深度学习模型。
用户反馈: 在线推荐可以更快地获取用户反馈,用于实时调整推荐结果;离线推荐需要在一定时间间隔内进行更新。
推荐策略: 在线推荐需要考虑实时场景下的推荐策略,如推荐结果的排序和过滤;离线推荐更注重推荐算法和模型的优化。
基于内容推荐用到的bert模型有没有进行自己在架构上的调整
基于内容推荐使用的BERT模型通常会根据具体的任务和数据集进行调整和改进。这些调整可能涉及以下方面:
Fine-tuning:将预训练的BERT模型用于具体任务时,通常会进行微调(Fine-tuning),即在任务特定的数据集上进一步训练BERT模型,以适应特定任务的需求。
特征提取: BERT模型的隐藏层输出通常被用作特征,但具体任务可能需要不同层的特征。因此,可以根据任务需求选择不同层的特征进行后续处理。
模型结构修改: 根据具体任务的需要,可以对BERT模型的结构进行修改,例如增加、减少或调整层次结构,以更好地适应特定任务。
加入额外特征: 除了BERT的文本特征之外,还可以将其他特征(如用户特征、物品特征等)与BERT的输出进行结合,以提高推荐系统的性能。
**损失函数设计:**针对具体任务,可以设计适合的损失函数,以优化模型在该任务上的性能。
在公司训练个性化推荐模型模型用了分类还是回归
一般来说,个性化推荐任务更倾向于使用分类模型,因为推荐任务通常需要将用户与物品进行匹配,并预测用户对物品的喜好程度(如用户是否会点击、购买、观看等)。这种情况下,可以将推荐问题看作是一个分类问题,其中标签可以是用户对物品的喜好或行为(如点击、购买、观看等),特征可以包括用户特征、物品特征以及上下文信息等。
另一方面,如果推荐任务需要预测用户对物品的具体评分或偏好程度(如评分预测任务),则可以考虑使用回归模型。
场景题:打开京东APP,点击一个商品,详情页会显示XXX也买过,这个具体是怎么做的?
基于用户的协同过滤和冷启动
推荐里面的低秩矩阵分解具体是怎么做的?
线性代数里面的矩阵分解你知道吗?具体是怎么做的?
搜索引擎的拼写纠正怎么做的?(楼主说了朴素贝叶斯和词袋模型)
那如果第一个字母就输错了怎么办?
搜索引擎的拼写纠正通常使用的是基于编辑距离的方法,主要包括以下几个步骤:
生成候选词: 根据用户输入的错误词,生成一组可能的候选词。这些候选词通常是通过插入、删除、替换、交换等操作来生成的,以使其与正确词的编辑距离最小。
评估候选词: 对生成的候选词进行评估,选择其中最有可能是用户真实意图的词作为纠正结果。评估方法可以包括语言模型的概率计算、候选词在索引中的出现频率等。
返回结果: 将最终选择的候选词返回给用户,作为拼写纠正后的建议。
如果用户输入的词的第一个字母就输错了,通常情况下搜索引擎也会进行类似的处理,即生成候选词并评估其可能性。在生成候选词时,可能会考虑将第一个字母替换为其他可能的字母,以生成可能的正确词。然后根据候选词的评估结果,选择最有可能的候选词作为纠正结果返回给用户。
词向量这一块有了解过吗?
词向量(Word Embedding)是将词语映射到向量空间的一种技术,它可以将词语表示为实数向量,从而能够在向量空间中捕捉词语之间的语义关系。词向量常用于自然语言处理任务中,如文本分类、情感分析、机器翻译等。
词向量的主要方法包括:
One-hot Encoding: 将每个词语表示为一个高维稀疏向量,向量的维度等于词汇表的大小,其中只有一个元素为1,表示该词在词汇表中的位置。
Word2Vec: 由谷歌提出的,通过训练神经网络模型,将词语映射到一个低维稠密向量空间中。Word2Vec包括两种模型:CBOW(Continuous Bag of Words)(输入上下文预测中心词)和Skip-gram(输入中心词预测上下文词)。
GloVe: 全称为Global Vectors for Word Representation,是一种基于全局词频统计的词向量表示方法,通过在全局语料库上进行矩阵分解来学习词向量。
FastText: 由Facebook提出的,与Word2Vec类似,但FastText考虑了单词内部字符的信息,能够更好地处理词汇外的词语。
BERT: 由谷歌提出的预训练语言模型,可以生成上下文相关的词向量,能够更好地捕捉词语的语义和上下文信息。
数据规模
推荐系统的数据规模可以因应用场景和业务规模的不同而有所差异,通常包括以下几个方面的数据:
用户数据: 包括用户的基本信息(如性别、年龄、地理位置等)、行为数据(如点击、浏览、收藏、购买等行为)、社交关系数据等。
物品数据: 包括物品的基本信息(如名称、描述、标签等)、属性数据(如价格、类别、品牌等)、内容数据(如文本、图片、视频等)、关联数据(如相似物品、推荐理由等)。
交互数据: 包括用户与物品之间的交互数据,如用户对物品的评分、评论、点击、购买等行为数据。
上下文数据: 包括推荐时的上下文信息,如时间、地理位置、设备信息、用户环境等。
有没有了解前排方案
开放题:现在做一个搜索系统,你会考虑哪些东西,各方面都行
需求分析: 明确搜索系统的需求和目标,包括搜索内容、用户需求、性能要求等。
数据准备: 准备搜索数据,包括建立索引、处理数据格式、清洗数据等。
搜索算法: 选择合适的搜索算法,如倒排索引、全文检索、相似度计算等。
用户界面: 设计搜索界面,包括搜索框、搜索结果展示、搜索建议等。
性能优化: 优化搜索性能,包括查询响应时间、搜索结果排序等。
用户体验: 提高搜索用户体验,包括搜索建议、拼写纠错、搜索历史等功能。
数据安全: 保护搜索数据的安全性,防止数据泄露和恶意攻击。
监控与反馈: 监控搜索系统运行情况,及时发现和解决问题,接受用户反馈并改进搜索系统。
扩展性和可维护性: 设计搜索系统具有良好的扩展性和可维护性,方便后续功能的扩展和系统的维护。
技术选型: 选择合适的技术栈,包括后端存储、搜索引擎、前端框架等。
部署与运维: 设计合理的部署方案,确保搜索系统的稳定运行和及时维护。
法律和合规: 遵守相关法律法规,保护用户隐私和数据安全。
搜索产品和推荐产品的业务联系度高吗
搜索产品和推荐产品底层相似都是识别用户意图推荐内容,不一样的地方是一个是主动搜索词推荐,一个是被动推荐以信息流为主。
搜索:有明确的搜索意图,搜索出来的结果和用户的搜索词相关。 推荐:不具有目的性,依赖用户的历史行为和画像数据进行个性化推荐。
广告:借助搜索和推荐技术实现广告的精准投放,可以将广告理解成搜索推荐的一种应用场景,技术方案更复杂,涉及到智能预算控制、广告竞价等。
构建物料池是怎么做的,还有用在什么地方
用到什么技术构建物料池
比如年龄这种连续进行分桶离散会有哪些缺点、训练中会如何使用
缺点:
信息损失:将连续特征离散化可能会损失一部分信息,因为将不同的连续值映射到了同一个离散桶内。
引入误差:分桶过程中可能会引入一定的误差,特别是对于边界值的处理。
复杂度增加:引入分桶后,会增加模型的复杂度和训练时间,需要对每个分桶都进行编码处理。
影响模型性能:如果分桶不合理,可能会影响模型的性能,特别是对于一些需要原始连续值信息的模型(如线性回归)。
用户画像池是怎样构建的、如何使用
有哪些评价模型性能的指标、具体说说每个指标;
是否了解营销场景
讲一下逻辑回归?
当数据量特别大的时候,逻辑回归(LR)怎么做并行化处理?
LR有什么优势 怎么做并行化处理
lr特征为什么要离散化
讲一下SVM?
SVM的核函数有哪些?你都用过哪些?
特征工程你知道吗?用过吗?对于连续特征,我们通常有两种处理方式:1. 连续特征离散化;2. 特征缩放,这两种分别在什么情况下做?
问推荐项目,特征工程怎么做的,log变换适合什么类型特征
怎么做特征工程,特征工程的技巧。
特征处理
特征评估
特征交叉有哪些方法
特征处理 离散化有什么好处
连续值和离散值怎么用,树模型最好用什么?LR呢?one hot树模型还是LR?
LR(逻辑回归)是怎么优化的?
说一下LR里面正则项的原理是什么?为什么加了正则项就能去过拟合呢
哪些正则化方法(layernorm,batchnorm)有什么区别
BN 的原理 训练和推理 Dropout基本原理 训练推理
一方面你要学这个参数,一方面你又限制学,不是矛盾的吗?
cross validation,带有cross validation的训练步骤说一下
注意cross validation调的是超参,当时嘴瓢了
说几个激活函数,说几个优化器?
优化器Adam SGD
分类、回归用到的损失函数有哪些
温度系数
自监督学习广泛使用的对比损失(InfoNCE loss)的形式:
温度系数决定了对比损失对困难负样本的关注程度,越大的温度系数,往往一视同仁,不会太过关注更困难的负样本;而温度系数越小,则越关注与该样本相似度非常大的困难负样本,给予困难负样本更大的梯度与正样本分离,更容易形成均匀的表示空间。
无监督学习中没有真正的类别标签,对比学习普遍将除本样本以外的所有其他样本作为负样本。在这种情况下,与正样本相似度极高的负样本往往很可能是潜在的正样本。例如,与当前的苹果图片相似度最高的图片往往是另一个苹果,此时如果太注重困难负样本则会破坏网络经过一定训练后已经学到的语义信息,这种情况在训练后期尤其明显。随着训练的进行,网络获取到的信息越来越接近真实语义特性,那么此时的负样本更有可能是潜在的正样本,因此一个启示是可以随着迭代的次数增多而增大温度系数,这可能是作者以后的工作。于是作者认为,一个好的温度系数,应该是均匀性和容忍性的折衷。
介绍回归、分类用到的评价函数,为什么用。说准确率,AUC。
AUC 线下线上不一致 什么原因怎么解决
推荐场景中,线上线下指标不一致是为啥
1. 特征不一致
代码/操作bug
时间延迟
为了减少类似问题发生,首先你要仔细得在上线后排查一下特征传输是否为空,然后尽可能在线实时请求打分的时候落地实时特征,训练的时候就不用特征拼接,只需要根据正负样本生成策略处理一下instance的label。
2. 离线本身就有bug
数据穿越比如你拿1-7号数据训练,但是你的测试集是7号,那么结果一定偏高,一定要用8号以后的数据训练。
特征穿越: 常见的是使用和label强相关的特征导致的数据泄漏
过拟合: 可能只是恰好选到了一个比较容易拟合的测试集,所以最好多次选取。
这里也有一个比赛的trick叫‘对抗验证’,听我一个比赛大佬同学说还比较好使。
3. 离线提升不置信
评估指标不合理 首先我们要有业务sense,离线设置的指标是否能跟线上真实对应。比如你离线优化ctr模型的auc,那么线上就关注ctr的线上指标,而cvr、留存等都没有关系。
其次,对于线上目标,我们是否可以用更好的离线指标来对应?
盲目加特征 工作中我们可能会做大量的特征,然后加进去train模型看效果涨一点点就觉得有效果,但可能这只是波动,线上也大概率没效果。正确做法是看看权重大的特征是否真的合理,权重小的特征应该被删掉(如果这是个合理特征,一定不能删掉)
4. 线上降低不置信
数据量不够
实验开的不好 ab可能是不够的,因为产品本身就可能会受到各种环境的影响有指标变化,所以可以考虑AABB、反转等。
5. 数据分布不一致
离线训练模型的本质是,用公式去拟合训练样本集合的分布。那么离线指标提升了,只能说明对于这个样本分布我们找到了一个更好的公式去拟合,可是训练样本分布并不等同于真实样本分布。
搞一个无偏标注的测试集。 这个具体问题具体分析,有的场景不太好搞,一般特殊子模型我们会有专门人员来标注无偏的数据集。ctr模型感觉不好弄,可以考虑对新模型产生的样本上采样。
模型融合。(这个方法我是看别人博客写的,没试过)比较trick的方法,用新模型预估分数和老模型预估分数直接在线上做线性融合,刚上线的时候权重主要在old模型,然后逐渐加大new模型权重。
6. 业务battle
比如你在优化A场景,B场景和A场景是相辅相成的,而C场景和A场景是对立的,那么你也要时刻关注其他几个相关场景的模型改动,如果B掉了+C优化了,那么哪怕你A本身是可能涨了一点点,但是现在只能降了。
AUC有什么优缺点 做什么改进 gAUC什么原理
用AUC当评价指标,线下AUC的提升未必会带来线上AUC的提升,原因如下:
①AUC反映整体样本的排序能力,对样本不区分用户的计算整体样本的AUC。
②AUC的计算过程不仅包含了同一个用户对不同item的预测,也包含了不同用户对不同item的预测,但是线上排序时只针对同一个用户的不同item进行预测
所以由于每个用户的item排序是个性化的,不同用户的排序结果不好比较,可能导致全局AUC并不能反映真实情况,所以阿里设计出了GAUC这个评价指标来实现用户级别的AUC计算,公式如下所示:
其中权重w是这个用户的展示次数或者点击次数,n是用户数量,在单个用户AUC的基础上,为其按照该用户的点击次数和展示次数进行加权平均,消除了用户偏差对模型的影响,可以更准确的描述模型的表现效果。
注意点:当用户行为较少时,GAUC会抖动,所以大部分公司还是用AUC较多
AUC异常处理 线上线下流程
标签分布是否平衡
增加drop out
所有训练参数增加l2正则损失
适当加大模型的复杂度
修改训练样本集,降低无效曝光。
降低模型迭代次数
AUC的含义,为啥能作为一个评价指标
无需设定阈值:AUC不依赖于具体的预测结果阈值,而是综合考虑了所有可能的阈值情况下的模型性能,因此对于排序模型的评价更为全面。
对不平衡数据更稳健:在推荐系统中,正样本(用户点击、购买等)往往远少于负样本(未点击、未购买等),而AUC对于不平衡数据更为稳健,不会受到数据分布的影响。
直观且易于解释:AUC的取值范围在0.5到1之间,值越接近1表示模型性能越好,这种直观的解释方式使得AUC在推荐系统中的应用更为方便。
与排序相关: AUC考虑了正样本和负样本的排序关系,适合用于评价排序模型在推荐系统中的性能。
模型判断的指标有哪些?说一下什么是准确率
为什么AUC面积大证明性能强
auc是什么?auc的物理意义是啥?
手撕AUC代码计算(python 的除法一定要注意转成float啊!!吃了亏)
#根据正负样本对计算的
def AUC(label, pre):
#穷举所有的正负样本对,如果正样本的预测概率大于负样本的预测概率,那么就+1;
#如果如果正样本的预测概率等于负样本的预测概率,那么就+0.5,
#如果正样本的预测概率小于负样本的预测概率,那么就+0;
#最后把统计处理的个数除以M×N就得到我们的AUC,
pos = [i for i in range(len(label)) if label[i] == 1]
neg = [i for i in range(len(label)) if label[i] == 0]
auc = 0
for i in pos:
for j in neg:
if pre[i] > pre[j]:
auc += 1
elif pre[i] == pre[j]:
auc += 0.5
return auc / (len(pos)*+len(neg))
if __name__ == '__main__':
label = [1,0,0,0,1,0,1,0]
pre = [0.9, 0.8, 0.3, 0.1, 0.4, 0.9, 0.66, 0.7]
print(AUC(label, pre))
from sklearn.metrics import roc_curve, auc
fpr, tpr, th = roc_curve(label, pre , pos_label=1)
print('sklearn', auc(fpr, tpr))
AUC怎么求,实际意义
数据不平衡对auc有影响吗,还有什么指标可以针对不平衡数据
对于不平衡数据还可以使用PR(Precision-Recall曲线)。
为什么AUC不会受正负样例不平衡的影响?
一方面,从AUC定义来解释,它是比较“正样本预测分 & 负样本预分”数值相对大小关系。如若数据比例不同,模型预测分预测值绝对大小会因此而改变,但是相同分类器对于正负样本的区分能力是一定的。
从AUC计算公式角度推导下:AUC不受样本不均衡影响。
ROC,PR曲线含义,坐标轴代表什么
过拟合怎么办?
聚类了解嘛,说一下K-means聚类的原理以及过程?
K-means算法中的K怎么确定的
K-means聚类怎么衡量相似度的?(我说欧式距离)
手撕进行k-means算法
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数据
np.random.seed(0)
X = np.random.rand(100, 2)
# 定义K值和迭代次数
K = 3
max_iterations = 100
# 随机初始化簇中心点
centers = X[np.random.choice(X.shape[0], K, replace=False)]
# 迭代更新簇中心点
for _ in range(max_iterations):
# 计算每个数据点到每个簇中心点的欧氏距离
distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2)
# 分配每个数据点到最近的簇
labels = np.argmin(distances, axis=1)
# 更新簇中心点为每个簇的平均值
new_centers = np.array([X[labels == k].mean(axis=0) for k in range(K)])
# 如果簇中心点不再改变,结束迭代
if np.all(centers == new_centers):
break
centers = new_centers
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
欧式距离的公式
特征相关性你一般用什么指标?(皮尔逊系数)
写一下皮尔逊系数的公式
画一下混淆矩阵,写一下精确率和召回率的公式
F1值的计算公式
数据不平衡问题怎么解决的?
数据类别不平衡怎么处理
样本分布不平衡时,模型效果为什么不好?说明理由
样本处理 随机负采样会产生什么影响
正负样本不均衡怎么解决
下采样后,训练样本和线上 server 样本分布不一样怎么办(纠偏公式
用纠偏(reweighting)方法,即为训练样本引入权重,使得训练样本的分布更接近线上服务器样本的分布。
类别权重(class weights),即为每个类别赋予一个权重,使得在训练过程中更加关注少数类别。
样本权重(sample weights),即为每个样本赋予一个权重,使得在训练过程中更加关注被下采样的样本。
针对不平衡样本问题,在通过上采样后,正例:负例的比值由1:10变为2:10,则dnn模型预测的概率会增大多少,若想要当前输出概率和原始期望想同,则需要如何操作
下采样比例w为2/10=0.5,正样本概率p是0.2,则q校准值为p/(p+(1-p)/w)=0.11(这里p不是0.2)
需要除以对应的增长倍数,来保证期望值不变。类似于dropout的使用方法,在使用dropout后需要在输出下一层之前除以这个dropout。
如何进行的自创mixup采样操作(问不平衡采样一般的方法)
如何构造分类样本
讲一下Easy-Ensemble和SMOTE算法
PCA
交叉熵推导 两种角度 为什么不i用mse做分类
XGboost LGB userCF推导
lightgbm讲一下,具体是怎么做的?
LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练,并且具有更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以快速处理海量数据等优点。
xgboost基本原理 在业务中怎么使用 和 RF lgb对比
lightgbm和xgboost的区别讲一下
lightgbm的直方图加速讲一下?具体是怎么来做的?
一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到。
lightgbm的叶子节点是怎么分裂的?说一下
在XGBoost中,树是按层生长的,称为Level-wise tree growth,同一层的所有节点都做分裂,最后剪枝,Level-wise过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效的算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。
在Histogram算法之上,LightGBM进行进一步的优化,采用的Leaf-wise则是一种更为高效的策略,每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。
GBDT和随机森林的区别来说一下?
随机森林的具体运行过程
GBDT和随机森林的树的深度哪一个比较深?为什么?
GBDT,以及xgboost和GBDT的区别
GBDT的一些原理,他想问残差这种情况是那种情况的特列。其实不仅仅是这个特例。还有预测值是均值也是特例。给他推了一下公式。
说下什么是贝叶斯公式
出了一道贝叶斯公式的概率题,比较简单
讲一下极大似然估计
极大似然估计和最大后验估计的区别是什么?
CNN和传统的全连接神经网络有什么区别?
你常用的深度学习框架都有哪些?
lstm原理三个门作用和sigmoid函数tanh使用,梯度消失问题如何解决,rnn为什么不能,缺点如何造成的。lstm如何解决长期记忆问题
bert原理和注意力机制介绍一下
除了CNN,其他的NLP相关和推荐系统相关的模型有了解吗?
你对cnn这个模型本身有什么了解?为什么传统的mlp在图像上没有什么效果呢?
dnn如何评估特征有效性和重要性,其他机器学习模型呢,统计方法呢?
说一下对transformer的认知和理解
参数优化方法说一下(梯度下降的三种方式的优缺点)
深度学习里面的优化方法momentum和Adam来分别讲一下原理和公式
如何判断过拟合和欠拟合,怎么解决
讲一下偏差和方差(楼主从欠拟合和过拟合来讲的)
偏差(Bias):预测值和真实值之间的误差
方差(Variance):预测值之间的离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散。
对于偏差,偏差过高是由于模型地复杂度不够,所以通过增加模型复杂度来降低bias,比如在神经网络中,增加模型层数和隐藏神经元个数。也可以他通过集成学习地方法来,比如Boosting。
对于方差,方差过高是由于模型过于复杂,通过降低模型地复杂度来实现。比如加入正则来限制参数的学习范围,使得方差降低。集成方法中的Bagging也可以降低方差。
如何解决梯度消失和梯度爆炸
如果有梯度消失或者梯度爆炸,你发现你的神经网络已经很深了,你是要继续加深还是减少呢,为什么要这么做
这题我回答的是减少,因为梯度消失问题和梯度爆炸问题一般会随着网络层数的增加变得越来越明显
attention机制
残差网络原理
说一下你用的trick,为什么这个trick能work?
学习率调参经验
深度学习参数调整之一:学习率调整
学习率调度:指从低学习率开始,增加它,然后再降低的策略。
学习率调度会有两个问题:
1.如何选择初始学习率
- 直接设置初始学习率为0.01或0.001,对大多数网络都适用。
- 使用Smith的方法,首先设置一个非常小的学习率,比如1e-5,每个batch后更新网络,同时增加学习率,统计每个batch计算的loss。最后描绘出学习率的变化曲线和loss曲线,找到损失函数下降最快的点确定最优学习率。
2.如何根据迭代次数更新学习率
- 轮数衰减、指数衰减、分数衰减等
- 设置学习率的更新范围(最大值和最小值),使学习率按照一定更新策略运行,比如三角方法、余弦方法
on policy和off policy
这二者是强化学习RL中的概念, on-policy/off-policy 的中文翻译有:同策略/异策略,在线策略/离线策略。
区别:不在于选择action的方式,而在于更新网络参数的数据的收集方式。
理论上来说,on-policy的算法只能使用当前正在优化的policy生成的数据来进行训练,当你使用一条(state, action, reward, new_state)的数据对policy网络的参数进行了更新之后,这个“正在优化”的policy立即就变了,于是,你就要用它来生成新的一条数据,再继续进行后面的训练,并且你刚才用于训练的那条数据已经“过时”了,不能再使用,需要丢弃掉。
有人会说这种做法是不是太低效了?于是在实践中,经常是每收集了N条数据才会去更新一次,这N条数据是一个batch,并且这N条数据是用同一个policy生成的。
有人还会说,这好像不对啊?!理论上,用当前的policy生成了一条数据,就应该更新一次policy网络的参数,然后policy网络就变了,此时才能再生成第2条数据,依此类推,当生成到第N条数据的时候,policy网络都不知道变成什么鬼样子了,而如果我们用同一个policy连续生成N条数据才去更新一次policy网络的参数,这时的policy网络能跟一条条更新方式相比吗?确实,这两种方式表面上看起来policy相差会很大,但是,有其他的一些技术可以从数学上保证、并且也从实际效果上证明了:每N条数据才更新一次policy网络的方式,和每一条数据就更新一次policy网络的方式,没有多大区别,可行!
正因为这二者没有多大区别,我们仍然可以把每N条数据才更新一次policy网络、看似用“已经过时”的数据来更新policy网络的方法,叫做on-policy的方法——尽管它在实践操作的时候,看上去非常像off-policy的方法。
机器学习怎么分类(生成&判别,有监督&无监督)
常见生成和判别的方法
常见的有监督和无监督有哪些
无监督的聚类知道吗(Kmeans,又问时间复杂度,这个不知道)
判别方法里面LR和决策树区别是什么
LR的Loss,手写求导过程,解释
梯度学习优化算法有哪些(一阶,二阶,带动量不带动量)
常见的评估指标有哪些
介绍下SVD与MF的区别
我把SVD++的公式写下来并进行了解释,其主要是考虑了用户的隐式反馈信息。
后来面试官说问错了,其实是想问一下BiasSVD的思想,还好我写的公式包含BiasSVD的公式,主要是对于用户和项目更细粒度的建模,因为有的用户可能相对仁慈,所以评分普遍偏高;有的用户可能比较严厉,所以评分普遍偏低;同理对于项目也是如此,有的项目天上质量上乘,有的项目天上质量比较差。所以我们需要增加偏置项来捕获细粒度的影响。
word2vec,为什么是基于word做embedding, 不是基于字母
我答:字母不需要embedding,一共就26个,word是为了降维到固定的长度,避免one-hot过于稀疏而且太大了,并且要体现word之间的相关关系,比如apple和banana都是水果,但找a b之间的关系,好像没啥用。
面试官说:有一些研究,就是做的基于字母的,然后做一些组合之类的,适用范围会更广。
- 语义表示:词语是语言的最小语义单位,基于词语级别可以更好地捕捉词语之间的语义关系。相比之下,基于字母级别的表示方法可能会过于细粒度,难以捕捉词语的整体语义。
- 数据稀疏性:基于字母级别的表示方法需要处理更多的可能组合,导致数据更加稀疏,学习效果可能不如基于词语级别。
- 计算效率:基于词语级别的表示方法可以利用词语的上下文信息进行学习,这样可以更高效地捕捉词语的语义特征,而基于字母级别则需要更多的计算量。
- 应用领域:Word2Vec 主要应用于自然语言处理领域,而在这个领域中,词语级别的表示更符合语言学习习惯和语言处理需求。
w2v 的参数怎么调节的
w2v 的 min_count 设置的多大,从什么方面考虑的
deepwalk,node2vec怎么做的
介绍一下node2vec
用item,item共现矩阵和deepwalk有何区别
item2vec怎么做的
item2vec 是一种类似于 Word2Vec 的方法,用于学习 item 的表示。它将 item 看作词语,将用户的历史行为序列看作句子,通过训练一个神经网络模型来学习 item 的向量表示。 item2vec 能够捕捉 item 之间的语义关系,适用于推荐系统等场景。
Serving怎么做的
Serving 是一种用于模型部署和提供实时预测服务的技术。在推荐系统中,可以使用 Serving 技术将训练好的模型部署到生产环境中,并提供实时的推荐服务。Serving 技术通常涉及模型的序列化、网络通信、负载均衡等方面的工作。
搜索引擎怎么做的,如何给定query找到相关文档
linux用过没,
如何查看进程占用内存,
如何使用shell脚本统计一个文件的词频,大文件怎么做,mapreduce
智力题 扔硬币
智力题 汽车加油最多能跑多远
(Tiktok问的)进程线程 中断
hashmap常用的数据结构了解哪些,hashmap以及如何解决冲突,红黑树以及平衡搜索树等
rand5 实现rand7
大数据相关的技术了解如何?
有没有用过spark和hadoop
tensorflow 和 pytorch 使用情况 和对比
项目问的比较细,特别细
介绍下这篇 paper:面试官很在意数据,以及训练过程
项目里的算法 数据处理 流程 比较详细
为什么使用这个模型?可以大致介绍一下模型吗?跟其他模型比好在哪里?
因果推断 模型的选择考虑什么问题 对比学习的基本原理
对比学习 moco系列
主观性很强的场景,如何做量化
结果 f1 提升的 1% 怎么保证有效性,如何保证置信呢
实验过程中固定随机种子、多次实验取平均
固定随机种子后,多次实验结果相同吗?
还是会发生变化,因为梯度传播过程,梯度(浮点数)精度有差异,随着神经网络层数的增加,梯度差异会从小数后面的位置往前跑,只能设置浮点数精度增加来缓解这个问题。
说一下用到的指标有那些,细说一下含义。
GCN如何如何处理数据,GCN如何构图,图节点分别是啥,如何更新参数?
介绍一下GCN & 和GraphSage的区别 & 和cnn区别?
数据做了那些处理,用了那些特征,特征工程流程说一遍。模型融合怎么融合的?加权的参数怎么得出的?
介绍项目,项目中的参数设置是怎么考虑的
项目中 DIN 模型里面的 attention 是怎么做的?score 是怎么得到的?知道原文里是怎么做的吗?
反问面试官:用户意图理解、用户兴趣、画像建模,应用到推荐上
美团编程题
判断二叉树是否是镜像二叉树,就是判断是否对称。leetcode 原题
最长无重复子数组,用滑动窗口来做
被围绕的区域, DFS 或者 BFS
两个字符串表示的数字相加(不能转换成int,两个数字相加的时候可以),特意强调了一下两个很大的数。
50分成4个数相加,不同次序分别计数,一共多少种
一道二叉树路径和最大
反转单链表
二叉树的最大深度
环形链表入口节点
最长递增子序列
京东
无序数组中找第K大的数:解法详细说一下,时间复杂度是多少?为什么是O(n),而不是O(nlogk),来推导并且证明一下你的解法的时间复杂度(级数求和)? O(nlogk)的解法是怎么做的,你说一下(堆排序)?现在把题目变一下:有4亿个数据,内存只能存1亿个数,找出第8000万大的数? 这题可以用哈希吗?在什么情况下可以用哈希? 你用堆排序做是吧?可以,堆排序这种方法有什么缺点?如果我要找第1.3亿大的数呢?
If (a < 3):
If (b……):
If(c……):
If(d…….):
If(e……)
If (a >=3):
If (b……):
If(c……):
If(d…….):
If(e……)
这种if语句嵌套太多,条件也太多了,怎么来优化它?(面试官一步一步提示:决策树 -à 跳转表)
判断链表有环
正则表达式匹配
口述一道SQL题,差集
求字符串的最大回文子串(动态规划)
一维消消乐。 红红黄黄绿绿绿绿黄蓝 ->消一次变成 红红蓝 (三个以上的干掉),给了O(n)算法
小红书
一道工程模拟题,实现一个类和三个函数,分析时间空间复杂度,然后优化
探探
判断输入的数据将会被插入哪个桶,一道二分,类似于搜索插入位置,lc改编
给定两列,都是user_id,每一行都是一个好友关系,输入一个user_id,找出跟这个用户共同好友数最多的那个人
字节
字符串保留K个字符的最小字典序 接雨水1
eetcode课程表 累加数
1、常见的召回策略,算法有哪些? 召回算法用于从大规模数据集中快速筛选出一组候选项,以供后续的排序和推荐处理。常见的召回有下面几种:
①基于内容的召回:a.基于物品的内容召回:使用物品的属性和特征,如文本、标签或图像,来计算物品之间的相似度,以推荐相似的物品。b.基于用户的内容召回:分析用户的历史行为和个人资料,以确定他们对内容的兴趣,并为其推荐相关内容。
③协同过滤召回:基于用户的协同过滤:根据用户与其他用户的相似性,为目标用户推荐与相似用户喜欢的物品。基于物品的协同过滤:根据物品之间的相似性,为用户推荐与他们以前喜欢的物品相似的物品。
④矩阵分解:矩阵分解方法,如奇异值分解(SVD)和交替最小二乘(ALS),用于将用户-物品交互矩阵分解为潜在因子矩阵,以捕捉用户和物品之间的潜在关系。这些方法通常用于协同过滤。
⑤基于流行度的召回:流行度召回方法会根据物品的全局流行度为用户推荐物品。这意味着用户将看到最热门的物品,无论他们的兴趣如何。
⑥基于规则的召回:基于规则的召回使用预定义的规则来选择候选物品。这些规则可以是手动制定的,也可以通过机器学习方法自动学习得出。在业务迭代初期,一般会使用这种召回方法;
⑦深度学习召回:使用深度学习模型(如神经网络)进行召回,这些模型可以从用户历史数据中学习用户和物品之间的复杂关系,以生成召回结果。
⑧多通道召回:使用多个不同的召回算法,并将它们的结果合并或加权,以提高推荐的多样性和准确性。2、协同过滤存在什么问题?
泛化能力弱。即协同过滤无法将两个物品相似的信息推广到其他物品的相似性上。导致的问题是热门物品具有很强的头部效应,容易跟大量物品产生相似,而尾部物品由于特征向量稀疏,导致很少被推荐。协同过滤的特点就是完全没有利用到物品本身或者是用户自身的属性,仅仅利用了用户与物品的交互信息就可以实现推荐,比较简单高效,但这也是它的一个短板所在,由于无法有效的引入用户年龄,性别,商品描述,商品分类,当前时间,地点等一系列用户特征、物品特征和上下文特征,这就造成了有效信息的遗漏,不能充分利用其它特征数据。3、协同过滤有哪些可以改进的?
参考回答:加一些参数权重对热门物品,以及活跃用户进行一些惩罚。或者利用矩阵分解,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐含特征。
4、什么时候使用UserCF,什么时候使用ItemCF?为什么?
参考回答:UserCF:由于是基于用户相似度进行推荐,所以具备更强的社交特性,这样的特点非常适于用户少,物品多,时效性较强的场合,比如新闻推荐场景,因为新闻本身兴趣点分散,相比用户对不同新闻的兴趣偏好,新闻的及时性,热点性往往更加重要,所以正好适用于发现热点,跟踪热点的趋势。对于用户较少,要求时效性较强的场合,就可以考虑UserCF。ItemCF:这个更适用于兴趣变化较为稳定的应用,更接近于个性化的推荐,适合用户兴趣固定持久,物品更新速度不是太快的场合,比如推荐艺术品,音乐,电影。
5、什么是faiss,它的原理是什么?
参考回答:faiss是FaceBook的AI团队开源的一套用于做稠密向量聚类和相似性搜索的软件库,它包含在任意大小向量上的搜索算法,也支持评估和参数调节。Faiss包含多种相似度检索方法,通过L2(欧氏距离)和点积确定,同时也支持余弦相似度来计算向量距离。它主要是通过向量压缩进行计算,而不是通过使用原型向量进行比较,这种方法虽然降低精度,但是可以极大缩小存储空间以及检索速度,可以达到近似检索。faiss本质是:
使用PCA、K-means、PQ等算法对数据进行操作,对数据进行分群,每一个群都有一个Index,根据要查找数据的与每个Index距离大小,定位要查找的那个群,也就是缩小了数据查找范围,进而加速。6、还了解其他向量检索的方法吗?
参考回答:其他向量检索的方式 Kd - tree;kd -
tree的构建方式是根据我们输入的多维embedding。每次分裂的时候,会选择方差最大的一列,然后选择这一列的中位数去划分结点,直到每一个结点都有一个向量,这样kd-tree就构建完成了。kdtree的查找:向量的查找也是每次从根节点出发,开始对比,比如这个结点是按照第三列某一个数划分的,就比较这个向量这个位置的数和这个结点的数的大小,从而判定是往左走还是往右走,最终会落到一个结点上,但是这样找不一定是最近的,如果还有更近的,就会回溯到上一个分裂点,看另一个结点的距离。7、双塔的user侧特征和item侧的特征可以做交叉吗?
参考回答:可以的,
最简单的方式是取用户特征和物品特征的点积,这可以被看作是一种线性交叉方式。这个点积可以被加入到模型的最后输出或中间层。特征交叉可以更好地捕捉用户和物品之间的关系,从而提高推荐系统的效果。如何进行交叉需要根据具体问题和数据来设计和优化。8、相似度的度量方法有哪些?
参考回答:Jaccard相关系数:
两个用户u和v所交互商品的交集的数量占这两个用户交互商品并集的数量的比例,称为两个集合的杰卡德相似系数,余弦相似度,在此基础上引入皮尔逊相关系数。余弦相似度没有考虑到不同用户平均打分偏差的问题,最直观的理解就是某一个用户的品味很高,对任何商品打分都很低,这样计算出来的余弦相似度就有差异,引入偏置a,b分别为a的平均打分情况,b的平均打分情况,每一个参数都减去这个平均值,然后再来计算。9、矩阵分解的原理,具体是怎么分解的?
参考回答:矩阵分解算法将 m×n 维的共享矩阵 R 分解成 m×k 维的用户矩阵 U 和 k×n 维的物品矩阵 V
相乘的形式。其中m是用户数量,n是物品数量,k是隐向量维度,也就是隐含特征个数,
k的大小决定了隐向量表达能力的强弱,k越大,表达信息就越强,理解起来就是把用户的兴趣和物品的分类划分的越具体。矩阵分解的求解:
常用的做法就是特征值分解(EVD),奇异值分解(SVD)。但是特征值分解它要求分解的矩阵是方阵,在推荐系统中,显然用户-物品矩阵不满足这个要求,而传统的SVD分解,会要求原始矩阵是稠密的,而我们这里的这种矩阵一般情况下是非常稀疏的,如果想用奇异值分解,就必须对缺失的元素进行填充,而一旦补全,空间复杂度就会非常高,且补的不一定对。
然后就是SVD分解计算复杂度非常高,而我们的用户-物品矩阵非常大, 所以基本上无法使用。Funk SVD:所以具体对SVD进行一些改变,用一种叫Funk
SVD来进行求解。只针对矩阵中有用户评分的信息进行分解。Funk-SVD的思想很简单,把求解上面两个矩阵的参数问题转换成一个最优化问题,可以通过训练集里面的观察值利用最小化来学习用户矩阵和物品矩阵。冷启动:基于流行度的算法、基于内容的算法(不受热度的限制)、用户画像彻底解决冷启动、Node embedding
可以被用作其他业务的场景冷启动