0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于推出适用于设备端推荐的自适应框架

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2021-06-15 17:55 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

发布人:Ellie Zhou、Tian Lin、Shuangfeng Li 以及 Sushant Prakash

简介和动机

我们非常高兴地宣布推出一种自适应框架,用于使用您自己的数据以及高级用户建模架构构建设备端推荐 ML 解决方案。

在之前开源了设备端推荐解决方案后,我们发现社区中的许多人都对引入设备端推荐系统 AI 颇有兴趣。受反馈内容的激励与启发,我们考虑了各种不同的用例,并创建了一种框架,该框架可以生成适应不同种类的数据、特征和架构的 TensorFlow Lite 推荐模型,对之前的模型进行了完善。

此框架的优势

灵活:自适应框架支持用户以可配置方式创建模型。

优化了模型表征: 为了完善之前的模型,我们的新推荐模型可以利用多种特征,而非单单一种特征。

个性化推荐在如今的数字化生活中越来越重要。随着越来越多的用户操作已转移至边缘设备,支持设备端推荐系统将变为一个重要方向。与完全基于服务器的传统推荐系统相比,设备端解决方案具有独特的优势,如保护用户隐私、快速地对设备端用户操作作出反应、利用轻量级 TensorFlow Lite 推理,以及绕过网络依赖。我们欢迎您体验此框架并在您的应用中创建推荐体验。

框架

https://tensorflow.google.cn/lite/examples/recommendation/overview

在本文中,我们将

介绍完善后的模型架构和框架自适应性。

带您循序渐进地了解如何利用框架。

根据使用公开数据集完成的研究提供数据分析。

您可以在 TensorFlow 网站上找到更多详细信息。

TensorFlow 网站

https://tensorflow.google.cn/lite/examples/recommendation/overview

模型

推荐模型通常根据用户之前的活动预测用户未来活动。我们的框架支持模型使用上下文信息展开预测,框架可以按照以下架构进行描述:

在上下文方面,由编码器聚合所有用户活动的表征,以生成上下文嵌入。我们支持三种不同类型的编码器:1) 词袋(又名为 BOW),2) 1-D 卷积(又名为 CNN)和 3) LSTM。在标签方面,同样会将正样本标签项和词汇表中的所有其他负样本标签项编码为向量。将上下文和标签嵌入与点积进行结合并提供给 softmax 交叉熵损失。

在框架内部,将 ContextEncoder、LabelEncoder 和 DotProductSimilarity 的 tf.keras 层封装为 RecommendationModel 中的重要组件。

为了为每个用户活动建立模型,我们可以使用活动项目编号(称为基于编号的模型)、项目的多个特征(称为基于特征的模型)或二者的组合。基于特征的模型会使用多个特征,集中性地对用户行为进行编码。借助我们的框架,您可以可配置方式创建基于编号或基于特征的模型。

与上一版本类似,系统会在训练后导出 TensorFlow Lite 模型,可以直接在推荐候选条目中提供前 K 个预测。

分步教程

为了展示这个全新的自适应框架,我们使用多个特征对含有 MovieLens 数据集的设备端电影推荐模型进行了训练,并将其整合到演示版应用中(模型和应用仅用于演示目的)。MovieLens 1M 数据集包含 6039 位用户对 3951 部电影的评分,每个用户仅对一小部分电影进行评分。

MovieLens

https://grouplens.org/datasets/movielens/

让我们了解一下如何在此 Notebook 中分步使用框架。

Notebook

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/ondevice_recommendation.ipynb

(a) 环境准备

git clone https://github.com/tensorflow/examples

cd examples/lite/examples/recommendation/ml/

pip install -r requirements.txt

(b) 准备训练数据

请参考 movielens 示例生成文件准备训练数据。需要注意的是,预计 TensorFlow Lite 输入特征为 FixedLenFeature,因此请填充或截取特征,并在输入配置中设置特征长度。您可以按照您的想法随意使用以下命令来处理示例数据集。

FixedLenFeature

https://tensorflow.google.cn/api_docs/python/tf/io/FixedLenFeature

python -m data.example_generation_movielens

--data_dir=data/raw

--output_dir=data/examples

--min_timeline_length=3

--max_context_length=10

--max_context_movie_genre_length=32

--min_rating=2

--train_data_fraction=0.9

--build_vocabs=True

MovieLens 数据包含 ratings.dat(列: 用户编号、 电影编号、 评分、 时间戳)和 movies.dat(列:电影编号、 标题、 类型)。在示例生成脚本中,我们同时采用了这两个文件,仅将评分保持在 2 分以上、构成用户电影交互时间线,作为标签的示例活动以及之前的用户活动作为预测上下文。请查找生成的 tf.Example:

