大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列
  • 作者:韩信子@ShowMeAI,Joan@腾讯
  • 大厂解决计划系列教程:www.showmeai.tech/tutorials/5…
  • 本文地址:www.showmeai.tech/article-det…
  • 声明:版权所有,转载请联络渠道与作者并注明出处
  • 保藏 ShowMeAI 检查更多精彩内容

一图读懂全文

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

本篇内容运用到的数据集为 CTR预估办法完结数据集与代码,咱们能够经过 ShowMeAI 的百度网盘地址快速下载。数据集和代码的整理花费了很多心思,欢迎咱们 PR 和 Star!

大厂技能完结的数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『大厂』,或许点击 这里 获取本文 腾讯信息流引荐排序中的并联双塔CTR结构 『CTR预估办法完结数据集与代码

ShowMeAI官方GitHub:github.com/ShowMeAI-Hu…


一、双塔模型结构

1.1 模型结构介绍

双塔模型广泛运用于引荐、查找、广告等多个范畴的召回和排序阶段。双塔模型结构中,左边是User塔,右侧是Item塔,对应的,咱们也能够将特征拆分为两大类:

  • User相关特征 :用户基本信息、群体统计特点以及交互过的Item序列等;如果有上下文特征(Context feature)能够放入用户侧塔。
  • Item相关特征 :Item基本信息、特点信息等。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

开始版别的结构中,这两个塔中心都是经典的 DNN 模型(即全衔接结构),从特征 Embedding 经过若干层 MLP 隐层,两个塔别离输出 User Embedding 和 Item Embedding 编码。

在练习进程中,User Embedding 和 Item Embedding 做内积或许Cosine相似度核算,使得当时 User 和正例 Item 在 Embedding 空间更接近,和负例 Item 在 Embedding 空间距离拉远。损失函数则可用规范穿插熵损失(将问题当作一个分类问题),或许选用 BPR 或许 Hinge Loss(将问题当作一个表明学习问题)。

1.2 双塔模型优缺陷

双塔模型优点很明显

  • 结构清晰。别离对 User 和 Item 建模学习之后,再交互完结预估。
  • 练习完结之后,线上 inference 进程高效,性能优异。在线 serving 阶段,Item 向量是预先核算好的,可依据变化特征核算一次 User 向量,再核算内积或许 cosine 即可。

双塔模型也存在缺陷

  • 原始的双塔模型结构,特征受限,无法运用穿插特征。
  • 模型结构约束下,User 和 Item 是分开构建,只能经过终究的内积来交互,不利于 User-Item 交互的学习。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

1.3 双塔模型的优化

腾讯信息流团队(QQ 浏览器小说引荐场景) 基于以上约束对双塔模型结构进行优化,增强模型结构与作用上,取得了不错的收益,具体做法为:

  • 把双塔结构中的DNN简略结构,替换有效CTR模块(MLP、DCN、FM、FFM、CIN)的"并联"结构,充分利用不同结构的特征穿插优势,拓宽模型的"宽度"来缓解双塔内积的瓶颈。
  • 运用LR学习"并联"的多个双塔的权重,LR 权重终究融入到 User Embedding 中,使得终究的模型仍然坚持的内积方法。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

二、并联双塔模型结构

并联的双塔模型能够分总分为三层: 输入层、表明层和匹配层 。对应图中的3个层次,别离的处理和操作如下。

2.1 输入层(Input Layer)

腾讯QQ浏览器小说场景下有以下两大类特征:

  • User 特征 :用户 id、用户画像(年纪、性别、城市)、行为序列(点击、阅览、保藏)、外部行为(浏览器资讯、腾讯视频等)。
  • Item 特征 :小说内容特征(小说 id、分类、标签等)、统计类特征等。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

将 User 和 Item 特征都经过离散化后映射成 Feature Embedding,便利在表明层进行网络构建。

2.2 表明层(Representation Layer)

  • 对输入运用深度神经网络CTR模块(MLP、DCN、FM、CIN 等)进行学习,不同的模块能够以不同办法学习输入层 feature 的融合和交互。
  • 对不同模块学习的表征,构建并联结构用于匹配层核算。
  • 表明层的 User-User 和 Item-Item 的特征交互(塔内信息穿插)在本塔分支就能够做到,而 User-Item 的特征交互只能经过上层操作完结。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

