使用EasyRec快速构建推荐模型

随着移动app的普及,个性化推荐和广告成为很多app不可或缺的一部分。他们在改善用户体验和提升app的收益方面带来了巨大的提升。深度学习在搜广推领域的应用也已经非常深入,并且给各种场景的效果带来了巨大的提升。针对推荐流程的各个阶段,业界已经有很多的模型,这些模型大部分也有开源的实现,但是这些实现通常散落在github的各个角落,其数据处理和特征构造的方式各有差异。如果我们想要在一个新的场景里面应用这些模型,通常需要做比较多的改动:

输入的改造,开源的实现的输入格式和特征构造通常和线上不一致,适配一个算法通常需要1-2周左右的时间,还难免因为对代码的不熟悉引入bug,如果要尝试5个算法的话,就需要5倍的改造时间。如果算法资源有限,这时候是不是就要忍痛割爱,放弃一些可能有效果的尝试了?

开源的实现很多只是在公开数据集上取得了比较好的效果,在公开数据集上的最优参数也不一定适合实际的场景,因此参数调优也需要较大的工作量;有时候效果不好,并不是因为方法不行,而是选的参数不太好。如果没有系统化的调参方法,很多算法也就是简单试一下,没有deep explore,哪来对算法的深入理解呢? 为什么看似简单的改进,你没有能够发现呢? 为什么你也尝试了类似的方向,但是没有搞出来效果呢? 效果通常都是用算力和数不尽的尝试堆出来的;

开源的实现用的是tensorflow 1.4,而线上用的tensorflow 2.3,好多函数的参数都变掉了(此处心里是不是想骂google一百遍,当初信誓旦旦说好的api不再变呢); 很多开源的实现由于没有在实际场景中验证过,所以其可靠性也是存疑的,可能就会少了个dropout,少了一个bn,效果相差甚远;

费了九牛二虎之力把模型效果调好了,发现上线也会有很多问题,比如训练速度太慢、内存占用太大、推理qps跟不上、离线效果好在线效果跪等等。遇到这么多问题,你还有精力去做你的下一个idea吗?你还能斗志昂扬,坚持不懈的去探索新方向吗?
这些问题搞得我们心有余而力不足、天天加班到深夜、不知何时是个头:想要验证一个简单的idea都要使出九牛二虎之力。所谓天下武功,唯快不破,对于搜广推领域的算法同学来说,尤其如此:通过快速迭代才能验证更多的想法,发现更多的问题,找出最优的特征和模型结构。速度慢了的话,可能你的模型还没调好,业务目标就变了,前端的布局也改了,你的业务方可能都不相信你了,你也就没机会上线了。

说到这里,我们的诉求就比较明确了,我们就是想少写代码,甚至不写代码就能验证我们的想法。针对这些问题和诉求,我们推出一个全新的、一步到位的推荐建模框架,致力于帮助大家解决在推荐建模、特征构造、参数调优、部署等方面的问题,让大家少写代码,少干重复的没有意义的脏活累活(这些EasyRec都承包了),少趟一些坑少踩一些雷(这些EasyRec都替你趟了),让大家能够快速上线验证新的idea,提升推荐模型的迭代效率。

优势

在这里插入图片描述

和其他建模框架相比,EasyRec在以下几个方面具备显著的优势:

支持多平台和多数据源训练

支持的平台包括: MaxCompute(原ODPS), DataScience(基于Kubernete), DLC(deep learning container), Alink, 本地;

支持的数据源包括: OSS, HDFS, HIVE, MaxCompute Table, Kafka, Datahub;

用户通常只需要定义自己的模型,在本地测试通过后,就可以在多种分布式平台上进行训练;

支持多种Tensorflow版本(>=1.12, <=2.4, PAI-TF),能够无缝的对接用户的环境,不需要对代码做迁移和改动;

支持主流的特征工程的实现,特别是显示交叉特征,能够显著得提升效果;

支持HPO自动调参,显著降低了用户的调参工作量,并在多个场景中提升了模型效果;

实现了主流的深度模型,覆盖召回、排序、粗排、重排、多目标、多兴趣等;

支持EarlyStop, BestExport, 特征重要性,特征选择、模型蒸馏等高级功能。

架构

在这里插入图片描述

EasyRec建模框架整体上是基于Estimator的数据并行训练方式,通过Parameter Server的结构支持多机多卡的训练。EasyRec的主要模块包括输入、特征构造、深度模型、Loss和Metric,每个模块都可以自定义。针对用户在用TF进行训练可能遇到的多种问题,如worker退出失败、使用num_epoch evaluator无法退出、auc计算不准确等,EasyRec做了深度优化。针对AdamOptimizer训练速度慢,异步训练慢机,hash冲突,大样本空间负采样等问题,EasyRec结合PAI TF(PAI优化过的tensorflow)和AliGraph也做了深度优化。

