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

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

    关注

    5082

    文章

    19111

    浏览量

    304849
  • 网络
    +关注

    关注

    14

    文章

    7557

    浏览量

    88738
  • ML
    ML
    +关注

    关注

    0

    文章

    149

    浏览量

    34644

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

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

收藏 人收藏

    评论

    相关推荐

    NVIDIA推出适用于网络安全的NIM Blueprint

    德勤使用适用于容器安全的 NVIDIA NIM Agent Blueprint 帮助企业利用开源软件构建安全的 AI。
    的头像 发表于 11-20 09:58 216次阅读

    PGA2500能否适用于输入呢?

    PGA2500为差分输入差分输出,因此想请教的第一个问题是PGA2500能否适用于输入呢(将Vin-接地)? 此外,查阅了一些资料,发现幻象供电多用于电容型麦克风,因此第二个问题是针对所用
    发表于 11-04 07:31

    步进电机如何自适应控制?步进电机如何细分驱动控制?

    步进电机是一种将电脉冲信号转换为角位移或线位移的电机,广泛应用于各种自动化控制系统中。为了提高步进电机的性能,自适应控制和细分驱动控制是两种重要的技术手段。 一、步进电机的自适应控制 自适应
    的头像 发表于 10-23 10:04 472次阅读

    适用于工业应用的使用MDIO的以太网PHY配置

    电子发烧友网站提供《适用于工业应用的使用MDIO的以太网PHY配置.pdf》资料免费下载
    发表于 09-21 10:24 0次下载
    <b class='flag-5'>适用于</b>工业应用的使用MDIO的以太网PHY配置

    轨到轨运算放大器AiP8612适用于低功耗便携式设备

    轨到轨运算放大器AiP8612适用于低功耗便携式设备
    的头像 发表于 09-04 09:44 354次阅读
    轨到轨运算放大器AiP8612<b class='flag-5'>适用于</b>低功耗便携式<b class='flag-5'>设备</b>

    选择适用于汽车应用的基准电压

    电子发烧友网站提供《选择适用于汽车应用的基准电压.pdf》资料免费下载
    发表于 09-02 11:26 0次下载
    选择<b class='flag-5'>适用于</b>汽车应用的基准电压

    如何在自己的固件中增加wifi自适应性相关功能,以通过wifi自适应认证测试?

    目前官方提供了自适应测试固件 ESP_Adaptivity_v2.0_26M_20160322.bin 用于进行 wifi 自适应认证测试. 请问如何在自己的固件中增加 wifi 自适应
    发表于 07-12 08:29

    适用于测量设备的36V双通道高精度运算放大器SC7506

    适用于测量设备的36V双通道高精度运算放大器SC7506
    的头像 发表于 06-17 10:00 419次阅读
    <b class='flag-5'>适用于</b>测量<b class='flag-5'>设备</b>的36V双通道高精度运算放大器SC7506

    鸿蒙OS开发:【一次开发,多端部署】(自适应布局)

    针对常见的开发场景,方舟开发框架提炼了七种自适应布局能力,这些布局可以独立使用,也可多种布局叠加使用。
    的头像 发表于 05-25 16:36 1692次阅读
    鸿蒙OS开发:【一次开发,多端部署】(<b class='flag-5'>自适应</b>布局)

    AC/DC电源模块:适用于各种功率需求的电子设备

    BOSHIDA  AC/DC电源模块:适用于各种功率需求的电子设备 AC/DC电源模块是一种广泛应用于不同电子设备中的电源转换模块。它具有输出稳定、高效率、可靠性强等特点,
    的头像 发表于 05-24 11:20 653次阅读
    AC/DC电源模块:<b class='flag-5'>适用于</b>各种功率需求的电子<b class='flag-5'>设备</b>

    鸿蒙OS开发:【一次开发,多端部署】应用(自适应布局)

    针对常见的开发场景,方舟开发框架提炼了七种自适应布局能力,这些布局可以独立使用,也可多种布局叠加使用。
    的头像 发表于 05-24 10:34 1023次阅读
    鸿蒙OS开发:【一次开发,多端部署】应用(<b class='flag-5'>自适应</b>布局)

    PMP22165.1-适用于 Xilinx 通用自适应计算加速平台 (ACAP) 的电源 PCB layout 设计

    电子发烧友网站提供《PMP22165.1-适用于 Xilinx 通用自适应计算加速平台 (ACAP) 的电源 PCB layout 设计.pdf》资料免费下载
    发表于 05-19 10:45 0次下载
    PMP22165.1-<b class='flag-5'>适用于</b> Xilinx 通用<b class='flag-5'>自适应</b>计算加速平台 (ACAP) 的电源 PCB layout 设计

    微软正式发布适用于Windows的Sudo

    微软已在 Windows 11 Insider Preview Build 26052 中发布适用于 Windows 的 Sudo,并将其在 MIT 协议下进行开源。
    的头像 发表于 03-19 09:20 844次阅读
    微软正式发布<b class='flag-5'>适用于</b>Windows的Sudo

    什么是自适应光学?自适应光学原理与方法的发展

    目前,世界上大型的望远镜系统都采用了自适应光学技术,自适应光学的出现为补偿动态波前扰动,提高光波质量提供了新的研究方向。 60多年来,自适应光学技术获得蓬勃发展,现已应用于天文学
    发表于 03-11 10:27 2040次阅读

    AMD率先推出符合DisplayPort™ 2.1 8K视频标准的FPGA和自适应SoC

    AMD UltraScale+ FPGA 和 AMD Versal 自适应 SoC 产品系列已率先成为业界符合 VESA DisplayPort 2.1 标准的 FPGA 和自适应 SoC。
    的头像 发表于 01-24 09:18 463次阅读