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

news/2024/11/28 7:42:48/

一、前言

根据埃森哲最新一项调查,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.ppmy.cn/news/1086760.html

相关文章

智慧班牌全套源代码 智慧班牌人脸识别云平台源码

智慧校园云平台电子班牌系统源码,系统架构:Javavue2springbootMySQL elmentuiQuartzjpajwt 智慧校园建设在近年来已经形成主流,不少地区等级的学校都在不同程度地进行校园信息化建设优化,比如把人脸识别门禁应用到校门口、宿舍门口…

Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的

编辑器运行没有问题,但是安卓就有问题,在平板上运行就会报错: vulkan graphics API is notsupported 说不支持Vulkan图形API,解决方法:把Vulkan删除掉

单元归结法证明例题

用单元归结法(unit resolution),证明 A1∧A2∧A3→B 其中 A1 (∀x){(D(x) → E(x)) → (∃y)(F(x,y)∧H(y))} A2 (∃x){D(x)∧G(x)∧(∀y)(F(x,y) → G(y))} A3 (∀x)(E(x)∨G(x)) B (∃x)(H(x)∧G(x)) 为了证明A1∧A2∧A3→B,我们将表达式转化成否定…

hadoop 国内镜像 极速下载

文章目录 国内镜像汇总-极速下载【JavaPub版】 lucene国内镜像 https://mirrors.cloud.tencent.com/apache/hadoop/common/ 国内镜像汇总-极速下载【JavaPub版】

《算法竞赛·快冲300题》每日一题:“浇水”

《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 浇…

Android——线程和线程池

线程和线程池 AsyncTaskIntentService线程池ThreadPoolExecutorFixedThreadPoolCachedThreadPoolScheduledExecutorSingleThreadExecutor AsyncTask 使用案例可看Android基础——异步消息处理,需要注意 AsyncTask必须在主线程中加载,在ActivityThread的…

机器学习部分知识点总结

文章目录 基本概念N与NP泛化能力性能度量比较检验 线性回归逻辑回归神经网络 基本概念 N与NP P问题:一个问题可以在多项式(O(n^k) 的时间复杂度内解决 例如:n个数的排序(不超过O(n^2)) NP问题:一个问题的解…

CS420 课程笔记 P6 - 游戏逆向中的虚拟内存

文章目录 IntroVirtual memoryExample!Static example Intro 在上个视频中,我们知道有些地址在你重进游戏时就会无效,有的有时有效,我们需要了解称为虚拟内存的东西 记住这些信息:当你双击打开 Squally.exe 游戏时,系…