模型

EasyRec内置了业界领先的深度学习模型, 覆盖了推荐全链路的需求,包括召回、粗排、排序、重排、多目标、冷启动等。

在这里插入图片描述

同时EasyRec也支持用户自定义模型。如下所示,在EasyRec里面实现自定义模型,只需要定义模型结构、Loss、Metric三个部分,数据处理和特征工程是可以直接复用框架提供的能力的,因此能够显著节省用户的建模时间和成本,能够将精力focus在模型结构的探索上。针对常见的模型类型如RankModel、MultiTaskModel等,Loss和Metric部分也可以直接复用父类的定义。

class CustomModel(EasyRecModel):

  def __init__(self, model_config, feature_configs, features, 
               labels=None, is_training=False):
      super(CustomModel, self).__init__(model_config, feature_configs, 
                                        features, labels, is_training)
      # build wide features from feature_group with name "wide" 
      self._wide_features, _ = self._input_layer(self._feature_dict, "wide")
      # build deep features from feature_group with name "deep"
      self._deep_features, self._deep_feature_lst = self._input_layer(
        	self._feature_dict, "deep")

  def build_predict_graph(self):
      self._prediction_dict["logits"] = DNN(self._deep_features) + \
          LINEAR(self._wide_features)
      self._prediction_dict["probs"] = \
          tf.nn.sigmoid(self._prediction_dict["logits"])
      # it is necessary to return the prediction_dict, 
      # which is required by the framework
      return self._prediction_dict

  def build_loss_graph(self):
      # build losses
      loss = tf.losses.sigmoid_cross_entropy(self._labels[0], 
                                             self._prediction_dict['logits'])
      self._loss_dict["custom_loss"] = loss
      return self._loss_dict

  def build_metric_graph(self, eval_config):
      # build auc metric
      metric_dict = {}
      metric_dict["auc"] = tf.metrics.auc(self._labels[0], 
                                          self._prediction_dict["probs"])
      return metric_dict

自动调参和自动特征工程

EasyRec自动调参接入了PAI automl自动调参的能力,实现了对多种参数的自动调优。EasyRec里面定义的任意参数都是可以搜索的,常见的参数包括hash_bucket_size, embedding_dim, learning_rate,dropout, batch_norm, 特征选择等。当你对某些参数拿不准时,就可以启动自动调参来帮助你寻找最优的设置;通过自动寻优得到的参数通常会比拍脑袋设置的参数要好,有时候还会带来意外的惊喜。

特征工程通常是提升推荐效果的关键,做高阶的特征组合通常有助于提升模型效果,但是高阶组合的空间非常大,无脑组合会导致特征爆炸,拖累训练和推理的速度。因此,EasyRec引入了自动特征工程(AutoFeature)的能力,自动寻找有提升的高阶特征,进一步提升模型的效果。

在这里插入图片描述

搜索结果(top5):

在这里插入图片描述

查看本文全部内容,欢迎访问天池技术圈官方地址:https://tianchi.aliyun.com/forum/post/354303

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
easyrec是一个用于推荐系统的开源软件,它提供了一个排序模型部署的功能。下面将以300字回答easyrec排序模型部署的相关内容。 首先,为了部署easyrec的排序模型,我们需要准备一些必要的软件和设备。我们需要一台可供部署的服务器和操作系统,例如Linux系统。此外,我们还需要安装和配置Java开发环境,以及与easyrec兼容的数据库,如MySQL。 接下来,我们需要下载和安装easyrec的排序模型easyrec提供了官方的二进制发行版和源代码版本,我们可以根据自己的需求选择合适的版本进行安装。安装完成后,我们需要配置easyrec的相关参数,如数据库连接信息和推荐策略等。 一次配置完成,我们可以启动easyrec的排序模型服务。在启动服务之前,我们还需要加载和训练我们的模型easyrec提供了一个管理控制台,我们可以通过它来管理和训练模型。通过命令行或配置文件,我们可以指定要加载的模型和训练的数据集。一旦加载和训练完成,我们可以启动排序模型服务,提供推荐功能。 在排序模型部署完成后,我们可以通过接口或SDK来进行推荐请求。我们可以根据用户的行为和偏好,向他们提供个性化的推荐结果。通过easyrec的接口和SDK,我们可以获取推荐结果并将其展示到我们的应用程序中,从而提升用户体验和增加用户参与度。 总而言之,easyrec的排序模型部署需要准备服务器和操作系统,下载和安装easyrec的排序模型,配置参数和训练模型,然后启动排序模型服务,最后通过接口或SDK进行推荐请求。通过这些步骤,我们可以成功部署easyrec的排序模型,并为我们的应用程序提供个性化的推荐功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值