自动化建模 | H2O开源工具介绍

点击「京东数科技术说」可快速关注

「引言」相信很多读者在日常的建模工作中都会或多或少地思考一个问题:建模可不可以被自动化?今天笔者围绕这个问题向大家介绍一个开源的自动建模工具H2O。本文将会cover以下三个部分:

1、H2O工具是什么;

2、基于H2O自动建模的具体流程与实战代码展示;

3、关于自动建模的一些思考。

希望本文能够帮助到大家,尤其是在创业公司或中小型企业的读者,当你们没有足够的算法工程师但又想利用大数据建模提升企业效率的时候,使用自动建模工具也许是一个不错的选择。


H2O简介

H2O.ai是初创公司Oxdata于2014年推出的一个独立开源机器学习平台,它的主要服务对象是数据科学家和数据工程师,主要功能就是为app提供快速的机器学习引擎。目前它在全世界服务超过18,000家企业,服务用户数超过20万。根据H2O官网的介绍,它的主要优点包括:

  • 支持大量的无监督式和监督式机器学习算法

  • 支持通过R与Python进行引入包的方式进行模型的开发

  • 能够提供给用户一个类似于jupyter notebook的UI界面进行“托拉拽”式的模型开发

  • 支持模型的快速部署(用户可以在训练后下载基于Java的POJO和MOJO文件)

  • 支持自动化建模和自动化参数调优


H2O实战练习

大家可以使用在Python或R中引入H2O包的形式进行该工具的使用,也可以下载软件在UI界面进行托拉拽的操作。

一、基于H2O Python包的机器学习实现

首先让我们在Python环境中看看如何使用这个工具进行建模(目前支持Python版本为2.7/3.5/3.6)。

1、下载安装包

首先我们在安装包之前先进行依赖包的安装,最后下载并安装h2o的whl文件,如下(使用H2O之前请读者务必在服务器或本地安装Java):

安装完毕后进入Python环境(我们这里使用的是Jupyter Lab的交互环境,类似Jupyter Notebook)。

2、引入包并查看环境

引入h2o的包后可以查看到目前集群的状态,如下

现在可以看到集群的内存、cores、python版本等信息;另外h2o.ls()命令类似于Linux中的ls命令,它可以告诉我们目前读取到内存的数据集以及训练好的模型Object有哪些,由于还没有引入数据、也没有训练任何模型,因此没有任何objects。

3、引入、查看、整理数据集 

下面通过h2o引入并查看一个用来训练的数据集,该数据集为电商场景的二分类数据,特征包括一些用户RFM、浏览、加购等信息,y为用户是否会在之后7天内下单购物。

在进行导入数据后,发现user_id(这里叫pin)依然在数据集中,我们进行列删除操作。

同时,由于要训练的是二分类(classification)模型,所以需要将y(这里为buy_tag)的类型从int改为enum枚举值,这样在模型的训练过程中会默认选择AUC作为评价指标。

4、导入模型module并建立模型object

这里选择GBM这个基于树的算法进行模型的开发,并设置100个树,最大深度设置为10,并设置10折交叉验证。

5、训练模型并展示训练结果

这里train()的参数非常多,我们找一些重点来举例; x为特征的名字集合,y为label,training_frame为训练集。

当然用户也可以通过将数据集分为训练集、测试集的方式来获取out-of-sample AUC等指标,这里通过交叉验证来获取该指标。训练完毕后可以进行效果展示。

可以看到在模型结果中H2O自动帮用户计算了大部分评价指标,在这个二分类任务中我们重点看AUC,可以发现在cross-validation数据集上的AUC为0.824,效果还不错

同时结果中默认给出了能够是F1 score达到最大的阈值(在这里为0.316)以及相应的混淆矩阵。

由于不同模型涉及到不同参数,具体模型参数设定可见H2O的官方文档 

http://h2o-release.s3.amazonaws.com/h2o/rel-xu/4/docs-website/h2o-py/docs/modeling.html

目前H2O支持的监督模型包括:

  • H2ODeepLearningEstimator(深度神经网络)

  • H2OGradientBoostingEstimator(梯度提升树)

  • H2OGeneralizedLinearEstimator(线性回归)

  • H2ONaiveBayesEstimator(朴素贝叶斯)

  • H2ORandomForestEstimator(随机森林)

  • H2OStackedEnsembleEstimator(组合模型)

