前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >什么是画像平台实时预测服务?

什么是画像平台实时预测服务?

原创
作者头像
张叔叔讲互联网
发布于 2023-10-13 12:10:24
发布于 2023-10-13 12:10:24
20300
代码可运行
举报
运行总次数:0
代码可运行

在标签查询服务中,T日所灌入的是T-1日的离线标签数据,其面临的主要问题是:无法获取当日新增用户的标签数据。标签实时预测服务支持实时挖掘用户的标签值,可以覆盖新增用户标签查询,从而弥补离线标签数据缺失从而提高标签覆盖率。

实时预测服务介绍

实时预测服务针对的是挖掘类标签,是将离线标签挖掘模型在线化的过程,其可以提供实时预测用户标签值的能力。图4-13展示了挖掘类标签离线模型和在线服务的关系,由图可知,实时预测服务分为离线阶段和在线阶段。离线阶段即第3章提到的挖掘类标签生产流程,在线阶段是将离线阶段产出的算法模型服务化,通过获取用户实时特征可以借助算法模型即时计算出预测结果。

图4-13 挖掘类标签离线与在线流程
图4-13 挖掘类标签离线与在线流程

实时预测服务主要应用在新用户场景下。比如在短视频冷启动业务中,为了提高新用户使用体验从而提升留存率,在用户进入App后需要推荐一些优质短视频内容。此时能够获取到的用户画像标签越丰富,短视频推荐的准确率会越高。由于大部分标签是离线标签,新增用户还没有标签数据,此时可以借助实时预测服务来即时预测用户标签并补充到推荐模型中,最终提高冷启动阶段的推荐效果。实时预测也可用于回流用户场景,回流用户指的是已经流失了一段时间的用户再次使用当前应用,由于用户流失了一段时间,其挖掘类标签数值已经失去了时效性,可以借助实时预测服务计算出当前更准确的标签值来替代离线标签数值。

实时预测服务的重点是模型在线化部署以及实时特征获取。模型在线部署的方式取决于模型训练所使用技术和框架,比如通过Spark MLlib生产的模型,可以借助其自带的工具包实现模型在线部署;使用TensorFlow,PyTorch开发的深度学习模型,可以借助其自带的Serving方法进行模型在线化;如果使用的是XGBoost训练模型,可以借助XGBoost4J在Java中实现模型实例化;有些公司也会自研模型实例化平台,比如百度的双塔模型,将复杂的离线模型训练转换为Embedding加轻量级模型,可以快速实现模型上线;JPMML(预测模型标记语言)将模型与在线服务化解耦,各种模型都可以使用JPMML表达,最终可通过不同语言解析JPMML并实例化模型。

实时特征获取的方式主要有两种。第一种是业务在调用实时预测服务时附带上所有所需实时特征,这些特征可以直接从客户端实时获取,比如设备类型、操作系统、IP地址等。第二种是集中式管理实时特征,即通过消费各种实时数据流生成实时特征并存储到缓存中,在实时预测过程中直接查询使用该实时特征数据。第一种方式调用方的工作量较大,需要预先获取各类特征数据,而实时预测服务提供方的工程逻辑简单,维护成本较低;第二种方式调用方的使用服务的成本较低,而实时预测服务提供方需要维护一套实时特征库,开发量和资源需求量较大。图4-14展示了模型实例化和特征获取的流程图。

图4-14 模型实例化与实时特征获取过程
图4-14 模型实例化与实时特征获取过程

标签实时预测服务是算法模型在线化的一种特殊情况,不仅要求模型需要提供在线服务,而且需要传入实时特征。从技术的角度,所有的挖掘类标签的算法模型都可以提供预测服务,但是用户画像场景下,离线挖掘类标签基本可以满足业务要求,实时预测是在特殊情况下对离线标签数据的一种补充。

工程实现