2.3 匹配层(Matching Layer)

  • 将表明层得到的 User 和 Item 向量,依照不同并联模型别离进行 hadamard 积,拼接后再经过LR 进行成果融合核算终究score。
  • 在线 serving 阶段 LR 的每一维的权重可预先融合到 User Embedding 里,然后坚持在线打分仍然是内积操作。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

三、双塔的表明层结构 -MLP/DCN结构

双塔内一般都会运用 MLP 结构(多层全衔接),腾讯QQ浏览器团队还引进了 DCN 中的 Cross Network 结构用于显式的结构高阶特征交互,参阅的结构是 Google 论文改善版 DCN-Mix。

3.1 DCN 结构

DCN 的特点是引进 Cross Network这种穿插网络结构,提取穿插组合特征,避免传统机器学习中的人工手造特征的进程,网络结构简略复杂度可控,随深度添加取得多阶穿插特征。DCN模型具体结构如图:

  • 底层是 Embedding layer 并对 Embedding 做了stack。
  • 上层是并行的 Cross Network 和 Deep Network。
  • 头部是 Combination Layer 把 Cross Network 和 Deep Network 的成果 stack 得到 Output。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

3.2 优化的DCN-V2结构引进

Google在DCN的基础上提出改善版 DCN-Mix/DCN-V2,针对 Cross Network 进行了改善,咱们首要重视 Cross Network 的核算办法改变:

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

1)原始 Cross Network 核算办法

原始核算公式下,经过多层核算,能够显式地学习到高维的特征交互,存在的问题是被证明终究的 k 阶交互成果 xkx_{k} 等于 x0x_{0} 和一个标量的乘积(但不同的 x0x_{0} 这个标量不同,x0x_{0}xkx_{k} 并不是线性关系),这个核算办法下 Cross Network 的表达受限。

2)改善版 Cross Network 核算办法

Google改善版的 DCN-Mix 做的处理如下:

  • WW 由向量改变为矩阵,更大的参数量带来了更强的表达能力(实践W 矩阵也能够进行矩阵分化)。
  • 改变特征交互办法:不再运用外积,运用哈达玛积(Hadamard product)。

3)DCN-V2代码参阅

DCN-v2的代码完结和ctr运用案例能够参阅 Google官方完结 github.com/tensorflow/…

其中核心的改善后的 deep cross layer代码如下

