算法模型嵌入式 Mendix应用的开发示例

一、前言

根据埃森哲最新一项调查,2023年67%的企业持续加大在技术方面的投入,其中数据和AI应用是重中之重。AI在企业内部应用这个话题已经保持了十多年的热度,随着ChatGPT为代表的生成式AI技术的出现,这一话题迎来又一波的高潮。

1.png

生成式AI展示出来的能量固然让人惊叹,企业也应该密切跟进,找到AI创造业务价值的新的结合点。与此同时,站在一个AI新时代(目前看起来是如此)的转折点,企业也有必要回顾一下,过去十多年在AI 应用方面的举措是否达到预期,投入产出是否还有提升空间。

二、问题提出

笔者最近亲历两个客户都在应用AI,在使用方式上却有不同。

客户1: 某外国银行客户,正在推进数字化银行的5年战略计划,拥有230+人的IT团队,另外有15人的数据科学团队隶属于运营部门。与IT团队沟通低代码同时,我们询问这15人的数据科学团队的具体工作,得知其主要是对银行C端B端客户的交易数据进行历史分析,建立机器学习模型并对将来业务进行预测,向运营VP和其它高管提供数据报表,有定期的也有临时的。而这个岗位的平均薪资是IT开发人员的2倍。

客户2: 某国内高科技客户,从事高分子材料的研究和产品开发。其研发团队(非IT)员工基本都有数据分析背景,使用Python进行数据处理是其日常工作,核心研究也涉及机器学习算法的训练。IT部门在向研发部门提供数字化服务时,有大量需要融合算法模型的应用开发需求,目前的做法是应用与Python算法服务独立运行,应用调用Python接口。

对比来看,客户1 的AI投入显著,但产出并未与业务流程强耦合,而是以离线报表的形式供决策者主观参考。这一现象可以称之为“未打通AI应用的最后一公里”,这种模式下ROI往往受限。客户2 业务类型决定了必然有懂算法和数据分析的研发人员,而非额外投入,但难点在于IT部门如何承接研发部门的产出。应用与算法服务独立部署、接口调用固然技术可行,但从应用开发、运维、同步扩展、迁移等角度,会存在效率低下的问题。

三、Mendix的答案

Mendix对于AI在企业应用构建中发挥作用的设想是完全嵌入式的,即在应用全生命周期都应该融入AI的能力。

2.png

  • 应用开发阶段:Mendix IDE自带AI机器人,一方面可以实现基于微流上下文件推荐逻辑组件,另一方面可以扫描整个工程根据Mendix开发最佳实践推荐工程改进建议。预计年底推出的生成式AI能力,Mendix Chat 将最终实现与开发者基于自然语言交流,实现实体和微流的自动生成。

3.png

  • 应用运行阶段:Mendix ML Kit 可以解析ONNX格式的机器学习算法模型,并通过Call ML Kit组件将算法模型按需内嵌到业务流程(微流)中。另外,Mendix 运行时环境中融入了ONNX模型运行时,确保在一套部署环境之下可以同时执行应用程序和算法模型。

4.png

四、示例应用

这里我们打算构建一个销售量预测的场景应用。这个应用核心是算法模型和数据,其次是应用体验。

算法模型和数据

Mendix本身不提供算法,而是在企业自有算法模型之上集成并运行算法。因此,本示例中我们借用Kaggle社区的一个竞赛方案,链接地址https://www.kaggle.com/code/konradb/ts-4-sales-and-demand-forecasting/notebook

历史数据是由沃尔玛提供的3家门店过去5年期间某些商品的销售记录。

5.png

算法目标是基于历史销售记录建立预测模型,对给定时刻起28天特定SKU的销量。

引用的竞赛方案选用的是LGBM模型的回归预测。该算法在150轮训练后RMSE趋于稳定。

6.png

下载竞赛方案 Pynote,通过阅读代码了解算法选取逻辑和数据处理逻辑。该方案中对于过去5年间的销售记录作了如下的特征提取:

  • 对商品、门店、商品类别进行类别化(categorization)处理,即转化为整形数值

  • 对销售数量进行时间序列的特征处理,选取了28天前销售、28天前时刻的最近一周平均销量、28天前时刻的最近四周平均销量

  • 对销售日期分解为月份、季度、月度日期等3个整形数值