0 : {

features: {

feature: {

key : “context_movie_id”

value: { int64_list: { value: [ 1124, 2240, 3251, 。。。, 1268 ] } }

}

feature: {

key : “context_movie_rating”

value: { float_list: {value: [ 3.0, 3.0, 4.0, 。。。, 3.0 ] } }

}

feature: {

key : “context_movie_year”

value: { int64_list: { value: [ 1981, 1980, 1985, 。。。, 1990 ] } }

}

feature: {

key : “context_movie_id”

value: { int64_list: { value: [ 1124, 2240, 3251, 。。。, 1268 ] } }

}

feature: {

key : “context_movie_genre”

value: { bytes_list: { value: [ “Drama”, “Drama”, “Mystery”, 。。。, “UNK” ] } }

}

feature: {

key : “label_movie_id”

value: { int64_list: { value: [ 3252 ] } }

}

}

}

(c) 创建输入配置

准备好数据后,请设置输入配置,例如,这是 movielens 电影推荐模型的一个示例配置。

activity_feature_groups {

features {

feature_name: “context_movie_id”

feature_type: INT

vocab_size: 3953

embedding_dim: 8

feature_length: 10

}

features {

feature_name: “context_movie_rating”

feature_type: FLOAT

feature_length: 10

}

encoder_type: CNN

}

activity_feature_groups {

features {

feature_name: “context_movie_genre”

feature_type: STRING

vocab_name: “movie_genre_vocab.txt”

vocab_size: 19

embedding_dim: 4

feature_length: 32

}

encoder_type: CNN

}

label_feature {

feature_name: “label_movie_id”

feature_type: INT

vocab_size: 3953

embedding_dim: 8

feature_length: 1

}

(d) 训练模型

模型训练器将根据输入配置构建含有简单界面的推荐模型。

python -m model.recommendation_model_launcher --

--training_data_filepattern “data/examples/train_movielens_1m.tfrecord”

--testing_data_filepattern “data/examples/test_movielens_1m.tfrecord”

--model_dir “model/model_dir”

--vocab_dir “data/examples”

--input_config_file “configs/sample_input_config.pbtxt”

--batch_size 32

--learning_rate 0.01

--steps_per_epoch 2

--num_epochs 2

--num_eval_steps 2

--run_mode “train_and_eval”

--gradient_clip_norm 1.0

--num_predictions 10

--hidden_layer_dims “32,32”

--eval_top_k “1,5”

--conv_num_filter_ratios “2,4”

--conv_kernel_size 4

--lstm_num_units 16

在推荐模型内部,核心组件将被打包到 keras 层(context_encoder.py、label_encoder.py 和 dotproduct_similarity.py),其中每一层都可以被自身使用。下图介绍了代码结构:

context_encoder.py

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/model/context_encoder.py

label_encoder.py

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/model/label_encoder.py

dotproduct_similarity.py

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/model/dotproduct_similarity.py

通过此框架,您可以通过命令直接执行模型训练启动器:

python -m model.recommendation_model_launcher

--input_config_file “configs/sample_input_config.pbtxt”

--vocab_dir “data/examples”

--run_mode “export”

--checkpoint_path “model/model_dir/ckpt-1000”

--num_predictions 10

--hidden_layer_dims “32,32”

--conv_num_filter_ratios “2,4”

--conv_kernel_size 4

--lstm_num_units 16

导出至 TensorFlow Lite 后,可以在 Notebook 中找到推理代码,同时我们会推荐读者查看该处的详细信息。

Notebook

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/ondevice_recommendation.ipynb

框架自适应性

我们的框架会提供 protobuf 接口,用户可在此接口中对特征组、类型和其他信息进行配置,以相应地构建模型。在此接口中,您可以配置:

protobuf

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/configs/input-config.proto

特征

框架通常将特征分为 3 种类型:整型、字符串和浮点数。由于需要为整型和字符串特征创建嵌入空间,因此需要指定嵌入维度、词汇表名称和大小。浮点数特征值可直接使用。此外,对于设备端模型,我们建议使用可直接进行配置的固定长度特征。

message Feature {

optional string feature_name = 1;

// Supported feature types: STRING, INT, FLOAT.

optional FeatureType feature_type = 2;

optional string vocab_name = 3;

optional int64 vocab_size = 4;

optional int64 embedding_dim = 5;

optional int64 feature_length = 6;

}

特征组

一个用户活动的一个特征可能具有多个值。例如,一部电影可以属于多个类别,每部电影将具有多个类型的特征值。为了处理不同特征形状,我们引入了“特征组”,用于将特征合并为组。可以将长度相同的特征放置到同一特征组中,以一起进行编码。在输入配置中,您可以设置全局特征组和活动特征组。

message FeatureGroup {

repeated Feature features = 1;

// Supported encoder types: BOW, CNN, LSTM.

optional EncoderType encoder_type = 2;

}

输入配置