据官网介绍,之后H2O还会引入目前常用的tensorflow等组件来支持不同深度学习算法的使用,所以大家敬请期待。

6、H2O自动建模

在上节展示单模型建立的流程后,来看一下H2O最强大的功能,AutoML,自动建模。

读者如果在尝试自动建模的时候,请尽量设置max_models或者max_runtime_secs这样的参数来设置要训练的模型个数上线或最长训练时间,因为自动建模的底层会尝试对用户所选择的模型的参数进行GridSearch(网格搜索),以此来进行模型超参的调优。若没有设置好模型个数上线或最长训练时间,可能会出现跑了很久依然没有结束的情况。

同时可以看到一旦开始了自动建模,H2O很友好地提供了一个进度条来帮助查看建模进度。

训练完成后查看模型基于训练集AUC的排名,如下图:

这个排名版展示了所有所训练的100个模型中AUC前10高的模型,在图中可以清晰地看到最优的模型为组合模型(StackedEnsemble_AllModels),AUC为0.825。前10名中还包括像XGBoost和GBM一样的基于树的模型,AUC也相当不错。

值得一提的是,组合模型中AllModels与BestOfFamily的区别在于:前者是将所有训练好的模型作为base model进行融合,后者是通过各个模型family中最好的那个模型作为base model进行融合(融合方式默认为GLM线性回归)。

然后查看自动建模得到的最优模型在测试集上的效果,发现out-of-sample AUC依然高达0.820,说明没有明显的过拟合,自动建模完成!

7、H2O模型部署

在训练完模型之后,最后一步便是模型的部署,可能各位读者在平日操作中对于这一步比较苦恼,因为若使用sklearn这样的经典机器学习包在训练完模型后,模型本身是不支持在Hive集群进行分布式打分的。当需要打分的数据集过大的时候,我们没有办法一次性将其读入内存并进行打分,因此只能通过batch读取的方式按批次来进行预测打分,这样一来就需要用户花时间来写一些python或者bash的脚本。

但是H2O提供了一个非常好的模型部署流程,它一方面支持用户像sklearn那样将一个模型文件下载到本地,又支持用户进行POJO或者MOJO文件的下载。而这里所说的POJO和MOJO文件分别是Plain Ordinary Java Object和Maven plain Old Java Object,作用是优化开发人员的模型部署流程,并且支持在Hive上进行模型打分UDF的改写。一旦通过POJO或者MOJO实现了模型打分UDF函数的编写,模型的打分在集群上就是分布式的,速度会非常快。

笔者尝试了batch打分和分布式打分的两个流程,发现若对3000万行的数据进行非分布式的batch打分,总共用时25分钟,而分布式的打分则总共用时不到1分钟,效率提升很多。

由于具体的改写流程较细,因此大家若对这部分内容感兴趣,可以在H2O的官网和他们的github中找到相关的现成代码,助力模型部署。

http://h2o-release.s3.amazonaws.com/h2o/rel-xu/4/docs-website/h2o-py/docs/h2o.html?highlight=pojo#h2o.download_pojo

二、可视化建模UI工具

除了在python或者R通过代码实现建模以外,H2O还为我们提供了一个很用户友好的UI界面来实现“托拉拽式建模”,下图为这个工具的(H2O Flow)主界面:

这个工具相当于一个图形界面,底层依然是我们上面介绍的那些代码,它的好处是可以帮助企业中对于python或者R语言不太熟悉的业务人员进行快速模型的建立。

由于篇幅问题,我们这里主要讲一下它每个功能点的具体含义,详细操作大家可以参照官网的用户手册进行学习。值得一提的是,这个图形界面非常的用户友好,笔者当时仅用了1-2个小时就熟悉了基本操作,相信大家一定也能很快的学会使用。功能解释:

  • importFiles(读取数据集)

  • importSqlTables(读取SQL表)

  • getFrames(查看已经读取的数据集)

  • SplitFrame(将一个数据集分成多份数据集)

  • mergeFrame(将两个数据集进行列组合或行组合)

  • getModels(查看所有训练好的模型)

  • getGrids(查看网格搜索的结果)

  • getPredicitons(查看模型预测结果)

  • getJobs(查看目前模型训练的任务)

  • runAutoML(自动建模)

  • buildModel(手动建立模型)

  • importModel(从本地读取模型)

  • predict(使用模型进行预测)