class Cross(tf.keras.layers.Layer):
  """Cross Layer in Deep & Cross Network to learn explicit feature interactions.
A layer that creates explicit and bounded-degree feature interactions
efficiently. The `call` method accepts `inputs` as a tuple of size 2
tensors. The first input `x0` is the base layer that contains the original
features (usually the embedding layer); the second input `xi` is the output
of the previous `Cross` layer in the stack, i.e., the i-th `Cross`
layer. For the first `Cross` layer in the stack, x0 = xi.
The output is x_{i+1} = x0 .* (W * xi + bias + diag_scale * xi) + xi,
where .* designates elementwise multiplication, W could be a full-rank
matrix, or a low-rank matrix U*V to reduce the computational cost, and
diag_scale increases the diagonal of W to improve training stability (
especially for the low-rank case).
References:
    1. [R. Wang et al.](https://arxiv.org/pdf/2008.13535.pdf)
      See Eq. (1) for full-rank and Eq. (2) for low-rank version.
    2. [R. Wang et al.](https://arxiv.org/pdf/1708.05123.pdf)
Example:
    ```python
    # after embedding layer in a functional model:
    input = tf.keras.Input(shape=(None,), name='index', dtype=tf.int64)
    x0 = tf.keras.layers.Embedding(input_dim=32, output_dim=6)
    x1 = Cross()(x0, x0)
    x2 = Cross()(x0, x1)
    logits = tf.keras.layers.Dense(units=10)(x2)
    model = tf.keras.Model(input, logits)
    ```
Args:
    projection_dim: project dimension to reduce the computational cost.
      Default is `None` such that a full (`input_dim` by `input_dim`) matrix
      W is used. If enabled, a low-rank matrix W = U*V will be used, where U
      is of size `input_dim` by `projection_dim` and V is of size
      `projection_dim` by `input_dim`. `projection_dim` need to be smaller
      than `input_dim`/2 to improve the model efficiency. In practice, we've
      observed that `projection_dim` = d/4 consistently preserved the
      accuracy of a full-rank version.
    diag_scale: a non-negative float used to increase the diagonal of the
      kernel W by `diag_scale`, that is, W + diag_scale * I, where I is an
      identity matrix.
    use_bias: whether to add a bias term for this layer. If set to False,
      no bias term will be used.
    kernel_initializer: Initializer to use on the kernel matrix.
    bias_initializer: Initializer to use on the bias vector.
    kernel_regularizer: Regularizer to use on the kernel matrix.
    bias_regularizer: Regularizer to use on bias vector.
Input shape: A tuple of 2 (batch_size, `input_dim`) dimensional inputs.
Output shape: A single (batch_size, `input_dim`) dimensional output.
  """
  def init(
  self,
  projection_dim: Optional[int] = None,
  diag_scale: Optional[float] = 0.0,
  use_bias: bool = True,
  kernel_initializer: Union[
      Text, tf.keras.initializers.Initializer] = "truncated_normal",
  bias_initializer: Union[Text,
                          tf.keras.initializers.Initializer] = "zeros",
  kernel_regularizer: Union[Text, None,
                            tf.keras.regularizers.Regularizer] = None,
  bias_regularizer: Union[Text, None,
                          tf.keras.regularizers.Regularizer] = None,
  **kwargs):
super(Cross, self).__init__(**kwargs)
self._projection_dim = projection_dim
self._diag_scale = diag_scale
self._use_bias = use_bias
self._kernel_initializer = tf.keras.initializers.get(kernel_initializer)
self._bias_initializer = tf.keras.initializers.get(bias_initializer)
self._kernel_regularizer = tf.keras.regularizers.get(kernel_regularizer)
self._bias_regularizer = tf.keras.regularizers.get(bias_regularizer)
self._input_dim = None
self._supports_masking = True
if self._diag_scale < 0:
  raise ValueError(
      "`diag_scale` should be non-negative. Got `diag_scale` = {}".format(
          self._diag_scale))
  def build(self, input_shape):
last_dim = input_shape[-1]
if self._projection_dim is None:
  self._dense = tf.keras.layers.Dense(
      last_dim,
      kernel_initializer=self._kernel_initializer,
      bias_initializer=self._bias_initializer,
      kernel_regularizer=self._kernel_regularizer,
      bias_regularizer=self._bias_regularizer,
      use_bias=self._use_bias,
  )
else:
  self._dense_u = tf.keras.layers.Dense(
      self._projection_dim,
      kernel_initializer=self._kernel_initializer,
      kernel_regularizer=self._kernel_regularizer,
      use_bias=False,
  )
  self._dense_v = tf.keras.layers.Dense(
      last_dim,
      kernel_initializer=self._kernel_initializer,
      bias_initializer=self._bias_initializer,
      kernel_regularizer=self._kernel_regularizer,
      bias_regularizer=self._bias_regularizer,
      use_bias=self._use_bias,
  )
self.built = True
  def call(self, x0: tf.Tensor, x: Optionaltf.Tensor = None) -> tf.Tensor:
"""Computes the feature cross.
Args:
  x0: The input tensor
  x: Optional second input tensor. If provided, the layer will compute
    crosses between x0 and x; if not provided, the layer will compute
    crosses between x0 and itself.
Returns:
 Tensor of crosses.
"""
if not self.built:
  self.build(x0.shape)
if x is None:
  x = x0
if x0.shape[-1] != x.shape[-1]:
  raise ValueError(
      "`x0` and `x` dimension mismatch! Got `x0` dimension {}, and x "
      "dimension {}. This case is not supported yet.".format(
          x0.shape[-1], x.shape[-1]))
