一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于识别和解释代码的方法、装置和制品与流程

2022-06-16 06:22:55 来源:中国专利 TAG:


1.本公开总体上涉及代码重用,并且更具体地涉及用于识别和解释代码的方法、装置和制品。


背景技术:

2.程序员长期以来一直在一个程序中重用来自另一个程序的代码段。代码重用背后的一般原则是,从前编写的计算机程序的一部分可以用于构建以后编写的其他程序。代码重用的示例包括软件库,重用程序的先前版本作为新程序的起点、将现有程序的某些代码复制到新程序中等。


技术实现要素:

3.根据本公开的实施例,提供了一种用于识别和解释代码的装置,所述装置包括:自然语言(nl)处理器,用于处理nl特征以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;数据库驱动器,用于将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和应用程序编程接口(api),用于向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
4.根据本公开的实施例,提供了一种计算机可读介质,包括指令,所述指令在被执行时使得至少一个处理器至少:处理自然语言(nl)特征以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
5.根据本公开的实施例,提供了一种用于识别和解释代码的方法,所述方法包括:处理自然语言(nl)特征,以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
6.根据本公开的实施例,提供了一种用于识别和解释代码的装置,所述装置包括:用于处理自然语言(nl)的装置,用于处理nl特征以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;用于驱动数据库访问的装置,用于将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和用于接口的装置,用于向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
附图说明
7.图1是包括示例语义搜索引擎的网络图。
8.图2是示出图1的示例语义搜索引擎的附加细节的框图。
9.图3是可以实现由图1和/或图2的语义搜索引擎执行的自然语言处理(nlp)模型和/或代码分类(cc)模型的贝叶斯神经网络(bnn)的示例拓扑的示意图。
10.图4是用于训练由图1和/或图2的语义搜索引擎执行的nlp模型的示例训练数据的图形说明。
11.图5是示出由图1和/或图2的语义搜索引擎执行以从图1的版本控制系统(vcs)生成示例本体元数据的示例过程的框图。
12.图6是由图2和/或图5的应用程序编程接口(api)针对包括注释和/或消息参数的提交生成的示例本体元数据的图形说明。
13.图7是在图2和/或图5的nl处理器已经识别了与图1和/或图5的vcs中的提交的一个或多个注释和/或消息参数相关联的意图之后存储在图1和/或图5的数据库中的示例本体元数据的图形说明。
14.图8是要由图2和/或图5的示例cc模型执行器处理以训练cc模型的示例特征的图形说明。
15.图9是示出由图1和/或图2的语义搜索引擎执行以处理来自图1的用户设备的查询的示例过程的框图。
16.图10是表示可以被执行来实现图1、图2和/或图5的语义搜索引擎以训练图2、图3和/或图5的nlp模型、生成本体元数据、并训练图2、图3和/或图5的cc模型的机器可读指令的流程图。
17.图11是表示可以被执行来实现图1、图2和/或图9的语义搜索引擎以利用图2、图3和/或图9的nlp模型和/或图2、图3和/或图9的cc模型处理查询的机器可读指令的流程图。
18.图12是被构造为执行图10和/或图11的指令以实现图1、图2、图5和/或图9的语义搜索引擎的示例处理平台的框图。
19.图13是示例软件分发平台的框图,该示例软件分发平台用于将软件(例如,对应于图12的示例计算机可读指令的软件)分发给由诸如消费者(例如,用于许可、销售和/或使用)、零售商(例如,用于销售、转售、许可和/或再许可)和/或原始设备制造商(oem)(例如,用于包含在要分发给例如零售商和/或直接购买客户的产品中)拥有和/或操作的客户端设备。
20.附图不是按比例绘制的。通常,贯穿(一个或多个)附图和随附的书面描述将使用相同的附图标记来指代相同或相似的部件。如本文所使用的,除非另有说明,否则连接引用(例如,附接、耦合、连接和接合)可包括由连接引用所引用的元素之间的中间构件和/或这些元素之间的相对移动。因此,连接引用不一定暗示两个元素直接连接和/或彼此处于固定关系。
21.除非另有特别说明,否则诸如“第一”、“第二”、“第三”等的描述词在本文中使用而不以任何方式强加或以其他方式指示优先级、物理顺序、列表中的排列和/或排序的任何含义,而是仅用作标签和/或任意名称来区分元素以便于理解所公开的示例。在一些示例中,描述词“第一”可用于指代详细描述中的元素,而相同元素可在权利要求中用诸如“第二”或“第三”的不同描述词来指代。在这样的情况下,应当理解,这样的描述词仅用于清楚地标识那些可能例如以其他方式共享相同名称的元素。
具体实施方式
22.缩短新的软件和/或硬件产品的上市时间是一项非常具有挑战性的任务。例如,公司经常试图平衡许多变量,包括缩短开发时间、提高开发质量和降低开发成本(例如,开发中产生的货币支出)。通常,这些变量中的至少一个将受到负面影响,以缩短新产品的上市时间。然而,在致力于相同和/或类似项目的开发人员和/或开发团队之间高效和/或有效地重用源代码可以(例如,高度)有益于产品的研究和开发(r&d)上市时间。
23.代码重用对于新的和/或缺乏经验的开发人员来说是固有的挑战。例如,此类开发人员可能难以准确快速地识别适合其应用程序的源代码。开发人员通常在他们的代码(例如,源代码)中包括注释,以实现重用并指明某些代码行(loc)的意图。与loc的数量相比,包括许多注释的代码在本文中称为注释代码。附加地或替代地,代替注释,开发人员有时给函数和/或变量包括标签(例如,名称),这些标签(例如,名称)与函数和/或变量的使用和/或含义相关,以实现代码的重用。与(b)代码的函数和/或变量的数量相比,包括(a)带有与函数和/或变量的使用和/或含义相关的标签的许多函数和/或变量的代码在本文中称为自记录(self-documented)代码。
24.为了提高代码的重用,一些技术使用基于机器学习的自然语言处理(nlp)来分析注释和代码。人工智能(ai)(包括机器学习(ml)、深度学习(dl)和/或其他人工机器驱动逻辑)使机器(例如,计算机、逻辑电路等)能够使用模型来处理输入数据以基于模型先前经由训练过程学习的模式和/或关联生成输出。例如,可以用数据训练模型以识别模式和/或关联,并在处理输入数据时遵循这样的模式和/或关联,使得其他(一个或多个)输入产生与所识别的模式和/或关联一致的(一个或多个)输出。
25.通常,实现ml/ai系统涉及两个阶段:学习/训练阶段和推理阶段。在学习/训练阶段,训练算法被用于基于例如训练数据来训练模型根据模式和/或关联进行操作。通常,模型包括指导如何将输入数据转换为输出数据(例如通过模型内的一系列节点和连接将输入数据转换为输出数据)的内部参数。附加地,超参数用作训练过程的一部分,以控制如何执行学习(例如,学习率、机器学习模型中使用的层数等)。超参数被定义为在启动训练过程之前确定的训练参数。
26.可以基于ml/ai模型的类型和/或预期输出执行不同类型的训练。例如,监督训练使用输入和相应的预期(例如,标记)输出来为ml/ai模型选择减少模型误差的参数(例如,通过在选择参数的组合上进行迭代)。如本文所使用的,标记是指机器学习模型的预期输出(例如,分类、预期输出值等)。替代地,无监督训练(例如,用于深度学习、机器学习的子集等)涉及从输入推理模式以选择ml/ai模型的参数(例如,没有预期(例如,标记)输出的好处)。
27.改进代码重用的一种技术是找到注释和(一个或多个)loc之间的语义相似性。这种技术将注释与代码中的关键字或实体相关联。在这种技术中,关键字是指代码中在特定上下文中具有特定含义的字词。例如,此类关键字通常与保留字重合,保留字是在给定的编程语言中不能用作标识符(例如,变量、函数或标签的名称)的字词。然而,这样的关键字不
需要与保留字一一对应。例如,在某些语言中,所有关键字(如本技术中使用的)都是保留字,但并非所有保留字都是关键字。在c 中,保留字包括if、then、else等。c 中非保留字的关键字示例包括main。在这种技术中,实体指的是给定编程语言内的单元。在c 中,实体包括值、对象、引用、结构化绑定、函数、枚举器、类型、类成员、模板、模板特化、命名空间、参数包等。通常,实体包括标识符、分隔符、运算符、文字等。
28.改进代码重用的另一种技术基于代码和注释中的关键字和实体(entity)来确定方法的意图。这种技术从代码中提取方法名称、方法调用、枚举、字符串文字和注释。这种技术使用文本嵌入来生成提取的特征的向量表示。如果两个向量所代表的字词经常出现在相似的上下文中,则它们在向量空间中靠在一起。这种技术将代码的意图确定为嵌入向量的加权平均值。这种技术通过如下操作来返回给定nl查询的代码:为自然语言(nl)查询生成嵌入向量、确定nl查询的意图(例如,通过加权平均值)并针对方法的加权平均值执行相似性搜索。如本文所使用的,当引用nl文本时,关键字指的是描述软件开发过程的动作(例如,定义、恢复、违反、注释、公式等)。如本文所使用的,当引用nl文本时,实体是指描述源代码功能的字词的n-gram分组(例如,宏、标题等)。
29.当开发人员不注释或自记录他们的代码时,重用代码的挑战就会加剧,这使得开发人员找到合适的资源(例如,要重用的代码)和/或避免重新合成产品的产品特征或复合能力是很难的或不切实际的(例如,实际上不可能)。如下代码在本文被称为未注释代码:(1)不包括注释、(2)与loc的数量相比包括非常少的注释、或(3)包括代码开发人员独有且其他人不清楚理解的约定中的注释。如下代码在本文中被称为非自记录代码:(1)不包括带有与函数和/或变量的使用和/或含义相关的标签的函数和/或变量、或(2)与(b)代码的函数和/或变量的数量相比包括的(a)带有与函数和/或变量的使用和/或含义相关的标签的函数和/或变量非常少。
30.改进代码重用的先前技术依赖于找到源代码中的注释、实体和记号(token)之间的关系以检测代码片段的意图。如本文所使用的,记号是指具有确定含义的字符串。记号包括记号名称和/或记号值。例如,nl文本中关键字的记号可能包括记号名称“keyword”和记号值“not equivalent”。附加地或替代地,代码中关键字的记号(如在先前技术中使用的)可以包括记号名称“keyword”和记号值“while”。先前技术随后基于检测到的意图执行动作。然而,如上所述,在现实世界场景中,大多数代码是未注释或非自记录的。因此,先前技术在现实场景中非常低效和/或无效。在使用先前技术时,开发人员的这些不良做法(例如,未能对代码进行注释或未能自记录代码)导致源代码的意图检测性能不佳。因此,先前技术无法在诸如从版本控制系统(vcs)生成的数据集中找到源代码示例。因此,先前技术负面地(例如,高度负面地)影响软件和/或硬件产品的开发和交付时间。
31.本文公开的示例包括代码搜索引擎,用于执行语义搜索以查找和/或推荐代码片段,即使代码片段的开发人员没有遵循良好的文档实践(例如,注释和/或自记录)。为了将nl查询与代码匹配,本文公开的示例将vcs内容的本体表示与注释和代码意图(例如,代码片段开发意图)的概率分布(pd)建模(例如,通过一个或多个贝叶斯神经网络(bnn))合并。本文公开的示例使用良好记录的(例如,注释和/或自记录的)代码的本体表示的实体和/或关系来训练一个或多个bnn。因此,本文公开的示例概率性地将意图与未注释的代码片段相关联。因此,本文公开的示例提供不确定性和上下文感知智能代码完成。
32.本文公开的示例合并自然语言处理和/或自然语言理解、概率计算和知识表示技术以对vcs的内容(例如,源代码和/或相关联的参数)进行建模。因此,本文公开的示例将vcs的内容表示为有意义的本体表示,使得能够对代码片段进行语义搜索,否则由于原始源代码中缺乏可读语义结构(例如,注释和/或自记录的),这将是不可能的。本文公开的示例处理自然语言查询,将自然语言查询的意图与未注释和/或非自记录代码片段相匹配,并推荐如何使用未注释和/或非自记录代码片段。本文公开的示例处理原始未注释和/或非自记录代码片段,识别代码片段的意图,并返回与代码片段的意图相关的一组vcs提交审查。
33.因此,本文公开的示例通过使开发人员能够更好地重用他们的资源(例如,可以重用的代码)来加速新产品(例如,软件和/或硬件)的上市时间。例如,本文公开的示例防止开发人员必须从头开始编写解决方案,例如,当在其他存储库中找不到解决方案时(例如,堆栈溢出)。因此,本文公开的示例缩短了开发新产品的公司的上市时间。
34.图1是包括示例语义搜索引擎102的网络图100。网络图100包括示例语义搜索引擎102、示例网络104、示例数据库106、示例vcs 108和示例用户设备110。在图1的示例中,示例语义搜索引擎102、示例数据库106、示例vcs 108、示例用户设备110和/或一个或多个附加设备经由示例网络104通信耦合。
35.在图1所示的示例中,语义搜索引擎102由一个或多个执行指令的处理器实现。例如,语义搜索引擎102可以由一个或多个处理器来实现,该处理器执行一个或多个经过训练的机器学习模型和/或执行指令以实现一个或多个ml模型的外围组件,例如预处理器、特征提取器、模型训练器、数据库驱动器、应用程序编程接口(api)等。在附加或替代示例中,语义搜索引擎102可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)图形处理单元((一个或多个)gpu)、(一个或多个)数字信号处理器((一个或多个)dsp)、(一个或多个)专用集成电路((一个或多个)asic)、(一个或多个)可编程逻辑器件((一个或多个)pld)和/或(一个或多个)现场可编程逻辑器件((一个或多个)fpld)实现。
36.在图1所示的示例中,语义搜索引擎102由一个或多个控制器实现,这些控制器训练语义搜索引擎102的其他组件(例如一个或多个bnn)以生成vcs 108的可搜索本体表示(在此进一步讨论),确定nl查询的意图,和/或解释包括代码片段的查询(例如,注释的、未注释的、自记录的和/或非自记录的)。在附加或替代示例中,语义搜索引擎102可以实现任何其他ml/ai模型。在图1的示例中,语义搜索引擎102向终端用户提供一种或多种服务和/或产品。例如,语义搜索引擎102提供一个或多个经过训练的模型以供下载、托管网络界面等。在一些示例中,语义搜索引擎102向终端用户提供实现语义搜索引擎102的插件。以这种方式,终端用户可以在本地(例如,在用户设备110处)实现语义搜索引擎102。
37.在一些示例中,示例语义搜索引擎102实现用于识别和解释代码的示例装置。用于识别和解释代码的装置由(例如由至少图10的块1002、1004、1006、1008、1010、1012、1014、1016、1018、1020、1022、1024、1026、1028、1030、1032、1034、1036、1038和1040和/或至少图11的块1102、1104、1106、1108、1110、1112、1114、1116、1118、1120、1122、1124、1126、1128、1130、1132和1134实现的)可执行指令实现。图10的块1002、1004、1006、1008、1010、1012、1014、1016、1018、1020、1022、1024、1026、1028、1030、1032、1034、1036、1038和1040和/或图11的块1102、1104、1106、1108、1110、1112、1114、1116、1118、1120、1122、1124、1126、1128、
1130、1132和1134的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上实现。在其他示例中,用于识别和解释代码的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
38.在图1所示的示例中,网络104是互联网。然而,示例网络104可以使用任何合适的有线和/或无线网络来实现,包括例如一个或多个数据总线、一个或多个局域网(lan)、一个或多个无线lan、一个或多个蜂窝网络、一个或多个专用网络、一个或多个公共网络等。在附加或替代示例中,网络104是企业网络(例如,在企业、公司等内)、家庭网络等。示例网络104使语义搜索引擎102、数据库106、vcs 108和用户设备110能够进行通信。如本文所使用的,短语“与