7.png

注意:以上的特征提取过程,也是后面在Mendix中构建应用时对业务数据预处理的过程。处理过的业务数据才能作为算法模型输入,获得预测输出。这个示例中,为了简化直接借助原始Python代码对预测数据集进行了特征提取。

模型转化

Mendix ML Kit接受ONNX格式的算法模型,这是一种主流的模型中间格式。Pytorch、TensorFlow、ScikitLearn、Caffee等框架下的模型都有转化ONNX格式的标准工具。更多关于ONNX格式和转换可参考知乎文章。

在原方案中训练好算法模型之后,加上以下Python代码将模型转化并保存为ONNX格式。

8.png

常见的ONNX转化工具包括以下Python 包:

  • onnxmltools

  • convert_sklearn

  • torch.onnx

  • tf2onnx

实际工程中根据算法模型的训练框架选取合适的工具即可。

模型可视化

对于ONNX格式的模型,我们可以借助可视化工具直观理解模型的输入、输出和中间算子(operator)。

这里我们用https://netron.app在线网站查看前面保存下来的ONNX算法模型。

9.png

从图可以清晰看出,该模型输入为长度为10的32位浮点型数组,输出为单个32位浮点型数值,中间算子是一个回归运算算子。输入和输出的-1表示Batch值,在这个算法模型中都为1.

注意:这里的算子是经转换后ONNX对应的实现算子,和原始算法有可能不一一对应,这部分内容不在Mendix主体范围,有兴趣可以阅读相关资料详细了解。

模型导入

ONNX格式算法模型有了,并通过可视化对模型有个直观理解之后,我们就可以开始在Mendix环境中的工作。

第一步就是将模型导入Mendix。在add others中找到ML model mapping.

10.png

选择前面保存的ONNX格式文件。

11.png

导入后得到如上图映射关系,并自动生成输入和输出两个实体。

12.png

注意观察:输入实体只有唯一属性,且是字符串类型,这和我们前面观察到的算法模型有长度为10的32位浮点型数组不一致。正因为如此,我们需要在Mendix中调用模型时,对数据进行预处理,将含有10个浮点型(Mendix中用Decimal)的特征字段转化为字符串类型。输出实体有一个Decimal类型属性,可以直接作为销量预测结果在应用中使用,无需额外处理。

模型调用并数据预处理

创建一个子微流,它可以在其它需要的地方被调用,实现模型调用的基础功能。

13.png

从IDE右侧的工具箱是选取 Call ML Model组件,配置已导入的模型名称、输入输出实体对象。

其中,输入实体对象需要通过一个JavaAction对原始业务数据进行预处理,该JavaAction输入为包含10个特征字段的实体对象,输出为模型映射指定的 ML_Input_Entity_LGBModel.

JavaAction的实现逻辑如下所示:

14.png

注意:对于不同业务数据类型如数值、文本、图片、音频、视频,数据预处理逻辑方式不同,但有固定做法。这是机器学习领域工程师应该掌握的技能,在此不详细展开。

至此,调用算法模型进行预测的子微流构建完毕。

应用设计

接下来我们要构建应用的用户交互层,这个示例中我们设计了以下模块:

  • 主数据模块:用于维护门店、商品等主数据。

  • 交易数据查看模块:用于查看历史销售记录、待预测记录等。

  • 数据导入模块:用于数据从Excel数据集到Mendix的导入。

  • 销售预测绘图模块:用于图形化展示门店/商品组合的历史销量和销量预测。

15.png

效果展示

主数据维护

16.png

数据导入

44ac2467-aef0-4e8f-a4a8-1540b7f0c1cf.png

交易数据查看

sales record.png

未来销量预测

sales feature.png

销量预测图表

chart.png

当然,以上只是基础展示效果,在实际业务应用中,可以将销量预测结果融入采购、仓储、物流等计划执行中,在需要的地方调用Sub_Model_Call 子微流即可,实现算法模型嵌入式的业务流程,让最后一公里变得更为简单。

五、总结

