将特征计算脚本转换成底层程序代码的方法和设备技术

技术编号:22640896 阅读:22 留言:0更新日期:2019-11-26 15:58
公开了一种将特征计算脚本转换成底层程序代码的方法和设备,其中,所述方法包括:解析特征计算脚本以生成至少一个声明组;基于所述至少一个声明组生成多个声明块,其中,每个声明块中的语句执行异常不影响同级声明块中的语句执行;基于所述多个声明块生成底层程序代码。根据本公开,可提高被转换成的底层程序代码的执行成功率。

Method and equipment of converting feature calculation script into underlying program code

A method and device for converting a feature calculation script into underlying program code are disclosed, wherein the method includes: parsing the feature calculation script to generate at least one declaration group; generating multiple declaration blocks based on the at least one declaration group, wherein the statement execution exception in each declaration block does not affect the statement execution in the same level declaration block; and generating multiple declaration blocks based on the multiple declaration blocks Generate the underlying program code. According to the present disclosure, the execution success rate of the converted underlying program code can be improved.

【技术实现步骤摘要】
将特征计算脚本转换成底层程序代码的方法和设备
本公开总体说来涉及机器学习领域,更具体地讲,涉及一种将特征计算脚本转换成底层程序代码的方法和设备。
技术介绍
在机器学习过程中,在进行训练之前,需要实现基于原始数据获得特征的过程。这样的过程可被称为特征工程,特征工程是机器学习过程的重要组成部分。存在各种各样的机器学习框架,这些机器学习框架中的多数机器学习框架专注于机器学习的训练以进行建模,少数机器学习框架专注于特征工程,但是特征工程的功能并不完善。现有的特征工程框架中,需要将用户编写的上层的特征计算脚本转换为底层程序代码,再执行该底层程序代码完成特征计算。当执行被转换成的底层程序代码的过程中,需要顺序执行底层程序代码中的语句,然而,在顺序执行的过程中有任意一条语句的执行发生异常时,执行就会停止,从而使得异常执行语句之后的所有语句都不会被执行,得不到相应的特征计算输出结果,特征计算效率低。
技术实现思路
本公开的示例性实施例在于提供一种将特征计算脚本转换成底层程序代码的方法,其中,通过容错机制使得转换成的通过语句表示的底层程序代码的执行成功率提高,相应的,特征计算脚本的执行成功率也提高。根据本公开的示例性实施例,提供一种将特征计算脚本转换成底层程序代码的方法,其中,所述方法包括:解析特征计算脚本以生成至少一个声明组;基于所述至少一个声明组生成多个声明块,其中,每个声明块中的语句执行异常不影响同级声明块中的语句执行;基于所述多个声明块生成底层程序代码。可选的,所述基于所述至少一个声明组生成多个声明块的步骤包括:对于所述至少一个声明组中的每个声明组,获取包含该声明组中的通过语句表示的声明的列表,根据所述列表中的语句的依赖关系构建有向无环图(DAG),其中,有向无环图中的节点表示变量,有向无环图中的有向边表示计算逻辑和计算逻辑的顺序;基于所述有向无环图构建声明块,其中,属于不同声明块的节点相互独立,属于不同声明块的计算逻辑相互独立,同一声明块之中的节点之间、计算逻辑之间和/或节点和计算逻辑之间存在依赖关系。可选的,所述基于所述有向无环图构建声明块的步骤包括:从所述有向无环图中去除该有向无环图的根节点和与该根节点关联的边,并取得通过去除而产生的第一子图;从所述第一子图中能够构成有向无环图且节点数量大于或等于2的子图中去除根节点和与该根节点关联的边,并取得通过去除而产生的第二子图;重复执行从能够构成有向无环图且节点数量大于或等于2的子图中去除根节点和边的步骤,直到通过去除而产生的子图中每个子图的节点数量小于或等于2为止;基于通过去除而产生的子图,构建声明块,其中,同级声明块包括基于同一有向无环图在去除根节点之后的剩余部分构建的多个声明块。可选的,所述基于所述有向无环图构建声明块的步骤还包括:根据有向无环图中的节点的有向边的方向确定节点是否为能够作为根节点,其中,与能够作为根节点的节点连接的有向边的方向指向除了该节点以外的节点,其中,当存在两个或更多个能够作为根节点的节点时,根据与节点对应的特征计算脚本的逻辑顺序,将所述两个或更多个节点中的一个确定为根节点。可选的,所述基于所述多个声明块生成底层程序代码的步骤包括:每当根节点被去除时,根据与被去除的根节点对应的声明,生成代码;每当去除根节点后获得由单个节点组成或包括两个节点的子图时,根据与由单个节点组成的子图或包括两个节点的子图的对应声明,生成代码,其中,与先被去除的节点对应的代码的顺序排在与后被去除的节点对应代码之前,与先产生的子图对应的代码的顺序排在与后产生的子图对应的代码的之前,与同级声明块中的每个声明块对应的代码的顺序根据特征计算脚本的逻辑顺序而确定。可选的,所述方法还包括:为生成的至少一条代码添加异常处理机制,使得当所述至少一条代码在运行过程中抛出异常时,对抛出的异常进行捕获和处置,其中,同级声明块对应并行的子图,添加异常处理机制的代码包括以下项中的至少一项:与并行的多个子图中的每个非单个节点的子图对应的代码、与并行的多个子图整体对应的代码,并行的子图包括:在同一有向无环图被去除根节点之后产生的多个子图。根据本公开的另一示例性实施例,提供了一种基于特征计算脚本的特征计算方法,其中,所述特征计算方法包括:根据以上所述的方法生成底层程序代码;执行转换成的底层程序代码。根据本公开的另一示例性实施例,提供了一种包括至少一个计算装置和至少一个存储指令的存储装置的系统,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行如上所述的方法。根据本公开的另一示例性实施例,提供了一种存储指令的计算机可读存储介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行如上所述的方法。根据本公开的另一示例性实施例,提供了一种将特征计算脚本转换成底层程序代码的设备,其中,所述设备包括:脚本解析与声明组生成单元,解析特征计算脚本以生成至少一个声明组;声明块生成单元,基于所述至少一个声明组生成多个声明块,其中,每个声明块中的语句执行异常不影响同级声明块中的语句执行;代码生成单元,基于所述多个声明块生成底层程序代码。可选的,所述声明块生成单元通过以下操作生成声明块:对于所述至少一个声明组中的每个声明组,获取包含该声明组中的通过语句表示的声明的列表,根据所述列表中的语句的依赖关系构建有向无环图,其中,有向无环图中的节点表示变量,有向无环图中的有向边表示计算逻辑和计算逻辑的顺序;基于所述有向无环图构建声明块,其中,属于不同声明块的节点相互独立,属于不同声明块的计算逻辑相互独立,同一声明块之中的节点之间、计算逻辑之间和/或节点和计算逻辑之间存在依赖关系。可选的,所述声明块生成单元从所述有向无环图中去除该有向无环图的根节点和与该根节点关联的边,并取得通过去除而产生的第一子图;从所述第一子图中能够构成有向无环图且节点数量大于或等于2的子图中去除根节点和与该根节点关联的边,并取得通过去除而产生的第二子图;重复执行从能够构成有向无环图且节点数量大于或等于2的子图中去除根节点和边的步骤,直到通过去除而产生的子图中每个子图的节点数量小于或等于2为止;并且基于通过去除而产生的子图,构建声明块,其中,同级声明块包括基于同一有向无环图在去除根节点之后的剩余部分构建的多个声明块。可选的,所述声明块生成单元还根据有向无环图中的节点的有向边的方向确定节点是否为能够作为根节点,其中,与能够作为根节点的节点连接的有向边的方向指向除了该节点以外的节点,其中,当存在两个或更多个能够作为根节点的节点时,根据与节点对应的特征计算脚本的逻辑顺序,将所述两个或更多个节点中的一个确定为根节点。可选的,所述代码生成单元每当根节点被去除时,根据与被去除的根节点对应的声明,生成代码;每当去除根节点后获得由单个节点组成或包括两个节点的子图时,根据与由单个节点组成的子图或包括两个节点的子图的对应声明,生成代码,其中,与先被去除的节点对应的代码的顺序排在与后被去除的节点对应代码之前,与先产生的子图对应的代码的顺序排本文档来自技高网...

