日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

推荐系统系列:新浪搜索团队FiBiNET理论和代码实现

發布時間:2024/1/8 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 推荐系统系列:新浪搜索团队FiBiNET理论和代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

(1)代碼參考了阿里巴巴淺夢大神的實現,非常牛逼的一位大佬,非常值得大家學習;

(2)微博提出的fibinet點擊預估模型,論文地址為:https://arxiv.org/pdf/1905.09433.pdf;

二、算法原理

(1)整體框架如圖所示:

(2)SENET Layer部分的主要作用是學習不同特征的一個重要程度,對重要特征加權,對蘊含信息量不多的特征進行削弱;參考淺夢大神的文章https://www.zhihu.com/people/shenweichen/posts;

(3)SENET的主要處理流程:E為特征的embedding表示;

通過平均池化表示為Z,來獲取特征的全局信息;

然后對Z進行加權學習得到需要的重要性權重表示;

(4)Bilinear_Interaction部分:左邊上半部分為內積,下半部分為哈達瑪積;原論文提出了一種添加一個參數w矩陣來學習交叉特征提高效果,公式如下:

幾種實現方式的直觀圖像表示:

(5)最后將bi部分的p和senet部分的q進行拼接,然后輸入給全連接層DNN部分和sigmoid部分得到點擊的概率值;

(6)損失函數部分的設計如下公式所示:

三、實驗效果

四、代碼實現

from tensorflow.python.keras.layers import Layer from tensorflow.python.keras.initializers import glorot_normal import itertools import tensorflow as tfclass senet(Layer):def __init__(self, reduction_ratio=3, seed=1024, **kwargs):self.reduction_ratio = reduction_ratioself.seed = seedsuper(senet, self).__init__(**kwargs)def build(self, input_shape, **kwargs):self.filed_size = len(input_shape)self.embedding_size = input_shape[0][-1]reduction_size = max(1, self.filed_size // self.reduction_ratio)self.w1 = self.add_weight(name='w1', shape=(self.field_size, reduction_size), initializer=glorot_normal(self.seed))self.w2 = self.add_weight(name='w2', shape=(reduction_size, self.field_size), initializer=glorot_normal(self.seed))self.tensordot = tf.keras.layers.Lambda(lambda x : tf.tensordot(x[0], x[1], axes=(-1, 0)))super(senet, self).build(input_shape)def call(self, inputs):Z = tf.keras.layers.concatenate(inputs, axis=1)#(batch, field_size, embed_size)Z = tf.reduce_mean(Z, axis=-1)#(batch, field_size)A_1 = tf.nn.relu(self.tensordot([Z, self.w1]))#(batch, reduction_size)A_2 = tf.nn.relu(self.tensordot([A_1, self.w2]))#(batch, field_size)V = tf.multiply(inputs, tf.expand_dims(A_2, axis=2))#(batch, field_size, embed_size)return tf.split(V, self.filed_size, axis=1)class bilinear_interaction(Layer):def __init__(self, seed=1024, **kwargs):self.seed = seedsuper(bilinear_interaction, self).__init__(**kwargs)def buid(self, input_shape):emdedding_size = input_shape[0][-1]self.w = [self.add_weight(shape=(emdedding_size, emdedding_size), initializer=glorot_normal(self.seed), name='w' + str(i) + str(j)) for i, j in itertools.combinations(range(len(input_shape)), 2)]def call(self, inputs):p = [tf.multiply(tf.tensordot(v[0], w, axes=(-1, 0)), v[1]) for v, w in zip(itertools.combinations(inputs, 2), self.w)]return tf.keras.layers.concatenate(p, axis=-1)

?

總結

以上是生活随笔為你收集整理的推荐系统系列:新浪搜索团队FiBiNET理论和代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。