美文网首页人工智能-机器学习推荐系统修行之路
推荐算法笔记07_工程实现与评估【下】

推荐算法笔记07_工程实现与评估【下】

作者: Nefelibatas | 来源:发表于2022-02-03 10:53 被阅读0次

    推荐模型上线部署

    1. 预存推荐结果&Embedding结果

    预先在离线环境下生成每个用户的推荐结果,然后将结果预存到Redis等线上数据库中。

    进行线上服务时,直接从Redis中取推荐结果。


    image-20220106113226312.png

    改进:存储用户和物品的Embedding

    2.自研模型线上服务平台

    c++/ java/go等服务器作为线上服务器,上线dnn模型过程就是从参数服务器或内存数据库

    中得到模型参数,然后用c++/ java/go在服务器中实现模型推断逻辑。

    面对复杂的与业务紧密联系的特殊模型或算法,深度学习框架无法支持时通常需要线上单独开发

    优点:定制需求

    缺点:时间成本高

    3.预训练Embedding&轻量级线上模型

    通过离线训练复杂模型,生成Embedding存入内存数据库,线上使用LR等简单模型就行推断

    例如:双塔模型

    优点:借用TensorFlow等框架的灵活性和功能多样性,线上推断延时小

    缺点:无法实现端到端,线上线下不一致

    4.利用PMML转换并部署模型

    PMML:预测模型标记语言,一种通用的XML表示的不同模型结构参数的标记语言

    作为中间媒介连接离线训练平台和线上预测平台

    ![image-20220106113226312.png](https://img.haomeiwen.com/i27579716/9e76c952b86aced9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    JPMML序列化和解析PMML模型文件

    5.TensorFlow Serving

    同PMML,TensorFlow定义了自己的序列化格式(protobuf)

    • 1、模型训练

    • 2、模型导出

      • saved_model模块
    • 3、模型部署提供接口

      • tensorflow_model_server
    • 4、客户端使用grpc调用接口

    Saved_model模块

    • pb或pbtxt格式的模型结构文件

    • variables文件夹保存模型参数

    image-20220106120051863.png

    Tensorflow_model_server部署模型

    • 编译tensorflow_model_server

    • 对指定路径下的Saved_model模型部署到指定端口

    image-20220106120203517.png

    客户端程序使用grpc调用接口

    image-20220106120234247.png

    自研线上服务平台与TensorFlow serving结合

    • 模型训练后导出saved_model

    • 线上服务平台(C++)调用TensorFlow的C++库完成saved_model载入过程,作为一个排序模块

    • 与其他模型或策略组合后进行部署供线上服务

    image-20220106121709949.png image-20220106121805822.png

    推荐评估指标计算

    一个好的推荐系统应同时考虑三方利益,三方共赢

    推荐系统参与者

    • 推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣却不那么容易发现的物品

    • 推荐系统还要帮助商家将那些埋没的长尾的好商品推荐给可能会对它们感兴趣的用户

    • 推荐系统还要尽可能追求平台的商业价值最大

    image-20220106122048045.png

    推荐效果评测

    • 离线评估方法

      • 离线评估指标
    • 用户调查

    • 线上评估方法

      • 线上评估指标

    用户调查

    离线实验指标和实际商业指标存在差距,比如:预估准确率和用户满意度

    最佳办法是直接将算法上线,使用真实用户看商业指标,但是上线测试具有较高风险。所以上线之前一般需要做一次用户调查的测试(真实用户内测)

    很多离线无法评测的与用户主观感受有关的指标都可以通过用户调查获得,比如推荐结果是否令用户惊喜,那我们最好直接询问用户。

    缺点:

    调查成本高,合适的测试用户难找

    优点:

    用户主观感受的指标

    常用评估指标

    用户满意度: 最重要指标,问卷涉及不同方面的用户感受。

    常见统计指标:反馈按钮、点击率、停留时长、转化率。

    image-20220106122636898.png

    𝑅𝑀𝑆𝐸加大了预测不准的用户物品评分的惩罚

    image-20220106124247421.png image-20220106124317049.png

    AUC越接近1,排序越稳定,高相关性的物品排序越前列

    GAUC:DIN网络中的指标,相比AUC更接近线上

    PCOC:预估的准确性,预估点击率 / 真实点击率

    覆盖率:描述推荐系统对长尾物品的发掘能力,推荐热门的覆盖率很低,能够推荐出来的物品占总物品集合的比例

    内容提供商比较关心的指标:

    覆盖率:

    Converage = \frac{|U_{u∈UR(u)}|}{|I|}

    熵:

    H = -\sum_{i=1}^p(i)logp(i)\\

    基尼指数:

    G = -\frac{1}{n-1}\sum_{j=1}^n(2j-n-1)p(i_j)\\ i_j按照物品流行度p从小到大排序的物品列表中第j个物品

    多样性:为了满足用户广泛兴趣,推荐列表需要能够覆盖用户不同的兴趣领域。

    • 多样性描述了推荐列表中物品两两之间的不相似性,两个物品相似性s(i,j)度量函数有多种(多样性和相似性是对应的)

      • Diversity(R(u)) = 1-\frac{\sum_{i,j∈R(u),i≠j}s(i,j)}{\frac{1}{2}|R(u)| (|R(u)|-1)}
    • 整体多样性:所有用户推荐列表多样性的平均值

      • Diversity(R(u)) = \frac{1}{|U|}\sum_{u∈U}Diversity(R(u))
    • 多样性程度怎么确认呢?

    新颖性:给用户推荐他们之前没听说的物品

    • 最简单办法,过滤之前看过的电影,购买的商品

    • 度量:平均流行度(较粗略)

    惊喜度:推荐结果和用户历史兴趣不相似,但却让用户觉得满意

    • 探索与利用的矛盾,可以尝试推新广告

    • 同时兼顾满意度和新颖度

    信任度:用户对推荐结果的认可程度,只能问卷调查方式

    • 提高信任度:培训用户,让用户了解推荐机制(推荐解释)

    • 好友推荐并进行推荐解释(口口相传)

    image-20220106124807494.png

    离线评估方法

    离线与在线评估方法主要指标为模型预估准确性

    模型预估准确性常用方法

    • hold out检验

    • 交叉检验

    • replay

      • 离线评估的重点是让离线评估的结果能够尽量接近线上结果

      • 线上环境包括线上数据环境和模型的更新频率等应用环境

    • 动态离线评估方法

      • 传统离线评估方法是静态的,模型不会随着评估的进行而更新,从而导致模型效果评估的失真

      • 整个动态评估过程变成逐一样本回访的精准线上仿真过程时就是经典的仿真式离线评估方法-Replay

      • 极端情况:强化学习的在线学习的评估效果(实时过程)

      • 模型训练与预测的时间延迟长短,与计算效率有关

      • image-20220106125451195.png
    • 自助法
    image-20220106125133027.png

    在线评估方法

    A/B实验框架

    image-20220106125842678.png

    原则:正交(域与域)和互斥(层与层)

    优点:公平获得不同算法实际在线时的性能指标

    缺点:周期长,必须长期实验才能得到可靠结果

    launch layer:所有流量,可多个发布层,每一层都要经过,独立参数,初始化

    Domain: 流量的划分(互斥),包括多个layer

    layer:包括多个实验,实验参数的划分;还可以包括domain( type=“domain”)

    experiment: 实验

    实验的随机性策略:

    • uid + lay_name + hash_seed: 保证每个用户实验路径一致性

    • 随机进入一个分桶

    1. 命中Domain通过condition来匹配

    2. 通过每一层layer,通过bucket_flow 和 condition来命中实验

    3. 不是每一层layer的实验都会被命中

    一文搞懂AB Testing的分层分流 | 人人都是产品经理 (woshipm.com)

    总结与回顾

    image-20220106130346498.png

    相关文章

      网友评论

        本文标题:推荐算法笔记07_工程实现与评估【下】

        本文链接:https://www.haomeiwen.com/subject/zdudkrtx.html