Mendix 提供基于ML Kit的机器学习算法模型嵌入组件,支持Pytorch、Tensorflow、Scikitlearn、Caffee等主流训练框架下的算法模型转化为ONNX格式后导入应用,在所需要的业务流程中通过一个Call ML Model组件轻松被调用。这种方式下,算法模型和业务应用在一套运行时环境中,相比传统的算法服务独立运行并通过接口调用的方式,不仅构建更快,而且调用延时更低,还方便统一运维,打通应用最后一公里,实现算法模型对业务的赋能。

本示例提供了端到端的开发实现参考。如果您手头正有融合算法模型的应用开发需求,或者您已经在使用Mendix希望融合算法模型,可以在评论区留下联系方式,我们会与您沟通并提供所需帮助。

关于Mendix公司

在一个数字化先行的世界中,客户希望自己的每一项需求都得到满足,员工希望使用更好的工具来完成工作,而企业意识到自己只有通过全面数字化转型才能生存并取得成功。Mendix公司,a Siemens business正在迅速成为企业数字化转型的推动者。其业内领先的低代码平台和全方位的生态系统整合最先进的技术,帮助企业创造出提高互动性、简化操作和克服IT瓶颈的解决方案。Mendix公司以抽象化、自动化、云和协作为四大支柱,大幅提升开发者的生产力,并且依靠自己的工程协作能力和直观的可视化界面,帮助大量不熟悉技术的“公民”开发者在他们所擅长的领域创建应用程序。Mendix公司是权威行业分析师眼中的领导者和远见者,也是一个云原生、开放、可扩展、敏捷和饱经考验的平台。从人工智能和增强现实,到智能自动化和原生移动,Mendix公司已成为数字化先行企业的骨干。Mendix公司企业低代码平台已被全球4000多家领先的公司采用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/121339.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代C++中的从头开始深度学习:【6/8】成本函数

现代C中的从头开始深度学习:成本函数 一、说明 在机器学习中,我们通常将问题建模为函数。因此,我们的大部分工作都包括寻找使用已知模型近似函数的方法。在这种情况下,成本函数起着核心作用。 这个故事是我们之前关于卷积的讨论的…

spring集成mybatis

1、新建一个javaEE web项目 2、加入相关依赖的坐标 <dependencies><!--数据系列&#xff1a;mybatis,mysgl,druid数据源,junit--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</grou…

【MySQL】数据库的约束

MySQL 数据库的约束 文章目录 MySQL 数据库的约束01 数据库的约束1.1 约束类型1.1.1 NOT NULL1.1.2 UNIQUE1.1.3 DEFAULT1.1.4 PRIMARY KEY1.1.5 FOREIGN KEY1.1.6 CHECK 继上文 MySQL基础&#xff08;一&#xff09;&#xff0c; MySQL基础&#xff08;二&#xff09;&#…

视频监控/视频云存储EasyCVR平台接入华为ivs3800平台提示400报错,如何解决?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频云存储/安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频…

java之SpringBoot基础篇、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制作&#xff08;二&#xff09;JC-1-3.SpringBoot入门程序制作&#xff08;三&#xff09;JC-1-4.SpringBoot入门程序制作&#xff08;四&#xff09;…

uniapp从零到一的学习商城实战

涵盖的功能&#xff1a; 安装开发工具HBuilder&#xff1a;HBuilderX-高效极客技巧 创建项目步骤&#xff1a; 1.右键-项目&#xff1a; 2.选择vue2和默认模板&#xff1a; 3.完整的项目目录&#xff1a; 微信开发者工具调试&#xff1a; 1.安装微信开发者工具 2.打开…

vue 使用qrcode生成二维码并可下载保存

安装qrcode npm install qrcode --save代码 <template><div style"display: flex; flex-direction: column; align-items: center; justify-content center;"><div>查看溯源码&#xff0c;<a id"saveLink" style"text-decorati…

【算法与数据结构】654、LeetCode最大二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;【算法与数据结构】106、LeetCode从中序与后序遍历序列构造二叉树这两道题有些类似&#xff0c;相关代…

视频号如何做视频任务进行变现

上节给大家分享了在视频号中的视频如何挂橱窗商品链接进行变现 如果有不清楚的&#xff0c;可以看我上一条视频 以防失联&#xff0c;建议点赞&#xff0c;收藏&#xff0c;加关注 今天跟大家分享的是视频号如何做任务进行变现 只要参与视频号平台变现任务&#xff0c;一条视频…

固定资产管理怎么写报告