关于自动建模的一些思考

读到这里,读者除了对H2O有了一些基本了解之外,也一定和笔者一样思考着同一个更宏大的问题,那就是如何看待自动建模与机器学习的未来。想必大家一定在许多媒体报道或者公众号中读过类似这样的文章:“AI时代来了,最容易消失的100种职位”。对于从事商业分析、数据分析、数据挖掘、数据工程、算法工程的用户,可能多少也想过这样的自动建模技术能在多大程度上代替我们现有的一些日常工作。它会完全取代我们现有的建模过程么?还是说它目前效果不好,我们无需担心?

笔者个人认为,看待“手动建模”和“自动建模”这两者的关系可以参考“有人驾驶车”和“无人驾驶车”这两者的关系。我相信,就算短期内无人驾驶车可以上路,交通部门也一定会要求驾驶人员具有一定的驾驶技术,以确保在无人驾驶发生意外之时能够让用户进行手动操作。同理,在如今各大公司都开始慢慢探索自动建模技术的时候,我们依然需要拥有求知欲和一颗敬畏之心,在尝试自动建模技术之前深入了解一些模型算法本身的技术,这样一来,虽然可以更多地在工作中使用自动建模,但是一旦出了问题,我们也可以从“自动”切换为“手动”来迅速地解决模型部署上的问题,而不至于干着急。

另一方面,读者也许会发现,目前自动建模领域所涉及的领域更多的还是浅层学习,还没有发展到可以自动建立CNN或者RNN那样的地步,毕竟后者还是一个新兴的前沿领域,许多算法工程师依然在图像识别、语音识别、阅读理解领域不断创新探索新的算法。这方面的工作暂时不太会被自动建模技术所取代(H2O官网上有写到未来可能会集成tensorflow的建模框架,但目前来看暂时还没有开源的资源)。

那么,如果自动建模技术在5年内真的渗透到我们工作中的各个领域后,基础的数据挖掘和算法工程师该如何体现自己的价值呢?我认为起码有这两点:

  • 对于业务的深度理解:虽然模型可以进行自动训练,但是前期与业务方的建模需求整合,特征工程,变量清洗等工作还是需要人来参与,因为业务知识是暂时没有办法教给机器的。

  • 对于模型应用场景的选择:如何去应用模型以及选择最优的应用场景也是需要人来判别的,机器本身是没有正负情感的。

如果大家对于自动建模有新的想法,欢迎随时与我们联系,一起交流进步!

 

 关于我们

京东数科运营决策团队基于大数据环境,结合丰富的业务场景,利用机器学习专业技术,不断挖掘海量数据中蕴含的丰富信息,我们已将一系列机器学习模型应用到多个领域中,并且坚持在算法深度的道路上持续探索,致力于对未知信息和事件做出更精准预测,使业务运营策略更加精准有效。

您如果有优秀的、好用的、提升工作效率的工具,推荐给大家吧?

留言轻松拿小礼物喽!!!

京东数科技术说&技术课堂

   ▼▼▼     

由京东数科-技术研发部策划组织

倡导“原创·实用·技术·专业”

致力于分享技术领域实战经验与技术干货

线上订阅“京东数科技术说”,线下聆听“技术课堂”

为加强技术分享、总结沉淀,提升数科技术影响力而搭建的

线上线下融合交流平台

不只一技之长 · 我有N技在手

 咨询、建议、合作请联系:

刘嘉璐(liujialu)/张明瑛(zhangmingying3)

长按识别二维码关注我们

相关推荐

业务复杂度治理方法论--十年系统设计经验总结

软件设计的核心在于降低复杂性。--《软件设计的哲学》业界对于复杂度并没有统一的定义,斯坦福教授John Ousterhout从认知负担和工作量方面给出了一个复杂度量公式子模块的复杂度cp乘以该模块对应的开发时间权重值tp,累加后得到系统的整体复杂度C这里的子模块复杂度cp是一个经验值需要注意:如果一个子系统特别复杂,但是很少使用及修改,也不会对整体复杂度造成太大影响。例:spring框架内部代码较为复杂,但由于几乎不需要我们去变动,所以对系统的整体复杂度影响并不大。