通信”包括其变体(例如,通信、通信耦合等)涵盖直接通信和/或通过一个或多个中间组件的间接通信,并且不需要直接物理(例如,有线)通信和/或持续通信,而是包括以周期性或非周期性间隔的选择性通信,以及一次性事件。
39.在图1所示的示例中,数据库106由图形数据库(gdb)实现。例如,作为gdb,数据库106将存储在数据库106中的数据与各种节点和边相关联,其中边表示节点之间的关系。这些关系允许将存储在数据库106中的数据链接在一起,使得可以在单个查询中检索相关数据。在图1的示例中,数据库106由一个或多个neo4j图形数据库实现。在附加或替代示例中,数据库106可以由一个或多个arangodb图形数据库、一个或多个orientdb图形数据库、一个或多个amazon neptune图形数据库等来实现。例如,数据库106的合适实现将能够通过文本(例如,字符串)相似性度量隐式地或显式地存储源代码意图的概率分布。
40.在图1所示的示例中,vcs 108由与vcs平台相关联的一个或多个计算机和/或一个或多个存储器实现。在一些示例中,vcs 108包括的组件可以是分布式的(例如,地理上不同的)。在图1的示例中,vcs 108管理对计算机程序、网站和/或其他信息集合的更改。vcs 108的用户(例如,经由用户设备110访问vcs 108的开发人员)可以编辑由vcs 108管理的程序和/或其他代码。为了编辑代码,开发人员在由vcs 108管理的代码的最新版本的工作副本上进行操作。当开发人员到达他们想要将他们的编辑与vcs 108处的最新版本代码合并的点时,开发人员向vcs 108提交他们的更改。vcs 108然后更新代码的最新版本以反映跨vcs 108的所有实例的代码的工作副本。在一些示例中,vcs 108可以回滚提交(例如,当开发人员想要查看程序的之前版本时)。vcs 108的用户(例如,审阅者、未起草代码的其他用户等)可以在提交中对代码应用注释和/或向代码的起草者发送消息以审阅和/或以其他方式改进提交中的代码。
41.在图1所示的示例中,vcs 108由与gerrit code review平台相关联的一个或多个计算机和/或一个或多个存储器实现。在附加或替代示例中,实现vcs 108的一个或多个计算机和/或一个或多个存储器可以与另一个vcs平台(例如aws codecommit、microsoft team foundation server、git、subversion等)相关联。在图1的示例中,向vcs 108的提交与诸如更改、主题、消息、修订、文件、代码行、注释和diff参数之类的参数相关联。更改参数对应于vcs 108处的提交的标识符。主题参数对应于开发人员在提交中请求的更改。消息参数对应于提交的审阅者发布的消息。修订参数对应于主题的修订号,因为同一主题可以有多个修订。文件参数对应于提交所修改的文件。代码行参数对应于审阅者注释的loc。注释参数对应于审阅者留下的注释。diff参数指定提交是添加到源实现的先前版本还是从源实现的先前版本中移除。
42.在图1所示的示例中,用户设备110由膝上型计算机实现。在附加或替代示例中,用户设备110可以由移动电话、平板计算机、台式计算机、服务器等实现,包括一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld。用户设备110可以附加地或替代地由cpu、gpu、加速器、异构系统等来实现。
43.在图1所示的示例中,用户设备110从语义搜索引擎102订阅和/或以其他方式购买产品和/或服务以访问一个或多个经过训练的机器学习模型,以对vcs进行本体建模、识别nl查询的意图、基于nl查询的意图返回从数据库中检索到的代码片段、处理包括未注释和/或非自记录代码片段的查询、并返回代码片段的意图和/或相关的vcs提交。例如,用户设备110通过从语义搜索引擎102下载一个或多个模型、访问由语义搜索引擎102和/或另一设备托管的网络界面以及其他技术来访问一个或多个经过训练的模型。在一些示例中,用户设备110安装插件以实现机器学习应用程序。在这样的示例中,插件实现语义搜索引擎102。
44.在示例操作中,语义搜索引擎102访问并从vcs 108中提取针对给定提交的信息。例如,语义搜索引擎102针对提交从vcs 108中提取更改、主题、消息、修订、文件、代码行、注释和diff参数。语义搜索引擎102生成包括从vcs 108提取的信息的元数据结构。例如,元数据结构对应于提交内容的本体表示。在本文公开的示例中,提交的本体表示包括与提交相关联的数据的图形表示(例如,节点、边等)并且图示了类别、属性以及与提交相关联的数据之间的关系。例如,与提交关联的数据包括更改、主题、消息、修订、文件、代码行、注释和diff参数。
45.在示例操作中,对于包括注释和/或消息参数的提交,语义搜索引擎102用经过训练的自然语言处理(nlp)机器学习模型预处理注释和/或消息参数。在语义搜索引擎102预处理了注释和/或消息参数之后,语义搜索引擎102从注释和/或消息参数中提取nl特征。语义搜索引擎102处理nl特征。例如,语义搜索引擎102基于nl特征识别注释和/或消息参数的一个或多个实体、一个或多个关键字、和/或一个或多个意图,并且用(例如,元数据结构中的存储)识别的实体、关键字和/或意图更新元数据结构。附加地或替代地,语义搜索引擎102为提交生成另一元数据结构,包括提交的简化本体表示,包括所识别的(一个或多个)意图。语义搜索引擎102还为附加提交提取元数据。
46.在本文公开的示例中,每个识别的意图对应于指定确定性参数或不确定性参数中的至少一个的概率分布(pd)。确定性和不确定性参数对应于语义搜索引擎102在识别的意图中的置信水平。例如,确定性参数对应于由语义搜索引擎102执行的ml/ai模型识别意图的置信度平均值,而不确定性参数对应于识别的意图的标准差。因此,本文公开的示例基于与实体相关的开发意图概率分布生成vcs本体实体之间的加权关系。在示例操作中,基于从vcs 108的提交生成的一个或多个元数据结构,包括识别的意图以及确定性和不确定性参数,语义搜索引擎102生成用于语义搜索引擎102的代码分类(cc)机器学习模型的训练数据集。随后,语义搜索引擎102用该训练数据集训练语义搜索引擎102的cc模型。
47.在示例操作中,在cc机器学习模型被训练之后,语义搜索引擎102部署cc模型来处理vcs 108中不包括注释和/或消息参数的提交的代码。例如,语义搜索引擎102预处理没有注释和/或消息参数的提交,为这些提交生成代码片段特征,并用cc模型处理代码片段特征以从没有注释和/或消息参数的提交中识别代码的意图。以这种方式,语义搜索引擎102处
理代码片段特征以从没有注释和/或消息参数的提交中识别代码的意图。语义搜索引擎102然后用所识别的代码的意图补充数据库106中的元数据结构。
48.在示例操作中,语义搜索引擎102还处理nl查询和/或代码片段查询。例如,语义搜索引擎102在语义搜索引擎102本地部署nlp模型和/或cc模型以分别处理nl查询和/或代码片段查询。附加地或替代地,语义搜索引擎102将nlp模型、cc模型和/或其他组件部署到用户设备110以实现语义搜索引擎102。
49.在示例操作中,在部署nlp模型和cc模型之后,语义搜索引擎102就查询监视用户界面。例如,语义搜索引擎102就来自用户(例如,开发人员)的查询监视由语义搜索引擎102托管的网络应用的界面。附加地或替代地,如果语义搜索引擎102在用户设备(例如,用户设备110)处在本地实现,则语义搜索引擎102就来自用户的查询监视在用户设备上本地执行的应用程序的界面。当语义搜索引擎102接收到查询时,语义搜索引擎102确定查询包括代码片段还是nl输入。在本文公开的示例中,代码片段查询包括注释的、未注释的、自记录的和/或非自记录的代码片段。
50.在示例操作中,当查询是nl查询时,语义搜索引擎102预处理nl查询,从nl查询中提取nl特征,并处理nl特征以确定nl查询的意图、实体和关键字。随后,语义搜索引擎102以nl查询的意图查询数据库106。当查询是代码片段查询时,语义搜索引擎102预处理代码片段查询,从代码片段提取特征,处理代码片段特征,并以代码片段的意图查询数据库106。如果数据库106返回对查询的一个或多个匹配,则语义搜索引擎102根据语义搜索引擎102为每个匹配结果确定的确定性参数或不确定性参数中的至少一个来排序和呈现匹配。如果数据库106没有返回对查询的匹配,则语义搜索引擎102呈现“不匹配”消息(本文将进一步讨论)。
51.图2是示出图1的示例语义搜索引擎102的附加细节的框图。在图2的示例中,语义搜索引擎102包括示例api 202、示例nl处理器204、示例代码分类器206、示例数据库驱动器208和示例模型训练器210。示例nl处理器204包括示例nl预处理器212、示例nl特征提取器214和示例nlp模型执行器216。示例代码分类器206包括示例代码预处理器218、示例代码特征提取器220和示例cc模型执行器222。
52.在图2所示的示例中,api 202、nl处理器204、代码分类器206、数据库驱动器208、模型训练器210、nl预处理器212、nl特征提取器214、nlp模型执行器216、代码预处理器218、代码特征提取器220和/或cc模型执行器222中的任意项经由示例通信总线224进行通信。在本文公开的示例中,可以使用任何合适的有线和/或无线通信来实现通信总线224。在附加或替代示例中,通信总线224包括软件、机器可读指令和/或通信协议,通过通信协议在api 202、nl处理器204、代码分类器206、数据库驱动器208、模型训练器210、nl预处理器212、nl特征提取器214、nlp模型执行器216、代码预处理器218、代码特征提取器220和/或cc模型执行器222之间传送信息。
53.在图2所示的示例中,api 202由一个或多个执行指令的处理器实现。附加地或替代地,api 202可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld来实现。在图2的示例中,api 202经由网络104访问vcs 108。api 202还针对给定提交从vcs 108提取元数据。例如,api 202提取包括变更、主
题、消息、修订、文件、代码行、注释和/或diff参数的元数据。api 202生成元数据结构以将提取的元数据存储在数据库106中。api 202还确定vcs 108内是否存在要为其生成元数据结构的附加提交。
54.在图2所示的示例中,api 202附加地或替代地充当用户和语义搜索引擎102之间的用户接口。例如,api 202监视用户查询。api 202附加地或替代地确定是否已经接收到查询。响应于确定已经接收到查询,api 202确定查询包括代码片段还是nl输入。例如,api 202确定用户是否选择了指示查询是包括nl输入还是代码片段的复选框。api 202可以采用附加的或替代的技术来确定查询是包括nl输入还是代码片段。如果查询包括nl输入,则api 202将查询转发到nl处理器204。如果查询包括代码片段,则api 202将查询转发到代码分类器206。
55.在一些示例中,示例api 202实现用于接口的示例装置。用于接口的装置由(例如由至少图10的块1008、1010、1012和1024和/或至少图11的块1102、1104、1106、1128、1132和1134实现的)可执行指令实现。图10的块1008、1010、1012和1024和/或图11的块1102、1104、1106、1128、1132和1134的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于接口的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
56.在图2所示的示例中,nl处理器204由一个或多个执行指令的处理器实现。附加地或替代地,nl处理器204可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld实现。在训练了由nl处理器204执行的nlp模型之后,nl处理器204确定vcs 108处的各种提交是否包括注释和/或消息参数。nl处理器204处理与从vcs 108提取的一个或多个提交相对应的注释和/或消息参数。nl处理器204还确定注释和消息参数的意图并针对给定的提交补充存储在数据库106中的元数据结构。
57.附加地或替代地,nl处理器204处理并确定nl查询的意图。例如,nl处理器204被配置为从nl字符串中提取nl特征。附加地,nl处理器204被配置为处理nl特征以确定nl字符串的意图。在一些示例中,如果两个不同的nl查询的语义相同或足够相似,则nl处理器204将使数据库驱动器208以相同的查询来查询数据库106。因此,如果查询的语义含义足够相似,则数据库106可以针对不同的nl查询返回相同的结果。
58.在一些示例中,示例nl处理器204实现用于处理自然语言的示例装置。用于处理自然语言的装置由(例如由至少图10的块1014、1016、1018、1020和1022和/或至少图11的块1108、1110、1112和1114实现的)可执行指令实现。图10的块1014、1016、1018、1020和1022和/或图11的块1108、1110、1112和1114的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于处理自然语言的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
59.在图2所示的示例中,代码分类器206由一个或多个执行指令的处理器实现。附加地或替代地,代码分类器206可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld实现。在由代码分类器206执行的cc
模型被训练之后,代码分类器206在vcs 108处处理不包括注释和/或消息参数的提交的代码以确定代码意图。附加地或替代地,代码分类器206处理代码片段查询(例如,未注释的和非自记录的代码片段)以确定查询的意图。例如,代码分类器206被配置为提取和处理代码片段特征以识别代码意图。在一些示例中,可以训练cc模型以提供特定代码片段的预期意图。
60.在一些示例中,示例代码分类器206实现用于分类代码的示例装置。用于分类代码的装置由(例如由至少图10的块1032、1034、1036、1038和1040和/或至少图11的块1116、1118、1120和1122实现的)可执行指令实现。图10的块1032、1034、1036、1038和1040和/或图11的块1116、1118、1120和1122的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于分类代码的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
61.在图2所示的示例中,数据库驱动器208由一个或多个执行指令的处理器实现。附加地或替代地,数据库驱动器208可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld实现。在图2的示例中,数据库驱动器208由neo4j python driver 4.1实现。在附加或替代示例中,数据库驱动器208可以由arangodb java驱动器、orientdb spring data驱动器、gremlin-node驱动器等来实现。在一些示例中,数据库驱动器208可以由数据库接口、数据库通信器、语义查询生成器等来实现。
62.在图2所示的示例中,数据库驱动器208响应于来自api 202、nlp模型执行器216和/或cc模型执行器222的输入来存储和/或更新存储在数据库106中的元数据结构。数据库驱动器208附加地或替代地用nl处理器204生成的结果和/或代码分类器206生成的结果查询数据库106。例如,当查询包括nl输入时,数据库驱动器208以nl处理器204确定的查询的意图和nl特征查询数据库106。当查询包括代码片段时,数据库驱动器208以代码分类器206确定的代码片段的意图查询数据库106。在本文公开的示例中,数据库驱动器208以cypher查询语言生成对数据库106的语义查询。取决于数据库106的实现方式,可以使用其他查询语言。
63.在图2所示的示例中,数据库驱动器208确定数据库106是否针对给定查询返回任何匹配。响应于确定数据库106没有返回任何匹配,数据库驱动器208向api 202发送“不匹配”消息以呈现给用户。例如,“不匹配”消息向用户表明查询未产生匹配,并建议用户从头开始开发。响应于确定数据库106返回了一个或多个匹配,数据库驱动器208根据结果的相应确定性或不确定性参数中的至少一个对结果进行排序。数据库驱动器208还将排序的结果传输到api 202以呈现给请求用户。
64.在一些示例中,示例数据库驱动器208实现用于驱动数据库访问的示例装置。用于驱动数据库访问的装置由(例如由至少图11的块1124、1126和1130实现的)可执行指令实现。图11的块1124、1126和1130的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于驱动数据库访问的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
65.在图2所示的示例中,模型训练器210由一个或多个执行指令的处理器实现。附加
地或替代地,模型训练器210可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld实现。在图2的示例中,模型训练器210训练nlp模型和/或cc模型。
66.在图2所示的示例中,模型训练器210训练nlp模型以确定提交的注释和/或消息参数的意图。在本文公开的示例中,模型训练器210使用称为“adam”的自适应学习率优化算法来训练nlp模型。“adam”算法执行随机梯度下降的优化版本。然而,可以附加地或替代地使用任何其他训练算法。在本文公开的示例中,执行训练直到nlp模型以大于97%的平均确定性和/或小于15%的平均不确定性返回注释和/或消息参数的意图。在本文公开的示例中,在语义搜索引擎102处执行训练。然而,在附加或替代示例中(例如,当用户设备110执行插件以实现语义搜索引擎102时),可以在用户设备110和/或任何其他终端用户设备处执行训练。
67.在本文公开的示例中,使用控制如何执行学习的超参数(例如,学习率、要在机器学习模型中使用的层数等)来执行对nlp模型的训练。在本文公开的示例中,超参数控制nlp模型的层数、训练数据中的样本数等。例如,通过手动选择来选择此类超参数。例如,当网络中的不确定性大于确定性时,可以调整超参数。在一些示例中,可以执行重新训练。这种重新训练可以周期性地和/或响应于触发事件(例如检测到意图检测的平均确定性已经下降到97%以下和/或意图检测的平均不确定性已经上升到15%以上)来执行。其他事件可能会触发重新训练。
68.使用训练数据执行训练。在本文公开的示例中,nlp模型的训练数据源自本地生成的数据。但是,在附加或替代示例中,可以使用公开可用的训练数据来训练nlp模型。nlp模型的训练数据的附加细节将结合图4进行讨论。因为使用了监督训练,所以对训练数据进行标记。由监督对nlp模型训练的个体将标记应用于nlp模型的训练数据。在一些示例中,对nlp模型训练数据进行预处理以例如提取诸如关键字和实体的特征,从而促进训练数据的nlp。
69.训练完成后,nlp模型将被部署用作可执行构造,该构造处理输入并提供基于nlp模型中定义的节点和连接的网络的输出。nlp模型的示例结构结合图3进行了说明和讨论。nlp模型存储在语义搜索引擎102处。nlp模型然后可由nlp模型执行器216执行。在一些示例中,用户设备110的一个或多个处理器执行nlp模型。
70.在图2所示的示例中,模型训练器210训练cc模型以确定代码片段查询的意图。在本文公开的示例中,模型训练器210使用称为“adam”的自适应学习率优化算法来训练cc模型。“adam”算法执行随机梯度下降的优化版本。然而,可以附加地或替代地使用任何其他训练算法。在本文公开的示例中,执行训练直到cc模型以大于97%的平均确定性和/或小于15%的平均不确定性返回代码片段的意图。在本文公开的示例中,在语义搜索引擎102处执行训练。然而,在附加或替代示例中(例如,当用户设备110执行插件以实现语义搜索引擎102时),可以在用户设备110和/或任何其他终端用户设备处执行训练。
71.在本文公开的示例中,使用控制如何执行学习的超参数(例如,学习率、要在机器学习模型中使用的层数等)来执行对cc模型的训练。在本文公开的示例中,超参数控制cc模型的层数、训练数据中的样本数等。例如,通过手动选择来选择此类超参数。例如,当网络中
的不确定性大于确定性时,可以调整超参数。在一些示例中,可以执行重新训练。这种重新训练可以周期性地和/或响应于触发事件(例如检测到意图检测的平均确定性已经下降到97%以下和/或平均不确定性已经上升到15%以上)来执行。其他触发事件可能会导致重新训练。
72.使用训练数据执行训练。在本文公开的示例中,cc模型的训练数据是基于经过训练的nlp模型的输出生成的。例如,nlp模型执行器216执行nlp模型以确定vcs 108的各种提交的注释和/或消息参数的意图。nlp模型执行器216然后用意图补充用于提交的元数据结构。然而,在附加或替代示例中,nlp模型可以处理公开可用的训练数据以生成cc模型的训练数据。cc模型的训练数据的附加细节将结合图7和/或图8进行讨论。因为使用了监督训练,所以训练数据被标记。由nlp模型和/或基于由nlp模型识别的关键字、实体和/或意图手动地将标记应用于cc模型的训练数据。在一些示例中,cc模型训练数据被预处理以例如提取诸如代码片段的记号和/或抽象语法树(ast)特征之类的特征以促进代码片段的分类。
73.训练完成后,cc模型被部署用作可执行构造,该构造处理输入并提供基于cc模型中定义的节点和连接的网络的输出。cc模型的示例结构结合图3被示出和讨论。cc模型存储在语义搜索引擎102处。cc模型然后可以由cc模型执行器222执行。在一些示例中,用户设备110的一个或多个处理器执行cc模型。
74.一旦经过训练,(一个或多个)部署模型就可以在推理阶段运行以处理数据。在推理阶段,要分析的数据(例如,实时数据)被输入到模型中,并且模型执行以创建输出。这个推理阶段可以被认为是ai“思考”以基于它从训练中学到的东西(例如,通过执行模型以将学到的模式和/或关联应用于实时数据)来生成输出。在一些示例中,输入数据在用作机器学习模型的输入之前经过预处理。此外,在一些示例中,输出数据在由ai模型生成后可经历后处理,以将输出转换为有用的结果(例如,数据的显示、机器要执行的指令等)。
75.在一些示例中,部署模型的输出可以被捕获并作为反馈被提供。通过分析反馈,可以确定部署模型的准确性。如果反馈表明部署模型的准确性低于阈值或其他标准,则可以使用反馈和更新的训练数据集、超参数等触发对更新模型的训练,以生成更新的部署模型。
76.在一些示例中,示例模型训练器210实现用于训练机器学习模型的示例装置。用于训练机器学习模型的装置由(例如由至少图10的块1002、1004、1006、1026、1028和1030实现的)可执行指令实现。图10的块1002、1004、1006、1026、1028和1030的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于训练机器学习模型的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
77.在图2所示的示例中,nl预处理器212由一个或多个执行指令的处理器实现。附加地或替代地,nl预处理器212可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld实现。在图2的示例中,nl预处理器212预处理nl查询、注释参数和/或消息参数。例如,nl预处理器212将nl查询、注释参数和/或消息参数的文本分离成字词、短语和/或其他单元。在一些示例中,nl预处理器212通过访问vcs 108和/或基于从api 202接收的数据来确定vcs 108处的提交是否包括注释和/或消息参数。
78.在一些示例中,示例nl预处理器212实现用于预处理自然语言的示例装置。用于预处理自然语言的装置由(例如由至少图10的块1014和1016和/或至少图11的块1108实现的)可执行指令实现。图10的块1014和1016和/或图11的块1108可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于预处理自然语言的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
79.在图2所示的示例中,nl特征提取器214由一个或多个执行指令的处理器实现。附加地或替代地,nl特征提取器214可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld实现。在图2的示例中,nl特征提取器214从预处理的nl查询、注释参数和/或消息参数中提取和/或以其他方式生成特征。例如,nl特征提取器214为预处理的nl查询、注释参数和/或消息参数的关键字和/或实体生成记号。例如,记号代表nl查询、注释参数和/或消息参数中的字词和/或其中的词汇。
80.在附加或替代示例中,nl特征提取器214从预处理的nl查询、注释参数和/或消息参数生成词性(pos)和/或依赖性(deps)特征。pos特征表示记号的标签(例如,名词、动词、副词、形容词、介词等)。deps特征表示nl查询、注释参数和/或消息参数中的记号之间的依赖性。nl特征提取器214还嵌入记号以创建代表从给定nl查询、注释参数和/或消息参数提取的所有记号的输入向量。nl特征提取器214还嵌入pos特征以创建表示由nl查询、注释参数、和/或消息参数中的记号表示的字词的类型(例如,名词、动词、副词、形容词、介词等)的输入向量。nl特征提取器214还嵌入deps特征以创建表示nl查询、注释参数和/或消息参数中的原始记号之间的关系的输入向量。nl特征提取器214合并记号输入向量、pos输入向量和deps输入向量以创建对nlp模型的更通用的输入向量,其允许nlp模型更好地识别任何自然语言域中的自然语言的意图。
81.在一些示例中,示例nl特征提取器214实现用于提取自然语言特征的示例装置。用于提取自然语言特征的装置由(例如由至少图10的块1018和/或至少图11的块1110实现的)可执行指令实现。图10的块1018和/或图11的块1110的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于提取自然语言特征的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
82.在图2所示的示例中,nlp模型执行器216由一个或多个执行指令的处理器实现。附加地或替代地,nlp模型执行器216可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld来实现。在图2的示例中,nlp模型执行器216执行本文描述的nlp模型。
83.在图2所示的示例中,nlp模型执行器216执行bnn模型。在附加或替代示例中,nlp模型执行器216可以执行不同类型的机器学习模型和/或机器学习架构存在。在本文公开的示例中,使用bnn模型使nlp模型执行器216能够在处理nl查询、注释参数和/或消息参数时确定确定性和/或不确定性参数。通常,适合在本文公开的示例方法中使用的机器学习模型/架构将包括概率计算技术。
84.在一些示例中,示例nlp模型执行器216实现用于执行nlp模型的示例装置。用于执行nlp模型的装置由(例如由至少图10的块1020和1022和/或至少图11的块1112和1114实现
的)可执行指令实现。图10的块1020和1022和/或图11的块1112和1114的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于执行nlp模型的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
85.在图2所示的示例中,代码预处理器218由一个或多个执行指令的处理器实现。附加地或替代地,代码预处理器218可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld来实现。在图2的示例中,代码预处理器218在没有注释和/或消息参数的情况下预处理来自vcs 108的代码片段查询和/或代码。例如,代码预处理器218将代码片段转换成文本并将文本分离成字词、短语和/或其他单元。
86.在一些示例中,示例代码预处理器218实现用于预处理代码的示例装置。用于预处理代码的装置由(例如由至少图10的块1032和1040和/或至少图11的块1116实现的)可执行指令实现。图10的块1032和1040和/或图11的块1116的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于预处理代码的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合实现。
87.在图2所示的示例中,代码特征提取器220由一个或多个执行指令的处理器实现。附加地或替代地,代码特征提取器220可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld来实现。在图2的示例中,代码特征提取器220实现抽象语法树(ast)以从来自vcs 108的没有注释和/或消息参数的预处理的代码片段查询和/或代码中提取和/或以其他方式生成特征。例如,代码特征提取器220生成记号和代码部分(poc)特征。记号表示代码中的字词、短语和/或其他单元和/或其中的句法。poc特征表示由ast为记号生成的增强标签。代码特征提取器220附加地或替代地识别记号的类型(例如,由ast确定)。poc记号和记号类型特征一起生成至少两个特征序列以用作cc模型的输入。
88.在图2所示的示例中,代码特征提取器220还嵌入记号以创建表示从来自vcs 108处的提交的给定代码片段查询和/或代码提取的所有记号的输入向量。代码特征提取器220还嵌入poc特征以创建表示由来自vcs108处的提交的代码片段查询和/或代码中的记号表示的字词类型(例如,变量、运算符等)的输入向量。代码特征提取器220合并记号输入向量和poc输入向量以为cc模型创建更通用的输入向量,其允许cc模型更好地识别任何编程语言域中的代码意图。例如,为了训练cc模型以确定任何编程语言域中的代码的意图,模型训练器210用训练数据集训练cc模型,该训练数据集包括代码片段的ast,但是使用用户或模型训练器210希望cc模型理解的各种编程语言。
89.在一些示例中,示例代码特征提取器220实现用于提取代码特征的示例装置。用于提取代码特征的装置由(例如由至少图10的块1034和/或至少图11的块1118实现的)可执行指令实现。图10的块1034和/或图11的块1118的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于提取代码特征的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
90.在图2所示的示例中,cc模型执行器222由一个或多个执行指令的处理器实现。附加地或替代地,cc模型执行器222可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)gpu、(一个或多个)dsp、(一个或多个)asic、(一个或多个)pld和/或(一个或多个)fpld来实现。在图2所示的示例中,cc模型执行器222执行本文描述的cc模型。
91.在图2所示的示例中,cc模型执行器222执行bnn模型。在附加或替代示例中,cc模型执行器222可以执行不同类型的机器学习模型和/或机器学习架构存在。在本文公开的示例中,使用bnn模型使cc模型执行器222能够在处理来自vcs 108处的提交的代码片段查询和/或代码时确定确定性和/或不确定性参数。通常,适合在本文公开的示例方法中使用的机器学习模型/架构将包括概率计算技术。
92.在一些示例中,示例cc模型执行器222实现用于执行cc模型的示例装置。用于执行cc模型的装置由(例如由至少图10的块1036和1038和/或至少图11的块1120和1122实现的)可执行指令实现。图10的块1036和1038和/或图11的块1120和1122的可执行指令可以在诸如图12的示例处理器1212的至少一个处理器上执行。在其他示例中,用于执行cc模型的装置由硬件逻辑、硬件实现的状态机、逻辑电路和/或硬件、软件和/或固件的任何其他组合来实现。
93.图3是可以实现由图1和/或图2的语义搜索引擎102执行的nlp模型和/或cc模型的贝叶斯神经网络(bnn)300的示例拓扑的示意图。在图3的示例中,bnn 300包括示例输入层302、示例隐藏层306和310以及示例输出层314。示例输入层302包括示例输入神经元302a,示例隐藏层306包括示例隐藏神经元306a、306b和306n,示例隐藏层310包括示例隐藏神经元310a、310b和310n,并且示例输出层314包括示例神经元314a、314b和314n。在图3的示例中,输入神经元302a、隐藏神经元306a、306b、306n、310a、310b、310n和输出神经元314a、314b和314n中的每一个根据激活函数h(x)处理输入。
94.在图3所示的示例中,bnn 300是人工神经网络(ann),其中层(例如,302、306、310和314)之间的权重通过分布来定义。例如,输入神经元302a耦合到隐藏神经元306a、306b和306n,并且根据概率分布函数(pdf)分别将权重304a、304b和304n应用于输入神经元302a的输出。类似地,权重308应用于隐藏神经元306a、306b和306n的输出并且权重312应用于隐藏神经元310a、310b和310n的输出。
95.在图3所示的示例中,描述权重304、308和312的pdf中的每一个根据下面的等式1来定义。
96.w
0,0
~n(μ
0,0
,σ
0,0
)
97.等式1
98.在等式1的示例中,权重被定义为给定均值(μ)和给定标准差(σ)的正态分布。因此,在推理阶段期间,从概率权重分布中生成样本,以获得应用于神经元输出的权重“快照”。根据该“快照”执行通过bnn 300的数据传播或前向传递。根据给定应用的目标确定性和/或不确定性,通过bnn 300的数据传播执行多次(例如,大约20-40次试验甚至更多)。
99.图4是用于训练由图1和/或图2的语义搜索引擎102执行的nlp模型的示例训练数据400的图形说明。训练数据400表示用于nl处理器204的概率意图检测的训练数据集。训练数据400包括五列,这五列指定loc、应用于该loc的示例注释和/或消息参数的文本、示例注
释和/或消息参数的意图、示例注释和/或消息参数的实体、以及示例注释和/或消息参数的关键字。
100.在图4所示的示例中,nlp模型执行器216将loc的注释和/或消息参数的实体和关键字(例如,由nl特征提取器214提取)与意图检测(例如,由nlp模型执行器216确定)相组合以确定改进的文本语义解释。在训练数据400中,注释和/或消息参数的意图包括“回答功能”、“指示错误”、“查询功能”、“增强功能”、“调用功能”、“实现代码”、“查询实现”、“跟踪实现”、“增强风格”和“实现算法”。
101.在图4所示的示例中,对于第一loc(用零索引表示),注释和/或消息参数的文本是“您能否为幻数定义宏?(此处全部更改)”。幻数是指具有无法解释的含义和/或可以被命名常量替换的多次出现的独特值。第一loc上的注释和/或消息参数的意图是“实现代码”和“跟踪实现”。第一loc上的注释和/或消息参数的实体是“幻数|:|算法,宏|:|代码”。第一loc的注释和/或消息参数的关键字是“定义、更改”。
102.在图4所示的示例中,对于最小linux虚拟环境中的小数据集(例如250个样本),模型训练器210在36.5秒和30次迭代中训练nlp模型。在图4的示例中,在推理阶段运行时,nlp模型对单个输入执行10次推理,执行时间为1.6秒。例如,nlp模型处理句子“默认非零”。10次的平均值和测试句子“默认非零”的标准差如表1所示。
103.平均值标准差0.0730.0970.0710.1050.0500.1220.1050.085-0.0660.105-0.0170.063-0.0180.1160.0330.1020.0100.1050.7160.095
104.表1
105.在图4所示的示例中,nlp模型将“跟踪实现”标签分配给正确类别的测试句子。基于这些结果,本文公开的示例通过增加的(例如,大于或等于250)训练样本实现了足够的准确度和降低(例如,低)的不确定性。
106.图5是示出由图1和/或图2的语义搜索引擎102执行的从图1的vcs 108生成示例本体元数据502的示例过程500的框图。过程500示出了被执行以生成本体元数据502的三个流水线。这三个流水线包括元数据生成、自然语言处理和未注释代码分类。在图5的示例中,当api 202从vcs 108提取相关信息时元数据生成流水线开始。api 202还生成可由数据库驱动器208使用的元数据结构(例如,502)。在图5的示例中,api 202为vcs 108中的提交提取变更参数、主题参数、消息参数、修订参数、文件参数、代码行参数、注释参数和/或diff参数。
107.在图5所示的示例中,自然语言处理流水线是概率深度学习流水线,该概率深度学
习流水线可由语义搜索引擎102执行以确定注释和/或消息参数对应于特定意图(例如,开发意图)的概率分布。当nl预处理器212确定给定提交是否包括注释和/或消息参数时,自然语言处理流水线开始。如果提交包括注释和/或消息参数,则nl预处理器212通过将vcs 108中的提交的注释和/或消息参数的文本分离成字词、短语和/或其他单元来预处理该注释和/或消息参数。随后,nl特征提取器214通过为预处理的注释和/或消息参数的关键字和/或实体生成记号来从注释和/或消息参数中提取nl特征。附加地或替代地,nl特征提取器214从预处理的注释和/或消息参数生成pos和deps特征并且合并记号、pos特征和deps特征。
108.在图5所示的示例中,nlp模型执行器216(例如,执行经过训练的nlp模型)将提取的nl特征与注释和/或消息参数的意图相组合并且补充本体元数据502。例如,nlp模型执行器216为包括注释和/或消息参数的代码确定伴随本体的确定性和/或不确定性参数。因此,nlp模型执行器216生成将注释和/或消息与注释和/或消息的相应开发意图相关联的自然语言注释和/或消息的概率分布模型。
109.在图5所示的示例中,模型训练器210然后可以在离线过程(未示出)中使用补充的本体元数据502来训练代码分类器206。在图5的示例中,通常被称为管理员的人类监督者和/或程序可以使用包括已知意图和/或已知相关代码片段的一个或多个nl查询来查询语义搜索引擎102。随后,nlp模型执行器216和/或管理员使用nlp模型执行器216的输出,可以将语义搜索引擎102的输出与nl查询的意图、nl查询的关键字、nl查询的实体和/或预期代码输出的相关修订(例如,后续提交)相关联。nlp模型执行器216和/或管理员通过组合注释和/或消息参数的意图(例如“实现算法”、“实现代码”和/或调用函数”)与诸如“幻数”和/或“函数1”的实体来标记从vcs 108检索的代码片段的意图。基于这样的组合,nlp模型执行器216和/或管理员为代码生成标签,例如“实现幻数”和/或“调用函数1”。nlp模型执行器216和/或管理员基于附加或替代意图、关键字和/或实体为从vcs 108检索的代码生成附加或替代标签。nlp模型执行器216和/或管理员可以重复该过程以生成cc模型的训练数据集的附加数据。
110.在图5所示的示例中,当代码预处理器218预处理用于vcs 108处的不包括注释和/或消息参数的提交的代码时,未注释代码分类流水线开始。例如,代码预处理器218从最初由api 202为缺少注释和/或消息参数的提交生成的本体元数据502中提取代码行参数。例如,代码预处理器218通过将代码转换为文本并将文本分成字词、短语和/或其他单元来预处理代码。随后,代码特征提取器220通过为预处理代码的字词、短语和/或其他单元生成记号来从预处理代码生成特征向量。附加地或替代地,代码特征提取器220生成poc特征。代码特征提取器220附加地或替代地识别记号的类型(例如,由ast确定)。
111.在图5所示的示例中,cc模型执行器222然后在没有注释和/或自记录的帮助的情况下执行经过训练的cc模型以识别代码片段的意图。例如,cc模型执行器222为不包括注释和/或消息参数的代码确定伴随本体的确定性和/或不确定性参数。因此,cc模型执行器222生成将代码与代码的开发意图相关联的未注释和/或非自记录代码的概率分布模型。这样,当用户使用语义搜索引擎102运行nl查询时,语义搜索引擎102针对代码(具有识别的意图)运行查询以返回具有与nl查询的意图相关的意图的代码列表。
112.图6是由图2和/或图5的api 202生成的用于包括注释和/或消息参数的提交的示
例本体元数据600的图形说明。本体元数据600表示示例更改参数602、示例主题参数604、示例消息参数606、示例修订参数608、示例文件参数610、示例代码行参数612、示例注释参数614和示例diff参数616。更改参数602、主题参数604、消息参数606、修订参数608、文件参数610、代码行参数612、评论参数614和diff参数616被表示为本体元数据600中的节点。本体元数据600图示了vcs 108的本体的一部分。例如,本体元数据600表示与单个更改602a相关的实体。因为本体元数据600可通过cypher查询语言在数据库106内访问,所以语义搜索引擎102可以查询与单个更改相关的实体。
113.在图6所示的示例中,参数602、604、606、608、610、612、614和616之间的关系由边表示。例如,本体元数据600包括示例have_message边618、示例have_revision边620、示例have_subject边622、示例have_file边624、示例have_diff边626、示例have_commented_line边628和示例have_comment边630。在图6的示例中,每个边包括身份(id)参数和值参数。例如,have_diff边626d包括示例id参数632和示例值参数634。id参数632等于23521并且值参数634等于“已添加”。id参数632和值参数634指示diff参数616d被添加到先前的实现中。通常,由于审阅者和/或开发人员的习惯,开发人员在代码中包含与单行代码相关的注释。diff参数616和对应的have_diff边626(例如,diff参数616d和文件参数610a之间的have_diff边626d)允许语义搜索引擎102识别更多代码(例如,大于一个loc)以与审阅者和/或开发人员添加的注释和/或消息的意图相关。
114.图7是在图2和/或图5的nl处理器204已经识别出与图1和/或图5的vcs 108中的提交的一个或多个注释和/或消息参数相关联的意图之后存储在图1和/或图5的数据库106中的示例本体元数据700的图形说明。本体元数据700表示示例更改参数702、示例修订参数704、示例文件参数706、示例代码行参数708、示例注释参数710和示例意图参数712。更改参数702、修订参数704、文件参数706、代码行参数708、注释参数710和意图参数712被表示为本体元数据700中的节点。本体元数据700示出了在nlp模型执行器216组合初始元数据(例如,由api 202提取)与代码行注释和/或消息参数的一个或多个开发意图之后的简化元数据结构。
115.在图7所示的示例中,参数702、704、706、708、710和712之间的关系由边表示。例如,本体元数据700包括示例have_revision边714、示例have_file边716、示例have_commented_line边718、示例have_comment边720和示例have_intent边722。在图7的示例中,每个have_intent边722包括id参数、确定性参数和不确定性参数。例如,have_intent边722a包括示例id参数724、示例确定性参数726和示例不确定性参数728。id参数724等于2927,确定性参数726等于0.33554475703313114,不确定性参数728等于0.09396910065673011。
116.在图7所示的示例中,注释参数710a的值是“为什么要删除?”并且意图参数712a的值为“查询功能”。因此,注释参数710a和意图参数712a之间的have_intent边722a说明了两个节点之间的关系。确定性和不确定性参数726、728由nlp模型执行器216确定。通过添加注释和/或消息参数的意图的pdf,nlp模型执行器216有效地分配与注释和/或消息参数相关的代码片段的意图的概率。因此,nlp模型执行器216可以(例如,单独地和/或在管理员的帮助下)扩充存储在数据库106中的元数据结构以生成用于代码分类器206的训练数据集。
117.图8是要由图2和/或图5的示例cc模型执行器222处理以训练cc模型的示例特征
800的图形说明。例如,特征800表示代码意图检测数据集。代码特征提取器220通过ast提取特征800并生成具有识别的记号类型的一个或多个记号。附加地或替代地,代码特征提取器220提取poc特征。以这种方式,代码特征提取器220生成被输入到由cc模型执行器222执行的cc模型(例如,用于嵌入层)的至少两个特征序列。
118.在图8所示的示例中,管理员可以用一个或多个nl查询来查询语义搜索引擎102,该nl查询包括已知意图和/或已知相关代码片段。随后,nlp模型执行器216和/或管理员使用nlp模型执行器216的输出,可以将语义搜索引擎102的输出与nl查询的意图、nl查询的关键字、nl查询的实体和/或预期代码输出的相关修订(例如,后续提交)相关联。nlp模型执行器216和/或管理员通过将注释和/或消息参数的意图与实体相组合来标记从vcs 108检索的代码片段的意图。
119.图9是示出由图1和/或图2的语义搜索引擎102执行的、用于处理来自图1的用户设备110的查询的示例过程900的框图。过程900示出了由语义搜索引擎102促进的语义搜索过程。过程900可以在nlp模型和cc模型都已经被训练和部署之后开始。例如,在训练了nlp模型和cc模型之后,语义搜索引擎102为vcs 108生成本体。语义搜索引擎102处理两个nl查询,包括代表开发人员查询和/或原始代码片段(例如,未注释和/或非自记录代码片段)的文本。
120.在图9所示的示例中,过程900示出了被执行以提取如下查询的含义的两个流水线:该查询将由数据库驱动器208使用以生成对数据库106的语义查询。这两个流水线包括自然语言处理和未注释代码分类。在图9的示例中,api 202托管用户通过其提交查询的界面。例如,api 202托管网络界面。
121.在图9所示的示例中,api 202针对用户查询监视界面。响应于检测到查询,api 202确定查询包括代码片段还是nl输入。响应于确定查询包括nl输入,api 202将查询转发到nl处理器204。响应于确定查询包括代码片段,api 202将查询转发到代码分类器206。
122.在图9所示的示例中,当用户(例如,开发人员)向语义搜索引擎102发送nl查询以咨询存储在数据库106中的本体(例如,至少表示为本体元数据600和/或本体元数据700)时,nl处理器204检测文本的意图并提取nl特征(例如,实体和/或关键字)以完成参数化语义查询的条目(例如,以cypher查询语言)。例如,nl预处理器212将nl查询的文本分成字词、短语和/或其他单元。附加地或替代地,nl特征提取器214通过为预处理的nl查询的关键字和/或实体生成记号和/或从预处理的nl查询生成pos和deps特征,来从预处理的nl查询提取和/或以其他方式生成特征。nl特征提取器214合并记号、pos和deps特征。随后,nlp模型执行器216确定nl查询的意图并将意图和提取的nl特征提供给数据库驱动器208。
123.在图9所示的示例中,数据库驱动器208用意图和提取的nl特征查询数据库106。数据库驱动器208确定数据库106是否以不确定性的阈值水平返回任何匹配。例如,当数据库驱动器208查询数据库106时,数据库驱动器208指定不确定性的阈值水平,高于该阈值水平数据库106不应返回结果,或者,替代地,返回没有结果的指示。例如,结果中较低的不确定性对应于更准确的结果,而结果中较高的不确定性对应于不太准确的结果。因此,nlp模型执行器216用来确定意图的确定性和/或不确定性参数被包括在查询中。如果数据库106返回代码片段的匹配,则数据库驱动器208根据包括在其中的确定性和/或不确定性参数对结果进行排序。随后,数据库驱动器208返回包括匹配语义查询参数的一组代码片段的查询结
果902。在本文公开的示例中,当查询结果902包括代码片段时,这些代码片段包括未注释和/或非自记录代码。如果数据库106没有返回任何匹配,则数据库驱动器208向api 202发送“不匹配”消息作为查询结果902。随后,api 202向用户呈现“不匹配”消息。
124.在图9所示的示例中,当用户发送代码片段查询时,代码分类器206检测代码片段查询的意图。例如,代码预处理器218将代码片段转换为文本并将代码片段查询的文本分离为字词、短语和/或其他单元。附加地或替代地,代码特征提取器220实现ast以提取和/或以其他方式生成包括以下中的一个或多个的特征向量:字词、短语和/或其他单元的记号;poc特征;和/或记号的类型(例如,由ast确定)。cc模型执行器222确定代码片段的意图,而不管代码片段是否包括注释和/或代码片段是否是自记录的。cc模型执行器222将意图转发到数据库驱动器208以查询数据库106。代码分类器206处理的示例代码片段结合表2示出。
[0125][0126][0127]
表2
[0128]
在图9所示的示例中,代码分类器206将表2中所示的代码片段的意图识别为“实现递归二进制搜索功能”。在图9的示例中,数据库驱动器208执行参数化语义查询(例如,以cypher查询语言)并返回来自本体的一组注释参数,这些参数与相关提交的代码片段查询和/或其他参数的意图相匹配。例如,数据库驱动器208以如cc模型执行器222所确定的意图来查询数据库106。例如,数据库驱动器208向数据库106发送查询,该查询包括cc模型执行器222用来确定意图包含在该查询中的确定性和/或不确定性参数。匹配代码片段的意图的、来自本体的相关提交的注释参数和/或其他参数的结果集描述了代码片段查询中所包括的代码片段的功能性。数据库驱动器208确定数据库106是否返回具有不确定性阈值水平的任何匹配。例如,数据库106返回低于不确定性阈值水平并且包括匹配意图的条目。如果数据库106为代码片段查询返回注释和/或其他参数,则数据库驱动器208根据包括在其中
的确定性和/或不确定性参数对结果进行排序。随后,数据库驱动器208将包括匹配语义查询参数的一组vcs提交的查询结果902返回给api 202以呈现给请求用户。例如,vcs提交集包括注释参数、消息参数和/或意图参数,这些参数允许开发人员快速理解查询中包含的代码片段。如果数据库106没有返回任何匹配,则数据库驱动器208向api 202发送“不匹配”消息作为查询结果902。随后,api 202向请求用户呈现“不匹配”消息。
[0129]
虽然图2示出了实现图1的语义搜索引擎102的示例方式,但是图2中所示的元素、过程和/或装置中的一个或多个可以以任何其他方式组合、划分、重新布置、省略、消除和/或实现。此外,图1和/或图2的示例应用程序编程接口(api)202、示例自然语言(nl)处理器204、示例代码分类器206、示例数据库驱动器208、示例模型训练器210、示例自然语言(nl)预处理器212、示例自然语言(nl)特征提取器214、示例自然语言处理(nlp)模型执行器216、示例代码预处理器218、示例代码特征提取器220、示例代码分类(cc)模型执行器222、和/或更一般地示例语义搜索引擎102可以由硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,图1和/或图2的示例应用程序编程接口(api)202、示例自然语言(nl)处理器204、示例代码分类器206、示例数据库驱动器208、示例模型训练器210、示例自然语言(nl)预处理器212、示例自然语言(nl)特征提取器214、示例自然语言处理(nlp)模型执行器216、示例代码预处理器218、示例代码特征提取器220、示例代码分类(cc)模型执行器222、和/或更一般地示例语义搜索引擎102中的任意可以由一个或多个模拟或数字电路、逻辑电路、(一个或多个)可编程处理器、(一个或多个)可编程控制器、(一个或多个)图形处理单元(gpu)、(一个或多个)数字信号处理器(dsp)、(一个或多个)专用集成电路(asic)、(一个或多个)可编程逻辑器件(pld)和/或(一个或多个)现场可编程逻辑器件(fpld)实现。当阅读本专利的任何装置或系统权利要求以涵盖纯软件和/或固件实现时,图1和/或图2的示例应用程序编程接口(api)202、示例自然语言(nl)处理器204、示例代码中的至少一个分类器206、示例数据库驱动器208、示例模型训练器210、示例自然语言(nl)预处理器212、示例自然语言(nl)特征提取器214、示例自然语言处理(nlp)模型执行器216、示例代码预处理器218、示例代码特征提取器220、示例代码分类(cc)模型执行器222、和/或更一般地示例语义搜索引擎102中的至少一个在此明确定义为包括非暂态计算机可读存储设备或存储盘,例如存储器、数字多功能盘(dvd)、压缩盘(cd)、蓝光盘等,包括软件和/或固件。更进一步,除了或代替图2所示的那些元素、过程和/或设备,图1和/或图2的示例语义搜索引擎102可以包括一个或多个元素、过程和/或设备,和/或可以包括任何或所有所示元素、过程和装置中的一个以上。如本文所使用的,短语“与

