生成表示计算机程序的语义流图的制作方法

文档序号:19634053发布日期:2020-01-07 11:48阅读:292来源:国知局
生成表示计算机程序的语义流图的制作方法

背景技术
:本发明涉及计算机编程,并且更具体地涉及生成表示计算机程序的语义流图。在计算中,程序是计算机要执行的一组特定的有序操作。在johnvonneumann于1945年概述的现代计算机中,程序包含计算机遵循的一系列指令。通常,程序被放入计算机可访问的存储区域。存储区域或存储器还可以包含指令对其进行操作的数据。计算机程序包括源代码,源代码通常由计算机程序员用编程语言编写。从源代码中,编译器可以得到机器代码,机器代码由计算机可以直接执行的指令组成。技术实现要素:本发明的实施例涉及一种用于生成语义流图的计算机实现的方法。计算机实现的方法的非限制性示例包括使用处理器以基于程序的执行来生成原始流图。基于原始流图并且基于与程序相关联的主题域中的本体生成语义流图。语义流图示出程序的一个或多个语义概念。本发明的实施例涉及一种用于生成语义流图的系统。该系统的非限制性示例包括具有计算机可读指令的存储器和用于执行计算机可读指令的一个或多个处理器。计算机可读指令使得一个或多个处理器基于程序的执行来生成原始流图。计算机可读指令还使得一个或多个处理器基于原始流图并且基于与程序相关联的主题域中的本体来生成语义流图。语义流图示出程序的一个或多个语义概念。本发明的实施例涉及一种用于生成语义流图的计算机程序产品,该计算机程序产品包括计算机可读存储介质,该计算机可读存储介质中包含有程序指令。这些程序指令由处理器可执行以使得处理器执行方法。该方法的非限制性示例包括基于程序的执行生成原始流图。进一步根据该方法,基于原始流图并且基于与程序相关联的主题域中的本体来生成语义流图。语义流图示出程序的一个或多个语义概念。通过本发明的技术实现了附加的技术特征和益处。本发明的实施例和各方面在本文中详细描述,并且被认为是所要求保护的主题的一部分。为了更好地理解,参考具体实施方式和附图。附图说明本文中描述的专有权的细节在说明书结论的权利要求中特别指出并且清楚地要求保护。通过以下结合附图的详细描述,本发明的实施例的前述和其他特征和优点将变得很清楚,在附图中:图1是根据本发明的一些实施例的用于从程序生成语义流图的富集系统的框图;图2a示出了根据本发明的一些实施例的用于表示本体中的抽象函数的组合的图形语法;图2b示出了根据本发明的一些实施例的用于表示本体中的抽象函数的乘积(product)的图形语法;图3a示出了第一示例程序;图3b示出了根据本发明的一些实施例的表示图3a的第一示例程序的原始流图;图4a示出了第二示例程序;图4b示出了根据本发明的一些实施例的表示图4a的第二示例程序的原始流图;图5是根据本发明的一些实施例的表示图3a的第一示例程序和图4a的第二示例程序两者的示例语义流图;图6是根据本发明的一些实施例的用于生成表示程序的语义流图的方法的流程图;以及图7是根据本发明的一些实施例的用于实现富集系统的一些或所有方面的计算机系统的框图。本文中描绘的图是说明性的。在不脱离本发明的精神的情况下,可以对图或其中描述的操作进行很多变化。例如,可以以不同的顺序执行动作,或者可以添加、删除或修改动作。而且,术语“耦合”及其变形描述在两个元件之间具有通信路径,而并不表示元件之间的直接连接而在它们之间没有中间元件/连接。所有这些变化都被认为是本说明书的一部分。在附图和对所公开的实施例的以下详细描述中,附图中示出的各种元件具有两位或三位附图标记。除了少数例外,每个附图标记的最左边的数字对应于其元素首先被示出的图。具体实施方式本文中参考相关附图描述本发明的各种实施例。在不脱离本发明的范围的情况下,可以设计出本发明的备选实施例。阐述了以下描述和附图中的元件之间的各种连接和位置关系(例如,上方、下方、相邻等)。除非另有说明,否则这些连接和/或位置关系可以是直接的或间接的,并且本发明并不意图在这方面进行限制。因此,实体的耦合可以是指直接或间接的耦合,并且实体之间的位置关系可以是直接或间接的位置关系。此外,本文中描述的各种任务和处理步骤可以合并到更全面的程序或过程中,该程序或过程具有本文中未详细描述的附加步骤或功能。以下定义和缩写将用于解释权利要求和说明书。如本文中使用的,术语“包括(comprises)”、“包括(comprising)”、“包括(includes)”、“包括(including)”、“具有(has)”、“具有(having)”、“包含(contains)”或“包含(containing)”或其任何其他变型旨在涵盖非排他性的包括。例如,包括元素列表的组合物、混合物、过程、方法、物品或装置不一定仅限于那些元素,而是可以包括未明确列出的其他元素或这样的组合物、混合物、过程、方法、物品或装置固有的元素。另外,术语“示例性”在本文中用于表示“用作示例、实例或说明”。本文中描述为“示例性”的任何实施例或设计不必被解释为比其他实施例或设计更优选或更具优势。术语“至少一个”和“一个或多个”可以被理解为包括大于或等于1的任何整数,即一个、两个、三个、四个等。术语“多个”可以被理解为包括大于或等于2的任何整数,即两个、三个、四个、五个等。术语“连接”可以包括间接的“连接”和直接的“连接”。术语“大约”、“基本上”、“大致”及其变型旨在包括与基于在提交申请时可用的设备的特定量的测量相关联的误差程度。例如,“大约”可以包括给定值的±8%或5%、或2%的范围。为简洁起见,本文中可能或可能未详细描述与制造和使用本发明的各方面有关的传统技术。特别地,用于实现本文中描述的各种技术特征的计算系统和特定计算机程序的各个方面是公知的。因此,为了简洁起见,很多传统的实现细节在本文中仅简要地提及或者全省被省略,而在不提供公知的系统和/或处理细节。现在转向与本发明的各方面更具体相关的技术的概述,计算机变得越来越普遍,因为它们被集成到很多设备中。虽然计算机不断执行程序,但是它们并不了解它们运行的程序。例如,计算机无法分析其程序任务并且向使用、开发或更新程序的计算机输出其执行的程序任务的描述(例如,以使用自然语言的书写文本)。程序员和用户在编写程序,使用程序或理解程序时不会获取自动计算机辅助。因此,随着更多程序被编写和使用,编写、维护和解释它们所涉及的大部分工作都是手动执行的。现在转到本发明的各方面的概述,本发明的一个或多个实施例通过提供用于在已知主题中形成计算机程序的语义表示的人工智能机制来解决现有技术的上述缺点。本发明的实施例利用人工智能为程序员和使用计算机代码的其他人提供计算机辅助以理解该计算机代码。利用本发明的各方面,机器可以学习理解代码,并且机器的人工智能代理可以授予人类知识工作者权力或者生成其自己的有用程序。根据本发明的一些实施例,用于此目的的富集系统是完全自动化的。富集系统接收程序并且可选地接收主题域选择,并且富集系统不需要从用户接收任何其他输入。富集系统可以综合来自计算机程序分析和知识表示的算法技术以及来自类别理论和编程语言理论的数学思想。富集系统的实施例在数据科学、生物信息学、自然语言处理或具有重度计算焦点的其他科学主题域中可能特别有用。更具体地,根据本发明的各方面的富集系统可以基于程序的执行生成原始流图。富集系统可以访问程序的主题域中的本体以使用其语义等同物来扩展原始流图的部分。另外,原始流图没有已知语义等同物的部分可以被折叠成较小部分,以表示未知函数。结果可以是描述程序的语义流图。本发明的上述方面通过使得计算机能够将语义描述与代码相关联来解决现有技术的缺点。利用根据本发明的一些实施例的富集系统,计算机可以表现得好像它真正理解程序。例如,参考得到的语义流图,计算机可以提出改进建议,或者可以帮助生成与程序代码相关联的评论或元数据。简而言之,富集系统是一种智能工具,程序员和其他用户可以使用它来帮助他们构建和利用程序。现在转向本发明的各方面的更详细描述。图1是根据本发明的一些实施例的富集系统100或语义富集系统的框图。富集系统100可以生成用于表示程序120的语义流图110。为此,通常,富集系统100可以生成程序120的原始流图130,并且可以通过由语义富集引擎160执行的语义富集过程将该原始流图130转换为最终的语义流图110。在本发明的一些实施例中,语义富集引擎160还利用来自本体存储140的本体145。本体145是实体(诸如类型和函数)以及它们之间的关系的正式命名和定义。换言之,本体145描述特定主题域或领域内的实体及其关系。如图1所示,富集系统100可以包括图形生成器150、本体存储140和语义富集引擎160。通常,图形生成器150可以生成表示程序120的原始流图130。原始流图130是在本领域中公知用以表示程序120,并且因此图形生成器150可以利用已知的机制来生成原始流图130。语义富集引擎160可以利用本体存储140中的适当本体145以通过语义富集过程将原始流图转换为语义流图110。如下面将进一步描述的,本体存储140可以保存一个或多个本体145。本体存储140可以是例如用于保存已建立的一个或多个本体145的数据库或一个或多个文件。图形生成器150和语义富集引擎160中的每个可以包括软件、硬件或两者的组合。例如,图形生成器150和语义富集引擎160中的每个可以是一个或多个软件模块或一个或多个专用硬件电路、或其组合。原始流图130和语义流图110两者都可以捕获程序120的执行,但是这两个图在不同的抽象级别上进行捕获。原始流图130可以记录由程序120进行的具体函数调用,并且原始流图130可以是语言和库相关的。相反,在本发明的一些实施例中,语义流图110在属于正式本体145的抽象概念方面来描述程序120。语义流图110可以是语言和库无关的。可以由语义富集引擎160执行的语义富集过程可以将原始流图130变换为语义流图110,语义流图110用语义术语来描述程序120。语义富集可以利用适用于特定主题域(诸如数据科学领域)的本体145。虽然本文中参考数据科学作为示例程序120和示例本体145的主题域,但是应当理解,程序120可以属于另一主题域,在这种情况下,可以使用适当的对应本体145。根据本发明的一些实施例,本体145包括两种实体:概念和注释。例如,在数据科学的主题域,概念对机器学习、统计和数据计算的抽象概念进行形式化。语义流图110可以具有链接到概念的节点和边缘,并且因此,语义流图110具有语义。此外,根据本发明的一些实施例,本体145的注释将主题域的软件包中的函数映射到本体145的概念上。更具体地,对于数据科学本体,注释可以将pandas软件包或scikit-learn软件包中的函数映射到概念。在语义富集期间,如下面将进一步描述的,本体145的注释可以将原始流图130中的具体函数转换为语义流图110中的抽象函数。本体存储140可以保存一个或多个本体145,每个本体可以特定于主题域,并且可以将该主题域中的软件包的函数映射到概念。此外,每个本体145可以根据本文中描述的本体语言来定义。通常,本体145是存在于主题域或话语(discourse)域中的实体的类型、属性和相互关系的正式命名和定义。相反,本体语言是用于定义本体145的正式语言。本发明的一些实施例利用本文中描述的新颖本体语言来定义本体145。存储在本体存储140中的本体145可以根据这种本体语言来定义。根据本发明的一些实施例,用于表示本体145的新的本体语言是monoidal本体和计算语言(monocl),其将在下面更详细地描述。应当理解,monocl是本发明的一些实施例可使用的示例本体语言,并且可以使用其他本体语言,尤其是共享本文中描述的monocl的属性的本体语言。现有的本体语言使得难以表达程序或算法知识,这可能是在语义上描述程序代码所需要的。例如,作为知识表示的主要标准的网络本体语言(owl)是一种描述逻辑,其被设计为表达分类(即,是一(is-a)关系)、meronomy(即,部分-总体(part-whole)关系)、以及其他形式的分层陈述性知识。现有的关于数据科学的本体也是如此,诸如预测模型标记语言(pmml)、统计本体(stato)和机器学习(ml)模式。lambda演算是一种计算过程的经典模型,其可以由计算机程序执行。根据本发明的一些实施例,monoc1更接近lambda演算而不是描述逻辑。由于在笛卡尔封闭类别与简单类型的lambda理论之间的对应关系中例示的类别理论与类型理论之间的紧密联系,monocl可以利用在语法和语义上灵活的代数世界,但是仍然利用高度发达的编程语言理论。从类别理论来看,monocl在本发明的一些实施例中尤其采用以下内容:无点文本语法,不受变量绑定的细微之处的影响;直观而完全精确的图形语法;以及灵活的指称语义。从编程语言理论来看,monocl可以采用子类型和随意(adhoc)多态的概念。本体语言可以被认为是简约的、类型化的、函数式编程语言。但是,monocl与现实世界的编程语言不同,因为它是为知识表示而不是实际计算而设计的。根据本发明的一些实施例,monocl用monoidal类别理论的文本语法编写,或者等同地,用互连的框和线的图形语法编写。基于字符串图的图形语言的概念基于类别理论。文本和图形语法是并行的,尽管不是同构的,并且本文中仅详细描述图形语法。本领域技术人员将理解如何根据需要将图形语法转换成文本语法。作为示例而非限制,文本语法可以包括以某种其他方式组织的一个或多个表格或文本。此外,本领域技术人员将理解如何利用该本体语言及其语法以及如何在本体存储140中根据该本体语言存储本体145。例如,可以用图形语法或文本语法编写每个本体145的概念和注释,并且将其存储在本体存储140中。在本发明的一些实施例中,monoc1中的每个表达式是类型或函数。该术语与函数编程术语相一致。类型表示主题域中的事物的种类,诸如数据科学。函数是从输入类型(即,域)到输出类型(即,上域)的函数关系或映射。本体语言的作用可以是如何从现有类型和函数构造新的类型和函数。在本发明的一些实施例中,当以图形语法表示时,通过线以图形方式表示类型。例如,基本类型x被绘制为被标记为x的单条线。两个类型x和y的乘积可以是另一类型x×y,其具有通常含义:类型x×y的元素是类型x的元素和类型y的元素,按此顺序。类似地定义三个或更多个类型的乘积。图解地,n个类型的乘积可以表示为并联的一束n条线。产品类型类似于实际编程语言的记录或数据结构类型,诸如c编程语言的结构类型。在本发明的一些实施例中,还存在由单个元素占据的单元类型1。这类似于c和java中的void类型、python中的nonetype类型(其唯一居民是none)以及r中的null类型。图解地,单元类型可以表示为一束空的线(即,空白空间)。可以通过线图来图形地表示函数。线图(也称为字符串图)通过根据特定规则将框与线连接来定义函数。例如,具有域x和上域y的基本函数f(写为f:x→y)被绘制为标记为f的框。框的顶部具有带有输入线x的输入端口,并且底部具有带有输出线y的输出端口。用于在线图内连接框的规则可以对应于从旧函数创建新函数的方式,诸如通过函数的乘积和组合。函数f:x→y与g:y'→z的组成是新函数f·g:x→z。从算法来讲,f·g按顺序计算:f并且然后是g。在本发明的一些实施例中,为使该组合有效,中间类型y和y'是相容的,使得y是y'的亚型。函数f:x→w和g:y→z的乘积是另一函数f×g:x×y→w×z。算法上,f×g并行计算f和g,取f和g两者的输入,并且返回两者的输出。例如,图2a示出了函数f和g的组合的这种图形语法,而图2b示出了根据本发明的一些实施例的函数f和g的乘积的图形语法。本领域技术人员将理解如何描述其他函数构造,诸如标识、复制和删除。在本发明的一些实施例中,monocl允许将类型声明为一个或多个其他类型的子类型,其在类型之间建立“是一(is-a)”关系。例如,矩阵可以是数组和数据表的子类型,因为矩阵是秩2的数组,并且因为矩阵可以被视为其列具有公共数据类型的表。在本发明的一些实施例中,monocl中的子类型与典型的面向对象的编程语言中的继承不同。monocl中的子类型可以被视为隐式转换,也称为强制转换。例如,如果类型x是x'的子类型,则有一种规范的方法可以将类型x的元素转换为类型x'的元素。矩阵是一个数组,并且因此矩阵可以被简单地转换为数组,因为矩阵已经是秩2的数组。虽然矩阵严格来说不是数据表,但是矩阵可以通过简单地为列分配数字名称来被转换为数据表。除了用作知识表示系统中普遍存在的“是一(is-a)”关系之外,子类型还可以实现随意(adhoc)多态性。在操作上,为了组成函数f:x→y,其中g:y'→z,可以计算f,可以将结果从类型y强制转换为y',并且然后可以计算g。在本发明的一些实施例中,图解地,当且仅当源端口的类型是目标端口类型的子类型时,线具有有效类型。因此,隐式转换在图形语法中同样是隐式的。在本发明的一些实施例中,monoc1支持函数之间的“是一(is-a)”关系,其在本文中称为子函数关系,类似于子类型。例如,用于从表格文件中读取表格的函数f是用于从通用数据源读取通用数据的函数f'的子函数。在该示例中,f的域是表格文件,它是通用数据源的子类型,它是f'的域。函数f的上域是表格,它是通用数据的子类型,它是f'的上域。考虑接受表格文件并且返回通用数据的两个计算路径。在这种情况下,可以应用函数f,并且然后可以将结果表强制转换为通用数据。或者,可以将表格文件强制转换为通用数据源,并且然后可以应用f'。在本发明的一些实施例中,子函数关系断言这两个计算是等同的。在类别理论术语中,子函数可以被视为其组件是隐式转换的两个函数之间的自然转换。本体存储140可以保存一个或多个本体145,其中的至少一个本体可以在生成表示程序120的语义流图110时使用。例如,每个本体145可以用monocl或适合于表示计算机过程的另一种本体语言编写。每个本体145可以与至少一个主题域相关联,该主题域是本体适用的领域。作为示例而非限制,本体存储140可以包括数据科学本体,其主题域是数据科学,并且其描述统计、机器学习、数据处理或这些的组合。每个本体145可以包括概念和相应的注释,并且每个概念和相应的注释是类型或函数。例如,下表示出了示例数据科学本体145的概念和相关注释:概念注释类型数据表pandas数据帧类型统计模型scikit-learn估计器函数读取表格数据文件pandas中的read_csv函数函数将统计模型拟合到数据scikit-learn估计器的拟合方法每个函数注释可以将具体函数映射到函数概念,也称为抽象函数。本公开涉及这样的具体函数,其在本体145中存在映射,如在本体145中注释的。例如,如果从数据科学本体145中提取下表,则具体函数read_csv在数据科学本体145被注释,并且被映射到读取表格数据文件的抽象函数。每种类型注释可以将具体类型映射到类型概念,也称为抽象类型。本公开涉及在本体145中注释的这种具体类型。例如,如果从数据科学本体145中提取下表,则pandas数据帧的具体类型在数据科学本体145中被注释,并且被映射到数据表的抽象类型。根据本发明的一些实施例,概念形式化本体145的主题域的抽象概念。概念可以构成用于使用本体语言构造更复杂类型和函数的基本类型和基本函数。计算机程序和其他数据分析可以被建模为由适用的本体145的概念组成的函数。根据本发明的一些实施例,假定数据科学的软件包(诸如pandas和scikit-learn)实例化概念。注释描述如何通过将由这些软件包定义的类型和函数映射到本体145的类型和函数,特别是在这种情况下的数据科学本体145来进行这种实例化。为了避免抽象级别之间的混淆,软件包的类型在本文中称为具体类型,而本体145的类型在本文中称为抽象类型。类似地,软件包的函数在本文中称为具体函数,而本体145的函数在本文中称为抽象函数。因此,类型注释可以将具体类型(即,编程语言的基元类型或用户定义的类)映射到抽象类型(即,本体中的类型概念)。类似地,函数注释可以将具体函数映射到抽象函数上。在本发明的一些实施例中,从广义上讲,具体函数包括执行某些操作的任何编程语言构造,诸如普通函数、类方法、属性获取器、属性设置器等。建模灵活性对于将各种应用程序编程接口软件(诸如统计软件)准确地转换为单组通用概念是有用的。因此,在本发明的一些实施例中,允许注释的抽象函数是任意monocl程序(即,可以使用本体的概念来以本体语言表达的任何函数)。如上所述,富集系统100可以生成原始流图130并且然后生成语义流图110,其中语义流图110基于原始流图130和适用本体145。原始流图130可以诸如由图形生成器150基于程序120生成。原始流图130在本领域中是已知的,并且因此本领域技术人员将理解如何构建原始流图。根据本发明的一些实施例,富集系统100的原始流图130可以从程序120的实际执行中提取。例如,可以监测程序的执行,并且可以使用实际的数据和函数调用来生成原始流图130。换言之,富集系统100可以将程序执行的过程间数据流记录到原始流图130中。原始流图130可以描述程序120的执行。每个框可以是具体函数,或者更确切地说,可以是在程序120的执行期间观察到的函数调用。原始流图130的线可以表示具体类型及其观察到的元素。观察到的元素可以是在执行期间分配的文字值,也可以是在执行期间分配的对象引用,这取决于类型。图3a-图3b和图4a-图4b示出了根据本发明的一些实施例的计算机程序120和表示这些程序120的原始流图130的示例。图3a和图4a中的每个示出了相应计算机程序120的代码。图3a是用python编写并且利用科学计算包numpy和scipy进行数据分析的程序120,而图4a是用python编写并且利用数据科学包pandas和scikit-learn进行数据分析的程序120。图3a和图3b中的两个程序120执行相同的计算。它们从csv文件中读取iris数据集、删除最后一列、将具有三个聚类的k均值聚类模型拟合到其余列、并且返回聚类分配和质心。图3b示出了由图3a中的程序120的执行产生的原始流图130,而图4b示出了由图4a中的程序120的执行产生的原始流图130。尽管两个程序120在语法上是不同的,但它们在语义上是等同的。如下所示,即使原始流图130不同,富集系统100也可以为这些程序120生成相同的语义流图110。可以诸如由语义富集引擎160基于原始流图130并且基于适当的本体来生成语义流图110。原始流图130和语义流图110都可以是具有一组互连对象,特别是框和线的线图。然而,原始流图130和语义流图110示出了不同的抽象级别。在本发明的一些实施例中,语义流图110在通用概念方面描述程序120,通用概念独立于用于实现程序120的特定编程语言和库。语义流图110的框可以表示抽象函数或函数概念,并且线可以表示抽象类型或类型概念以及它们各自的观察到的元素。因此,语义流图110可以被视为抽象函数,其由适用本体145的概念组成、以图形语法编写、并且用所计算的值进行扩充。语义富集可以用于将原始流图130变换为该语义流图110。语义富集可以包括两个阶段:扩展阶段和收缩阶段。在本公开中,在语义富集开始之后,但是在其完成之前,可以存在中间流图,因为原始流图130被转换为语义流图110。换言之,原始流图130被生成,并且当语义开始时被转换成中间流图,中间流图然后随着语义富集完成而在语义流图110中进行转换。在本发明的一些实施例中,扩展阶段利用本体145的注释,本体145可以存储在本体存储140中。具体地,可以使用适当的本体145,其中如果特定本体描述程序120适用的相同主题域,则可以认为特定本体是适当的。例如,如果程序120利用数据科学方法执行数据分析,则可以认为数据科学本体145是适当的。在扩展阶段,原始流图130的注释部分(例如,框、线)可以被替换为它们的抽象定义。对于参考具体函数的原始流图130中的每个框,如果在本体中注释该具体函数,则具体函数被替换为相应的抽象函数。具体地,根据本体145与具体函数相关联的抽象函数可以替换具体函数。类似地,每条线表示具体类型,并且对于为本体中的具体类型找到注释的每条线,具体类型可以被替换为相应的抽象类型。这个语义富集阶段是扩展性的,因为在本发明的一些实施例中,原始流图130中的单个框可以变成语义流图110中的任意大的子图,这取决于在本体145中找到的注释。因此,具体类型可以被有效地注释两次:明确地通过类型注释并且隐含地通过函数注释的域和上域类型来注释。在本发明的一些实施例中,函数性要求这些抽象类型是兼容的,以确保类型和函数注释的逻辑一致性。扩展可以保留本体语言的结构,包括组合和乘积的使用。函数性可以是大大简化语义富集的建模决策,代价是对原始流图130如何变换施加限制。在现实世界中,在本体145中对主题域的每个可重用单元(例如,每个类型和函数)进行注释是不切实际的。因此,以下可能正是这种情况:不是在原始流图130中表示的每个具体类型或具体函数都能够被替换为相应的抽象类型或抽象函数。换言之,某些具体类型和具体函数的语义可能是未知的。因此,这些具体类型和函数不需要被包括在语义流图110中。然而,简单地从中间流图中删除这些具体类型和函数可能改变中间流图的其余部分的连通性,这是不希望的。因此,在收缩阶段,可以尽可能简化由原始流图130的扩展得到的中间流图的未注释部分。可以移除对本体中未注释的具体类型或具体函数的每个引用,以留下未标记的线和框。在语义上,未标记的线可以被解释为任意未知类型,并且未标记的框可以被解释为任意未知函数。然而,在某些情况下,未知函数可以具有已知域、已知上域或两者。在本发明的一些实施例中,通过折叠未标记框进一步简化中间流图。具体地,未标记框的每个最大连接子图可以被折叠成单个未标记框。在确定未标记框的最大连通子图时,域的线是否是上域被标记为抽象类型可能无关紧要。换言之,在本发明的一些实施例中,当将子图折叠成未标记框时,考虑框的标记和未标记的状态,但是不考虑标记和未标记的状态或线。解释可以是,未知函数的组合只是另一未知函数。该阶段是紧缩的,因为在本发明的一些实施例中,它只能减少语义流图110中的框的数目。回到图3a-图3b和图4a-图4b中的先前示例,语义富集可以用于将两个示例程序120的原始流图130变换为相同的语义流图110。如上所述,这些示例程序120具有不同的代码,但是具有相同的语义含义。因此,根据本发明的一些实施例,期望它们共享可以由富集系统100实现的语义流图110。在表示图3a的代码的图3b的原始流图130中,scipy的kmeans2函数在本体145中注释(即,由本体145识别)。该函数扩展为抽象函数,该函数创建k均值聚类模型、将其拟合到数据、并且提取其聚类和质心。抽象k均值聚类模型不对应于原始程序中的任何具体对象。然而,所选择的本体145、特别是数据科学本体145可以通过本体中包括的注释来识别出该函数在语义上等同于k均值聚类模型。在扩展阶段之后,唯一未注释的框是numpy删除函数,并且收缩该单个框不会减小线图的大小。图5示出了根据本发明的一些实施例的由该过程产生并且基于图3a-图3b的示例语义流图110。在表示图4a的代码的图4b的原始流图130中,scikit-learn的kmeans类也在本体145中被注释。该函数被扩展为抽象函数,该抽象函数创建k均值聚类模型,将其拟合到数据,并且提取其聚类和质心。所得到的中间流图受到涉及多个框的收缩。具体地,具有由值属性访问组成的pandasndframe.drop方法的子图通过特殊的dataframe.getattribute方法折叠成单个未标记框。再一次,基于图4a-图4b的所得到的语义流图110出现在图5中。所得到的图4a中的程序120的语义流图110与图3a中的程序120的结果相同。因此,在该示例中,富集系统100识别出图3a和图4b中的两个程序120的语义等同性,尽管它们的语法不同。总之,图6是根据本发明的一些实施例的用于从程序120生成语义流图110的方法600的流程图。如图6所示,在框610处,开始程序120的执行。在框620处,可以基于程序120的执行来生成原始流图130。在本发明的一些实施例中,原始流图130在程序运行时被构建,可能是实时的。或者,原始流图130可以在执行结束之后基于执行的日志来被构建。在框630处,选择本体145以供使用。在本发明的一些实施例中,用户选择本体。然而,或者,富集系统100可以将在执行期间观察到的具体函数和类型与本体存储140中的各种本体145进行比较。然后,富集系统100可以使用注释最大数目的这种具体函数和类型的本体145,或者可以使用本体145的组合来确保具体函数和类型的大范围覆盖。在框640处,语义富集开始于扩展阶段,其中具体类型和具体函数被替换为本体145的相应抽象类型和抽象函数。在框650处,语义富集完成收缩,其中未标记的子图被折叠成单个未标记框。在框660处,返回所得到的语义流图110。如富集系统100的实施例所做的,教导机器理解代码开放了很多有趣的可能性。本发明的实施例可以用于各种目的,并且在一些情况下,集成到利用所得到的语义流图110的较大系统中。富集系统100可以为数据科学提供智能工具。例如,结合富集系统100的集成开发环境(ide)可以在用户工作时在语法和语义级别与用户交互。例如而非限制,通过生成语义流图110并且将其与其他语义流图110进行比较,富集系统100可以识别等同代码,并且可以提出用于实现相同任务的其他机制的建议。例如,如果用户使用r中的glm函数创建逻辑回归模型,则富集系统100可以通过参考适当的本体145将该逻辑回归识别为分类模型。然后,富集系统100可以向用户建议更灵活的分类模型,诸如逻辑广义加性模型。然后,富集系统100可以自动生成代码以从r包调用gam函数以实现广义附加模型。因此,集成富集系统100的ide可以鼓励用户发现新代码和新概念。又例如,富集系统100可以自动地向代码添加评论或者自动生成关于代码的元数据,以从语义上描述该代码。在本发明的一些实施例中,这可以通过自然语言生成与语义流图110相结合或者与适当的本体145中的语义表示相结合来实现。图7是根据本发明的一些实施例的用于实现系统的一些或所有方面的计算机系统700的框图。本文中描述的富集系统100和方法可以用硬件、软件(例如,固件)或其组合来实现。在一些实施例中,所描述的方法可以至少部分用硬件实现,并且可以是专用或通用计算机系统700(诸如个人计算机、工作站、小型计算机或大型计算机)的微处理器的一部分。在一些实施例中,如图7所示,计算机系统700包括经由本地i/o控制器735通信地耦合的处理器705、耦合到存储器控制器715的存储器710、以及一个或多个输入设备745和/或输出设备740(诸如外围设备)。这些设备740和745可以包括例如打印机、扫描仪、麦克风等。输入设备(诸如传统键盘750和鼠标755)可以被耦合到i/o控制器735。如本领域已知的,i/o控制器735可以是例如一个或多个总线或者其他有线或无线连接。i/o控制器735可以具有用于实现通信的附加元件,为了简单起见而省略了这些附加元件,诸如控制器、缓冲器(高速缓存)、驱动器、中继器和接收器。i/o设备740、745还可以包括传送输入和输出两者的设备,例如磁盘和磁带存储器、网络接口卡(nic)或调制器/解调器(用于访问其他文件、设备、系统、或者网络)、射频(rf)或其他收发器、电话接口、桥接器、路由器等。处理器705是用于执行硬件指令或软件、尤其是存储在存储器710中的硬件指令或软件的硬件设备。处理器705可以是定制的或商业上可用的处理器、中央处理单元(cpu)、若干处理器中与计算机系统700相关联的辅助处理器、基于半导体的微处理器(以微芯片或芯片组的形式)、宏处理器、或者用于执行指令的其他设备。处理器705包括高速缓存770,高速缓存770可以包括但不限于用于加速可执行指令获取的指令高速缓存、用于加速数据获取和存储的数据高速缓存、以及用于加速可执行指令和数据的虚拟到物理地址转换的转换后备缓冲器(tlb)。高速缓存770可以被组织为更多高速缓存级别(l1、l2等)的层级。存储器710可以包括易失性存储器元件(例如,随机存取存储器、ram、诸如dram、sram、sdram等)和非易失性存储器元件(例如,rom、可擦除可编程只读存储器(eprom)、电子可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁带、光盘只读存储器(cd-rom)、磁盘、软盘、盒式磁带、盒式磁带等)中的一个或组合。此外,存储器710可以包含电子、磁、光或其他类型的存储介质。注意,存储器710可以具有分布式架构,其中各种组件彼此远离但是可以由处理器705访问。存储器710中的指令可以包括一个或多个单独的程序,每个程序包括用于实现逻辑功能的可执行指令的有序列表。在图7的示例中,存储器710中的指令包括合适的操作系统(os)711。操作系统711本质上可以控制其他计算机程序的执行,并且提供调度、输入输出控制、文件和数据管理、存储器管理以及通信控制和相关服务。附加数据(包括例如处理器705的指令或其他可取回信息)可以存储在存储装置720中,存储装置720可以是诸如硬盘驱动器或固态驱动器等存储设备。存储器710或存储装置720中存储的指令可以包括使得处理器能够执行本公开的富集系统100和方法的一个或多个方面的指令。计算机系统700还可以包括耦合到显示器730的显示控制器725。在一些实施例中,计算机系统700还可以包括用于耦合到网络765的网络接口760。网络765可以是用于经由宽带连接的计算机系统700与外部服务器、客户端等之间的通信的基于ip的网络。网络765在计算机系统700与外部系统之间传输和接收数据。在一些实施例中,网络765可以是由服务提供商管理的受管理ip网络。网络765可以以无线方式实现,例如,使用无线协议和技术,诸如wifi、wimax等。网络765还可以是分组交换网络,诸如局域网、广域网、城域网、因特网或其他类似类型的网络环境。网络765可以是固定无线网络、无线局域网(lan)、无线广域网(wan)、个域网(pan)、虚拟专用网(vpn)、内联网或其他合适的网络系统,并且可以包括用于接收和传输信号的设备。根据本公开的富集系统100和方法可以全部或部分地在计算机程序产品中或在诸如图7所示的计算机系统700中实现。在任何可能的技术细节结合层面,本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过线传输的电信号。这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路配置数据或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本
技术领域
的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本
技术领域
的其它普通技术人员能理解本文所描述的各实施例。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1