JDDTechTalk的博客 2444

【转载】golang内存分配

在 1.10 以前 go 的堆地址空间是线性连续扩展的, 比如在 1.10(linux amd64)中, 最大可扩展到 512GB. 因为 go 在 gc 的时候会根据拿到的指针地址来判断是否位于 go 的 heap 的, 以及找到其对应的 span, 其判断机制需要 gc heap 是连续的. 但是连续扩展有个问题, cgo 中的代码(尤其是 32 位系统上)可能会占用未来会用于 go heap 的内存. 这样在扩展 go heap 时, mmap 出现不连续的地址, 导致运行时 throw.

JDDTechTalk的博客 1485

自增主键去哪了?---一次开发过程中的思考

MySQL是作为大家都经常接触的DB,相信大家都会有一定的认知,自增主键不连续大家肯定也遇到过,这次在联调过程中遇到这个情况,在跟别的小伙伴分享的时候,突然就想写一篇文章,文章里面如果有不正确或者不准确的地方也欢迎大家斧正~说实话,作为一名交易端的研发人员,业务开发任务压力真的蛮大的,我也迷茫过,如何在这个过程中成长,珍惜我们遇到的问题,将遇到的问题记录在册,深追问题,你会发现有很多问题其实真的是因为我们某些知识的薄弱点造成的。

JDDTechTalk的博客 1679

万字长文浅谈三高系统建设方法论和实践

整个软件的发展历程是一部软件复杂性对抗史,软件的复杂性分为技术复杂性和业务复杂性,业务复杂性主要是建模和抽象设计,技术复杂性主要是三高(高性能,高并发,高可用)的应对,C端的业务一般以技术复杂性为主,业务复杂性为辅,而B端或者M端的业务通常以业务复杂性为主,技术复杂性为辅。本篇文章主要是从后端研发的视角结合自己多年的B C端系统建设实践谈下三高系统的建设方法论和实践,希望和大家相互交流,共同进步,同时这是我参与创作者计划的第1篇文章。

JDDTechTalk的博客 2527

Vision Pro开发实践(结合24黑马idea)

利用ModelEntity加载模型,添加到RealityView的content中展示,这样可以对模型做各种操作,比如添加子模型,修改光照,材质等要素。举个例子来讲,我需要在运动鞋模型“sneaker”上面添加一个可以与用户交互的白色圆点模型,用于在用户点击的时候添加/展示对应部分的评价。这次结合的idea是我参加黑马比赛时想到的,主要内容是:在商品评价时增加商品的3D模型,用户可以在虚拟现实环境中查看商品的3D模型,并对模型的特定位置进行评论。:通过3D模型动画,用户可以直观地了解产品的特性和使用方法。

JDDTechTalk的博客 2174

买药秒送 JADE动态线程池实践及原理浅析

买药秒送是健康即时零售业务新的核心流量场域,面对京东首页高流量曝光,我们对频道页整个技术架构方案进行升级,保障接口高性能、系统高可用。动态线程池是买药频道应用的技术之一,我们通过3轮高保真压测最终初步确定了线程池的核心参数。但我们仍面临一些保障系统稳定性问题:如何监控线程池运行状态?以及因流量飙升出现任务堆积和拒绝时能否实时报警,线程池核心参数能否做到不重启应用,动态调整即时生效?经调研,业界成熟的动态线程池开源项目有dynamic-tp和hippo4j。

JDDTechTalk的博客 2051

从原理聊JVM(一):染色标记和垃圾回收算法

本篇介绍了JVM中垃圾回收器相关的基础知识,后续会深入介绍CMS、G1、ZGC等不同垃圾收集器的运作流程和原理,欢迎关注。。

JDDTechTalk的博客 1913

BFF层聚合查询服务异步改造及治理实践

本篇主要是思考如何依赖现有框架、环境的能力,从代码层面系统化的实现相关治理规范。最后仍引用王晓老师文章结尾来结束。

JDDTechTalk的博客 1922

QPS提升10倍的sql优化

