← 论文沉淀 / 🗂 Semantic ID · ·RecSys 2026

The Text on the Creative: An Under-Exploited Ranking Modality for Short-Form Video Ads

Shubham Goel, Andrew Treadway, Yundi Jiang, Yiding Wen, Jianing Fu et al. (18 人)

Meta

把短视频广告画面上叠加的文字(促销文案、价格、CTA、品牌)当成一种被低估的排序模态,并论证它的高收益部分不需要新的 dense 塔:只要用 3 字节的 RQ-VAE 语义 ID 加 TF-IDF 词袋,挂到排序模型现有的稀疏 embedding 表上即可。链路为:CTR 打分器选帧加 SSIM 去重,再用专用 OCR(约为 VLM 吞吐的 80 倍)识别,之后用广告域句向量 TextRay(768 维)编码,最后由 3x256 RQ-VAE 量化成语义 ID。Instagram 广告排序模型离线 NE -0.055~0.06%(Reels 约 0.12%),线上 80% 流量 A/B 中 NE -0.06~0.08%。

Video Ad OCRSemantic ID As Ranking FeatureRQ-VAE Commitment Loss PitfallLLM-as-Judge Representation EvalInstagram Ads
📝 我的备注
加载中…

核心思路

短视频广告的画面上通常叠着大量文字:促销文案、价格、折扣、CTA、品牌名和商品名。这些信息对点击和转化很有预测力,但线上 CTR 排序基本没有用上,主要依赖用户侧信号、行为序列和 dense 视觉 embedding。Meta 这篇 RecSys 2026 产业论文把这类文字当作一种被低估、成本低、收益高的排序模态,并在 Instagram 广告排序模型上全量上线。

文中最值得关注的结论是:这个模态的高收益部分只需要三次类别查表,即一个 3 字节的 RQ-VAE 语义 ID(3 层,每层 256 个码)加一个稀疏 TF-IDF 视图,全部挂到排序模型现有的稀疏 embedding 表上,不需要新的 dense 塔。768 维 dense 句向量放在 bundle 之上只多出 ≤0.005% NE,这个差异在多次运行的波动范围之内,所以最终没有上线。

整体实现思路

链路分四段,每天离线跑一次,覆盖数千万新增和更新的广告:

  1. 智能抽帧:复用线上缩略图 CTR 打分模型给每帧打质量分,按分数排序后用 windowless SSIM 贪心去重,再按观看时长自适应设定采样率。
  2. Ads-OCR:专用的检测、裁剪、识别三段式 OCR,吞吐约为 VLM 的 80 倍,质量达到 VLM 的 93%。
  3. 文本到特征:TF-IDF(10 万词表)、TextRay 句向量(768 维)、RQ-VAE 语义 ID(3×8bit)三类特征。
  4. 接入排序:所有特征只加在 ad 侧塔,交叉交给已有的 FM、DCN 和 cross-attention 层。最终上线的是 TF-IDF 和 RQ-VAE 两类。

作者把这套做法总结为可迁移的配方:低成本的逐帧感知 → 领域微调的文本编码器 → 离散语义 ID 加词面视图,两者都作为类别特征。文中提到它也适用于 ASR 转写、场景标签、落地页文本、logo 等信号。

子模块实现(可复现细节)

Ads-OCR

  • 检测:ConvNeXt 主干加 CSP-PAN neck,输出旋转框,计算效率高于 Faster R-CNN。
  • 裁剪:每个文字区域 resize 成固定的 48×320 张量,按词并行组 batch。
  • 识别:覆盖 41 种语言。先用 CNN 判断文字体系,拉丁文进 TrOCR encoder-decoder,非拉丁文进旧版 LSTM(为了兼容 tokenizer)。每个词约 60 个 patch token,解码步数少,配合 KV cache、Flash Attention、FP16 和 torch.compile。
  • 每个 token 带置信度,下游特征只保留置信度 ≥0.6 的 token。
  • 与旧 OCR 相比:手写体 precision/recall 提升 15.4%/19.8%,印刷体提升 5.1%/3.4%,吞吐为 4.2 倍。
