一、前言

(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理论和代码实现相关推荐

  1. 新浪搜索Tabpage

    代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  2. 爬取新浪搜索内容遇到的问题及解决

    在Nutch爬虫爬取新浪的时候 爬取率低,抽查了相关种子发现新浪搜索页面的帖子爬取率很低.遂展开分析– 搜索页面的网页内容特点 和专业的搜索引擎一样,新浪的搜索引擎搜索结果往往是众多网页的聚合,既是众 ...

  3. 新浪博客中插入高亮代码

    在ie浏览器里可以用,但是不知道mac有没有这个插件 原文地址:新浪博客中插入高亮代码作者:木子超-同学 一.              Sublime text 3是一个强大的代码编辑软件,强烈推荐 ...

  4. 淘宝 腾讯 百度 新浪 技术团队 博客

    From:http://blog.csdn.net/perfect2011/article/details/18844575 csdn lidp  http://blog.csdn.net/perfe ...

  5. 如何在新浪博客中添加JavaScript代码

    新浪博客中不能包含JavaScript代码和IFrame的代码.如果要在博客中加入像Google的广告之类的JavaScript代码,一般的方法是不行的. 今天试了一上午,搞定了. 原理:将JavaS ...

  6. 新浪云SAE上运行PHP代码,新浪云SAE 上使用Thinkphp5 出现问题

    新浪云SAE 上使用Thinkphp5 出现问题: Warning: require(/data1/www/htdocs/996/jasoncw/1/engine/public/../thinkphp ...

  7. 新浪云平台使用TortoiseSVN管理代码

    首先在http://sae.sina.com.cn/新浪云平台官网注册账号,选择免费的标准环境以及使用SVN管理代码 在二级域名中填写信息 创建应用成功后创建你的代码版本 到如下网址安装Tortois ...

  8. html新浪搜索框,JS+CSS实现仿新浪微博搜索框的方法

    本文实例讲述了JS+CSS实现仿新浪微博搜索框的方法.分享给大家供大家参考.具体实现方法如下: JS+CSS仿类似新浪微博搜索框的效果 * { padding:0; margin:0;} body { ...

  9. 【练习】获取新浪搜索中的热搜榜的标题

    声明: 1. 学生刚开始学习爬虫,代码会有很多不严谨,也较为粗糙,单纯用于广大网友参考,希望能起到一定的帮助 2. 如果要转载,请标记出来源 3.本文纯粹用于技术练习,请勿用作非法途径 做题途中所遇问 ...

最新文章

  1. linux的QQ浏览器里微信,移动端微信内置浏览器(或QQ浏览器)无法识别onclick事件的问题解决...
  2. 如何用R进行单因素方差分析
  3. matlab 拉普拉斯锐化函数_机器视觉 03.3 频域高通滤波(锐化)
  4. Android Fragment 使用详解
  5. 让普通用户可以kill自己用户下的session(转)
  6. PHP微信公众号开发常用功能
  7. pads铺铜不能开启drp_PADS2007 layout设置和基本操作步骤.ppt
  8. Deepin安装和设置Kodi,实现手机APP投屏和IPTV功能
  9. 软件工程项目经理必备能力
  10. LOJ 6229 LCM / GCD (杜教筛+Moebius)
  11. html5百度地图选中标注点,jQuery百度地图单点标注
  12. 计算机无法识别新u盘,电脑新装win7系统就无法识别u盘怎么办
  13. Android 应用进程保活APP常驻内存研究方案
  14. 乐影音下载器 建议回复
  15. 棋盘覆盖问题(分治)
  16. java.lang.ClassNotFoundException: Cannot find class:
  17. java打印任意边长的菱形
  18. Java 中continue基础用法
  19. 关于Typora的markdown编辑器行间距过大、不一致的问题
  20. 北京自学考试计算机应用基础,北京教育考试院

热门文章

  1. js连接蓝牙打印机打印一维码和二维码
  2. c语言txt播放器,c语言播放器更新版
  3. 《算法帝国》第一章第二章读书笔记
  4. 7-41 哥尼斯堡的“七桥问题” (25 分)
  5. win7下docker配置加速器
  6. photoshop cs之工具栏功能介绍
  7. 淘宝Hadoop作业平台宙斯(zeus)开源
  8. unity 神笔画画
  9. 精华来了(含PPT) | 淘系技术嘉年华-杭州站
  10. python 打开excel并在屏幕上呈现_如何用Python打开Excel文件显示其内容?