您可以使用输入配置界面同时设置所有特征和特征组。

message InputConfig {

repeated FeatureGroup global_feature_groups = 1;

repeated FeatureGroup activity_feature_groups = 2;

optional Feature label_feature = 3;

}

input_pipeline.py 和 recommendation_model.py 会使用输入配置将训练数据处理为 tf.data.Dataset,并相应地构建模型。在 ContexEncoder 内部,我们将为所有特征组创建 FeatureGroupEncoders,并将其用于计算输入特征中的特征组嵌入。通过顶部隐藏层馈送串联特征组嵌入,以获得最终上下文嵌入。值得注意的是,最终上下文嵌入和标签嵌入维度应该相同。

input_pipeline.py

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/model/input_pipeline.py

recommendation_model.py

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/model/recommendation_model.py

请在附录部分查看使用不同输入配置生成的不同模型图。

附录

https://github.com/tensorflow/examples/blob/master/lite/examples/recommendation/ml/ondevice_recommendation.ipynb

实验与分析

我们会借此机会,针对基于编号和基于特征的模型,分析其在不同配置下的性能,并提供一些实证结果。

对于基于编号的模型,仅会将 movie_id 用作输入特征。对于基于特征的模型,会使用 movie_id 和 movie_genre 特征。两种类型的模型都尝试使用了 3 种编码器类型 (BOW/CNN/LSTM) 和 3 种上下文历史长度 (10/50/100)。

由于 MovieLens 数据集是一个实验数据集,其中大约含有 4000 部候选电影和 19 种电影类型,因此我们会在实验中缩小嵌入维度,以模拟生成场景。对于上述实验结果图表,将编号嵌入维度设置为 8 并将电影类型嵌入维度设置为 4。如果以 context10_cnn 为例,基于特征的模型性能比基于编号的模型性能高出 58.6%。此外,平均结果显示基于特征的模型性能要高出 48.35%。因此,在这种情况中,基于特征的模型性能要优于基于编号的模型,因为 movie_genre 特征向模型引入了其他信息。

MovieLens

https://grouplens.org/datasets/movielens/

此外,候选项目的大部分基础特征的词汇表都相对较小,因此嵌入空间也相对较小。例如,电影类型词汇表要比电影编号词汇表小很多。在这种情况中,使用基础特征会减小模型的内存大小,从而令其更适合设备端。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20155

    浏览量

    328968
  • 网络
    +关注

    关注

    14

    文章

    8134

    浏览量

    93099
  • ML
    ML
    +关注

    关注

    0

    文章

    154

    浏览量

    35394