if self._projection_dim is None:
  prod_output = self._dense(x)
else:
  prod_output = self._dense_v(self._dense_u(x))
if self._diag_scale:
  prod_output = prod_output + self._diag_scale * x
return x0 * prod_output + x
  def get_config(self):
config = {
    "projection_dim":
        self._projection_dim,
    "diag_scale":
        self._diag_scale,
    "use_bias":
        self._use_bias,
    "kernel_initializer":
        tf.keras.initializers.serialize(self._kernel_initializer),
    "bias_initializer":
        tf.keras.initializers.serialize(self._bias_initializer),
    "kernel_regularizer":
        tf.keras.regularizers.serialize(self._kernel_regularizer),
    "bias_regularizer":
        tf.keras.regularizers.serialize(self._bias_regularizer),
}
base_config = super(Cross, self).get_config()
return dict(list(base_config.items()) + list(config.items()))

四、双塔的表明层结构 – FM/FFM/CIN结构

另一类在CTR预估中常用的结构是FM系列的结构,典型的模型包括FM、FFM、DeepFM、xDeepFM。他们特殊的建模办法也能发掘有效的信息,腾讯QQ浏览器团队的终究模型上,也运用了上述模型的子结构。

上文说到的MLP和DCN的特征交互穿插,无法显式指定某些特征交互,而FM系列模型中的FM / FFM / CIN结构能够对特征粒度的交互做显式操作,且从核算公式上看,它们都具有很好的内积方法,从能便利直接地完结双塔建模 User-Item 的特征粒度的交互。

4.1 FM结构引进

y=0+∑i=1nixi+∑i=1n−1∑j=i+1n<vi,vj>xixjy = \omega_{0}+\sum_{i=1}^{n} \omega_{i} x_{i}+\sum_{i=1}^{n-1} \sum_{j=i+1}^{n}<v_{i}, v_{j}>x_{i} x_{j}

FM是CTR预估中最常见的模型结构,它经过矩阵分化的办法构建特征的二阶交互。核算公式上表现为特征向量 vivivjvj 的两两内积操作再求和(在深度学习里能够看做特征Embedding的组对内积),经过内积运算分配率能够转化成求和再内积的方法。

y=∑i∑j⟨Vi,Vj⟩=⟨∑iVi,∑jVj⟩i∈userfea,j∈itemfea\begin{array}{c} y=\sum_{i} \sum_{j}\left\langle V_{i}, V_{j}\right\rangle=\left\langle\sum_{i} V_{i}, \sum_{j} V_{j}\right\rangle \\ i \in \text { user fea, } \quad j \in \text { item fea } \end{array}

在腾讯QQ浏览器团队小说引荐场景中,只考虑 User-Item 的交互(由于User内部或许Item内部的特征二阶交互上文说到的模型已捕捉到)。

如上公式所示,ii 是 User 侧的特征,jj 是 Item 侧的特征,经过内积核算分配率的转化。User-Item 的二阶特征交互也能够转化为 User、Item 特征向量先求和(神经网络中体现为sum pooling)再做内积,很便利能够转为双塔结构处理。

4.2 FFM结构引进

FFM 模型是 FM 的晋级版别,比较 FM,它多了 field 的概念。FFM 把相同性质的特征归于同一个field,构建的隐向量不只与特征相关,也与field相关,终究的特征交互能够在不同的隐向量空间,从而提高区分能力加强作用,FFM 也能够经过一些办法转化成双塔内积的结构。

y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n⟨vifj,vjfi⟩xixjy(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i f_{j}}, \mathbf{v}_{j f_{i}}\right\rangle x_{i} x_{j}

User 有 2 个特征 field、Item 有 3 个特征 field,图中恣意2个特征交互都有独立的 Embedding 向量。依据 FFM 公式,核算 User-Item 的二阶交互,需要将所有的内积核算出来并求和。一个转化的例子如下:

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

咱们将User、Item 的特征 Embedding 做从头排序,再进行拼接,能够把 FFM 也转化成双塔内积方法。FFM 内的 User-User 和 Item-Item 都在塔内,所以咱们可预先算好放入一阶项里。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