本节以“是否已婚”标签为例介绍标签实时预测实现方案。该标签使用XGBoost算法实现,其模型产出主要包括模型文件和特征文件。可以借助xgboost4j工具包实现模型加载和实时预测功能,其核心代码如下所示。​

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 存储特征映射关系
private static Map<String, Integer> featureMap = new HashMap<>();
private static Booster booster;
// 读取并加载特征文件数据,特征文件第一列是特征ID,第二列是特征数值
// 示例:100 phone_brand:iphone
private static void loadFeature(List<Resource> featurePath) throws IOException {
 for (Resource input : featurePath) {
 BufferedReader reader = new BufferedReader(new InputStreamReader(input.getInputStream()));
 String line;
 while ((line = reader.readLine()) != null) {
 String[] items = line.split("\t");
 featureMap.put(items[1].toLowerCase(), Integer.valueOf(items[0]));
 }
 reader.close();
 }
}
@Data
@AllArgsConstructor
public static class FeatureElement {
 private String featureName;  // 特征名称
 private float featureValue;  // 特征数值
}
// 加载模型文件
private static void loadModel(Resource modelPath) throws XGBoostError, IOException {
 booster = XGBoost.loadModel(modelPath.getInputStream());
}
public static void main(String[] args) throws IOException, XGBoostError {
 byte[] featureBytes = null; // 特征文件bytes
 byte[] modelBytes = null; // 模型文件bytes
 Resource featureResource = new ByteArrayResource(featureBytes);
 Resource modelResource = new ByteArrayResource(modelBytes);
 // 加载模型文件和特征文件
 loadFeature(Lists.newArrayList(featureResource));
 loadModel(modelResource);
 // 构建特征数据,特征数据来源自调用方或者从实时特征库中查询获取
 List<FeatureElement> marrayOrNotFeature = Lists.newArrayList();
 marrayOrNotFeature.add(new FeatureElement("特征1", 100.0f));
 marrayOrNotFeature.add(new FeatureElement("特征1", 20.0f));
 // 构建预测使用的特征数据
 List<Integer> featureIds = Lists.newArrayList();
 List<Float> featureValues = Lists.newArrayList();
 for (FeatureElement element : marrayOrNotFeature) {
 String featureName = element.getFeatureName().toLowerCase();
 float featureVal = element.getFeatureValue();
 Integer featureId = featureMap.get(featureName);
 if (featureId != null) {
 featureIds.add(featureId);
 featureValues.add(featureVal);
 }
 }
 // 通过模型预测结果数值
 int numColumn = featureIds.size();
 int[] colIndex = featureIds.stream().mapToInt(i -> i).toArray();
 long[] rowHeaders = new long[] {0, colIndex.length};
 float[] data = Floats.toArray(Doubles.asList(featureValues.stream().mapToDouble(i -> i).toArray()));
 DMatrix dmat = new DMatrix(rowHeaders, colIndex, data, DMatrix.SparseType.CSR, numColumn);
 // predicts即不同预测结果概率值,根据概率值大小即可确定预测结果
 float[][] predicts = booster.predict(dmat, false, 0);
 dmat.dispose();
}

代码中首先获取特征文件和模型文件的字节数组,然后封装成Resource对象后分别进行加载;其次构建特征数据,特征数据来自请求方或者从实时特征库查询获取;最后构建XGBoost预测所需的数据结构DMatrix并最终获取预测结果predicts。是否已婚标签预测结果包含在二维数组predicts中,该数据包含已婚和未婚的概率,业务可以根据约定的阈值大小确定是否已婚。比如已婚的预测概率是0.68,超过约定的阈值0.65,则可以认为该用户已婚。

实际项目中同时支持实时预测服务的算法模型较多,而且每一个模型的文件大小、计算复杂度和线上调用量都不相同,在资源有限的情况下需要设计合理的架构来支持更多的实时预测模型,图4-15展示了一个可行的实时预测服务架构。

图4-15 实时预测服务架构
图4-15 实时预测服务架构

为了调用方使用方便,实时预测服务需要对外提供统一的接口,但是由于其模型实例化的方式不同,所以需要一个代理层来封装多种不同的实现逻辑。所有的请求统一接入代理层并根据标签配置路由到不同模型服务,不同服务返回的结果也要经过代理层封装后按统一格式返回。以XGBoost模型实例化为例,针对不同的业务可以部署多个模型实例化集群,按业务需求可以实现个性化标签配置和服务性能拓展。在同一个业务集群内,不同模型根据其资源消耗情况被分配到不同的服务节点(物理机或者容器实例),保证资源利用率最大化。模型文件和特征文件更新后可以自动更新到实时预测服务中,保证了服务能力的迭代升级。


