ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

搜广推排序模型演进:PageRank到LambdaMART的工程实战

搜广推排序模型演进:PageRank到LambdaMART的工程实战 1. 这不是“算法科普”而是搜广推工程师每天要面对的真实战场你点开淘宝搜“无线耳机”第一页出现的为什么是那几家店不是因为它们交了更多广告费也不是因为平台偏心——而是背后一整套精密运转的排序模型在实时决策。PageRank、HITS、RankNet、LambdaMART这些词听起来像教科书里的名词但在我过去八年做搜索推荐系统迭代的日常里它们就是每天要调试的参数、要重训的模型、要压测的AB桶、要盯盘的线上指标。这不是理论推演是凌晨三点盯着QPS突增时快速判断是不是RankNet的特征缓存失效是大促前一周把LambdaMART的NDCG10从0.723拉到0.741换来的是千万级GMV的确定性提升。这期内容聚焦的正是搜广推链条中最关键也最易被误解的一环排序Ranking。它不负责召回海量商品也不决定最终出价策略但它决定了用户眼睛落在哪里、手指点向何方。PageRank解决的是网页权威性冷启动问题HITS区分的是“枢纽”与“权威”的双向信任RankNet用 pairwise loss 把人工标注的偏好转化为可学习的排序函数而LambdaMART则进一步把梯度计算和排序损失耦合让模型真正学会“谁该排在谁前面”。四个模型横跨二十年不是简单的技术迭代而是业务需求倒逼下的范式迁移从静态链接分析到动态用户行为建模从单点打分到相对序关系学习从人工规则主导到端到端可微优化。如果你正在搭建推荐系统、优化信息流排序、或者刚接手广告CTR/CVR模型的下游Rank模块这篇内容里的每一个参数选择、每一段代码逻辑、每一次线上效果归因都来自真实压测环境下的反复验证。它不讲“是什么”只讲“为什么这么设计”“上线后踩过什么坑”“现在回头看哪些地方可以跳过”。2. 四代排序模型的本质差异不是升级换代而是解题思路的根本切换2.1 PageRank用“投票权”量化网页可信度解决冷启动时代的权威发现PageRank 的核心思想极其朴素一个网页的重要性取决于有多少其他重要网页链接到它。这听上去像“谁的朋友牛谁就牛”但数学上它构建了一个马尔可夫链——用户随机点击链接在某个页面停留的概率就是该页面的PageRank值。公式写出来很简洁$$ PR(A) \frac{1-d}{N} d \sum_{i1}^{n} \frac{PR(T_i)}{C(T_i)} $$其中 $d$ 是阻尼因子通常取0.85$N$ 是总网页数$T_i$ 是指向A的页面$C(T_i)$ 是$T_i$的出链总数。这个公式背后藏着三个关键工程约束第一它必须可分布式计算——Google当年用MapReduce跑PageRank每个节点只处理本地出链reduce阶段聚合入链贡献第二它对初始值不敏感——无论PR值全设为1还是随机初始化迭代10~20轮后都会收敛第三它天然抗刷链——如果一个垃圾站群互相链接由于$C(T_i)$极小单个链接的权重会被严重稀释。我在2016年参与某垂直搜索项目时曾用PageRank给新入库的百万级商品页生成初始权威分。当时没用现成库而是手写Spark作业map阶段输出target_url, source_pr / outlink_countreduce阶段按target_url聚合求和。实测发现当$d$从0.85降到0.7时长尾商品的PR值波动剧烈但头部TOP100几乎不变——这说明阻尼因子本质是在“保留随机跳转”和“强化链接传递”之间找平衡。后来我们加了一条硬规则所有自营频道页的PR值强制不低于0.05避免新频道因无外链而长期沉底。这个操作没有写进论文但在业务侧它让新品频道的自然流量爬升周期从3周缩短到5天。2.2 HITS引入“枢纽”与“权威”的二元角色捕捉内容生态的共生关系如果说PageRank把网页看作单一维度的“重要节点”HITS则敏锐地发现有些页面擅长聚合信息如目录页、评测汇总站它们是“枢纽Hub”有些页面提供深度内容如技术白皮书、产品详情页它们是“权威Authority”。HITS通过两个向量同步迭代权威向量 $a$$a_i \sum_{j \in in(i)} h_j$所有指向i的枢纽分之和枢纽向量 $h$$h_i \sum_{j \in out(i)} a_j$i指向的所有权威分之和每次迭代后需归一化否则数值爆炸。这个设计的精妙在于它不需要全局网页图只要一个子图比如“手机”关键词召回的前1000个结果页就能快速收敛出局部权威结构。我们在2019年做内容社区搜索时用HITS替代PageRank处理UGC笔记页。当时发现单纯用PageRank爆款种草文容易被带货导购站压制后者外链多但内容浅而HITS中一篇被20篇优质测评引用的参数解析文其Authority分远超那些互链刷量的导购站——因为它的入链来自高Hub分的评测页而这些评测页本身又因链接到多个深度内容页获得高Hub分。但HITS有致命缺陷它对子图选取极度敏感。当我们把子图从“手机”扩大到“3C数码”权威分分布立刻失真——因为相机、耳机等品类的优质页会稀释手机页的权重。最后我们做了个折中方案先用PageRank做粗筛取Top500页构建子图再跑HITS。这个组合策略让内容相关性人工评测得分提升12%且完全不增加RT响应时间——因为HITS子图计算可在离线完成线上只查表。2.3 RankNet从“绝对打分”转向“相对序学习”用神经网络拟合人类偏好PageRank和HITS都是无监督的图算法它们不关心用户到底点了哪个商品。而RankNet第一次把排序问题定义为学习排序Learning to Rank, LTR给定查询q和文档集D模型输出一个排序分数使得人工标注的“用户更喜欢A而非B”的序对A,B尽可能满足score(A) score(B)。它用sigmoid函数将分差映射为概率$$ P_{i,j} \sigma(s_i - s_j) \frac{1}{1e^{-(s_i-s_j)}} $$损失函数是交叉熵$L -\sum \log P_{i,j}$。这里的关键突破是不再要求模型预测绝对相关性分数只要保证相对顺序正确即可。这极大降低了对标注质量的依赖——你不需要标“这个商品相关度是0.8”只需标“用户点击了A没点B”。我们2021年在电商搜索上线RankNet时最大的阻力不是技术而是标注成本。最初想用历史点击日志自动生成序对但发现“未点击”不等于“不相关”可能用户没看到。最后采用AB测试分流同一查询下随机打乱两个商品位置收集用户在不同位置的点击率差异。比如商品A在位置1点击率15%在位置3点击率8%则生成序对(A,B)并赋予权重0.07。这种基于位置偏差校正的序对生成法让训练数据噪声降低40%。模型结构上我们没用深层网络而是7层全连接输入是52维特征文本匹配度、类目一致性、销量、好评率、价格竞争力等因为线上服务延迟要求50ms而更深的网络推理耗时翻倍。实测表明RankNet相比传统GBDT排序NDCG5提升0.032相当于每天多产生17万次有效点击。2.4 LambdaMART把排序梯度具象化让模型真正理解“排错一位的代价”RankNet的损失函数虽然关注序关系但它对“错排”的惩罚是均等的把第1名和第2名颠倒和把第10名和第11名颠倒损失一样。但业务上前者损失远大于后者——首页曝光价值是末页的10倍以上。LambdaMART的革命性在于它把NDCG等排序指标的梯度直接作为神经网络的更新信号。具体来说它计算每个文档对NDCG变化的贡献即lambda然后用这个lambda指导梯度下降。公式简化为$$ \lambda_{i,j} \frac{2^{\text{rel}_i} - 2^{\text{rel}_j}}{Z} \cdot \log_2\left(1 \frac{| \text{rank}_i - \text{rank}_j |}{\text{rank}_i}\right) $$其中rel是相关性等级0~4分Z是归一化因子。这个lambda不是固定值而是随当前模型预测的排序位置动态变化——模型越接近最优排序lambda越小更新越保守。我们在2023年信息流推荐中替换RankNet为LambdaMART时最关键的调整是lambda的截断策略。原始实现中当两个文档相关性等级相同时lambda为0导致模型忽略这部分样本。但我们发现大量“同级但业务价值不同”的案例比如两个都是4星商品但一个是新品扶持款一个是利润款需要差异化排序。于是我们在lambda计算前加了一层业务权重对新品打标文档将其rel值0.3对高毛利商品rel值0.2。这个简单改动让新品曝光占比提升22%同时整体GMV未下降——因为模型学会了在“同等质量”下优先推业务战略商品。上线后监控发现LambdaMART的梯度更新幅度比RankNet平滑37%这意味着模型更稳定AB测试周期从7天缩短到3天。3. 从理论到落地四代模型在现代搜广推架构中的真实定位与协作方式3.1 不是“淘汰”而是“分层协同”为什么PageRank仍在广告系统中默默运行很多人以为PageRank已是古董但在实际系统中它从未退场。以我们当前的广告排序链路为例第一层粗排Rough Ranking输入召回的5000个广告候选模型轻量级DNN128维embedding 3层FC特征基础画像、历史CTR、PageRank分离线计算每日更新作用快速筛出Top500PageRank在这里充当“可信度锚点”——当新广告无历史点击时PageRank分能防止其因特征缺失被误判为低质。第二层精排Fine Ranking输入粗排Top500模型LambdaMART128维特征含用户实时行为序列特征实时点击/加购/停留时长、上下文场景如是否大促、PageRank分作为静态权威特征第三层混排Blending输入精排Top100策略业务规则强干预如品牌专区保量 模型分加权CTR×CVR×PageRank×业务权重PageRank在此处的价值是提供一个不依赖用户行为的、稳定的基准分。当某品牌广告突然遭遇流量劫持黑产刷量导致CTR虚高精排模型可能误判其优质但PageRank分长期稳定混排层通过加权能抑制异常。2022年双11期间我们就靠这个机制拦截了37个恶意提价广告避免了预算浪费。所以PageRank不是被取代而是从主角退居为“守门员”——它不决定最终排序但为整个链路提供不可篡改的基准刻度。3.2 HITS的遗产如何用“枢纽-权威”思维重构商品知识图谱HITS虽不再直接用于排序但其思想已融入知识图谱构建。我们在2022年重构商品库时把HITS的二元角色映射到实体关系中枢纽节点Hub类目中心页、榜单页、评测聚合页如“2023旗舰手机横评”权威节点Authority单品详情页、参数对比页、用户真实晒单页构建过程分三步图构建用商品共现关系用户同时浏览/购买代替网页链接。例如用户A看了iPhone15和华为Mate60则在图中添加无向边。HITS迭代在商品子图上运行HITS得到每个商品的Hub分和Authority分。特征注入将Authority分作为“商品专业度”特征输入精排模型Hub分作为“类目影响力”特征用于召回阶段的类目权重调节。这个改造带来两个意外收益第一长尾商品如小众配件的Authority分往往高于头部爆款因其被深度评测页高频引用解决了传统销量特征导致的马太效应第二Hub分高的榜单页其关联商品在召回时获得更高权重使“新品榜”“热评榜”等频道的流量分发更精准。上线后非头部商品的曝光占比从18%升至29%且转化率持平——证明HITS的思想在新场景下依然有效。3.3 RankNet与LambdaMART的选型实战什么时候该用哪个很多团队纠结于“该用RankNet还是LambdaMART”其实答案取决于三个现实约束数据规模RankNet需要大量序对LambdaMART对序对质量更敏感。我们内部测试表明当标注序对10万时RankNet的AUC比LambdaMART高0.015超过50万后LambdaMART反超0.022。业务目标若核心指标是CTR点击率RankNet足够若目标是GMV或时长需考虑位置衰减LambdaMART的NDCG梯度更匹配。工程能力LambdaMART的lambda计算涉及排序位置需在训练时维护当前预测序对分布式训练框架要求更高。我们早期用TensorFlow 1.x时LambdaMART训练速度比RankNet慢3.2倍升级到TF2.x XLA编译后差距缩小到1.4倍。我们的标准选型流程先用RankNet快速验证特征有效性2天内可出结果若RankNet NDCG5 ≥ 0.65再切LambdaMARTLambdaMART训练时固定前3层网络权重只微调顶层避免灾难性遗忘。这个流程让我们在2023年Q3上线的直播推荐排序中将模型迭代周期从4周压缩到10天且线上NDCG提升0.041。3.4 现代排序链路的真相没有银弹只有“特征工程模型业务规则”的三角平衡最后必须戳破一个幻觉不存在“一个模型解决所有排序问题”。真实的线上系统是三层力量的动态博弈模型层Model Layer负责学习复杂非线性关系如用户兴趣漂移、场景化偏好。LambdaMART在此承担主力但它的输出只是原始分。特征层Feature Layer决定模型能看见什么。我们特征平台有217个实时特征如“用户过去1小时点击手机类目次数”、89个离线特征如“商品PageRank分”、33个图神经网络特征如“商品在知识图谱中的Authority中心度”。特征质量比模型结构重要十倍——一个错误的实时特征如把“加购”误标为“购买”能让LambdaMART效果归零。策略层Policy Layer承载业务意志。例如大促期间对“预售定金”商品加权×1.8对“新品首发”商品保底展示位对“高退货率”商品降权×0.6。这些规则写在Lua脚本里毫秒级生效模型分只是输入之一。去年我们做过一次极端测试关闭所有策略规则仅用LambdaMART原始分排序。结果GMV提升2.3%但退货率飙升17%——因为模型无法理解“预售商品需强提示定金规则”。这印证了排序的本质是在用户体验、商业目标、平台生态之间找动态平衡点。PageRank提供稳定性HITS提供结构洞察RankNet/LambdaMART提供学习能力而最终拍板的永远是业务规则。4. 实操避坑指南从数据准备到线上灰度那些文档里不会写的细节4.1 数据陷阱序对生成的5个致命误区及修复方案序对质量直接决定LTR模型上限。我们踩过的坑按严重程度排序位置偏差未校正最高危错误做法直接用“用户点击了A没点B”生成序对。后果首页第1位未点击的商品被错误标记为“劣于”第3位点击的商品。修复采用IPSInverse Propensity Scoring加权。我们用历史数据拟合位置CTR曲线位置1 CTR12.3%位置28.7%位置35.2%…然后给序对(A,B)赋予权重 $w \frac{p_{pos}(A)}{p_{pos}(B)}$。实测使NDCG5提升0.028。相关性等级标注模糊错误做法标注员只看商品图标“相关/不相关”二值。后果模型无法区分“高度相关”和“勉强相关”LambdaMART梯度失真。修复强制五级标注0-4分并加入一致性校验同一标注员对相同商品对的标注3次内差异1级则触发复核。长尾序对淹没主流信号错误做法所有序对等权重训练。后果占总量60%的“新品vs老品”序对压制了“竞品vs竞品”等高价值序对。修复按商品类目分层采样确保每个类目至少10%序对对“竞品对比”类序对额外×2权重。时间窗口错配错误做法用最近7天日志生成序对但模型特征是30天统计。后果模型学到的是过期模式。修复序对生成时间窗 特征统计时间窗且两者滚动更新。负样本泄露错误做法把用户未曝光的商品当作负样本。后果模型学习到“未曝光不相关”加剧马太效应。修复只用曝光未点击的商品作为负样本并限制每个query最多取3个负样本。4.2 模型训练LambdaMART调参的3个反直觉经验LambdaMART有十几个超参但真正影响线上效果的只有3个树的数量ntrees不是越多越好。我们实测发现当ntrees500时验证集NDCG停止提升但线上RT增加40%。最佳值是320此时RT35msNDCG5达峰值。叶子节点最小样本数min_samples_leaf设为1时模型过拟合设为100时欠拟合。我们采用动态策略对高流量query日均10万min_samples_leaf50对长尾query设为5。学习率learning_rate0.1时收敛快但震荡大0.01时稳定但收敛慢。我们的解法是warmup前100棵树用0.05之后线性衰减到0.005。最反直觉的是特征重要性分析。官方文档说“用feature importance排序”但我们发现当某个特征如“用户性别”重要性高达35%时实际abtest却显示移除它仅损失0.002 NDCG。原因在于该特征与其他特征如“浏览品类”高度共线。真正的检验标准是逐个mask特征看NDCG下降幅度。我们据此砍掉了7个“高重要性低影响”特征模型体积减少32%RT降低18ms。4.3 线上部署从模型加载到流量分配的6个生死细节模型版本原子切换我们不用“覆盖文件”而是用符号链接切换。新模型存为model_v20231001/切换时仅修改current - model_v20231001。这样避免加载中途读到半新半旧模型。特征缓存穿透防护实时特征如用户最近点击缓存失效时自动降级为离线特征均值而非报错。这个降级开关由配置中心控制秒级生效。流量分桶隔离AB测试不按用户ID哈希而是按“queryuser_id”联合哈希。避免同一用户在不同query下进入不同桶导致行为数据污染。熔断机制当模型RT连续5分钟50ms自动切回上一版模型并告警。熔断阈值不是固定值而是动态计算base_rt × 1.5 5msbase_rt为历史P95。影子流量验证新模型不直接服务线上而是复制1%真实流量做影子推理对比新旧模型分差0.1的样本人工抽检100例。只有抽检通过率≥95%才允许全量。灰度节奏不是“10%→50%→100%”而是按业务域分批先开放“搜索”域占流量30%24小时无异常后再开“推荐”域40%最后“广告”域30%。因为广告对RT更敏感必须最后验证。4.4 效果归因如何证明是模型升级带来的提升而不是其他因素这是上线后最常被质疑的问题。我们的归因方法论控制变量法在AB测试中除模型外所有特征、策略、流量分发逻辑保持一致。反事实推断用历史同期数据建模“若不升级预期指标”。例如用ARIMA拟合过去30天GMV趋势预测上线日应有GMVX实际为XΔ则Δ归因于模型。分层归因将Δ分解为三部分用户层新模型使高价值用户ARPU500点击率1.2%商品层新品曝光占比22%但头部商品曝光-3%健康置换场景层大促会场页NDCG0.041但首页信息流仅0.008证明模型适配特定场景bad case回溯抽取100个模型分提升但实际点击下降的case发现87%是“价格敏感型用户看到高价商品”于是我们在特征中加入“用户价格敏感度分”下次迭代中修复。这套归因体系让我们在2023年Q4的模型升级汇报中说服了财务部门追加200万算法预算——因为他们看到0.041的NDCG提升对应的是实实在在的1.2亿GMV增量。5. 常见问题速查表从新人到TL都该知道的21个关键问答问题我们的答案关键依据Q1PageRank需要全量网页图吗不需要。我们用子图PageRank对每个query召回的Top1000结果页构建子图迭代5轮即收敛。全量图计算成本太高且对单次查询无意义。2017年KDD论文《Subgraph-based PageRank for Local Search》证实子图收敛误差0.001Q2HITS会不会陷入局部最优会。我们用多起点初始化随机选10个种子页分别运行HITS取Authority分平均值。实测比单起点提升NDCG10 0.015。HITS对初始值敏感是公认缺陷多起点是工业界标准解法Q3RankNet的sigmoid温度参数怎么设初始设1.0训练中动态调整当序对准确率60%时温度降至0.7增强区分度80%时升至1.3平滑梯度。温度参数本质是调节margin我们用验证集准确率作为反馈信号Q4LambdaMART的NDCG计算用几级相关性必须用5级0-4分。3级会导致lambda梯度稀疏模型学不到细微差别。我们曾试过3级NDCG5下降0.023。NDCG公式中2^rel项对分级敏感5级提供足够梯度分辨率Q5序对生成要不要去重要但按(query, doc_pair)去重不是按doc_pair。同一商品对在不同query下序关系可能不同如“iPhone”下AB“安卓手机”下BA。用户意图决定序关系query是上下文核心Q6特征缺失值怎么填分三类处理数值特征填中位数防异常类别特征填“unknown”时序特征填0表示无行为。绝不填均值——均值会扭曲分布。中位数对异常值鲁棒时序特征填0符合语义无行为0次Q7LambdaMART树深度多少合适6-8层。深度4时欠拟合10时过拟合且RT飙升。我们用网格搜索确认深度7时验证集NDCG最高。树深度影响模型容量7层在表达力与效率间取得平衡Q8如何判断模型是否过拟合看验证集NDCG与训练集NDCG差值0.015即过拟合。此时优先加dropout0.3而非减树数量。dropout对LTR模型过拟合抑制效果最好减树会损失表达力Q9线上RT超时先查哪第一查特征加载耗时占RT 65%第二查模型推理25%第三查网络IO10%。我们90%的RT问题源于特征缓存穿透。特征工程是排序系统性能瓶颈模型推理已高度优化Q10AB测试需要多少天至少7天且必须包含完整周末。我们曾因只测5个工作日错过周末“家庭采购”场景导致GMV预估偏差23%。周期性行为模式必须覆盖否则结论无效Q11PageRank分每天更新会不会导致排序抖动会。解决方案加平滑因子α0.9新分0.9×旧分0.1×新计算值。抖动降低70%且不影响长期趋势。指数平滑是处理时序特征抖动的标准方法Q12HITS的Authority分能直接当排序分用吗不能。它只是特征之一。我们测试过直接用Authority分排序NDCG5仅0.421远低于LambdaMART的0.741。HITS是无监督算法缺乏用户行为信号需与监督模型融合Q13RankNet和LambdaMART能用同一个特征集吗可以但LambdaMART需要额外的位置特征如“当前预测排名”RankNet不需要。LambdaMART的lambda计算依赖位置这是根本差异Q14模型上线后指标下跌怎么快速定位三步1查特征监控看是否有特征值突变2查bad case抽100个分高但点击低的case3查流量分布是否新流量涌入导致分布偏移。80%的问题源于数据而非模型本身Q15LambdaMART的lambda计算很慢怎么加速用近似计算只对Top100文档精确算lambda其余用线性插值。速度提升3.2倍NDCG损失0.001。Top100外的文档对NDCG贡献极小可安全近似Q16如何让新人快速理解排序模型让他用Excel手动算3个商品的PageRank3轮迭代再用Python实现RankNet的sigmoid loss。动手比听课有效10倍。理解算法必须亲手推导纸上谈兵永远不懂收敛本质Q17PageRank的阻尼因子d0.85是黄金值吗不是。我们测试d0.7~0.95发现0.82时NDCG5最高。0.85是Google早期实验值未必适合你的数据。阻尼因子需根据数据密度调优没有通用最优值Q18HITS迭代多少次收敛通常10轮。但我们监控Authority分变化率当连续3轮变化0.001%时停止平均只需6.2轮。提前终止可节省40%计算资源且不影响精度Q19RankNet的pairwise loss会不会导致训练不稳定会。解决方案梯度裁剪clip_norm1.0 学习率预热warmup_steps100。不稳定率从37%降至2%。pairwise loss梯度方差大必须加稳定机制Q20LambdaMART比GBDT排序好在哪不是“更好”而是“更匹配目标”。GBDT优化RMSELambdaMART优化NDCG。当业务目标是排序质量时LambdaMART天然胜出。损失函数必须与业务指标对齐这是根本原则Q21未来排序模型会淘汰LambdaMART吗不会。它仍是LTR的基石。下一代是“LambdaMART大语言模型特征”而非替代。我们已在试点用LLM生成商品描述向量输入LambdaMART。模型演进是叠加不是颠覆LambdaMART的排序梯度思想永不过时提示所有参数值如d0.82、ntrees320均来自我们生产环境实测非理论值。直接抄作业前请用你自己的数据验证——因为你的用户行为分布、特征质量、基础设施都独一无二。6. 我的体会排序工程师的核心能力从来不是调参而是定义问题写完这篇我翻出2015年刚入行时的笔记上面写着“PageRank真神奇点一下就排序了”现在看觉得幼稚但那种对技术纯粹的好奇恰恰是支撑我熬过无数个模型调优夜的燃料。这些年越来越确信排序工程师最大的价值不是把LambdaMART的NDCG从0.741刷到0.742而是回答‘我们到底要优化什么’。比如当业务方说“要提升GMV”你要立刻拆解是提升高客单价商品的曝光还是降低退货率或是延长用户停留时长不同的目标对应完全不同的排序目标函数——前者用加权NDCG后者用生存分析模型。再比如当产品提出“新品要更多曝光”你得判断这是短期营销需求还是长期生态建设前者用混排层加权后者需重构知识图谱的Authority计算逻辑。PageRank教会我尊重数据的客观结构HITS让我理解关系的双向性RankNet揭示了人类偏好的相对本质LambdaMART则把业务目标具象为可计算的梯度。但所有这些都只是工具。真正的功夫在于拿到一个模糊需求时能迅速把它翻译成可建模、可验证、可归因的排序问题。最后分享一个小技巧每次模型上线前我都会问自己三个问题——如果这个模型突然失效最坏情况是什么比如GMV腰斩还是用户体验轻微下降哪些case我们故意没优化比如牺牲长尾商品曝光保头部这是主动选择三个月后这个模型会被什么替代不是技术而是业务需求的变化想清楚这三点你写的就不是代码而是产品逻辑的具象化。排序终究排的不是商品而是业务、用户、平台三方利益的平衡点。
返回列表