通信”(包括其变体)包括直接通信和/或通过一个或多个中间组件的间接通信,并且不需要直接物理(例如,有线)通信和/或持续通信,而是附加地包括以周期性间隔、预定间隔、非周期性间隔和/或一次性事件的选择性通信。
[0130]
图10和图11中示出了表示用于实现图1、图2、图5和/或图9的语义搜索引擎102的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或其任何组合的流程图。机器可读指令可以是由计算机处理器和/或处理器电路(例如以下结合图12讨论的示例处理器平台1200中所示的处理器1212)执行的一个或多个可执行程序或可执行程序的(一个或多个)部分。程序可以体现在存储在非暂态计算机可读存储介质(例如cd-rom、软盘、硬盘驱动器、dvd、蓝光盘或与处理器1212相关联的存储器)上的软件中,但是整个程序和/或其部分可以替代地由除处理器1212之外的设备执行和/或体现在固件或专用硬件中。在本文公开的一
些示例中,非暂态计算机可读存储介质被称为非暂态计算机可读介质。此外,虽然示例程序是参照图10和图11所示的流程图进行描述的,但是可以替代地使用实现示例语义搜索引擎102的许多其他方法。例如,可以改变块的执行顺序,和/或可以改变、消除或组合所描述的一些块。附加地或替代地,任何或所有块可以由被构造成在不执行软件或固件的情况下执行相应的操作的一个或多个硬件电路(例如,分立和/或集成模拟和/或数字电路、fpga、asic、比较器、运算放大器(op-amp)、逻辑电路等)实现。处理器电路可以分布在不同的网络位置和/或一个或多个设备(例如,单个机器中的多核处理器、跨服务器机架分布的多个处理器等)本地。
[0131]
本文描述的机器可读指令可以以压缩格式、加密格式、分段格式、编译格式、可执行格式、打包格式等中的一种或多种存储。本文描述的机器可读指令可以存储为可用于创建、制造和/或产生机器可执行指令的数据或数据结构(例如,指令、代码、代码表示等的部分)。例如,机器可读指令可以被分段并存储在位于网络或网络集合的相同或不同位置(例如,在云中、在边设备中等)的一个或多个存储设备和/或计算设备(例如,服务器)上。机器可读指令可能需要安装、修改、改编、更新、组合、补充、配置、解密、解压、解包、分发、重新分配、编译等中的一种或多种,以使其直接由计算设备和/或其他机器可读、可解释和/或可执行。例如,机器可读指令可以存储在多个部分中,这些部分被分别压缩、加密并存储在单独的计算设备上,其中这些部分在解密、解压缩和组合时形成一组实现可以一起形成程序(例如这里描述的程序)的一个或多个功能的可执行指令。
[0132]
在另一个示例中,机器可读指令可以被存储在它们可以被处理器电路读取的状态下,但是需要添加库(例如,动态链接库(dll))、软件开发工具包(sdk)、应用程序编程接口(api)等,以便在特定计算设备或其他设备上执行指令。在另一个示例中,在机器可读指令和/或相应的程序可以全部或部分执行之前,可能需要配置机器可读指令(例如,存储的设置、数据输入、记录的网络地址等)。因此,本文使用的机器可读介质可以包括机器可读指令和/或(一个或多个)程序,而不管机器可读指令和/或(一个或多个)程序在存储或以其他方式静止或传输时的特定格式或状态。
[0133]
本文描述的机器可读指令可以用任何过去、现在或将来的指令语言、脚本语言、编程语言等来表示。例如,机器可读指令可以使用以下任何一种语言来表示:c、c 、java、c#、perl、python、javascript、超文本标记语言(html)、结构化查询语言(sql)、swift等。
[0134]
如上所述,图10和/或图11的示例过程可以使用存储在非暂态计算机和/或机器可读介质(例如硬盘驱动器、闪存、只读存储器、压缩盘、数字多功能盘、高速缓存、随机存取存储器和/或任何其他存储设备或存储盘,其中信息存储任何持续时间(例如,延长的时间段,永久地,简短的瞬间,临时缓冲,和/或缓存信息))上的可执行指令(例如,计算机和/或机器可读指令)实现。如本文所使用的,术语非暂态计算机可读介质被明确地定义为包括任何类型的计算机可读存储设备和/或存储盘并且不包括传播信号并且不包括传输介质。
[0135]“包括”和“包含”(及其所有形式和时态)在本文中用作开放性术语。因此,每当权利要求采用任何形式的“包括”或“包含”(例如,包含、包括、组成、构成、具有等)作为前序或在任何类型的权利要求叙述内时,应理解为在不超出相应权利要求或引用的范围的情况下,可以存在附加元素、术语等。如本文所使用的,当短语“至少”用作例如权利要求前序中的过渡术语时,它以与术语“包含”和“包括”开放性相同的方式开放性。术语“和/或”当以例
如a、b和/或c的形式使用时是指a、b、c的任何组合或子集,例如(1)a单独,(2)b单独,(3)c单独,(4)a与b,(5)a与c,(6)b与c,以及(7)a与b和c。如本文在描述结构、组件、项目、对象和/或事物的上下文中所使用的,短语“a和b中的至少一个”旨在指代包括(1)至少一个a、(2)至少一个b和(3)至少一个a和至少一个b中的任意的实现。类似地,如本文在描述结构、组件、项目、对象和/或事物的上下文中所使用的,短语“a或b中的至少一个”旨在指代包括(1)至少一个a、(2)至少一个b和(3)至少一个a和至少一个b中的任意的实现。如本文在描述过程、指令、动作、活动和/或步骤的执行或运行的上下文中所使用的,短语“a和b中的至少一个”旨在指代包括(1)至少一个a、(2)至少一个b和(3)至少一个a和至少一个b中的任意的实现。类似地,如本文在描述过程、指令、动作、活动和/或步骤的执行或运行的上下文中所使用的,短语“a或b中的至少一个”旨在指代包括(1)至少一个a、(2)至少一个b和(3)至少一个a和至少一个b中的任意的实现。
[0136]
如本文所使用的,单数引用(例如,“一”、“一个”、“第一”、“第二”等)不排除复数。如本文所使用的,术语“一”或“一个”实体是指该实体中的一个或多个。术语“一”(或“一个”)、“一个或多个”和“至少一个”在本文中可以互换使用。此外,尽管单独列出,但多个装置、元素或方法动作可以由例如单个单元或处理器来实现。此外,虽然单独的特征可能被包括在不同的示例或权利要求中,但这些特征可能被组合,并且包括在不同的示例或权利要求中并不意味着特征的组合是不可行的和/或有利的。
[0137]
图10是表示可以被执行以实现图1、图2和/或图5的语义搜索引擎102以训练图2、图3和/或图5的nlp模型、生成本体元数据、并训练图2、图3和/或图5的cc模型的机器可读指令1000的流程图。机器可读指令1000开始于块1002,其中模型训练器210训练nlp模型以对nl查询的意图、注释参数和/或消息参数进行分类。例如,在块1002处,模型训练器210使nlp模型执行器216对训练数据(例如,训练数据400)执行nlp模型。
[0138]
在图10所示的示例中,在块1004处,模型训练器210确定nlp模型是否满足一个或多个误差度量。例如,模型训练器210确定nlp模型是否能够正确识别具有大于97%的确定性参数和小于15%的不确定性参数的nl字符串的意图。响应于模型训练器210确定nlp模型满足一个或多个误差度量(块1004:是),机器可读指令1000进行到块1006。响应于模型训练器210确定nlp模型满足不满足一个或多个误差度量(块1004:否),机器可读指令1000返回块1002。
[0139]
在图10所示的示例中,在块1006处,模型训练器210部署nlp模型以在推理阶段执行。在块1008处,api 202访问vcs 108。在块1010处,api 202从vcs 108提取用于提交的元数据。例如,元数据包括更改参数、主题参数、消息参数、修订参数、文件参数、代码行参数、注释参数和/或diff参数。在块1012处,api 202生成元数据结构,该元数据结构包括从vcs 108提取的用于提交的元数据。例如,元数据结构可以是诸如结合图6所示和描述的本体表示。
[0140]
在图10所示的示例中,在块1014处,nl预处理器212和/或更一般地nl处理器204确定提交是否包括注释和/或消息参数。响应于nl预处理器212确定提交包括注释和/或消息参数(块1014:是),机器可读指令1000进行到块1016。响应于nl预处理器212确定提交不包括注释并且不包括消息参数(块1014:否),机器可读指令1000进行到块1024。在块1016处,nl处理器204预处理提交的注释和/或消息参数。例如,在块1016处,nl预处理器212通过将
注释和/或消息参数的文本分成字词、短语和/或其他单元来预处理提交的注释和/或消息参数。
[0141]
在图10所示的示例中,在块1018处,nl处理器204从预处理的注释和/或消息参数生成nl特征。例如,在块1018处,nl特征提取器214通过为预处理的注释和/或消息参数的关键字和/或实体生成记号来从预处理的注释和/或消息参数中提取和/或以其他方式生成特征。附加地或替代地,在块1018处,nl特征提取器214从预处理的注释和/或消息参数生成pos和deps特征。
[0142]
在图10所示的示例中,在块1020处,nl处理器204用nlp模型处理nl特征。例如,在块1020处,nlp模型执行器216以nl特征作为输入来执行nlp模型以确定注释和/或消息参数的意图。在块1022处,nl处理器204用所识别的意图、关键字和/或实体来补充提交的元数据结构。例如,在块1022处,nlp模型执行器216用识别的意图、关键字和/或实体补充提交的元数据结构。在块1022处,nl处理器204还用所识别的意图的确定性和/或不确定性参数来补充提交的元数据结构。例如,在块1022处,nlp模型执行器216还用所识别的意图的确定性和/或不确定性参数来补充提交的元数据结构。
[0143]
在图10所示的示例中,在块1024处,api 202确定在vcs 108处是否存在附加提交。响应于api 202确定存在附加提交(块1024:是),机器可读指令1000返回到块1010。响应于api 202确定不存在附加提交(框1024:否),机器可读指令1000进行到块1026。在块1026处,模型训练器210使用如上所述的补充元数据训练cc模型。
[0144]
在图10所示的示例中,在块1028处,模型训练器210确定cc模型是否满足一个或多个误差度量。例如,模型训练器210确定cc模型是否能够正确地识别具有大于97%的确定性参数和小于15%的不确定性参数的代码片段的意图。响应于模型训练器210确定cc模型满足一个或多个误差度量(块1028:是),机器可读指令1000进行到块1030。响应于模型训练器210确定cc模型不满足一个或多个误差度量(块1028:否),机器可读指令1000返回块1026。在块1030处,模型训练器210部署cc模型以在推理阶段执行。
[0145]
在图10所示的示例中,在块1032处,代码分类器206预处理提交的代码。例如,在块1032处,代码预处理器218通过将代码转换为文本并将文本分成字词、短语和/或其他单元来预处理提交的代码。在块1034处,代码分类器206从预处理的代码生成代码片段特征。例如,在块1034处,代码特征提取器220通过为字词、短语和/或其他单元生成记号来从预处理的代码中提取和/或以其他方式生成特征。附加地或替代地,在块1034处,代码特征提取器220从预处理的代码和/或记号的记号类型生成poc特征。
[0146]
在图10所示的示例中,在块1036处,代码分类器206用cc模型处理代码片段特征。例如,在块1036处,cc模型执行器222以代码片段特征作为输入来执行cc模型以确定代码的意图。在块1038处,代码分类器206用所识别的代码意图补充提交的元数据结构。例如,在块1038处,cc模型执行器222用所识别的意图补充提交的元数据结构。在块1038处,代码分类器206还用所识别的意图的确定性和/或不确定性参数来补充提交的元数据结构。例如,在块1038处,cc模型执行器222还用所识别的意图的确定性和/或不确定性参数补充提交的元数据结构。
[0147]
在图10所示的示例中,在块1040处,代码预处理器218和/或更一般地代码分类器206在没有注释参数和没有消息参数的情况下确定vcs 108处是否存在附加提交。响应于代
码预处理器218在没有注释参数和没有消息参数的情况下确定在vcs 108处存在附加提交(块1040:是),机器可读指令1000返回到块1032。响应于代码预处理器218在没有注释参数和没有消息参数的情况下确定在vcs 108处没有附加提交(块1040:否),机器可读指令1000终止。
[0148]
图11是表示可以被执行以实现图1、图2和/或图9的语义搜索引擎102以利用图2、图3和/或图9的nlp模型和/或图2、图3和/或图9的cc模型处理查询的机器可读指令1100的流程图。机器可读指令1100开始于块1102,其中api 202监视查询。在块1104处,api 202确定是否已经接收到查询。响应于api 202确定已接收到查询(块1104:是),机器可读指令1100进行到块1106。响应于api 202确定尚未接收到查询(块1104:否),机器可读指令1100返回到块1102。
[0149]
在图11所示的示例中,在块1106处,api 202确定查询是否包括代码片段。响应于api 202确定查询包括代码片段(块1106:是),机器可读指令1100进行到块1116。响应于api 202确定查询不包括代码片段(块1106:否),机器可读指令1100进行到块1108。在块1108处,nl处理器204预处理nl查询。例如,在块1108处,nl预处理器212通过将nl查询的文本分成字词、短语和/或其他单元来预处理nl查询。在本文公开的示例中,nl查询包括由自然语言查询(例如,句子)表示的文本。
[0150]
在图11所示的示例中,在块1110处,nl处理器204从预处理的nl查询生成nl特征。例如,在块1110处,nl特征提取器214通过为预处理的nl查询的关键字和/或实体生成记号来从预处理的nl查询提取和/或以其他方式生成特征。附加地或替代地,在块1110处,nl特征提取器214从预处理的nl查询生成pos和deps特征。在一些示例中,在块1110处,nl特征提取器214将记号、pos特征和deps特征合并成单个输入向量。
[0151]
在图11所示的示例中,在块1112处,nl处理器204用nlp模型处理nl特征。例如,在块1112处,nlp模型执行器216以nl特征作为输入来执行nlp模型以确定nl查询的意图。在块1114处,nl处理器204将nl查询的意图、关键字和/或实体传送到数据库驱动器208。例如,在块1114处,nlp模型执行器216传送nl查询的意图、关键字和/或实体到数据库驱动器208。
[0152]
在图11所示的示例中,在块1116处,代码分类器206预处理代码片段查询。例如,在块1116处,代码预处理器218将代码片段转换成文本并将代码片段查询的文本分离成字词、短语和/或其他实体。在本文公开的示例中,代码片段查询包括宏、函数、结构、模块和/或可以编译和/或解释的任何其他代码。例如,代码片段查询可以包括json、xml和/或其他类型的结构。在块1118处,代码分类器206从预处理的代码片段查询中提取特征。例如,在块1118处,代码特征提取器220提取和/或以其他方式生成包括以下中的一个或多个的特征向量:字词、短语和/或其他单元的记号;poc特征;和/或记号类型。在一些示例中,在块1118处,代码特征提取器220将记号、poc特征和记号类型合并为单个输入向量。
[0153]
在图11所示的示例中,在块1120处,代码分类器206用cc模型处理代码片段特征。例如,在块1120处,cc模型执行器222对代码片段特征执行cc模型以确定代码片段的意图。在此处公开的示例中,cc模型执行器222识别代码片段的意图,而不管代码片段是否包括注释和/或代码片段是否是自记录的。在块1122处,代码分类器206将代码片段的意图传送到数据库驱动器208。例如,在块1122处,cc模型执行器222将代码片段的意图传送到数据库驱动器208。
[0154]
在图11所示的示例中,在块1124处,数据库驱动器208用nl处理器204和/或代码分类器206的输出查询数据库106。例如,在块1124处,数据库驱动器208提交参数化语义查询(例如,以cypher查询语言)到数据库106。在块1126处,数据库驱动器208确定数据库106是否返回与查询的匹配。响应于数据库驱动器208确定数据库106返回与查询的匹配(块1126:是),机器可读指令1100进行到块1130。响应于数据库驱动器208确定数据库106没有返回与查询的匹配(块1126:否),数据库驱动器208向api 202发送“不匹配”消息并且机器可读指令1100前进到块1128。
[0155]
在图11所示的示例中,在块1128处,api 202呈现“不匹配”消息。如果数据库驱动器208为nl查询返回“不匹配”消息,则语义搜索引擎102监视用户如何开发对未知nl查询的解决方案。在用户开发出对nl查询的解决方案之后,语义搜索引擎102将解决方案存储在数据库106中,以便如果先前导致“不匹配”消息的nl查询被重新提交,则语义搜索引擎102返回新开发的解决方案。附加地或替代地,如果数据库驱动器208针对代码片段查询返回“不匹配”消息,则语义搜索引擎102监视用户如何注释和/或以其他方式查看未知代码片段。在用户开发代码片段的注释和/或其他理解之后,语义搜索引擎102将代码片段的注释和/或其他理解存储在数据库106中,以便如果先前导致“不匹配”消息的代码片段查询”被重新提交,则语义搜索引擎102返回新开发的注释和/或理解。以这种方式,语义搜索引擎102随着新提交的进行而周期性地更新vcs 108的本体表示。
[0156]
在图11所示的示例中,在块1130处,数据库驱动器208根据与查询相关联的确定性和/或不确定性参数对查询结果进行排序。例如,对于nl查询结果,数据库驱动器208根据nlp模型和/或cc模型识别返回的代码片段的意图的确定性和/或不确定性对结果进行排序。例如,对于代码片段查询结果,数据库驱动器208根据nlp模型和/或cc模型识别返回的提交的注释参数和/或其他参数的意图的确定性和/或不确定性对结果进行排序。在块1130处对结果进行排序之后,数据库驱动器208将排序结果传输到api 202。
[0157]
在图11所示的示例中,在块1132处,api 202呈现排序结果。在块1134处,api 202确定是否继续操作。响应于api 202确定语义搜索引擎102将继续操作(块1134:是),机器可读指令1100返回到块1102。响应于api 202确定语义搜索引擎102不继续操作(块1134:否),机器可读指令1100终止。例如,导致api 202确定语义搜索引擎102不继续操作的条件包括用户退出api 202托管的界面和/或用户访问不同于api 202托管的网页的地址。
[0158]
图12是被构造为执行图10和/或图11的指令以实现图1、图2、图5和/或图9的语义搜索引擎102的示例处理器平台1200的框图。处理器平台1200可以是例如服务器、个人计算机、工作站、自学机器(例如神经网络)、移动设备(例如,手机、智能手机、平板电脑(如ipad
tm
)、个人数字助理(pda)、互联网设备、dvd播放器、cd播放器、数字录像机、蓝光播放器、游戏机、个人录像机、机顶盒、耳机或其他可穿戴设备、或任何其他类型的计算设备。
[0159]
所示示例的处理器平台1200包括处理器1212。所示示例的处理器1212是硬件。例如,处理器1212可由来自任何期望系列或制造商的一个或多个集成电路、逻辑电路、微处理器、gpu、dsp或控制器来实现。硬件处理器1212可以是基于半导体(例如,基于硅)的设备。在该示例中,处理器1212实现示例应用程序编程接口(api)202、示例自然语言(nl)处理器204、示例代码分类器206、示例数据库驱动器208、示例模型训练器210、示例自然语言(nl)预处理器212、示例自然语言(nl)特征提取器214、示例自然语言处理(nlp)模型执行器216、
示例代码预处理器218、示例代码特征提取器220、示例代码分类(cc)模型执行器222。
[0160]
所示示例的处理器1212包括本地存储器1213(例如,高速缓存)。所示示例的处理器1212经由总线1218与包括易失性存储器1214和非易失性存储器1216的主存储器通信。易失性存储器1214可以由同步动态随机存取存储器(sdram)、动态随机存取存储器(dram)、动态随机存取存储器和/或任何其他类型的随机存取存储器设备实现。非易失性存储器1216可以由闪存和/或任何其他所需类型的存储设备来实现。对主存储器1214、1216的访问由存储器控制器控制。
[0161]
所示示例的处理器平台1200还包括接口电路1220。接口电路1220可以通过任何类型的接口标准来实现,例如以太网接口、通用串行总线(usb)、接口、近场通信(nfc)接口和/或pci express接口。
[0162]
在所示示例中,一个或多个输入设备1222连接到接口电路1220。(一个或多个)输入设备1222允许用户将数据和/或命令输入到处理器1212中。(一个或多个)输入设备可以通过例如音频传感器、麦克风、相机(静止或视频)、键盘、按钮、鼠标、触摸屏、触控板、轨迹球、等值点(isopoint)和/或语音识别系统实现。
[0163]
一个或多个输出设备1224也连接到所示示例的接口电路1220。输出设备1224可以例如由显示设备(例如,发光二极管(led)、有机发光二极管(oled)、液晶显示器(lcd)、阴极射线管显示器(crt)、就地切换(ips)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器实现。因此,所示示例的接口电路1220通常包括图形驱动卡、图形驱动芯片和/或图形驱动处理器。
[0164]
所示示例的接口电路1220还包括诸如发射器、接收器、收发器、调制解调器、住宅网关、无线接入点和/或网络接口之类的通信设备以促进数据经由网络1226与外部机器(例如,任何种类的计算设备)交换。通信可以经由例如以太网连接、数字用户线(dsl)连接、电话线连接、同轴电缆系统、卫星系统、现场无线系统、蜂窝电话系统等。
[0165]
所示示例的处理器平台1200还包括一个或多个用于存储软件和/或数据的大容量存储设备1228。这种大容量存储设备1228的示例包括软盘驱动器、硬盘驱动器盘、压缩盘驱动器、蓝光盘驱动器、独立盘冗余阵列(raid)系统和数字多功能盘(dvd)驱动器。
[0166]
图12的机器可执行指令1232实现图10的机器可读指令1000和/或图11的机器可读指令1100,可以存储在大容量存储设备1228中、易失性存储器1214中、非易失性存储器1216中和/或可移除非暂态计算机可读存储介质(例如cd或dvd)上。
[0167]
图13中示出了示出用于分发诸如图12的示例计算机可读指令1232的软件到由第三方拥有和/或操作的设备的示例软件分发平台1305的框图。示例软件分发平台1305可以由能够存储软件并将软件传输到其他计算设备的任何计算机服务器、数据设施、云服务等来实现。第三方可能是拥有和/或运营软件分发平台的实体的客户。例如,拥有和/或运营软件分发平台的实体可以是诸如图12的示例计算机可读指令1232的软件的开发人员、销售者和/或许可者。第三方可能是消费者、用户、零售商、oem等,他们购买和/或许可软件使用和/或转售和/或再许可。在所示示例中,软件分发平台1305包括一个或多个服务器和一个或多个存储设备。存储设备存储计算机可读指令1232,其可以对应于图10的示例计算机可读指令1000和/或图11的计算机可读指令1100,如上所述。示例软件分发平台1305的一个或多个服务器与网络1310通信,该网络可以对应于任何一个或多个互联网和/或上述示例网络104
中的任一个。在一些示例中,作为商业交易的一部分,一个或多个服务器响应于将软件传输到请求方的请求。软件的交付、销售和/或许可的支付可以由软件分发平台的一个或多个服务器和/或通过第三方支付实体处理。服务器使购买者和/或许可人能够从软件分发平台1305下载计算机可读指令1232。例如,可以对应于图12的示例计算机可读指令1232的软件可以下载到示例处理器平台1300,该示例处理器平台1300将执行计算机可读指令1232以实现语义搜索引擎102。在一些示例中,软件分发平台1305的一个或多个服务器周期性地提供、传输和/或强制更新软件(例如,图12的示例计算机可读指令1232)以确保改进、补丁、更新等被分发并应用于终端用户设备处的软件。
[0168]
从上文可以理解,已经公开了用于识别和解释代码的示例方法、装置和制品。本文公开的示例对版本控制系统内容(例如,源代码)进行建模。所公开的方法、装置和制品通过减少开发人员使用计算机来开发程序和/或其他代码的时间来提高使用计算设备的效率。本文公开的方法、装置和制品提高了代码的可重用性,而无论代码是否包括注释和/或代码是否自记录。所公开的方法、装置和制品因此针对计算机功能的一个或多个改进。
[0169]
本文公开的示例生成vcs的本体表示,基于本体表示内的注释和/或消息参数的nlp来确定vcs内的代码的一个或多个意图,用所确定的vcs内的代码的一个或多个意图训练代码分类器,以确定未注释和非自记录代码的意图,识别与nl查询的意图匹配的代码,并解释未注释和非自记录代码以确定准确描述代码的注释、消息、和/或意图参数。
[0170]
本文公开的nlp和代码分类是用一个或多个bnn执行的,这一个或多个bnn采用概率分布来确定给定已识别意图的确定性和/或不确定性参数。如此,本文公开的示例允许开发人员以更快和更有效的方式重用源代码,该方式防止在问题的解决方案已经通过可访问存储库可用时重新提炼这些解决方案。例如,本文公开的示例通过估计可访问存储库中的源代码的意图来提出代码片段。因此,本文公开的示例在开发产品(例如,软件和/或硬件)及其更新时改进(例如,更快和/或更有效)公司的上市时间。因此,本文公开的示例允许开发人员花费更多时间来研究与开发硬件和/或软件产品相关联的新问题以及更复杂和难懂的问题。此外,本文公开的示例建议已经审查过的代码。因此,本文公开的示例允许开发人员快速实现比独立生成的、未经审查的代码更有效的代码。
[0171]
本文公开了用于识别和解释代码的示例方法、装置、系统和制品。进一步的示例及其组合包括以下:
[0172]
示例1包括一种用于识别和解释代码的装置,所述装置包括:自然语言(nl)处理器,用于处理nl特征以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;数据库驱动器,用于将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和应用程序编程接口(api),用于向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
[0173]
示例2包括示例1所述的装置,其中:所述输入为第一输入,所述查询为第一查询,所述参数化语义查询为第一参数化语义查询,所述代码片段为第一代码片段;所述装置还包括代码分类器,用于处理代码片段特征以识别从所述用户检索的第二输入中包括的第二代码片段的意图,所述第二代码片段是未注释的或非自记录的代码片段中的至少一种;所述数据库驱动器用于将第二查询传送到所述数据库,所述第二查询是包括所述第二代码片
段的意图的第二参数化语义查询;和api用于向所述用户呈现基于所述第二查询确定的注释,所述注释描述所述第二代码片段的功能。
[0174]
示例3包括示例2所述的装置,其中,所述api用于向所述用户呈现所述第一代码片段和第三代码片段,所述第一代码片段和所述第三代码片段根据所述nl处理器或所述代码分类器中的至少一者在分析所述第一代码片段和所述第三代码片段时确定的相应确定性或不确定性参数中的至少一者进行排序。
[0175]
示例4包括示例2所述的装置,其中,所述代码分类器用于将第一向量和第二向量合并为将由所述代码分类器处理的第三向量,所述第一向量包括所述代码片段的记号,所述第二向量表示所述记号所对应的代码部分。
[0176]
示例5包括示例1所述的装置,其中,所述本体表示包括与所述版本控制系统的一个或多个提交相关联的数据的图形表示,与所述一个或多个提交相关联的数据包括如下参数中的至少一者:变更参数、主题参数、消息参数、修订参数、文件参数、代码行参数、注释参数或diff参数。
[0177]
示例6包括示例1所述的装置,其中,所述代码片段先前由另一用户开发。
[0178]
示例7包括示例1所述的装置,其中,所述nl处理器用于将第一向量、第二向量和第三向量合并为将由所述nl处理器处理的第四向量,所述第一向量包括所述nl字符串的记号,所述第二向量表示所述记号所对应的词性,所述第三向量表示所述记号之间的依赖性。
[0179]
示例8包括一种非暂态计算机可读介质,包括指令,所述指令在被执行时使得至少一个处理器至少:处理自然语言(nl)特征,以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
[0180]
示例9包括示例8所述的非暂态计算机可读介质,其中,所述输入为第一输入,所述查询为第一查询,所述参数化语义查询为第一参数化语义查询,所述代码片段为第一代码片段,并且所述指令在执行时使所述至少一个处理器:处理代码片段特征以识别从所述用户检索的第二输入中包括的第二代码片段的意图,所述第二代码片段是未注释的或非自记录的代码片段中的至少一种;将第二查询传送到所述数据库,所述第二查询是包括所述第二代码片段的意图的第二参数化语义查询;和向所述用户呈现基于所述第二查询确定的注释,所述注释描述所述第二代码片段的功能。
[0181]
示例10包括示例9所述的非暂态计算机可读介质,其中,所述指令在被执行时使得所述至少一个处理器向所述用户呈现所述第一代码片段和第三代码片段,所述第一代码片段和所述第三代码片段根据至少一个贝叶斯神经网络(bnn)在分析所述第一代码片段和所述第三代码片段时确定的相应确定性或不确定性参数中的至少一者进行排序。
[0182]
示例11包括示例9所述的非暂态计算机可读介质,其中,所述指令在被执行时使得所述至少一个处理器将第一向量和第二向量合并为将由至少一个bnn处理的第三向量,所述第一向量包括所述代码片段的记号,所述第二向量表示所述记号所对应的代码部分。
[0183]
示例12包括示例8所述的非暂态计算机可读介质,其中,所述本体表示包括与所述版本控制系统的一个或多个提交相关联的数据的图形表示,与所述一个或多个提交相关联
的数据包括如下参数中的至少一者:变更参数、主题参数、消息参数、修订参数、文件参数、代码行参数、注释参数或diff参数。
[0184]
示例13包括示例8所述的非暂态计算机可读介质,其中,所述代码片段先前由另一用户开发。
[0185]
示例14包括示例8所述的非暂态计算机可读介质,其中,所述指令在被执行时使得所述至少一个处理器将第一向量、第二向量和第三向量合并为将由至少一个bnn处理的第四向量,所述第一向量包括所述nl字符串的记号,所述第二向量表示所述记号所对应的词性,所述第三向量表示所述记号之间的依赖性。
[0186]
示例15包括一种用于识别和解释代码的装置,所述装置包括:存储器;和至少一个处理器,用于执行机器可读指令以使所述至少一个处理器:处理自然语言(nl)特征以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
[0187]
示例16包括示例15所述的装置,其中,所述输入为第一输入,所述查询为第一查询,所述参数化语义查询为第一参数化语义查询,所述代码片段为第一代码片段,并且所述至少一个处理器用于:处理代码片段特征以识别从所述用户检索的第二输入中包括的第二代码片段的意图,所述第二代码片段是未注释的或非自记录的代码片段中的至少一种;将第二查询传送到所述数据库,所述第二查询是包括所述第二代码片段的意图的第二参数化语义查询;和向所述用户呈现基于所述第二查询确定的注释,所述注释描述所述第二代码片段的功能。
[0188]
示例17包括示例16所述的装置,其中,所述至少一个处理器用于向所述用户呈现所述第一代码片段和第三代码片段,所述第一代码片段和所述第三代码片段根据至少一个贝叶斯神经网络(bnn)在分析所述第一代码片段和所述第三代码片段时确定的相应确定性或不确定性参数中的至少一者进行排序。
[0189]
示例18包括示例16所述的装置,其中,所述至少一个处理器用于将第一向量和第二向量合并为将由至少一个bnn处理的第三向量,所述第一向量包括所述代码片段的记号,所述第二向量表示所述记号所对应的代码部分。
[0190]
示例19包括示例15所述的装置,其中,所述本体表示包括与所述版本控制系统的一个或多个提交相关联的数据的图形表示,与所述一个或多个提交相关联的数据包括如下参数中的至少一者:变更参数、主题参数、消息参数、修订参数、文件参数、代码行参数、注释参数或diff参数。
[0191]
示例20包括示例15所述的装置,其中,所述代码片段先前由另一用户开发。
[0192]
示例21包括示例15所述的装置,其中,所述至少一个处理器用于将第一向量、第二向量和第三向量合并为将由至少一个bnn处理的第四向量,所述第一向量包括所述nl字符串的记号,所述第二向量表示所述记号所对应的词性,所述第三向量表示所述记号之间的依赖性。
[0193]
示例22包括一种用于识别和解释代码的方法,所述方法包括:处理自然语言(nl)特征,以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;将查询传送到数
据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
[0194]
示例23包括示例22所述的方法,其中,所述输入为第一输入,所述查询为第一查询,所述参数化语义查询为第一参数化语义查询,所述代码片段为第一代码片段,并且所述方法还包括:处理代码片段特征以识别从所述用户检索的第二输入中包括的第二代码片段的意图,所述第二代码片段是未注释的或非自记录的代码片段中的至少一种;将第二查询传送到所述数据库,所述第二查询是包括所述第二代码片段的意图的第二参数化语义查询;和向所述用户呈现基于所述第二查询确定的注释,所述注释描述所述第二代码片段的功能。
[0195]
示例24包括示例23所述的方法,还包括向所述用户呈现所述第一代码片段和第三代码片段,所述第一代码片段和所述第三代码片段根据至少一个贝叶斯神经网络(bnn)在分析所述第一代码片段和所述第三代码片段时确定的相应确定性或不确定性参数中的至少一者进行排序。
[0196]
示例25包括示例23所述的方法,还包括将第一向量和第二向量合并为将由至少一个bnn处理的第三向量,所述第一向量包括所述代码片段的记号,所述第二向量表示所述记号所对应的代码部分。
[0197]
示例26包括示例22所述的方法,其中,所述本体表示包括与所述版本控制系统的一个或多个提交相关联的数据的图形表示,与所述一个或多个提交相关联的数据包括如下参数中的至少一者:变更参数、主题参数、消息参数、修订参数、文件参数、代码行参数、注释参数或diff参数。
[0198]
示例27包括示例22所述的方法,其中,所述代码片段先前由另一用户开发。
[0199]
示例28包括示例22所述的方法,还包括将第一向量、第二向量和第三向量合并为将由至少一个bnn处理的第四向量,所述第一向量包括所述nl字符串的记号,所述第二向量表示所述记号所对应的词性,所述第三向量表示所述记号之间的依赖性。
[0200]
示例29包括用于一种识别和解释代码的装置,所述装置包括:用于处理自然语言(nl)的装置,用于处理nl特征,以识别从用户检索的输入中包括的nl字符串的关键字、实体和意图;用于驱动数据库访问的装置,用于将查询传送到数据库,所述数据库包括版本控制系统的本体表示,其中,所述查询是包括所述nl字符串的关键字、实体和意图的参数化语义查询;和用于接口的装置,用于向所述用户呈现基于所述查询确定的代码片段,所述代码片段是未注释的或非自记录的代码片段中的至少一种。
[0201]
示例30包括示例29所述的装置,其中:所述输入为第一输入,所述查询为第一查询,所述参数化语义查询为第一参数化语义查询,所述代码片段为第一代码片段;所述装置还包括用于分类代码的装置,用于处理代码片段特征以识别从所述用户检索的第二输入中包括的第二代码片段的意图,所述第二代码片段是未注释的或非自记录的代码片段中的至少一种;所述用于驱动数据库访问的装置用于将第二查询传送到所述数据库,所述第二查询是包括所述第二代码片段的意图的第二参数化语义查询;和所述用于接口的装置用于向所述用户呈现基于所述第二查询确定的注释,所述注释描述所述第二代码片段的功能。
[0202]
示例31包括示例30所述的装置,其中,所述用于接口的装置用于向所述用户呈现
所述第一代码片段和第三代码片段,所述第一代码片段和所述第三代码片段根据所述用于处理nl的装置或所述用于分类代码的装置中的至少一者在分析所述第一代码片段和所述第三代码片段时确定的相应确定性或不确定性参数中的至少一者进行排序。
[0203]
示例32包括示例30所述的装置,其中,所述用于分类代码的装置用于将第一向量和第二向量合并为将由所述代码分类器处理的第三向量,所述第一向量包括所述代码片段的记号,所述第二向量表示所述记号所对应的代码部分。
[0204]
示例33包括示例29所述的装置,其中,所述本体表示包括与所述版本控制系统的一个或多个提交相关联的数据的图形表示,与所述一个或多个提交相关联的数据包括如下参数中的至少一者:变更参数、主题参数、消息参数、修订参数、文件参数、代码行参数、注释参数或diff参数。
[0205]
示例34包括示例29所述的装置,其中,所述代码片段先前由另一用户开发。
[0206]
示例35包括示例29所述的装置,其中,所述用于处理nl的装置用于将第一向量、第二向量和第三向量合并为将由所述用于处理nl的装置处理的第四向量,所述第一向量包括所述nl字符串的记号,所述第二向量表示所述记号所对应的词性,所述第三向量表示所述记号之间的依赖性。
[0207]
尽管本文公开了某些示例方法、装置和制品,但本专利的覆盖范围不限于此。相反,本专利涵盖了完全落入本专利权利要求范围内的所有方法、装置和制品。
[0208]
所附权利要求特此通过此引用结合到本详细描述中,每个权利要求独立作为本公开的单独实施例。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献