【技术保护点】
1.一种将特征计算脚本转换成底层程序代码的方法,其中,所述方法包括:/n解析特征计算脚本以生成至少一个声明组;/n基于所述至少一个声明组生成多个声明块,其中,每个声明块中的语句执行异常不影响同级声明块中的语句执行;/n基于所述多个声明块生成底层程序代码。/n

【技术特征摘要】
1.一种将特征计算脚本转换成底层程序代码的方法,其中,所述方法包括:
解析特征计算脚本以生成至少一个声明组;
基于所述至少一个声明组生成多个声明块,其中,每个声明块中的语句执行异常不影响同级声明块中的语句执行;
基于所述多个声明块生成底层程序代码。


2.根据权利要求1所述的方法,其中,所述基于所述至少一个声明组生成多个声明块的步骤包括:对于所述至少一个声明组中的每个声明组,
获取包含该声明组中的通过语句表示的声明的列表,根据所述列表中的语句的依赖关系构建有向无环图,其中,有向无环图中的节点表示变量,有向无环图中的有向边表示计算逻辑和计算逻辑的顺序;
基于所述有向无环图构建声明块,其中,属于不同声明块的节点相互独立,属于不同声明块的计算逻辑相互独立,同一声明块之中的节点之间、计算逻辑之间和/或节点和计算逻辑之间存在依赖关系。


3.根据权利要求2所述的方法,其中,所述基于所述有向无环图构建声明块的步骤包括:
从所述有向无环图中去除该有向无环图的根节点和与该根节点关联的边,并取得通过去除而产生的第一子图;
从所述第一子图中能够构成有向无环图且节点数量大于或等于2的子图中去除根节点和与该根节点关联的边,并取得通过去除而产生的第二子图;
重复执行从能够构成有向无环图且节点数量大于或等于2的子图中去除根节点和边的步骤,直到通过去除而产生的子图中每个子图的节点数量小于或等于2为止;
基于通过去除而产生的子图,构建声明块,
其中,同级声明块包括基于同一有向无环图在去除根节点之后的剩余部分构建的多个声明块。


4.根据权利要求3所述的方法,其中,所述基于所述有向无环图构建声明块的步骤还包括:根据有向无环图中的节点的有向边的方向确定节点是否为能够作为根节点,
其中,与能够作为根节点的节点连接的有向边的方向指向除了该节点以外的节点,
其中,当存在两个或更多个能够作为根节点的节点时,根据与节点对应的特征计算脚本的逻辑顺序,将所述两个或更多个节点中的一个确定为根节点。


5.根据权利要求3所述的方法,其中,所...

【专利技术属性】
技术研发人员:肖羽陈靓
申请(专利权)人:第四范式北京技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1