ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI广告技术链路全解:从CTR预估到创意生成与工程落地

AI广告技术链路全解:从CTR预估到创意生成与工程落地 人工智能怎么做广告这个问题看起来像一句玩笑但放到广告系统里它其实是三个硬核问题机器怎么理解用户机器怎么生成广告内容机器怎么决定在哪个流量上展示哪条广告。本文就从这三个问题出发讲清楚AI广告的完整技术链路。你会看到从数据采集、CTR预估、创意生成到效果评估的落地过程也会看到上线之后最容易踩的坑以及从学习环境过渡到生产环境时需要补哪些能力。1. 广告系统为什么需要人工智能它在解决哪三件事1.1 传统广告的匹配问题人工经验解决不了规模化广告的经典流程是广告主提供素材、平台选择人群、用户看到内容。传统模式下运营同学要靠后台数据手工调整人群包。比如“25到35岁、一线城市、最近30天浏览过数码产品”就是一个典型人群条件。这种条件能圈出范围但无法回答一个重要问题这个人群里每个人都对广告感兴趣吗答案是否定的。同样一条广告同一个人在不同时间、不同设备、不同上下文下的反应完全不同。靠人工规则很难把这种动态变化建模出来。除此之外人工经验的边际成本很高。一个运营一天能调整几十个人群包但广告平台每天有上亿次曝光请求必须用系统去处理。规则系统也能自动化但规则之间相互影响维护成本会指数级上升。比如增加一条“排除低消费力用户”可能连带影响高消费力用户的召回范围。这种复杂关系很难用 if else 表达。1.2 AI在广告链路中的三个核心切入点AI进入广告系统核心不是在某个环节加一个模型而是重塑三条链路。第一用户理解。系统把用户的曝光、点击、收藏、购买行为转换成特征再用模型生成用户向量或兴趣标签。这些特征不只是一张用户画像表还包括实时行为序列。比如用户刚刚搜索了“跑步机”模型要能推断他对“运动耳机”也有兴趣。第二创意生成。传统创意靠设计师人工产出周期长测试成本高。生成式AI可以把产品信息、卖点、受众描述作为输入批量产出文案、图片和短视频脚本。人工从“从零设计”变成“从模型结果中选择和修改”素材产能会明显提升。第三投放优化。系统根据CTR预估和转化率预估决定广告是否展示、展示在哪个广告位、出价多少。这里涉及实时竞价。模型需要在几十毫秒内完成预测所以推理服务必须非常高效否则广告请求会因为超时而失去竞价机会。1.3 数据和算力决定了效果上限广告算法圈里有一句话特征决定了上限模型只是逼近这个上限。这句话同样适用于AI广告。一个广告模型效果好不好首先取决于有没有充足、干净、按时到达的数据。数据不完整再复杂的模型都会学到错误规律。算力同样重要。训练一个广告深度模型需要大量GPU资源。批量生成创意素材也是一样生成模型参数量大推理成本高。很多团队开始做“小而专”的模型就是为了在不牺牲太多效果的前提下控制算力成本。这也是为什么“算力、token、数据、模型、场景”会同时出现在广告团队的讨论中它们是同一个系统里互相制约的环节。2. 先理清AI广告里绕不开的术语数据、token、模型、算力、场景2.1 五个术语一句话讲清广告技术讨论中经常会看到这么一组名词数据、token、模型、算力、场景。很多初学者会被绕晕。它们的关系可以用一句话概括数据是原料token是文本和视觉模型处理原料的最小单位模型是从数据里学出来的函数算力是用来训练和运行模型的计算资源场景是模型被使用的产品位置。下面用一张表把这五个术语落到广告系统里术语通俗理解在广告系统中的例子数据模型学习的原料用户点击日志、广告曝光日志、订单数据、创意素材token文本模型处理文本的最小单位生成一条广告文案消耗若干token审核模型也会消耗token模型输入到输出的映射函数CTR预估模型、广告文案生成模型、人群扩展模型算力训练和推理所需计算资源GPU训练集群、线上推理服务器、批量生成任务队列场景模型落地的产品位置信息流广告、搜索广告、开屏广告、电商推荐广告理解这一组词比背定义更重要。实际项目里讨论“这个场景用哪个模型”时一定同时涉及数据和算力。因为模型不是凭空存在的它需要数据训练需要算力支撑还要通过场景里的接口被调用。2.2 token计量与广告效果一次请求消耗多少token在广告系统中如果使用大模型生成文案token计量直接关系到成本。一次生成请求会有输入token和输出token。输入token包括广告产品描述、风格要求、历史素材输出token是模型生成的文案内容。若再加上内容审核模型还要计算审核请求的token。在实际工程里广告创意生成通常是一个批量任务而不是单条实时生成。系统会在凌晨把次日要用的素材批量生成再经审核入库。这样可以把token消耗控制在一个可控范围避免用户请求高峰时临时调用大模型导致延迟和成本都不稳定。同时token计量正变得越来越规范。团队会按业务线、素材类型、模型名建立token账单统计每天的生成请求量、平均输入长度和平均输出长度。这本质上是一种成本治理手段。没有token监控的AI广告系统很可能在月底收到一笔无法解释的模型调用账。2.3 广告模型往往不是一个模型而是一组模型的组合很多刚接触广告系统的同学会问广告系统里是不是只有一个点击率模型实际上成熟的广告系统会有一组模型比如召回模型从海量广告中挑出候选广告。粗排模型快速估计候选质量筛掉明显不相关的广告。精排模型对候选广告做精细打分。价格模型根据竞价情况决定最终排序。生成模型负责生产创意素材。在工程管理上这组模型需要按版本、特征文件、样本时间窗口分开管理。有的团队会把它们叫作“模型组”或“模型组别”本质上是为了追踪不同模型的输入输出和上线状态。这里有一个容易忽略的点不同模型之间是串联的。召回模型漏掉一个广告精排模型再强也看不到它。所以排查效果问题时要按链路从上游往下游看。3. 最小可理解的CTR预估实现从特征到预测3.1 CTR预估解决什么问题CTR预估是广告系统的核心。它要回答一个问题给某个用户展示某条广告用户点击的概率是多少这个问题难在特征高维稀疏。用户ID、广告ID、设备型号、地域等字段通常是类别型one-hot 之后维度会非常大。所以广告CTR模型常用逻辑回归、GBDT、FM/FFM以及线上推理性能更好的深度模型。模型选型不是越复杂越好。如果训练数据只有十多万条深度模型很容易过拟合逻辑回归加上好的特征工程反而更稳定。CTR预估通常会在离线阶段做特征工程和模型训练然后把模型部署成推理服务。线上请求到达时服务把用户特征和广告特征拼成一条特征向量调用模型得到点击概率。之后再结合广告出价和上下文约束决定最终排序。3.2 最小示例用逻辑回归跑通点击率预测为了理解流程下面给一个最小示例。它用一段模拟数据训练逻辑回归计算AUC。这段代码不追求线上性能只用于理解特征、训练、评估三件事。import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_auc_score, log_loss # 模拟广告曝光数据click1表示用户点击 data pd.DataFrame([ {age: 24, ad_position: feed, category: electronics, history_ctr: 0.02, click: 1}, {age: 32, ad_position: search, category: clothing, history_ctr: 0.01, click: 0}, {age: 28, ad_position: feed, category: food, history_ctr: 0.04, click: 1}, {age: 40, ad_position: banner, category: home, history_ctr: 0.005, click: 0}, {age: 35, ad_position: search, category: electronics, history_ctr: 0.015, click: 1}, ]) # 简单特征处理类别列直接编码成数值 data[ad_position] data[ad_position].astype(category).cat.codes data[category] data[category].astype(category).cat.codes feature_cols [age, ad_position, category, history_ctr] X data[feature_cols] y data[click] X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42) model LogisticRegression(C1.0, max_iter200) model.fit(X_train, y_train) y_pred model.predict_proba(X_test)[:, 1] print(AUC:, roc_auc_score(y_test, y_pred)) print(LogLoss:, log_loss(y_test, y_pred))这段示例最重要的不是模型有多强而是说明“特征 - 训练 - 预测 - 评估”的完整闭环。真实广告系统里特征会换成上百万维的稀疏特征模型也会换成可以处理稀疏特征的LR、FM或深度模型但理解这个最小闭环仍然是第一步。实际项目里这段代码需要注意两点一是样本量太少评估结果波动很大二是类别列直接编码成数字会引入虚假的顺序关系生产环境更推荐做 one-hot 或者 embedding。3.3 关键参数与评价指标广告模型常见参数如下表参数含义常见值调大/调小影响C逻辑回归正则化强度倒数1.0C越大越容易过拟合越小越平滑max_iter最大迭代轮数200太小可能不收敛太大增加训练时间学习率梯度下降步长0.01~0.1太大震荡太小收敛慢特征维度特征变换后维度百万~亿越大表达能力强但稀疏性和内存压力也越大样本采样率负样本采样比例0.1~1.0影响训练速度和模型校准评价指标方面AUC用于排序质量LogLoss用于概率校准质量。广告系统更关心后者因为出价要用到真实的点击概率而不是只要求排序正确。如果AUC看起来不错但LogLoss偏高说明模型虽然能分出好坏但估计的概率不够准确。出价模块很可能因此给出错误价格。4. 广告创意生成与内容审核AI不能只负责写文案和出图4.1 生成式广告素材的工作流CTR模型解决“给谁看”创意生成解决“看什么”。现在的AI广告系统会通过生成模型批量产出素材。一条典型流程是输入产品信息 - 生成文案 - 生成配图 - 合成多套素材 - 内容审核 - 入库 - 投放。假设要为一款智能手表生成广告文案可以用大模型服务接口来生成。下面是一个简化的模型调用示例实际项目需要替换成具体的模型服务地址、API Key 和超时配置。def generate_ad_copy(product_name, selling_points): prompt ( f请为{product_name}生成5条信息流广告文案 f每条不超过30个字重点突出{selling_points}。 要求语气自然不使用夸张违禁词。 ) response model.generate( promptprompt, max_tokens300, temperature0.8 ) return response[text].strip().splitlines()这里要注意temperature参数。temperature 控制生成随机性。批量生成素材时如果想要素材多样性可以调高到 0.8 左右如果做内容审核需要稳定输出就需要调低到 0.2 左右。生产环境通常会在不同任务里使用不同的 temperature。还有一个重要参数是max_tokens。它限制单次生成的最大长度。如果设得太小文案会被截断如果设得太大调用成本上升而且可能生成大量无效内容。4.2 内容审核是上线前不可省略的关卡生成素材并不意味着可以直接投放。合规要求、品牌安全、用户隐私都要在发布前检查。广告系统里常用的审核手段包括文本审核敏感词、违禁词、夸大宣传。图片审核违规元素、侵权 logo。视频审核镜头画面、字幕内容。一致性审核文案和落地页内容是否一致。很多团队会先让模型生成一批候选素材再用规则过滤和人工抽查。不要相信生成模型“一次生成就能上线”。创意生成必须和审核流程绑定。审核规则要尽量做成黑白名单加模型审核的组合。纯规则容易漏纯模型审核又可能误伤。比较好的做法是规则先快速拦截明显违规内容模型审核再做语义层面的判断最后再按比例人工抽审。4.3 偏见怎么产生怎么用人工评估发现偏见“人工智能偏见”在广告场景里表现得很具体。如果训练数据里某个职业、性别、年龄段的用户点击样本特别多模型可能会对另一类用户群体产生不公平的判断。例如历史广告更多推给中青年用户模型就会对老年用户失去投放能力。发现偏见不能只看AUC。需要做模拟评估把用户分成不同人群分别计算点击率预测分布、样本覆盖量、实际转化效果。如果某个人群覆盖量特别低就要检查是不是模型偏置了。之后可以通过增加样本、调整采样、加入公平性约束等方式改进。这里提一个自查方法在评估数据里构造一个“弱势人群”分组看模型对该分组的平均预测分数和历史平均CTR之间是否有明显差异。差异越大偏置越明显。5. 生产环境中的排查链路数据延迟、特征漂移、模型回滚5.1 模型指标下跌先查数据而不是调参广告模型上线后最常遇到的状况是今天线上CTR上涨但实际订单量下降或者AUC离线看起来很高线上效果很差。这时候第一反应不应该是调模型而是先查数据链路。我习惯按这个顺序排查先确认样本日志是否完整。曝光日志、点击日志、转化日志的时间窗口是否对齐。再确认特征是否缺值。当天特征工程代码变更后特征是否全部生成。然后对比离线评估和线上特征是否一致。不一致会导致离线AUC虚高。最后再考虑模型本身是否需要重新训练。广告数据链路的延迟影响非常大。比如点击日志延迟半小时才到那么按小时更新训练数据的任务就会学到半个窗口之前的旧样本。这个“旧”看起来不严重但在快速变化的广告场景里可能造成预测偏差。所以生产环境要有数据延迟监控。5.2 典型问题速查表常见问题如下表问题现象常见原因检查方式处理建议线上CTR高但订单少点击样本有偏或作弊流量检查点击时间分布、IP频率清洗异常流量并重新训练模型特征大量为0特征表延迟或字段没写入查日志、特征质量监控补数据并重算特征缓存离线AUC高但不稳定训练样本和线上分布不一致比较特征分布、样本时间窗口调整样本采样做线上A/B生成文案经常重复temperature太低或Prompt约束太强查看生成结果多样性调整temperature增加随机采样token费用超预算批量任务没有做缓存和批量控制查调用日志加缓存、合并请求、限制重复生成这张表只是一个起点。每个广告系统的数据链路、模型类型、生成任务都不一样排查时应该把“现象、原因、检查方式、处理建议”变成团队内部的 Wiki 文档持续补充。5.3 回滚方案与灰度发布广告系统不能回滚到“没有模型”的状态而是要有模型版本管理。每次新模型上线要先在影子模式跑一段时间记录新模型和旧模型对同一请求的预测结果差异再按小流量灰度放量。一旦发现预测分布异常立刻切换回旧模型。同时模型离线训练的服务要保留最近几天的模型文件。线上推理服务要能读取指定版本不要直接覆盖线上路径。这样出问题时可以快速切回。创意生成任务也一样。如果生成模型更新后产出素材风格变化过大内容审核团队要重新制定审核标准。所以生成模型也要走灰度不要一次性替换所有素材模板。6. 从学习到生产的最佳实践清单6.1 学习环境怎么搭最小案例如果你准备把AI广告作为学习方向建议先做三件事用公开数据集或自造模拟数据跑通一个CTR预估最小模型。学会看AUC、LogLoss、样本量、特征覆盖率。再做一个简单的广告文案生成Demo把生成、审核、入库流程走一遍。不要把学习目标定成“训练一个线上级模型”。广告系统的复杂度来自工程链路不是单模型。先用最小闭环理解数据流转再逐步加入特征工程、模型训练、推理服务。在这个过程里可以顺便练习AI编程工具来写数据预处理脚本但核心的数据判断能力必须自己掌握。6.2 生产环境要补齐的六块内容学习环境能跑通不代表生产环境能上线。生产环境至少还要补上配置外置化模型路径、特征表、阈值不能写死在代码里。
返回列表