TDM(Tree-based Deep Model,树模型)
从“直觉 → 结构 → 训练 → 推理 → 新 item 挂载”一步步来,用通俗语言 + 必要公式把 TDM(Tree-based Deep Model,树模型)彻底讲透。
一、结论
TDM 是一种把“海量 item 的多分类问题”,变成“在一棵树上逐层二分类/多分类”的算法,用树结构把计算复杂度从 O(N) 降到 O(log N)。
它解决的是一个非常现实的问题:
item 太多了,模型算不过来。
二、TDM 想解决什么问题?(动机)
假设你在做推荐系统:
- item 数量:
\( N = 10^6 \text{(100 万)} \) - 用户 u 来了,你要预测:
\( P(i \mid u) \quad \forall i \in {1,\dots,N} \)
❌ 传统做法(不可行)
Softmax:
\( P(i \mid u) = \frac{e^{f(u,i)}}{\sum_{j=1}^N e^{f(u,j)}} \)
计算复杂度:
\( O(N) \)
👉 直接爆炸。
三、TDM 的核心思想(一句话就懂)
别一次性在 100 万个 item 里选,先选“哪一大类”,再选“哪一小类”,最后选到具体 item。
这就是一棵树。
四、TDM 树长什么样?
1️⃣ 树结构
- 每个 叶子节点 = 一个 item
- 每个 非叶子节点 = 一组 item 的集合
例如:
Root
/ \
Node A Node B
/ \ / \
item1 item2 Node C item6
/ \
item3 item4
2️⃣ 树的数学表示
- 树深度:(L)
- 每个 item 对应一条路径:
\( \pi(i) = (n_0, n_1, \dots, n_L) \)
其中:
- (n_0):根
- (n_L):item 对应叶子
五、TDM 的概率分解(最关键的公式)
这是 TDM 的灵魂。
传统目标:
\( P(i \mid u) \)
TDM 把它拆成:
\(P(i \mid u) = \prod_{l=1}^{L} P(n_l \mid u, n_{l-1})\)
解释人话版:
-
用户 u
-
从根开始
-
每一层只判断:
“在当前节点下,我该往哪个子节点走?”
对比一下复杂度
- 原来:
\( O(N) \) - 现在:
\( O(L \cdot B) \approx O(\log N) \)
(B 是每层分支数)
六、每一层在干嘛?(模型结构)
在第 (l) 层:
-
输入:
- 用户向量$ ( \mathbf{u} )$
- 当前节点向量 \(( \mathbf{v}*{n*{l-1}} )\)
-
输出:
- 子节点的概率分布
一个典型打分函数:
\( s(u, n) = \mathbf{u}^\top \mathbf{v}_n \)
Softmax(在兄弟节点内):
\(P(n_l \mid u, n_{l-1})=\frac{e^{s(u,n_l)}}{\sum_{c \in \text{Children}(n_{l-1})} e^{s(u,c)}}\)
👉 注意:
softmax 只在“兄弟节点”里算,不是全局。
七、TDM 是怎么训练的?
1️⃣ 训练数据
每条样本是:
\( (u, i) \)
但我们把它变成:
\( (u, \pi(i)) \)
也就是:
- 用户
- item 对应的整条树路径
2️⃣ Loss 函数(路径级)
\(\mathcal{L}= \sum_{l=1}^{L} \log P(n_l \mid u, n_{l-1})\)
直觉解释:
- 每一层都要“走对”
- 走错一层,item 就找不到了
3️⃣ 为什么训练稳定?
- 每一层是 小 softmax
- 梯度干净
- 不会被百万 item 稀释
八、推理阶段(在线召回)
从根开始:
- 在 root 选 top-K 子节点
- 对每个子节点继续往下走
- Beam Search / 贪心
复杂度:
\( O(K \cdot L) \)
👉 非常适合在线服务。
九、新 item 怎么挂载?
“TDM 树里边新 item 挂载:找特征最相似的叶子节点路径,相当于给这个新 item 一个更合理的起点”
这句话 完全正确。
新 item 挂载的做法
1️⃣ 先算 item embedding
\( \mathbf{e}_{new} \)
2️⃣ 从 root 开始找最相似路径
在第 (l) 层:
$n_l^*=\arg\max_{c \in \text{Children}(n_{l-1})} \mathbf{e}_{new}^\top \mathbf{v}_c $
3️⃣ 一直走到叶子
这条路径:
\( \pi(i_{new}) \)
就是新 item 的初始位置。
为什么这一步非常重要?
-
冷启动 item:
- 如果随机挂
- 召回几乎为 0
-
语义挂载:
- 继承“相似 item 的流量路径”
- 召回立刻可用
十、TDM vs 你熟悉的那些东西(统一视角)
| 场景 | 本质 |
|---|---|
| NLP 扩词表 | 新 token 找相似 embedding 初始化 |
| CLIP 视觉词汇 | 新视觉概念落到语义空间 |
| Q-Former | 从已有 token 中挑 |
| TDM | 在树结构里给新 item 找“合理位置” |
一句话统一:
不要从随机点开始学习,要从“语义正确的位置”开始。
十一、一句话“面试 / 评审级总结”
你可以直接这么说:
TDM 将大规模 item 召回建模为树路径预测问题,通过概率分解把 O(N) 的分类复杂度降为 O(log N),并允许新 item 通过语义相似路径挂载,实现高效、可扩展的推荐召回。
如果这篇文章帮助到了你,你可以请作者喝一杯咖啡

浙公网安备 33010602011771号