总结本次优化经历•慢sql 往往是影响数据库性能的大瓶颈,sql写好了不但可以优化性能,还能节约机器成本,降本增效。•最好能看到sql语句执行的第一现场,本次主要是由于查看代码时没有及时注意到索引字段的传参类型不对这一细节,造成花了很多时间分析问题•虽然整个问题分析过程比较曲折,但问题分析的方向应该还是对的,过程中学到不少知识。•表结构的设计也有一些历史遗留原因,site_id 字段在表中定义为整型可能比较符合业务含义。表字段定义和业务含义一致,写sql也不容易犯错。

JDDTechTalk的博客 1793

一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器

Graceful Response内置了两种风格的响应格式,可以在文件中通过进行配置。•gr.responseStyle=0,或者不配置(默认情况)"msg": "有内鬼,终止交易"},"data": {•自定义响应格式如果以上两种格式均不能满足业务需要,可以通过自定义去满足,Response@Override@Override@Override@Overridereturn msg;注意,不需要返回的属性可以返回null或者加上注解。

JDDTechTalk的博客 2006

【原创】【深入浅出系列】之代码可读性

原创声明:该文章是个人在项目中亲历后的经验总结和分享,如有搬运需求请注明出处。这是“深入浅出系列”文章的第一篇,主要记录和分享程序设计的一些思想和方法论,如果读者觉得所有受用,还请“一键三连”,这是对我最大的鼓励。一句话:见名知其义。有人说好的代码必然有清晰完整的注释,我不否认;也有人说代码即注释,是代码简洁之道的最高境界,我也不否认。但我都不完全接受,如果照搬前者,有人会在每个方法、每个循环、每个判断都添加大量注释,对于一个表达不严谨的coder来说,代码与汉字可能词不达意;

JDDTechTalk的博客 1747

动态化-鸿蒙跨端方案介绍

动态化目前已经具备一份代码在iOS、Android、H5三端运行的能力,该方案就是将动态化一码多端能力对接到鸿蒙系统,降低首次适配研发投入;一次开发,四端共用,长期降低业务迭代成本;并且使业务具备随时发布能力。。

JDDTechTalk的博客 2627

【ChatGPT应用篇-1】助力Beauty代码的初体验

以下是一个与ChatGPT 结对编程的一个Excel数据解析案例,大家可以根据我的思考过程进行体验,以下放了一些截图,ChatGPT的反应速度惊人,代码版本一步步进行迭代优化,感触较深的是。对于ChatGPT输出的代码没有做仔细的Review及调试,但是看代码风格基本上是改改就能用于生产的,对于代码规范、命名还是很认可的!10.提升程序效率,把解析性能在提升10倍 (架构师的成本意识,这个问题的回答有点意思)6.替换掉 poi 采用EasyExcel (替换原始的默认技术选型,替换三方包)

JDDTechTalk的博客 1524

一文了解电商大促系统的高可用保障思路-献给技术伙伴们

电商大促是电商平台组织的一种大型销售推广活动,目的是通过提供各种优惠、折扣等方法,提高商品销售额和网站流量,增加消费者的购物欲望,以实现销售目标。电商大促活动通常会在一些特定的节点或者节日举行,比如“双11”、“618”、“黑色星期五”等,这些时期的电商大促极具吸引力,既有大量的商品打折优惠,又有丰富多样的活动供消费者参与,是电商平台提升销售业绩的重要手段。

JDDTechTalk的博客 2122

一起单测引起的项目加载失败惨案

是相对于静态编程而言的,平时我们讨论比较多的就是静态编程语言,例如Java,与动态编程语言,例如JavaScript。最近在开发一个功能模块时,在功能自测阶段,通过使用单测测试功能的完整性,在测试单测联通性使用到静态方法测试时,发现单测报错,通过查阅解决方案发现需要对。建议大家在构建Maven项目时,仔细检查POM文件中的依赖,确保没有漏掉任何必要的库,以免因为遗漏而引起不必要的问题。但是,在我们的POM文件中,虽然我们添加了对Spring框架的依赖,但是并没有添加。: 返回修改后的字节码。

JDDTechTalk的博客 1909

京东小程序折叠屏适配探索

应用在折叠屏运行时,可以从一个屏幕切换到另一个屏幕。应用应该做好配置变更的适配和界面状态的保存,以保证应用当前任务能无缝迁移到转换后的屏幕,从而为用户提供出色的连续性体验。折叠屏作为未来Android屏幕发展的新趋势,具有很大的发展前景,做好折叠屏相关适配支持也势在必行。小程序相关适配已经跟随京东主站、小家App、小家三星预装版等发布上线,本文是作者进行相关适配的一些心得体会,如有不足敬请见谅,欢迎交流探讨。

JDDTechTalk的博客 1万+

KubeCon China 2024全球大会在香港举行,京东云受邀参加探讨云原生、开源及 AI

和数字化大潮一样,在AI化的革命下,云端也在全面拥抱AI,并在方方面面变得更安全、更高效,让全球各行各业受益。大会首日吸引了来自全球 30 多个国家和地区的 1000 多名参会者,共同探讨云原生、开源及 AI 领域的前沿进展、核心技术和最佳实践。在京东云中,联邦Serverless服务基于联邦管理模型和Serverless应用模型,为联邦应用容器部署、弹性扩展和故障迁移提供JDOS应用容器控制服务。弹性扩缩容技术方案有很广大的应用前景,京东云内部也在进行大量的生产实践和验证。1. 多集群管理和分发实践。

JDDTechTalk的博客 1168

京东搜索重排:基于互信息的用户偏好导向模型

。

JDDTechTalk的博客 1939

探索AC自动机:多关键词搜索的原理与应用案例

目前,大多数自由文本搜索技术采用类似于Lucene的策略,通过解析搜索文本为各个组成部分来定位关键词。这种方法在处理少量关键词时表现良好。但当搜索的关键词数量达到10万个或更多时,这种方法的效率会显著下降,尤其是在需要与词典进行详尽对比的场景中。本文将介绍的Aho-Corasick(AC)自动机作为多模式匹配中的经典算法,不仅能够处理大规模文本数据,还能确保搜索过程的实时性和准确性。AC自动机可以被形象地比喻为一个超级找词机器。

JDDTechTalk的博客 1491

“前端”工匠系列(一):合格的工匠,究竟该搞什么

有效的交流是需要以有效的信息为载体的。在用户端日志查询、特殊边界场景复现、日志排查定位故障等场景,“实时”就不是必要的,这种场景下一般采用T+1查询,但是又引入了大量级日志的存储周期的话题,一般企业应用级的用户日志保存14天就完全够用了,因为对于C端日志来说,更多的是对现场故障的复现、处理及跟进,如果算法策略对用户日志有需要,只需要在一定时间内采用处理任务对用户日志进行一次处理,把输出的标签、行为特征等关键数据存储就可以,基础的用户日志还是应该被存档或清除释放资源供给更有价值的最新日志来使用。

JDDTechTalk的博客 1044

mysql磁盘碎片整理

不管是使用云还是商城数据库,只要使用mysql,必然会遇到Mysql碎片问题痛点,数据量大的业务表应该设计成分区表方便磁盘碎片整理,降低维护成本和业务影响。碎片清理前后,IO性能会上升,SQL执行效率更快。所以,在日常运维工作中,应对碎片进行定期清理,保证数据库有稳定的性能和充足的空间。扩展提到提高IO性能,在紧急情况下还可以考虑开启刷盘(设置),但开启刷盘会有数据丢失风险(集团数据库模板配置参数默认。

JDDTechTalk的博客 1105

【我在京东做产研】校招 2 年,个人角度(成长)回顾 - 行且知

回顾毕业后的工作历程(文章会以现实时间为顺序来进行回顾),有很多大佬的帮助和指点。因此,想将自己的思考也分享给后来的同学们文章从个人角度(成长)出发,回顾工作点滴。后续会从团队角度(互惠)出发,写成长历程二,敬请期待1.JD的技术体系,各种中间件的了解和使用▪各种中间件的使用文档,还是非常有价值的,各种各样的名词,使用细节。如果你都不知道,怎么细节性学习?▪切勿眼高手低:▪程序员都知道文档易读,但是不如手敲一遍。敲完运行运行,可能你就有新的疑问。(例如:JSF 配置后,如何生成代理对象的呀)

JDDTechTalk的博客 927

京东云《黑神话 · 悟空》现已支持快速部署!

黑神话:悟空》是一款以中国神话为背景的动作角色扮演游戏。本服务内置《黑神话:悟空》游戏、《Steam》客户端和远程桌面《GameViewer》软件,配备顶级游戏显卡,通过计算工厂快速部署后按下方文档操作即可开启流畅游戏体验。

JDDTechTalk的博客 1429

京东平台内容合规的技术与挑战

合规域在电商平台中扮演着重要的角色,它相当于电商体系中的“免疫系统”,通过识别恶意的商品、商家以及UGC内容,确保电商生态的健康、有序和可持续发展。因此我们部门致力于打造业内领先的内容理解与审核平台,在具体工作中,通过识别并治理商家在产品、价格、服务维度的违规行为以及短视频、直播、评价、问答等内容的违规信息,降低审核成本、提升运营效率,并最终保障用户体验。。

JDDTechTalk的博客 1102

视频审核架构实践

针对不同的编码器、封装协议、传输协议,提供统一的音视频处理接口。跨平台,兼容200多种编码、180多种封装格式、20多种传输协议。世界上90%以上的音视频开发基于FFmpeg。。

JDDTechTalk的博客 1605

QUIC在京东直播的应用与实践

国内的互联网直播技术从2005年前后兴起,彼时最具代表性的直播产品是由PPLive创始人姚欣在华中科技大学就读期间发起的校园直播项目PPLive。当时的直播技术用的还是基于windows系统自带的mediaplayer内置的COM组件开发的播放器,采用的是RTSP协议。受当时的互联网传输带宽及成本限制,PPLive并没有采用现在比较流行的单播技术,而是采用P2P技术分发直播流。国内的直播技术也进入了一段以P2P技术为主的时期,其中比较有代表性的就是PPLive和PPStream。

JDDTechTalk的博客 1409

突破传统监测模式:业务状态监控HM的新思路

以上是hm的全部技术细节。hm灵魂是数据计算、治理、数据统计。hm根基是集成百家之长。是我们平台研发部自研的一款面向业务的,异常监控处理的解决方案。汇集了团队每位伙伴的智慧。

JDDTechTalk的博客 1247

如何优雅的处理异常

Java 语言按照错误严重性,从 throwale 根类衍生出 Error 和 Exception 两大派系。Error(错误):程序在执行过程中所遇到的硬件或操作系统的错误。错误对程序而言是致命的,将导致程序无法运行。常见的错误有内存溢出,jvm 虚拟机自身的非正常运行,calss 文件没有主方法。程序本生是不能处理错误的,只能依靠外界干预。Error 是系统内部的错误,由 jvm 抛出,交给系统来处理。程序正常运行中,可以预料的意外情况。比如数据库连接中断,空指针,数组下标越界。

JDDTechTalk的博客 1193

鸿蒙跨端实践-ArkTS和CAPI的混合开发实现

针对以上问题,通过和华为沟通,鸿蒙系统提供了C语言的命令式接口。C组件接口是介于UI组件的Native实现和ArkTS对接层之间的一层C接口封装,它绕过了状态管理对组件变化、刷新的自动化管理,同时避免了JS引擎和C++之间类型转换和跨语言调用的开销,因此具有较好的性能。通过C接口的对接,UI层级能直接和另外两端基本一致,通讯过程直接从JS到C++,C++可以直接调用C接口,流程大大缩短,数据类型转换变少了,列表渲染过程也由接入方自主控制,并且可以做预渲染等优化方案,同时避免了系统的二次布局。。

JDDTechTalk的博客 1757

Proxyless的多活流量和微服务治理

Joylive Agent 是一个基于字节码增强的框架,专注于多活和单元化场景下的流量治理。它提供了以下功能:多活流量调度、全链路灰度发布、QPS和并发限制、标签路由、负载均衡,熔断降级,鉴权等流量治理策略。其特性包括微内核架构、强类隔离、业务零侵入等,使其在保持高性能的同时对业务代码影响最小,是面向Java领域的新一代Proxyless Service Mesh探索实现。重要的事情说三遍:求Star,求Star,求Star。请Star完毕后继续阅读后文。

JDDTechTalk的博客 1823
上一篇: 物联网发展进入快车道,京东IoT生态如何加码取胜?
下一篇: 温故而知新|网络通信协议篇(二)
京东云技术团队
京东云技术团队 企业官方账号 企业官方账号
博客等级 码龄6年 3626粉丝 686原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值