腾讯QQ浏览器团队实践运用中发现:运用 FFM 的双塔,练习数据上 AUC 提高明显,但参数量的添加带来了严峻的过拟合,且上述结构调整后双塔的宽度极宽(可能达到万级别),对性能功率影响较大,进一步测验的优化办法如下:

  • 人工筛选参加 FFM 练习特征交互的 User 和 Item 特征 field,控制双塔宽度(1000左右)。
  • 调整 FFM 的 Embedding 参数初始化办法(接近 0)及学习率(降低)。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

终究作用不是很理想,因此团队实践线上并未运用 FFM。

4.3 CIN结构引进

前面说到的FM和FFM能完结二阶特征交互,而xDeepFM模型中提出的 CIN 结构能够完结更高阶的特征交互(比如 User-User-Item、User-User-Item-Item、User-Item-Item 等3阶),腾讯QQ浏览器团队测验了两种用法把CIN运用在双塔结构中:

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

1)CIN(User) * CIN(Item)

双塔每个塔内生成 User、Item 的本身多阶 CIN 成果,再别离 sum pooling 生成 User/Item 向量,然后User 与 Item 向量内积。

依据分配率,咱们对 sum pooling 再内积的公式进行拆解,会发现这个核算办法内部其完成已完结了 User-Item 的多阶交互:

(U1+U2+U3)∗(I1+I2+I3)\left(U^{1}+U^{2}+U^{3}\right) * \left (I^{1}+I^{2}+I^{3}\right)
U1I1+U1I2+U1I3+U2I1+U2I2+U2I3+U3I1+U3I2+U3I3U^{1} I^{1}+U^{1} I^{2}+U^{1} I^{3}+U^{2} I^{1}+U^{2} I^{2}+U^{2} I^{3}+U^{3} I^{1}+U^{3} I^{2}+U^{3} I^{3}

这个用法完结进程也比较简略,针对双塔结构,在两边塔内做 CIN 生成各阶成果,再对成果做 sumpooling,终究相似 FM 原理经过内积完结 User-Item 的各阶交互。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

这个处理办法有一定的缺陷:生成的 User-Item 二阶及以上的特征交互,有着和 FM 相似的局限性(例U1 是由 User 侧供给的多个特征sumpooling所得成果,U1 与 Item 侧的成果内积核算,受限于sum pooling的核算,每个 User 特征在这里重要度就变成相同的了)。

2)CIN( CIN(User) , CIN(Item) )

第2种处理办法是:双塔每侧塔内生成 User、Item 的多阶 CIN 成果后,对 User、Item 的 CIN 成果再次两两运用 CIN 显式交互(而非 sum pooling 后核算内积),并转成双塔内积,如下图所示:

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

下图为 CIN 核算的公式表明,多个卷积成果做 sum pooling 后方法坚持不变(两两 hadamard 积加权求和)。

CIN 的方法和 FFM 相似,相同能够经过 『从头排列+拼接』 操作转化成双塔内积方法,生成的双塔宽度也非常大(万级别)。但与 FFM 不同的是:CIN 的所有特征交互,底层运用的 feature Embedding 是同享的,而 FFM 对每个二阶交互都有独立的 Embedding。

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

因此腾讯QQ浏览器团队的实践测验中基本没有出现过拟合问题,试验作用上第②种办法第①种用法略好。

五、腾讯事务作用

以下为腾讯QQ浏览器小说引荐事务上的办法试验作用(比照各种单CTR模型和并联双塔结构):

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

5.1 团队给出的一些分析如下

① CIN2 在单结构的双塔模型中的作用是最好的,其次是 DCN 和 CIN1的双塔结构。

② 并联的双塔结构比较于单一的双塔结构在作用上也有明显提高。

③ 并联计划二运用了 CIN2 的结构,双塔宽度达到了 2万+,对线上 serving 的性能有一定的应战,综合考虑作用和部署功率能够挑选并联双塔计划一。

5.2 团队给出的一些练习细节和经历