本文节选自《用户画像:平台构建与业务实践》,转载请注明出处。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
游戏建模经验分享:模型学习方法
最近通过很多师弟的交流,我发现游戏建模初学者大多存在三个大问题,一是工具的使用不够熟练,甚至有些功能还不知道,二是对布线的规范没有太大的要求和了解,三是对游戏制作流程不清晰和板绘下的功力不够,对贴图制作用工少,甚至有些人还处于一直做白膜的阶段
全栈程序员站长
2022/08/30
3010
游戏建模经验分享:模型学习方法
3d游戏建模全解[通俗易懂]
目前市面上随着3D游戏的兴起和VR的盛行,越来越多人对网络游戏越来越热衷,3D游戏建模设计师的需求也越来越广泛,市场缺口大,人才需求供不应求。
全栈程序员站长
2022/08/26
1.1K0
3d游戏建模全解[通俗易懂]
如何快速学从零开始学习3d建模?
大家好,又见面了,我是你们的朋友全栈君。 其实对于初学者来说,3D建模是一个专业性偏强且极其难入手的游戏制作专业技术。如果是无基础从零开始的学习的话,没有一个好的学习方法和好的指导老师的话,还是比较困
全栈程序员站长
2022/08/19
1K0
如何快速学从零开始学习3d建模?
3D建模大神都在用的学习技巧!
整个互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的5年时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯、电子阅读、网络游戏、虚拟社区、电子商务、远程教育等等。甚至对于旅游业,3D互联网也能够起到推动的作用,一些世界名胜、雕塑、古董将在互联网上以3D的形式来让用户体验,这种体验的真实震撼程度要远超2D环境。我们所接触到的游戏建模,室内建模,数学建模等,包括现在很流行的电子商务,都对3D模式有着很强的需求,可见,未来市场对3D建模这一技术的渴望程度。
全栈程序员站长
2022/08/30
6140
3D建模大神都在用的学习技巧!
3D建模软件中涉及的技术
3D建模可使用建模软件,常用的通用商业3D软件有3Dmax以及Maya,cad 软件有autocad、solidworks、sroe。上面这两类3D软件都可输出3D模型,并导入到ThingJS平台使用。接下来我们来看建模软件中涉及的技术。熟悉了这些,即使你不是专业的3D可视化开发工程师,你是前端工程师,掌握Javascript 语言,便能够在ThingJS平台上自由创作。
要不要吃火锅
2019/10/24
2.4K0
新人如何入行3D游戏建模
所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。 游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不会给开的很高,所以这些人全部跳槽了,成本牺牲太大。虽然到了今天转行做游戏建模的非常多,新手爆满,但是公司招聘一个有开发经验的人还是非常的难,现在的行情不会还像几年前一样,指望自学几个月还还有很多公司要你,现在公司都是要直接能干活,真正掌握技术的人。
全栈程序员站长
2022/08/26
6550
新人如何入行3D游戏建模
浅谈三维激光点云建模
传统倾斜摄影建模对建筑物复杂区域会出现大面积拉花现象,这是难以避免的。也是光学影像建模的劣势。而结合激光雷达电云建模,可以赋予模型更精细的纹理,再加上原本倾斜摄影的贴图,可以达到精细化建模的成果。
陈南GISer
2024/04/30
1.1K0
浅谈三维激光点云建模
游戏模型建模中使用3DMAX的问答总结
很对小伙伴在进行游戏模型建模中,使用3DMAX都有很多问题。这些问题有一些非常经典,因为很多人都曾遇到过。在此我把这些问题整理出来,希望对于刚接触游戏模型建模的小伙伴有所帮助。
边禾
2018/09/05
1.3K0
游戏模型建模中使用3DMAX的问答总结
Autodesk 3dmax 2023.1【附激活补丁+安装教程】中文免费版下载
3DMAX2023是Autodesk公司最新开发的一款三维建模渲染制作软件。我们可以使用该软件完成工业设计、建筑设计、多媒体制作、游戏开发等工作。3DMAX2023百度云还添加了多种丰富灵活的工具,让您可以提高工作效率。3DMAX2023知识兔版还具有非常强大的三维渲染功能,我们可以利用这个软件来完成已经设计好的三维模型的渲染操作,使模型效果变得更加逼真。3DMAX2023知识兔百度云可用于广告、影视、游戏、建筑、工业等不同领域哦!3DS Max是一个强大的3D建模和动画解决方案,游戏开发者,视觉效果艺术家和图形设计师使用,以创建庞大的世界,惊人的设置,和迷人的虚拟现实(VR)体验。
用户10122115
2022/11/13
2.5K0
虚实之间02 | 构建虚拟数字人的第一步居然需要……降维打击?
构建虚拟人数字的第一步需要进行前期的形象设计以及建模。2D数字虚拟人需要原画等形象设计,3D数字虚拟人需要额外使用三维建模技术生成数字形象,无论是基于IP或者真人设计,都需要进行面部以及身体的建模。高保真建模会带来更好的交互体验,也会避免恐怖谷效应的出现。
GIAIAC
2022/06/27
7920
虚实之间02 | 构建虚拟数字人的第一步居然需要……降维打击?
手把手教你制作机房三维场景(3D效果图)
随着信息技术的不断发展,大量数据中心机房的建设、监控软件已经成为机房管理者的重要武器,特别是机房效果图这一块,从简易的CAD到现在的3D效果图,从静态到三维动态的改进,机房监控软件基本上可以说是从无到有的一个过程,下面本文跟大家分享机房高大上的数据中心三维可视化管理软件的三维场景制作过程(俗称:3D效果图的制作过程)。
全栈程序员站长
2022/09/05
4.8K0
手把手教你制作机房三维场景(3D效果图)
Unity3d场景快速烘焙【2020】
很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,好不容易烘焙完了,黑斑、撕裂、硬边、漏光或漏阴影等缺陷遍布,惨不忍睹,整体效果暗无层次,或者苍白无力,灯光该亮的亮不起来,该暗的暗不下去,更谈不上有什么意境,痛苦的折磨,近乎失去了信心,一个团队从建模到程序,都没什么问题,可一到烘焙这一关,就堵得心塞,怎么也搞不出好的视觉效果,作品没法及时向用户交付,小姐姐在这里分享一些自己的经验,希望能帮到受此痛苦折磨的朋友,话不多说,开工!
全栈程序员站长
2022/07/01
4.4K0
Unity3d场景快速烘焙【2020】
游戏场景建模用什么软件?
ZBrush:高模的制作软件,用ZB做角色是很很好的,可是难度系数也挺大,平常要多看看人体的构造,或 找人体写真来把控不一样的人体肌肉转变,多了解多实践。
全栈程序员站长
2022/08/31
2.3K0
影视3D建模和游戏3D建模差异,哪个更有前景?
影视3D建模和游戏3D建模,两者之间最大和最明显的差异是:游戏开发永远有多边形建模预算。影视建模方面,对于多边形数量都没有限制。
全栈程序员站长
2022/08/31
1.3K0
影视3D建模和游戏3D建模差异,哪个更有前景?
玩转C4D丨3D视觉设计必备指南
导语 随着三维视觉逐渐向二维视觉领域渗透,视觉3D化已经成为当下非常热门的一种表现形式 3D技能也已经加入了视觉设计师必备技能包中。如今市面上也有很多3D软件可供设计师进行选择,如3D MAX,MAYA,犀牛等,这些软件在动画,工业设计,游戏等领域,确实有着非常完善的工作流,但是对于从来没接触过3D领域的视觉设计师来说上手难度相对比较高,它们适合更垂直领域的使用人群。 而C4D作为3D软件后起之秀,以其强大的兼容性,易上手的操作模块,超拟真的物理模拟解算等,深得视觉设计师的喜爱,无论是运营,UI,
腾讯ISUX
2021/12/28
1.8K0
从入门到实战丨C4D自学必备指南
导语 近年三维表现已经越来越多的融入到各种商业设计当中,在电商、品牌、UI、影视等各个领域都有广泛的运用。其中一个关键因素是C4D这款软件的出现,大大降低了3D设计的学习门槛。 C4D相对于专业性更强、功能较为复杂的3DMax、Maya、ZBrush等软件,界面更加简洁友好,对于没有接触过3D的的小白,学习成本更低。配合Octane、Redshift等渲染器,可以很快做出强视觉表现力的效果。凭借这种操作友好、易出效果的特性,C4D很快成为了近年最流行的3D设计软件之一。 本文结合作者自身的经验整理了一波自学
腾讯ISUX
2023/02/03
1.4K0
从入门到实战丨C4D自学必备指南
iPad 建模 | 三维形象创意指南
一、序言 3D设计风格已经在越来越多的设计领域被广泛应用,其视觉表现和设计技法,也随着行业发展在不断进化演变着。我们可以发现,今天的3D设计已不仅是“立体感”和“真实性”的代名词,三维设计作品,已进化表现为更细腻多元的质感、更精致的高维建模、更丰富的色彩表现、以及更具艺术性的设计语言。但这些更成熟的表现通常对设计师具有很高的要求,也需要花费很大的精力时间去调试。如果你不是一个专业三维设计师,但却很想涉及这个领域,通常会被各种3D软件、渲染器、以及超高的硬件配置等较高门槛而劝退,或是花费很长时间去学习。但是,
腾讯ISUX
2022/12/24
1.5K0
iPad 建模 | 三维形象创意指南
如何搭建3D虚拟数字人自动捏脸系统
随着数字人产品不断的迭代和发展,对于用户来说,属于自己的个性化的数字人不可或缺,在数字人产品中常见的3D数字人个性化设定的方式主要由3种进行捏脸,模板选择方式、自由调整方式、自动捏脸。首先简单介绍一下模板选择和自由调整方式后,再详细介绍自动捏脸。01
产品言语
2023/09/09
1K0
如何搭建3D虚拟数字人自动捏脸系统
(一) 3D图形渲染管线
渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景(如图1):
bering
2019/12/02
1.5K0
CPU显卡内存与3DMAX渲染的关系
图形渲染CPU重要还是显卡重要?3D渲染、三维建模速度和显卡有关吗?三维制图电脑配置!3D设计用什么显卡
py3study
2020/01/09
3.6K0
推荐阅读
相关推荐
游戏建模经验分享:模型学习方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档