大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列
💡 作者:韓信子@ShowMeAI,Joan@騰訊
📘 大廠解決方案系列教程:https://www.showmeai.tech/tutorials/50
📘 本文地址:https://www.showmeai.tech/article-detail/64
📢 聲明:版權(quán)所有,轉(zhuǎn)載請聯(lián)系平臺與作者并注明出處
📢 收藏 ShowMeAI 查看更多精彩內(nèi)容
一圖讀懂全文
本篇內(nèi)容使用到的數(shù)據(jù)集為 🏆CTR預(yù)估方法實現(xiàn)數(shù)據(jù)集與代碼,大家可以通過 ShowMeAI 的百度網(wǎng)盤地址快速下載。數(shù)據(jù)集和代碼的整理花費了很多心思,歡迎大家 PR 和 Star!
🏆 大廠技術(shù)實現(xiàn)的數(shù)據(jù)集下載(百度網(wǎng)盤):公眾號『ShowMeAI研究中心』回復(fù)『大廠』,或者點擊 這里 獲取本文 騰訊信息流推薦排序中的并聯(lián)雙塔CTR結(jié)構(gòu) 『CTR預(yù)估方法實現(xiàn)數(shù)據(jù)集與代碼』
? ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub/multi-task-learning
💡 一、雙塔模型結(jié)構(gòu)
1.1 模型結(jié)構(gòu)介紹
雙塔模型廣泛應(yīng)用于推薦、搜索、廣告等多個領(lǐng)域的召回和排序階段。雙塔模型結(jié)構(gòu)中,左側(cè)是User塔,右側(cè)是Item塔,對應(yīng)的,我們也可以將特征拆分為兩大類:
- User相關(guān)特征 :用戶基本信息、群體統(tǒng)計屬性以及交互過的Item序列等;如果有上下文特征(Context feature)可以放入用戶側(cè)塔。
- Item相關(guān)特征 :Item基本信息、屬性信息等。
最初版本的結(jié)構(gòu)中,這兩個塔中間都是經(jīng)典的 DNN 模型(即全連接結(jié)構(gòu)),從特征 Embedding 經(jīng)過若干層 MLP 隱層,兩個塔分別輸出 User Embedding 和 Item Embedding 編碼。
在訓(xùn)練過程中,User Embedding 和 Item Embedding 做內(nèi)積或者Cosine相似度計算,使得當(dāng)前 User 和正例 Item 在 Embedding 空間更接近,和負(fù)例 Item 在 Embedding 空間距離拉遠(yuǎn)。損失函數(shù)則可用標(biāo)準(zhǔn)交叉熵?fù)p失(將問題當(dāng)作一個分類問題),或者采用 BPR 或者 Hinge Loss(將問題當(dāng)作一個表示學(xué)習(xí)問題)。
1.2 雙塔模型優(yōu)缺點
雙塔模型優(yōu)點很明顯:
- 結(jié)構(gòu)清晰。分別對 User 和 Item 建模學(xué)習(xí)之后,再交互完成預(yù)估。
- 訓(xùn)練完成之后,線上 inference 過程高效,性能優(yōu)秀。在線 serving 階段,Item 向量是預(yù)先計算好的,可根據(jù)變化特征計算一次 User 向量,再計算內(nèi)積或者 cosine 即可。
**雙塔模型也存在缺點 **:
- 原始的雙塔模型結(jié)構(gòu),特征受限,無法使用交叉特征。
- 模型結(jié)構(gòu)限制下,User 和 Item 是分開構(gòu)建,只能通過最后的內(nèi)積來交互,不利于 User-Item 交互的學(xué)習(xí)。
1.3 雙塔模型的優(yōu)化
騰訊信息流團(tuán)隊(QQ 瀏覽器小說推薦場景) 基于以上限制對雙塔模型結(jié)構(gòu)進(jìn)行優(yōu)化,增強(qiáng)模型結(jié)構(gòu)與效果上,取得了不錯的收益,具體做法為:
- 把雙塔結(jié)構(gòu)中的DNN簡單結(jié)構(gòu),替換有效CTR模塊(MLP、DCN、FM、FFM、CIN)的"并聯(lián)"結(jié)構(gòu),充分利用不同結(jié)構(gòu)的特征交叉優(yōu)勢,拓寬模型的"寬度"來緩解雙塔內(nèi)積的瓶頸。
- 使用LR學(xué)習(xí)"并聯(lián)"的多個雙塔的權(quán)重,LR 權(quán)重最終融入到 User Embedding 中,使得最終的模型仍然保持的內(nèi)積形式。
💡 二、并聯(lián)雙塔模型結(jié)構(gòu)
并聯(lián)的雙塔模型可以分總分為三層: 輸入層、表示層和匹配層 。對應(yīng)圖中的3個層次,分別的處理和操作如下。
2.1 輸入層(Input Layer)
騰訊QQ瀏覽器小說場景下有以下兩大類特征:
- User 特征 :用戶 id、用戶畫像(年齡、性別、城市)、行為序列(點擊、閱讀、收藏)、外部行為(瀏覽器資訊、騰訊視頻等)。
- Item 特征 :小說內(nèi)容特征(小說 id、分類、標(biāo)簽等)、統(tǒng)計類特征等。
將 User 和 Item 特征都經(jīng)過離散化后映射成 Feature Embedding,方便在表示層進(jìn)行網(wǎng)絡(luò)構(gòu)建。
2.2 表示層(Representation Layer)
- 對輸入應(yīng)用深度神經(jīng)網(wǎng)絡(luò)CTR模塊(MLP、DCN、FM、CIN 等)進(jìn)行學(xué)習(xí),不同的模塊可以以不同方式學(xué)習(xí)輸入層 feature 的融合和交互。
- 對不同模塊學(xué)習(xí)的表征,構(gòu)建并聯(lián)結(jié)構(gòu)用于匹配層計算。
- 表示層的 User-User 和 Item-Item 的特征交互(塔內(nèi)信息交叉)在本塔分支就可以做到,而 User-Item 的特征交互只能通過上層操作實現(xiàn)。
2.3 匹配層(Matching Layer)
- 將表示層得到的 User 和 Item 向量,按照不同并聯(lián)模型分別進(jìn)行 hadamard 積,拼接后再經(jīng)過LR 進(jìn)行結(jié)果融合計算最后score。
- 在線 serving 階段 LR 的每一維的權(quán)重可預(yù)先融合到 User Embedding 里,從而保持在線打分仍然是內(nèi)積操作。
💡 三、雙塔的表示層結(jié)構(gòu) -MLP/DCN結(jié)構(gòu)
雙塔內(nèi)一般都會使用 MLP 結(jié)構(gòu)(多層全連接),騰訊QQ瀏覽器團(tuán)隊還引入了 DCN 中的 Cross Network 結(jié)構(gòu)用于顯式的構(gòu)造高階特征交互,參考的結(jié)構(gòu)是 Google 論文改進(jìn)版 DCN-Mix。
3.1 DCN 結(jié)構(gòu)
DCN 的特點是引入 Cross Network這種交叉網(wǎng)絡(luò)結(jié)構(gòu),提取交叉組合特征,避免傳統(tǒng)機(jī)器學(xué)習(xí)中的人工手造特征的過程,網(wǎng)絡(luò)結(jié)構(gòu)簡單復(fù)雜度可控,隨深度增加獲得多階交叉特征。DCN模型具體結(jié)構(gòu)如圖:
- 底層是 Embedding layer 并對 Embedding 做了stack。
- 上層是并行的 Cross Network 和 Deep Network。
- 頭部是 Combination Layer 把 Cross Network 和 Deep Network 的結(jié)果 stack 得到 Output。
3.2 優(yōu)化的DCN-V2結(jié)構(gòu)引入
Google在DCN的基礎(chǔ)上提出改進(jìn)版 DCN-Mix/DCN-V2,針對 Cross Network 進(jìn)行了改進(jìn),我們主要關(guān)注 Cross Network 的計算方式變更:
1)原始 Cross Network 計算方式
原始計算公式下,經(jīng)過多層計算,可以顯式地學(xué)習(xí)到高維的特征交互,存在的問題是被證明最終的 k 階交互結(jié)果 xkx_{k}xk? 等于 x0x_{0}x0? 和一個標(biāo)量的乘積(但不同的 x0x_{0}x0? 這個標(biāo)量不同,x0x_{0}x0? 和 xkx_{k}xk? 并不是線性關(guān)系),這個計算方式下 Cross Network 的表達(dá)受限。
2)改進(jìn)版 Cross Network 計算方式
Google改進(jìn)版的 DCN-Mix 做的處理如下:
- WWW 由向量變更為矩陣,更大的參數(shù)量帶來了更強(qiáng)的表達(dá)能力(實際W 矩陣也可以進(jìn)行矩陣分解)。
- 變更特征交互方式:不再使用外積,應(yīng)用哈達(dá)瑪積(Hadamard product)。
3)DCN-V2代碼參考
DCN-v2的代碼實現(xiàn)和ctr應(yīng)用案例可以參考 Google官方實現(xiàn) https://github.com/tensorflow/models/tree/master/official/recommendation/ranking
其中核心的改進(jìn)后的 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`) matrixW is used. If enabled, a low-rank matrix W = U*V will be used, where Uis of size `input_dim` by `projection_dim` and V is of size`projection_dim` by `input_dim`. `projection_dim` need to be smallerthan `input_dim`/2 to improve the model efficiency. In practice, we'veobserved that `projection_dim` = d/4 consistently preserved theaccuracy of a full-rank version.diag_scale: a non-negative float used to increase the diagonal of thekernel W by `diag_scale`, that is, W + diag_scale * I, where I is anidentity 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 = Truedef call(self, x0: tf.Tensor, x: Optionaltf.Tensor = None) -> tf.Tensor: """Computes the feature cross. Args:x0: The input tensorx: Optional second input tensor. If provided, the layer will computecrosses between x0 and x; if not provided, the layer will computecrosses 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 + xdef 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()))💡 四、雙塔的表示層結(jié)構(gòu) - FM/FFM/CIN結(jié)構(gòu)
另一類在CTR預(yù)估中常用的結(jié)構(gòu)是FM系列的結(jié)構(gòu),典型的模型包括FM、FFM、DeepFM、xDeepFM。他們特殊的建模方式也能挖掘有效的信息,騰訊QQ瀏覽器團(tuán)隊的最終模型上,也使用了上述模型的子結(jié)構(gòu)。
上文提到的MLP和DCN的特征交互交叉,無法顯式指定某些特征交互,而FM系列模型中的FM / FFM / CIN結(jié)構(gòu)可以對特征粒度的交互做顯式操作,且從計算公式上看,它們都具備很好的內(nèi)積形式,從能方便直接地實現(xiàn)雙塔建模 User-Item 的特征粒度的交互。
4.1 FM結(jié)構(gòu)引入
y=ω0+∑i=1nωixi+∑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} y=ω0?+i=1∑n?ωi?xi?+i=1∑n?1?j=i+1∑n?<vi?,vj?>xi?xj?
FM是CTR預(yù)估中最常見的模型結(jié)構(gòu),它通過矩陣分解的方法構(gòu)建特征的二階交互。計算公式上表現(xiàn)為特征向量 vivivi 和 vjvjvj 的兩兩內(nèi)積操作再求和(在深度學(xué)習(xí)里可以看做特征Embedding的組對內(nèi)積),通過內(nèi)積運算分配率可以轉(zhuǎn)換成求和再內(nèi)積的形式。
y=∑i∑j?Vi,Vj?=?∑iVi,∑jVj?i∈user?fea,?j∈item?fea?\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} y=∑i?∑j??Vi?,Vj??=?∑i?Vi?,∑j?Vj??i∈?user?fea,?j∈?item?fea??
在騰訊QQ瀏覽器團(tuán)隊小說推薦場景中,只考慮 User-Item 的交互(因為User內(nèi)部或者Item內(nèi)部的特征二階交互上文提到的模型已捕捉到)。
如上公式所示,iii 是 User 側(cè)的特征,jjj 是 Item 側(cè)的特征,通過內(nèi)積計算分配率的轉(zhuǎn)換。User-Item 的二階特征交互也可以轉(zhuǎn)化為 User、Item 特征向量先求和(神經(jīng)網(wǎng)絡(luò)中體現(xiàn)為sum pooling)再做內(nèi)積,很方便可以轉(zhuǎn)為雙塔結(jié)構(gòu)處理。
?
4.2 FFM結(jié)構(gòu)引入
FFM 模型是 FM 的升級版本,相比 FM,它多了 field 的概念。FFM 把相同性質(zhì)的特征歸于同一個field,構(gòu)建的隱向量不僅與特征相關(guān),也與field相關(guān),最終的特征交互可以在不同的隱向量空間,進(jìn)而提升區(qū)分能力加強(qiáng)效果,FFM 也可以通過一些方法轉(zhuǎn)換成雙塔內(nèi)積的結(jié)構(gòu)。
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} y(x)=w0?+i=1∑n?wi?xi?+i=1∑n?j=i+1∑n??vifj??,vjfi???xi?xj?
?
User 有 2 個特征 field、Item 有 3 個特征 field,圖中任意2個特征交互都有獨立的 Embedding 向量。根據(jù) FFM 公式,計算 User-Item 的二階交互,需要將所有的內(nèi)積計算出來并求和。一個轉(zhuǎn)換的例子如下:
我們將User、Item 的特征 Embedding 做重新排序,再進(jìn)行拼接,可以把 FFM 也轉(zhuǎn)換成雙塔內(nèi)積形式。FFM 內(nèi)的 User-User 和 Item-Item 都在塔內(nèi),所以我們可預(yù)先算好放入一階項里。
騰訊QQ瀏覽器團(tuán)隊實踐應(yīng)用中發(fā)現(xiàn):應(yīng)用 FFM 的雙塔,訓(xùn)練數(shù)據(jù)上 AUC 提升明顯,但參數(shù)量的增加帶來了嚴(yán)重的過擬合,且上述結(jié)構(gòu)調(diào)整后雙塔的寬度極寬(可能達(dá)到萬級別),對性能效率影響較大,進(jìn)一步嘗試的優(yōu)化方式如下:
- 人工篩選參與 FFM 訓(xùn)練特征交互的 User 和 Item 特征 field,控制雙塔寬度(1000左右)。
- 調(diào)整 FFM 的 Embedding 參數(shù)初始化方式(接近 0)及學(xué)習(xí)率(降低)。
最終效果不是很理想,因此團(tuán)隊實際線上并未使用 FFM。
4.3 CIN結(jié)構(gòu)引入
前面提到的FM和FFM能完成二階特征交互,而xDeepFM模型中提出的 CIN 結(jié)構(gòu)可以實現(xiàn)更高階的特征交互(比如 User-User-Item、User-User-Item-Item、User-Item-Item 等3階),騰訊QQ瀏覽器團(tuán)隊嘗試了兩種用法把CIN應(yīng)用在雙塔結(jié)構(gòu)中:
1)CIN(User) * CIN(Item)
雙塔每個塔內(nèi)生成 User、Item 的自身多階 CIN 結(jié)果,再分別 sum pooling 生成 User/Item 向量,然后User 與 Item 向量內(nèi)積。
根據(jù)分配率,我們對 sum pooling 再內(nèi)積的公式進(jìn)行拆解,會發(fā)現(xiàn)這個計算方式內(nèi)部其實已經(jīng)實現(xiàn)了 User-Item 的多階交互:
(U1+U2+U3)?(I1+I2+I3)\left(U^{1}+U^{2}+U^{3}\right) * \left (I^{1}+I^{2}+I^{3}\right) (U1+U2+U3)?(I1+I2+I3)
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} U1I1+U1I2+U1I3+U2I1+U2I2+U2I3+U3I1+U3I2+U3I3
這個用法實現(xiàn)過程也比較簡單,針對雙塔結(jié)構(gòu),在兩側(cè)塔內(nèi)做 CIN 生成各階結(jié)果,再對結(jié)果做 sumpooling,最后類似 FM 原理通過內(nèi)積實現(xiàn) User-Item 的各階交互。
這個處理方式有一定的缺點:生成的 User-Item 二階及以上的特征交互,有著和 FM 類似的局限性(例U1 是由 User 側(cè)提供的多個特征sumpooling所得結(jié)果,U1 與 Item 側(cè)的結(jié)果內(nèi)積計算,受限于sum pooling的計算,每個 User 特征在這里重要度就變成一樣的了)。
2)CIN( CIN(User) , CIN(Item) )
第2種處理方式是:雙塔每側(cè)塔內(nèi)生成 User、Item 的多階 CIN 結(jié)果后,對 User、Item 的 CIN 結(jié)果再次兩兩使用 CIN 顯式交互(而非 sum pooling 后計算內(nèi)積),并轉(zhuǎn)成雙塔內(nèi)積,如下圖所示:
下圖為 CIN 計算的公式表示,多個卷積結(jié)果做 sum pooling 后形式保持不變(兩兩 hadamard 積加權(quán)求和)。
CIN 的形式和 FFM 類似,同樣可以通過 『重新排列+拼接』 操作轉(zhuǎn)換成雙塔內(nèi)積形式,生成的雙塔寬度也非常大(萬級別)。但與 FFM 不同的是:CIN 的所有特征交互,底層使用的 feature Embedding 是共享的,而 FFM 對每個二階交互都有獨立的 Embedding。
因此騰訊QQ瀏覽器團(tuán)隊的實踐嘗試中基本沒有出現(xiàn)過擬合問題,實驗效果上第②種方式第①種用法略好。
💡 五、騰訊業(yè)務(wù)效果
以下為騰訊QQ瀏覽器小說推薦業(yè)務(wù)上的方法實驗效果(對比各種單CTR模型和并聯(lián)雙塔結(jié)構(gòu)):
5.1 團(tuán)隊給出的一些分析如下
① CIN2 在單結(jié)構(gòu)的雙塔模型中的效果是最好的,其次是 DCN 和 CIN1的雙塔結(jié)構(gòu)。
② 并聯(lián)的雙塔結(jié)構(gòu)相比于單一的雙塔結(jié)構(gòu)在效果上也有明顯提升。
③ 并聯(lián)方案二使用了 CIN2 的結(jié)構(gòu),雙塔寬度達(dá)到了 2萬+,對線上 serving 的性能有一定的挑戰(zhàn),綜合考慮效果和部署效率可以選擇并聯(lián)雙塔方案一。
5.2 團(tuán)隊給出的一些訓(xùn)練細(xì)節(jié)和經(jīng)驗
① 考慮到FM/FFM/CIN 等結(jié)構(gòu)的計算復(fù)雜度,都只在精選特征子集上面訓(xùn)練,選取維度更高的 category 特征為主,比如用戶id、行為歷史id、小說id、標(biāo)簽id 等,還有少量統(tǒng)計特征,User 側(cè)、Item 側(cè)大概各選了不到 20 個特征field。
② 并聯(lián)的各雙塔結(jié)構(gòu),各模型不共享底層 feature Embedding,分別訓(xùn)練自己的 Embedding。
③ feature Embedding 維度選擇,MLP/DCN 對 category 特征維度為 161616,非 category特征維度是 323232。
④ FM/FFM/CIN 的 feature Embedding 維度統(tǒng)一為 323232。
💡 六、騰訊團(tuán)隊實驗效果
在小說推薦場景的粗排階段上線了 A/B Test 實驗,實驗組的點擊率、閱讀轉(zhuǎn)化率模型使用了『并聯(lián)雙塔方案一』,對照組為 『MLP 雙塔模型』,如下圖所示,有明顯的業(yè)務(wù)指標(biāo)提升:
- 點擊轉(zhuǎn)化率 +6.8752%+6.8752\%+6.8752%
- 閱讀轉(zhuǎn)化率 +6.2250%+6.2250\%+6.2250%
- 加書轉(zhuǎn)化率 +6.5775%+6.5775\%+6.5775%
- 閱讀總時長 +3.3796%+3.3796\%+3.3796%
參考文獻(xiàn)
- [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 大廠技術(shù)實現(xiàn)方案推薦
- 大廠解決方案系列 | 數(shù)據(jù)集&代碼集(持續(xù)更新中):https://www.showmeai.tech/tutorials/50
- ShowMeAI官方GitHub(實現(xiàn)代碼):https://github.com/ShowMeAI-Hub/
- 『推薦與廣告』大廠解決方案
- 大廠技術(shù)實現(xiàn) | 多目標(biāo)優(yōu)化及應(yīng)用(含代碼實現(xiàn))@推薦與廣告計算系列
- 大廠技術(shù)實現(xiàn) | 愛奇藝短視頻推薦業(yè)務(wù)中的多目標(biāo)優(yōu)化實踐@推薦與計算廣告系列
- 大廠技術(shù)實現(xiàn) | 騰訊信息流推薦排序中的并聯(lián)雙塔CTR結(jié)構(gòu)@推薦與計算廣告系列
- 『計算機(jī)視覺 CV』大廠解決方案
- 大廠技術(shù)實現(xiàn) | 圖像檢索及其在淘寶的應(yīng)用@計算機(jī)視覺系列
- 大廠技術(shù)實現(xiàn) | 圖像檢索及其在高德的應(yīng)用@計算機(jī)視覺系列
- 『自然語言處理 NLP』大廠解決方案
- 大廠技術(shù)實現(xiàn) | 詳解知識圖譜的構(gòu)建全流程@自然語言處理系列
- 大廠技術(shù)實現(xiàn) | 愛奇藝文娛知識圖譜的構(gòu)建與應(yīng)用實踐@自然語言處理系列
- 『金融科技』大廠解決方案
- 『生物醫(yī)療』大廠解決方案
- 『智能制造』大廠解決方案
- 『其他AI垂直領(lǐng)域』大廠解決方案
ShowMeAI系列教程精選推薦
- 圖解Python編程:從入門到精通系列教程
- 圖解數(shù)據(jù)分析:從入門到精通系列教程
- 圖解AI數(shù)學(xué)基礎(chǔ):從入門到精通系列教程
- 圖解機(jī)器學(xué)習(xí)算法:從入門到精通系列教程
- 機(jī)器學(xué)習(xí)實戰(zhàn):手把手教你玩轉(zhuǎn)機(jī)器學(xué)習(xí)系列
- 深度學(xué)習(xí)教程:吳恩達(dá)專項課程 · 全套筆記解讀
- 自然語言處理教程:斯坦福CS224n課程 · 課程帶學(xué)與全套筆記解讀
- 深度學(xué)習(xí)與計算機(jī)視覺教程:斯坦福CS231n · 全套筆記解讀
總結(jié)
以上是生活随笔為你收集整理的大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pycharm里面的一些超级好用的功能—
- 下一篇: OPC 错误码