① 考虑到FM/FFM/CIN 等结构的核算复杂度,都只在精选特征子集上面练习,选取维度更高的 category 特征为主,比如用户id、行为历史id、小说id、标签id 等,还有少数统计特征,User 侧、Item 侧大概各选了不到 20 个特征field。

② 并联的各双塔结构,各模型不同享底层 feature Embedding,别离练习自己的 Embedding。

③ feature Embedding 维度挑选,MLP/DCN 对 category 特征维度为 1616,非 category特征维度是 3232

④ FM/FFM/CIN 的 feature Embedding 维度一致为 3232

六、腾讯团队试验作用

在小说引荐场景的粗排阶段上线了 A/B Test 试验,试验组的点击率、阅览转化率模型运用了『并联双塔计划一』,对照组为 『MLP 双塔模型』,如下图所示,有明显的事务目标提高:

  • 点击转化率 +6.8752%+6.8752\%
  • 阅览转化率 +6.2250%+6.2250\%
  • 加书转化率 +6.5775%+6.5775\%
  • 阅览总时长 +3.3796%+3.3796\%

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列

参阅文献

  • [1] Huang, Po-Sen, et al. “Learning deep structured semantic models for web search using clickthrough data.” Proceedings of the 22nd ACM international conference on Information & Knowledge Management. 2013.
  • [2] S. Rendle, “Factorization machines,” in Proceedings of IEEE International Conference on Data Mining (ICDM), pp. 995–1000, 2010.
  • [3] Yuchin Juan, et al. “Field-aware Factorization Machines for CTR Prediction.” Proceedings of the 10th ACM Conference on Recommender SystemsSeptember 2016 Pages 43–
  • [4] Jianxun Lian, et al. “xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems” Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data MiningJuly 2018 Pages 1754–1763
  • [5] Ruoxi Wang, et al. “Deep & Cross Network for Ad Click Predictions” Proceedings of the ADKDD’17August 2017 Article No.: 12Pages 1–
  • [6] Wang, Ruoxi, et al. “DCN V2: Improved Deep & Cross Network and Practical Lessons for Webscale Learning to Rank Systems” In Proceedings of the Web Conference 2021 (WWW ’21); doi:10.1145/3442381.3450078

ShowMeAI 大厂技能完结计划引荐

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列
  • 大厂解决计划系列 | 数据集&代码集(继续更新中):www.showmeai.tech/tutorials/5…
  • ShowMeAI官方GitHub(完结代码):github.com/ShowMeAI-Hu…
  • 『引荐与广告』大厂解决计划
    • 大厂技能完结 | 多目标优化及运用(含代码完结)@引荐与广告核算系列
    • 大厂技能完结 | 爱奇艺短视频引荐事务中的多目标优化实践@引荐与核算广告系列
    • 大厂技能完结 | 腾讯信息流引荐排序中的并联双塔CTR结构@引荐与核算广告系列
  • 『核算机视觉 CV』大厂解决计划
    • 大厂技能完结 | 图像检索及其在淘宝的运用@核算机视觉系列
    • 大厂技能完结 | 图像检索及其在高德的运用@核算机视觉系列
  • 『自然语言处理 NLP』大厂解决计划
    • 大厂技能完结 | 详解知识图谱的构建全流程@自然语言处理系列
    • 大厂技能完结 | 爱奇艺文娱知识图谱的构建与运用实践@自然语言处理系列
  • 『金融科技』大厂解决计划
  • 『生物医疗』大厂解决计划
  • 『智能制作』大厂解决计划
  • 『其他AI笔直范畴』大厂解决计划

ShowMeAI系列教程精选引荐

  • 图解Python编程:从入门到通晓系列教程
  • 图解数据分析:从入门到通晓系列教程
  • 图解AI数学基础:从入门到通晓系列教程
  • 图解机器学习算法:从入门到通晓系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程:吴恩达专项课程 全套笔记解读
  • 自然语言处理教程:斯坦福CS224n课程 课程带学与全套笔记解读
  • 深度学习与核算机视觉教程:斯坦福CS231n 全套笔记解读

大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构@推荐与计算广告系列