原文标题:推出适用于设备端推荐的自适应框架

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IEC 62368标准适用于哪些产品

    IEC62368-1标准是国际电工委员会(IEC)制定的一项安全标准,适用于音视频设备、信息技术设备以及通信设备。该标准的全称是:IEC62368-1:Audio/video,info
    的头像 发表于 10-29 14:47 416次阅读
    IEC 62368标准<b class='flag-5'>适用于</b>哪些产品

    网段隔离器适用于哪些设备的NAT转换

    网段隔离器(NAT转换网关)在工业网络场景中应用广泛,适用于生产网络对 PLC、HMI、CNC、DCS、MES等网络通讯和数据采集,兼有跨网段隔离和IP转换的功能。同时支持多台设备(如PLC、CNC
    的头像 发表于 10-24 10:52 299次阅读
    网段隔离器<b class='flag-5'>适用于</b>哪些<b class='flag-5'>设备</b>的NAT转换

    一种适用于动态环境的自适应先验场景-对象SLAM框架

    由于传统视觉SLAM在动态场景中容易会出现严重的定位漂移,本文提出了一种新颖的基于场景-对象的可靠性评估框架,该框架通过当前帧质量指标以及相对于可靠参考帧的场景变化,全面评估SLAM的稳定性。
    的头像 发表于 08-19 14:17 645次阅读
    一种<b class='flag-5'>适用于</b>动态环境的<b class='flag-5'>自适应</b>先验场景-对象SLAM<b class='flag-5'>框架</b>

    哪些离线语音芯片适用于家电设备

    ​哪些离线语音芯片适用于家电设备?选择适用于家电设备的离线语音芯片时,需综合考量家电的使用环境、功能需求、成本预算等多方面因素。以下为您推荐几款性能出色的离线语音芯片:   适合家电
    的头像 发表于 08-06 17:27 648次阅读
    哪些离线语音芯片<b class='flag-5'>适用于</b>家电<b class='flag-5'>设备</b>

    PC1032微功率5.5V/3A高效同步降压转换器具有自适应关断功能

    概述:PC1032是一款高效且体积小巧的同步降压转换器,适用于低输入电压应用。它是紧凑设计的理想解决方案。其2.5V至5.5V的输入电压范围适用于几乎所有电池供电的应用。在中等至重负载范围内,它以
    发表于 07-19 16:18

    用于无线 LAN 的 2.4 GHz 高效前端和适用于蓝牙®应用的端口 skyworksinc

    电子发烧友网为你提供()用于无线 LAN 的 2.4 GHz 高效前端和适用于蓝牙®应用的端口相关产品参数、数据手册,更有用于无线 LAN 的 2.4 GHz 高效前端和适用于蓝牙®应
    发表于 07-01 18:32
    <b class='flag-5'>用于</b>无线 LAN 的 2.4 GHz 高效前端和<b class='flag-5'>适用于</b>蓝牙®应用的端口 skyworksinc

    适用于 WLAN 和蓝牙®应用的 2.4 GHz 高效前端 skyworksinc

    电子发烧友网为你提供()适用于 WLAN 和蓝牙®应用的 2.4 GHz 高效前端相关产品参数、数据手册,更有适用于 WLAN 和蓝牙®应用的 2.4 GHz 高效前端的引脚图、接线图、封装手册
    发表于 06-20 18:30
    <b class='flag-5'>适用于</b> WLAN 和蓝牙®应用的 2.4 GHz 高效前端 skyworksinc

    2.4 GHz、256 QAM 前端模块,用于 WLAN/ 和端口,适用于蓝牙®应用 skyworksinc

    电子发烧友网为你提供()2.4 GHz、256 QAM 前端模块,用于 WLAN/ 和端口,适用于蓝牙®应用相关产品参数、数据手册,更有2.4 GHz、256 QAM 前端模块,用于 WLAN
    发表于 06-18 18:30
    2.4 GHz、256 QAM 前端模块,<b class='flag-5'>用于</b> WLAN/ 和端口,<b class='flag-5'>适用于</b>蓝牙®应用 skyworksinc

    适用于Versal的AMD Vivado 加快FPGA开发完成Versal自适应SoC设计

    设计、编译、交付,轻松搞定。更快更高效。 Vivado 设计套件提供经过优化的设计流程,让传统 FPGA 开发人员能够加快完成 Versal 自适应 SoC 设计。 面向硬件开发人员的精简设计流程
    的头像 发表于 05-07 15:15 1052次阅读
    <b class='flag-5'>适用于</b>Versal的AMD Vivado  加快FPGA开发完成Versal<b class='flag-5'>自适应</b>SoC设计

    适用于工业控制设备的RS485通信芯片CN3485

    适用于工业控制设备的RS485通信芯片CN3485
    的头像 发表于 04-17 10:01 459次阅读
    <b class='flag-5'>适用于</b>工业控制<b class='flag-5'>设备</b>的RS485通信芯片CN3485

    基于事件相机的统一帧插值与自适应去模糊框架(REFID)

    )的解决方案。团队提出了一种基于事件相机的统一帧插值与自适应去模糊框架(REFID)。该框架基于双向递归网络,结合事件流和图像信息,自适应地融合来自不同时间点的信息,从而能够在模糊的输
    的头像 发表于 03-14 11:48 1289次阅读
    基于事件相机的统一帧插值与<b class='flag-5'>自适应</b>去模糊<b class='flag-5'>框架</b>(REFID)

    GLAD应用:大气像差与自适应光学

    概述 激光在大气湍流中传输时会拾取大气湍流导致的相位畸变,特别是在长距离传输的激光通信系统中。这种畸变会使传输激光的波前劣化。通过在系统中引入自适应光学系统,可以对激光传输时拾取的低频畸变进行校正
    发表于 03-10 08:55

    AMD Versal自适应SoC器件Advanced Flow概览(上)

    在最新发布的 AMD Vivado Design Suite 2024.2 中,引入的新特性之一是启用了仅适用于 AMD Versal 自适应 SoC 器件的 Advanced Flow 布局布线
    的头像 发表于 01-17 10:09 1182次阅读
    AMD Versal<b class='flag-5'>自适应</b>SoC器件Advanced Flow概览(上)

    华为推出RN/H5多设备自适应组件库

    在原生鸿蒙应用开发中,华为针对ArkUI框架推出了一整套针对多设备适配的完善能力(如“一多”能力)以及高阶组件(如分栏、边看边评等),帮助开发者轻松实现“一次开发,多端部署”。然而,当前鸿蒙生态仍
    的头像 发表于 01-16 14:46 1578次阅读

    OTL电路适用于哪些设备

    音响系统中。由于省去了昂贵的输出变压器,电路设计更加简洁,同时保持了良好的音质表现。它的小体积、低成本和宽频响等优点,使其在音频设备中备受青睐。 耳机放大器 : OTL电路也适用于耳机放大器,能够提供清晰、纯净的音质,满足用户对音
    的头像 发表于 01-16 09:35 977次阅读