模型Word F1img/s (A100)
Legacy OCR75.423
PaddleOCR-VL-1.572.713
Llama4-8b84.51.2
Ads-OCR79.497

基准共 5,800 张图,81% 为英文,另含 10 种语言。VLM 一侧同样用了 vLLM、batching 和 bf16 等推理优化。

智能抽帧

  • 质量分:直接复用线上做缩略图选择的视频帧 CTR 模型,该模型用视频内 pairwise 目标在缩略图 CTR 数据上微调过,所以不增加推理成本。
  • 去重:帧按质量分排序后做 greedy 去重,用 AVX2 向量化的 windowless SSIM,阈值 0.5。因为候选已经排好序,复杂度是 O(n) 而不是 O(n²)。
  • 自适应采样:0–5s 每秒 2 帧,5–15s 每秒 1 帧,15–30s 每 2 秒 1 帧,30s 以后每 5 秒 1 帧。线上每个视频的帧数中位数为 6。

三类文本特征

  • TF-IDF:词表固定为 10 万,每天用最近 30 天的 OCR 输出重建,排序依据是频率-多样性分,会压低品牌词和单个素材专属的词。每个广告得到一个 10 万维稀疏向量,切成 top-25K、25–50K、50–75K、75–100K 四个桶分别输入,方便模型区分高频词和长尾词。
  • TextRay:先按水平和垂直邻近关系把 OCR 词聚成段落,每段编码后对所有段做 mean pool。TextRay 基于 EmbeddingGemma,约 300M 参数,训练数据是真实广告文案加指令 LLM 合成的广告风格文本,用有监督对比学习并挖掘近重复促销话术作为难负例,训练分布偏向 CTA、品牌和商品提及以及价格表达。MTEB 约 0.71,支持 Matryoshka 768/512/256/128 截断,量化前保持冻结。
  • RQ-VAE 语义 ID:输出 (c0,c1,c2)∈{0..255}³,作为 cluster_id0/1/2 三个类别特征查 embedding 表。

RQ-VAE 配置与损失

超参值
输入768 维 TextRay
层数 × 码本3 × 256
cluster 空间 d32
Encoder768→512→256→32,GELU
Decoder32→256→512→768
梯度STE
优化AdamW,lr 1e-3,batch 1024
数据500K(语料的确定性 3%),150 epoch

残差量化:r_l = f(x) − Σ_{k<l} e_{c_k},c_l = argmin_j ‖r_l − e_j‖²;码字求和得到 ẑ = Σ e_{c_l},再解码回 768 维。

容易踩的坑:损失应为重建项、VQ commitment 项 L_vq(对码本做 stop-gradient)和稀疏正则三者之和。在 STE 下,重建路径传给码本的梯度为零,码本只能通过 L_vq 更新。很多小规模复现只回传重建损失,结果码本停在初始化状态,而 dead-code 替换又让利用率维持在 60–80%,看起来一切正常。加回 L_vq 和稀疏项(λ=1.0,β=0.25)后,利用率从 79/67/66% 升到 96.5/100/100%,下游 kNN 一致性也明显改善。

配置K^Lλlrc0%c1%c2%
Recon-only256³—1e-379.067.066.0
Composite256³0.11e-393.4100100
Composite256³0.51e-394.1100100
Composite256³1.01e-396.5100100
Composite256³0.11e-20.00.00.0
小码本128³1.01e-3100100100
小码本64³1.01e-3100100100

每层 top 码的质量占比 ≤2.7%。lr 取 1e-2 时完全坍缩,说明 composite 损失对学习率比较敏感。量化每 1 万个广告不到 1 CPU 秒,主要耗时在加载 checkpoint。

实验设置与结果

表示消融(不重训排序模型的代理评估)

从某一天的推理表中确定性抽取 N=200,000 个广告,由外部前沿 LLM 打 vertical(10 类)、intent(6 类)、audience(3 类)标签,另外约 30 万次调用用于相似度打分。