撰写固定资产管理报告时&#xff0c;需要考虑以下几个维度的数据&#xff1a;  资产总量和分类&#xff1a;列出公司的固定资产总量、种类以及各类型资产的数量。  资产使用情况&#xff1a;统计各类型资产的使用率、闲置率、报废率等数据&#xff0c;以及不同部门的资产使…

QT多线程

1.QT4.7以前的版本-----线程处理方式 1. 出现的警告 直接使用从UI—>转到槽&#xff0c;就会出现警告 2. 出现的错误 error: invalid operands of types QTimer* and void (QTimer::*)(QTimer::QPrivateSignal) to binary operator& 错误:无效的操作数类型’QTimer…

TikTok Shop启动东南亚跨境9.9大促,重要性类比“黑五”

TikTok Shop启动东南亚跨境9.9大促 据了解&#xff0c;TikTok Shop即将开启东南亚99大促活动&#xff0c;其重要程度可类比于“中国的双11”“美国的黑色星期五”等购物节日&#xff0c;且整合了包括马来西亚、新加坡、菲律宾、越南和泰国五个国家站点的大促资源、推出相关的流…

(15)线程的实例认识:同步,异步,并发,并发回调,事件,异步线程,UI线程

参看&#xff1a;https://www.bilibili.com/video/BV1xA411671D/?spm_id_from333.880.my_history.page.click&vd_source2a0404a7c8f40ef37a32eed32030aa18 下面是net framework版本 一、文件构成 1、界面如下。 (1)同步与异步有什么区别&#xff1f; …

ASP.NET Core 中基于 Controller 的 Web API

基于 Controller 的 Web API ASP.NET Wep API 的请求架构 客户端发送Http请求&#xff0c;Contoller响应请求&#xff0c;并从数据库读取数据&#xff0c;序列化数据&#xff0c;然后通过 Http Response返回序列化的数据。 ControllerBase 类 Web API 的所有controllers 一般…

Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)

多线程案例 一、设计模式&#xff08;单例模式工厂模式&#xff09;1、单例模式2、工厂模式 二、阻塞式队列1、生产者消费者模型2、阻塞对列在生产者消费者之间的作用3、用标准库阻塞队列实现生产者消费者模型4、模拟实现阻塞队列 三、定时器1、标准库中的定时器2、模拟实现定时…

MLOps:掌握机器学习部署:Docker、Kubernetes、Helm 现代 Web 框架

介绍&#xff1a; 在机器学习的动态世界中&#xff0c;从开发模型到将其投入生产的过程通常被认为是复杂且多方面的。 然而&#xff0c;随着 Docker、Kubernetes 等工具以及 FastAPI、Streamlit 和 Gradio 等用户友好的 Web 框架的出现&#xff0c;这一过程变得比以往更加简化…

【知识积累】准确率,精确率,召回率,F1值

二分类的混淆矩阵&#xff08;预测图片是否是汉堡&#xff09; 分类器到底分对了多少&#xff1f; 预测的图片中正确的有多少&#xff1f; 有多少张应该预测为是的图片没有找到&#xff1f; 精确率和召回率在某种情况下会呈现此消彼长的状况。举个极端的例子&#xf…

Leetcode---360周赛

题目列表 2833. 距离原点最远的点 2834. 找出美丽数组的最小和 2835. 使子序列的和等于目标的最少操作次数 2836. 在传球游戏中最大化函数值 一、距离原点最远的点 这题主要是理解题意&#xff0c;遇到L往左走&#xff0c;遇到R往右走&#xff0c;遇到_左右都可以走&#x…

企业做微信小程序开发的好处

一、引言 在移动优先的时代&#xff0c;微信小程序为企业提供了新的营销方式和用户交互方式。微信小程序具有轻便、易用、可跨平台等特性&#xff0c;使得企业可以快速触达广大用户。本文将详细探讨企业做微信小程序开发的好处。 二、微信小程序对企业的好处 增加品牌知名度&…

Weblogic SSRF【漏洞复现】

文章目录 漏洞测试注入HTTP头&#xff0c;利用Redis反弹shell redis不能启动问题解决 Path : vulhub/weblogic/ssrf 编译及启动测试环境 docker compose up -dWeblogic中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而攻击内网中redis、fastcgi…