表示kNN 平均 LLM 评分 (1–5)Recall@10 词面每广告字节
Tokens (TF-IDF)3.0431.000400
TextRay 768d3.5590.9861536
RQ-VAE 3×8b3.3590.9333

RQ-VAE 按匹配层级拆开:全码匹配 4.974,只匹配 L0+L1 为 2.772,只匹配 L0 为 2.427。

线性探针 AccVerticalIntentAudienceOOD IntentOOD Audience
Tokens0.7150.7140.8280.3850.632
TextRay0.8260.7580.8280.5410.712
RQ-VAE0.7570.6900.7890.3950.669

逐层重建(N=20,000):只用 c0 时 MSE 0.00082、cos 0.604;c0+c1 时 0.00071、0.665;三层时 0.00067、0.687,随层数单调改善。人工校准:5 名评审、195 对样本,LLM 与人均评分的 Spearman ρ=0.74,加权 κ=0.74,而人与人两两之间的 Spearman 只有 0.58。用人均评分替代 LLM 后,TextRay > RQ-VAE > Tokens 的排序不变。

抽帧召回(12 万视频,以每 1s 一帧全量 OCR 为 oracle)

每视频帧数均匀采样智能采样
30.580.78
60.710.92
120.840.97

离线 NE(相对 NE,越低越好;训练窗口约 1200 亿样本)

处理组NE 收益
Tokens 单独0.015–0.02%
RQ-VAE 单独0.045–0.05%
TextRay 单独(独立 dense 塔)0.05–0.053%
Tokens + RQ-VAE(上线)0.055–0.06%
bundle + TextRay额外 ≤0.005%(在噪声内)
只对缩略图做 OCR(失败实验)0.01–0.015%

约 300 亿样本之后,window-NE diff 稳定在 [−0.060%, −0.055%] 区间,bootstrap CI 为 ±0.005%。分 surface 看,Reels 类约 0.12%,Feed/Story 约 0.05–0.06%,没有 surface 出现负向。

线上 A/B

处理组占 80% 流量,持续数周,每天数百亿次变现曝光。CTR 头 Online NE 为 −0.06% 到 −0.08%,p<0.01(单侧 z 检验,按 ad-id 计算聚类稳健标准误)。该特征已在 Instagram 广告排序模型上全量。

思考与可参考价值

  • SID 不一定要走生成式:把 RQ-VAE 码当成判别式排序里的 3 个类别特征,能拿到 dense 向量约 85–90% 的收益(0.045–0.05 对比 0.05–0.053),存储只有它的 1/500,也不用新塔。对已经有 SID 产物、但生成式还没上线的团队来说,这是一条改造成本很低的落地路径,也能为 tokenizer 质量提供线上信号。
  • SID 会丢掉词面信息:品牌名、具体数字(“50% off”)、长尾词在量化后会被抹平,需要 TF-IDF 或关键词通道补上。电商场景里价格、券和品牌更集中,这一点更重要(推断)。
  • 码本健康度不能只看利用率:先检查 commitment 项是否真的回传到了码本,再用 kNN 语义一致性或 LLM-judge 做二次确认。
  • 覆盖优先于特征工程:只用单张缩略图时 NE 只有 0.01–0.015%,多帧后达到 0.055–0.06%。电商主图和视频之间大概率也有类似差距(推断)。
  • 局限:NE 只有 0.06% 量级,也没有报告 CTR 和收入;没有和 RQ-KMeans、FSQ、协同信号增强的 SID 做对比,128³ 和 64³ 码本也没有下游 NE;SID 前缀组合特征、embedding 表大小等排序侧细节都没写;与视觉塔融合的实验明确没做;TextRay、OCR 模型和数据都不公开。
  • 落地前需要确认:业务素材的文字密度、OCR 吞吐预算;如果已有多模态 dense 素材 embedding,OCR SID 还有多少增量;SID 是否需要 c0、c0c1、c0c1c2 的层级组合特征,以及码冲突如何处理。