CN114585999A - 多语言代码行补全系统 - Google Patents
多语言代码行补全系统 Download PDFInfo
- Publication number
- CN114585999A CN114585999A CN202080054713.XA CN202080054713A CN114585999A CN 114585999 A CN114585999 A CN 114585999A CN 202080054713 A CN202080054713 A CN 202080054713A CN 114585999 A CN114585999 A CN 114585999A
- Authority
- CN
- China
- Prior art keywords
- token
- source code
- code
- tokens
- line
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/18—Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/088—Non-supervised learning, e.g. competitive learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N7/00—Computing arrangements based on specific mathematical models
- G06N7/01—Probabilistic graphical models, e.g. probabilistic networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Linguistics (AREA)
- Computational Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Databases & Information Systems (AREA)
- General Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Algebra (AREA)
- Probability & Statistics with Applications (AREA)
- Evolutionary Biology (AREA)
- Operations Research (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Medical Informatics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Machine Translation (AREA)
- Image Analysis (AREA)
- Feedback Control In General (AREA)
Abstract
一种代码补全工具使用神经变换器模型生成候选序列以补全源代码的行。神经变换器模型使用条件语言建模目标在大型无监督数据集上进行训练,该数据集包括用多种不同编程语言编写的源代码程序。神经变换器模型用于束搜索,该搜索预测针对正在开发的代码小片的最可能的候选序列。
Description
背景技术
软件开发环境通常用于帮助软件开发人员(即用户、程序员等)开发程序代码。软件开发环境可以包括源代码编辑器和开发人员用来编写和测试他们的程序的其他工具。一些软件开发环境包括代码补全功能,该功能可在开发人员编辑代码时基于开发人员在源代码编辑器中键入的一个或多个字符(例如,字母、符号等)自动呈现可能的候选的列表来提供帮助。带有开发人员可能使用的若干个建议代码元素的弹出菜单可能会出现。这种帮助是有益的,因为它可以加快开发时间并减少常见错误,诸如拼写错误。
然而,当代码补全系统无法识别词汇表外的代码元素、需要大量内存、生成候选列表花费的时间太长和/或生成一个不相关的候选列表时,自动代码补全功能可能会出现问题。
发明内容
提供本发明内容以简化形式介绍一些概念,这些概念将在下面的详细描述中进一步描述。本发明内容并不旨在用于标识所要求保护的主题的主要特征或基本特征,也不旨在用于限制所要求保护的主题的范围。
多语言代码行补全系统用于在源代码编辑会话期间生成最有可能补全源代码的行的候选。用以补全代码的行的预测字符串可以包括各种类型的元素,诸如以有序序列排列的局部变量、方法、参数、关键字和定界符。该系统使用一个模型来预测有序序列,该模型使用条件语言建模目标在大型无监督数据集上进行训练,该数据集包括用不同编程语言(例如,C、Java、Python、C++)编写的源代码程序。
训练数据集中的每个源代码程序不需要以相同的编程语言被编写。训练数据集可能由许多源代码程序组成,每个源代码程序都可以用不同的编程语言编写。训练数据集中的每个源代码程序都被编码成一个由令牌和/或子令牌组成的序列。编程语言中经常使用的元素被编码成令牌,而不经常出现的元素被编码成被称为子令牌的字符组合。这减少了存储大量词汇的需要,并提供了针对词汇表外令牌更好的准确性。
多语言代码行补全系统基于神经变换器模型。在一个方面,神经变换器模型由多个译码器块组成。译码器块包括耦合到多层一维卷积神经网络的多头自注意力层。在多头自注意力层之前和之后应用层归一化,以减少神经变换器模型的训练时间。
束搜索用于生成候选序列。束搜索使用从神经变换器模型的每次迭代中标识出的前k个子令牌/令牌来扩展可能补全源代码的行的令牌/子令牌的部分候选序列。束搜索生成搜索树,但只保留每个推理级别的前k个节点以扩展搜索。当行尾令牌作为最可能的预测出现时,搜索结束。
通过阅读以下详细描述和回顾相关附图,这些和其他特征和优点将变得显而易见。应当理解,前述一般描述和以下详细描述均仅是说明性的,并不限制所要求保护的各方面。
附图说明
图1图示了示例性代码补全系统,该系统具有生成神经变换器模型的训练阶段和使用神经变换器模型预测一个或多个候选序列以补全代码行的推理阶段。
图2A-2B是图示用于训练用于代码行补全的神经变换器模型的示例性系统和方法的示意图。
图3是图示图2中所示的变换器块的示例性架构的示意图。
图4A-4B是图示推理阶段的示例性架构的示意图。
图5A-5B是图示用于训练用于代码补全的神经变换器模型的示例性方法的流程图。
图6A-6B是图示用于在推理阶段中利用神经变换器模型的示例性方法的流程图。
图7是图示示例性用户界面的示意图,该图示出示例性源代码程序中的一行代码的代码补全候选。
图8是图示生成候选序列的搜索树的示例性束搜索的示意图。
图9是图示操作环境的框图。
具体实施方式
概述
所公开的主题涉及在程序开发环境中自动补全源代码的行的候选的生成。代码补全是一种工具,它试图预测开发人员(例如,用户、最终用户、程序员等)可能在源代码编辑器中键入的下一个字符串。源代码的行可能由各种元素(例如,关键字、定界符、变量、方法、常量、算符等)组成,这些元素根据底层编程语言的语法以特定顺序组合以形成表达式。源代码的行可以是方法调用、程序语句、定义、表达式等。源代码的行不包括空行或注释行,并以行尾字符结束。
代码补全工具使用神经网络机器学习模型来预测下一个代码元素字符串以补全源代码的行。源代码的行是指以行尾字符结尾的源代码的物理行,不包括空行和注释行。该模型在无监督数据集上进行训练,该数据集可能包含来自不同编程语言(即多语言)的源代码。无监督学习从由没有标记响应的输入数据组成的数据集中得出推理结果。从这些数据集形成词汇表,该词汇表包括在源代码文件中找到的令牌和/或子令牌。令牌是编程语言语法中的单个元素,诸如关键字、变量名、算符、定界符等。
与自然语言(例如英语等)不同,程序员有时会使用任意的、复杂的和长的名称来表示变量、函数或其他代码元素,这可能会导致当大量源代码程序用于训练模型时模型的词汇表非常大。为了减少词汇表的大小,出现频率较低的令牌被拆分为子令牌。子令牌是在令牌和单个字符之间的令牌的一部分。子令牌用于说明可能出现在目标源代码程序中的罕见或未见过的令牌(即词汇表外令牌)。子令牌的使用允许模型学习和生成词汇表外的令牌。
字节对编码是一种数据压缩技术,其中在整个训练源代码数据集中最常同时出现的统一码字符对被替换为词汇表外字符。当被递归应用时,字节对编码导致在频繁同时出现的统一码字符序列中提取出令牌/子令牌。在一个方面,字节对编码用于从训练数据集的源代码程序的语法表示提取统一码字符的有序序列以形成令牌和子令牌。有序序列表示具有T个令牌/子令牌的源代码片段。令牌/子令牌的有序序列被转换为令牌/子令牌嵌入和位置嵌入,它们是源代码片段的向量表示。
在一个方面,神经网络机器学习模型是多层变换器模型。变换器是一种神经网络架构,它通过注意力和卷积来处理其输入和输出之间的依赖关系,而不使用循环神经网络(RNN)(例如,长短期记忆(LSTM)网络)。基于RNN的系统的一个缺点是RNN的顺序性,其中每个隐藏状态都依赖于先前的隐藏状态。这使得基于RNN的系统难以并行化并且无法利用快速计算设备,诸如图形处理单元。此外,基于RNN的系统无法学习长期的输入和输出序列中的长程依赖关系。变换器通过注意力克服了这些障碍。注意力是一种机制,其用于标识输入序列的哪些部分与输出序列中的每个令牌/子令牌相关。注意力机制允许变换器一次访问整个输入序列。
变换器可以充当编码器或译码器,其中编码器将符号表示的输入序列映射到连续表示的序列,并且译码器从连续表示的序列生成符号的输出序列。编码器-译码器架构不太适合条件代码生成或代码补全任务,而更适合机器翻译和补丁生成类型的任务。使用了变换器模型的一个变体,它由具有掩蔽的自注意力和卷积层的译码器块组成。
束搜索用于生成一个或多个候选序列以补全源代码的行。束搜索使用神经变换器模型生成的概率分布来标识可能是候选序列中的下一个令牌或子令牌的前k个令牌/子令牌。束搜索通过使用由神经变换器模型的概率分布标识的每个选定令牌/子令牌实例化新的部分序列来扩展搜索。搜索继续从由神经变换器模型的输出分布标识的前k个令牌/子令牌生成新的部分序列,直到搜索结束。当行尾令牌作为最可能的下一个令牌出现时,搜索可以结束。
代码行序列补全的任务是通过估计如下的条件概率分布P(Output|Input)来在令牌/子令牌ct,t=0…T的有序序列的条件下(对应于作为条件概率的积的代码小片C的上下文)预测响应令牌/子令牌的序列mt,t=0…N:
在一个方面,具有多头自注意力的多层变换器-译码器神经网络模型被用于使用无监督自回归(AR)技术来估计针对源代码语料库的这种概率分布。建模目标是最大化以下可能性:
∑i(log mi|c0,c1,...cT,mi-k,mi-k+1,...mi-1;Θ),
其中k是上下文窗口的大小,条件概率P使用带有参数Θ的神经变换器模型来建模。该参数可能包括注意力长度、注意力头的数目、译码器块的数目、嵌入维度、嵌入矩阵和使用随机梯度下降优化程序训练的每层隐藏单元的数目。
多层变换器译码器如下产生令牌/子令牌的输出分布:
h0=U·We+Wp,
h1=transformer block(ht-1),l=1…n,
其中C=c-k,c-k+1,...,c-1是令牌/子令牌的上下文向量,n是层数,T是有序序列长度,We是令牌/子令牌嵌入矩阵,Wp是位置嵌入矩阵,e表示词汇表中令牌/子令牌的嵌入,p表示令牌/子令牌位置的嵌入。
现在注意转向对在代码补全系统中使用的系统、设备、部件和方法的进一步讨论。
机器学习代码补全系统
图1图示了示例性代码补全系统100的框图,其中可以实践本发明的各个方面。如图1所示,系统100包括代码行补全系统中训练变换器模型122的训练阶段102和利用变换器模型122的推理阶段104。训练阶段102可以利用源代码储存库106、源代码提取部件108、语法分析器112、令牌/子令牌序列提取部件116以及模型训练和验证部件120。
在一个方面,训练阶段102根据未经标记的源代码程序的不同语料库来预训练变换器模型。这被称为无监督学习,因为该模型从没有标记响应的输入数据得出推理结果。源代码提取部件108从源代码储存库106提取选定源代码程序110以获得训练和验证数据集。源代码储存库106可以是私人或公开存储大量源代码的文件档案和网络托管设施。源代码储存库106可以被构造为版本控制系统,诸如GIT、Mercurial等。驻留在源代码储存库106中的源代码程序不同并且可以用不同的编程语言编写。
源代码提取部件108获得可以是以相同或不同的编程语言编写的若干选定源代码程序110。编程语言使用上下文无关文法,该文法是用正式编程语言描述所有可能字符串的一组规则。选定源代码程序110可以来自不同的领域,诸如但不限于科学计算、网络开发、数据流编程、机器学习等。
语法分析器112将每个选定源代码程序110转换成具体语法树114。具体语法树114以经解析的形式表示源代码文本。具体语法树114也可以是解析树。语法分析器112可以是解析器、前端编译器的一部分、语言编译器的一部分或编译工具的一部分。具体语法树114以层次结构或树结构表示程序的语法结构。具体语法树114是n元树数据结构,其包括表示程序的编程语言的文法中的构造的节点。具体语法树114包括一个根节点、多个内部节点和多个终端节点。终端节点代表令牌。令牌是表示操作数或算符的符号。具体语法树114不同于其中终端节点表示操作数的抽象语法树。
针对选定源代码程序110的具体语法树114被传递到令牌/子令牌序列提取部件116。令牌/子令牌序列提取部件116解析每个源代码程序的具体语法树114并输出T个令牌和/或子令牌的序列。在一个方面,令牌/子令牌序列提取部件116执行字节对编码以提取频繁出现的令牌并从较少出现的令牌中提取子令牌。子令牌是令牌的一部分。
例如,下面这行源代码:
loss=tf.reduce_sum(tf.square(linear_model-y))
可以被划分为以下令牌/子令牌的序列,每个令牌/子令牌由字符“|”分隔:
loss|=|tf|.|red|uce|_|sum|(|tf|.|squ|are|(|linear|_|model|-|y|)|)|
在此示例中,令牌“reduce”已被拆分为子令牌“red”和“uce”,令牌“square”已被拆分为子令牌“squ”和“are”。
然后将T-排序令牌序列映射到数字向量,然后再映射到嵌入。嵌入是针对基于文本的令牌/子令牌的经学习的表示,其中具有共同含义的令牌或子令牌具有共同的表示。存在针对词汇表中的每个令牌/子令牌的一个嵌入和一个位置嵌入。令牌/子令牌嵌入表示针对令牌/子令牌的经学习的表示。变换器模型不会按顺序读取每个令牌/子令牌,因此,在没有附加位置信息的情况下,不知道令牌/子令牌在序列中的位置。位置嵌入用于将有关令牌/子令牌在序列中的位置的位置信息嵌入到变换器模型中。令牌/子令牌嵌入被输入到模型训练和验证部件120。
神经变换器模型122在代码补全系统的推理阶段104中被使用。在一个或多个方面,推理阶段104可以被实施为集成到源代码编辑器、集成开发环境(IDE)和/或独立应用中的功能或特征。代码补全可以被实施为可以是源代码编辑器和/或IDE的附加部件、插件、扩展和/或部件的工具或特征。在一个方面,推理阶段104包括源代码编辑器130、代码补全部件142和模型122。
在一个方面,源代码编辑器130可以包括用户界面132和解析器134。用户界面132包括用于开发(例如,编写、编辑、测试)源代码程序的一组特征或功能。用户界面132可以利用弹出窗口来呈现可能候选的列表136以供补全,从而允许开发人员浏览候选并从列表中选择一个。可替代地,当用户在源代码程序中键入字符时,候选可以在当前源代码行的行中出现。
解析器134读取通过源代码编辑器130被输入到源代码程序中的字符并生成对应的具体语法树140。当开发人员在源代码编辑器130中创建和编辑源代码时,解析器134还更新具体语法树140。
在编辑过程中的某些点,用户界面132将请求候选以补全源代码的当前行。用户界面可以检测到用户输入了特定的字符或字符串,并自动发起对补全代码行的候选的请求。该字符被称为标记字符。在一个方面,标记字符可以是等号“=”或句点“。”。用户界面132然后将发送针对用于呈现给开发人员的、来自代码补全部件142的候选的请求138。可替代地,用户可以通过输入特定的击键或击键序列来请求候选,诸如CTRL键与空白键的组合。
在又一方面,系统可以以暗色自动显示当前源代码行末尾的单个top候选,而不管标记字符如何。无论用户是否决定触发候选,系统都会在后台构建并不断更新候选树。当用户闲置一段时间后,该候选会自动显示在用户界面中。如果用户想要接受候选,则用户可以键入特定的击键或击键组合(例如,CTRL和I)来接受候选。在这种情况下,光标位置将前进到所建议的代码序列的末尾,候选代码的暗色将更改为代码的正常颜色。如果用户不想使用该候选,则当用户继续键入时,该候选就会消失。在这种情况下,系统将根据基于新键入的代码的候选树的前缀过滤器来改进代码序列。
代码补全部件142跟踪被输入到源代码编辑器中的字符,并为针对补全源代码的行的候选的请求提供服务。代码补全部件使用模型122基于编辑器中源代码的当前上下文来生成候选。多个候选根据其各自的概率进行排名,具有最高概率的候选排在最前面。选定数目的候选136然后被返回到源代码编辑器130并显示在用户界面132中。
应当注意,图1示出了可以实践本发明的各个方面的环境的一个方面中的系统的部件。然而,在不脱离本发明的精神或范围的情况下,可以不需要图1中所示的部件的精确配置来实践图1中所示的配置的各个方面和变化,并且可以不需要部件的类型。例如,训练阶段102可以在一个计算环境中执行并且推理阶段104可以在与训练阶段102相同的计算环境中或在单独的计算环境中执行。下面更详细地描述各种计算环境。
现在注意转向图2A,其图示了用于训练神经变换器模型的部件和过程200的进一步细节。参考图1和2A,源代码提取部件108获得用作训练和验证数据集的源代码程序。每个选定的源代码文件202被语法分析器112解析成具体语法树204。令牌/子令牌序列提取部件116遍历具体语法树204。令牌/子令牌序列提取部件116可以利用令牌提取器(tokenizer)206从由具体语法树表示的源代码的每一行提取令牌。
在一个方面,字节对编码被用作令牌提取器206。字节对编码用于构建令牌/子令牌的词汇表。尽管它的名字使用了“字节”这个词,但字节对编码对统一码代码点而不是字节序列进行操作。这种编码技术将较少出现的令牌划分为子令牌,而较频繁出现的令牌则保持不变。
然后将源代码的每一行的令牌和子令牌聚合成由T个令牌/子令牌208组成的有序令牌/子令牌序列。在一个方面,T是1024个令牌,每个序列由1024个令牌/子令牌组成并表示源代码程序的特定上下文。然后将来自各种源代码程序的序列输入到模型训练和验证部件210。
神经网络被迭代训练,使得在收敛到最小值之前多次传递训练数据集。一个时期代表整个训练数据集通过神经网络的一次向前和向后传递。由于训练数据集非常大,因此将其划分为较小的批次。训练是迭代的,整个数据集在多次迭代中通过神经网络传递。每个训练迭代包括前向传播、损失计算、反向传播步骤,然后更新权重。
神经网络具有多个层,因此可以学习数据中更详细的关系以及特征如何在非线性级别上相互交互。模型架构、训练程序、数据归一化和词汇表编码过程是为满足特定目标而量身定制的超参数。超参数的值会影响参数的学习方式。
在一个方面,超参数可以包括以下参数:(1)令牌/子令牌和位置嵌入层的维度分别为30000x768和1024x768;
(2)12个变换器块,每个块由两个卷积、掩蔽的自注意力和层归一化层组成;(3)对于训练程序:自回归,具有交叉熵损失优化目标;序列长度为1024个令牌/子令牌;批处理大小为8;每次权重更新的梯度累积步长为8;Adam随机优化程序用于训练神经网络;学习率为0.0001;(4)数据归一化过程:归一化所有字符串和数字文字,保留最频繁的十个;(5)词汇表编码过程:使用字节对编码从多语言代码语料库提取联合子令牌词汇表,在字节对编码过程期间保留十个最频繁的字符串和数字文字将它们编码为单个令牌;并引入特殊的控制流令牌来表示行尾、文件尾、(decent)和缩进符号。
训练数据集被划分成批次,并且序列的每个批次在整个训练过程中运行。序列最初被转换为数字向量,然后是嵌入。嵌入是离散类别变量到连续数字向量的映射。针对每个序列都有一个令牌/子令牌嵌入212和一个位置嵌入214。令牌/子令牌嵌入表示序列中的令牌和/或子令牌,而位置嵌入表示序列中令牌/子令牌的顺序。
最初,随机值用于每个令牌/子令牌嵌入和位置嵌入的初始值。此后,神经变换器模型224学习针对每个嵌入的值。在训练阶段完成后,每个令牌/子令牌的嵌入和位置嵌入被保存到相应的矩阵218、220中,以供以后在推理阶段使用。有一个令牌/子令牌嵌入矩阵We,218,其包含每个令牌/子令牌Ci,i=0…V的嵌入向量,以及位置嵌入矩阵Wp,220,其包含每个位置的嵌入向量Pj,j=0…T,其中,V是词汇表的大小,T是令牌/子令牌序列的长度。
每个令牌/子令牌嵌入212及其对应的位置嵌入214被组合以形成上下文张量216。张量是一种数学对象,它具有遵循某些转换规则的索引和分量。张量是部分定义的计算。它是向量和矩阵的推广,并表示为一个n维数组。此实例中的张量表示源代码程序的上下文。上下文张量216的大小是嵌入向量的大小(例如,嵌入大小)的T倍,其中T是令牌/子令牌序列的长度。
转向图2B,令牌/子令牌嵌入212与神经变换器模型的参数一起被学习。然后将神经变换器模型228的输出隐藏状态乘以线性投影矩阵A 230。线性投影矩阵A定义为A=aij∈Rdh x dx。隐藏状态向量hT∈Rdh对神经变换器模型224从上下文张量216学习到的信息进行编码。最后,每个令牌/子令牌的概率分布P|V|238是通过得到作为的非归一化logits预测234,其中bk,k=0...|V|-1是偏置向量,然后使用softmax函数236对它们进行归一化来生成。
回到图2A,神经变换器模型224可以由一个或多个变换器块226A、226B组成。参考图3,变换器块226可以配置有编码器和译码器块和/或仅配置有译码器块。图3示出了配置有多个译码器块306A、306N的神经变换器模型224的一方面。译码器块306A、306N可以包括第一归一化层308,接着是掩蔽的自注意力层310,接着是第二归一化层312,以及两层一维卷积神经网络314A、314B。
神经网络的训练是一项耗时的任务。为了减少训练时间,使用层归一化。层归一化跨特征对输入进行归一化。跨特征维度来计算平均值和标准偏差。存在掩蔽的自注意力层310之前的第一层归一化308和在掩蔽的自注意力层310之后的第二层归一化312。
每个令牌/子令牌沿着其自己的路径流过所有译码器块306A、306N。掩蔽的自注意力层310允许神经网络专注于某些特征或输入。Vaswani等人在第31届神经信息处理系统会议(NIPS 2017)上的“注意力就是你所需要的”中将注意力描述为“将查询和一组键值对映射到一个输出,其中查询、键、值和输出都是向量。输出被计算为值的加权总和,其中分配给每个值的权重由查询与相应键的兼容性函数计算。
在本公开的一个方面,掩蔽的自注意力层310由两个或更多个注意力头316A、316B组成。多头自注意力头并行运行多次经缩放的点积注意力。每个注意力头316A、316B对上下文张量302的一部分进行操作。注意力头316A在第一段318A上操作并且注意力头316B在第二段320A上操作。每个注意力头316A、316B对n个元素的输入序列x=(x1,…,xn)进行操作,并计算相同长度的新序列z=(z1,…,zn)。每个输出元素zi被计算为经线性变换的输入元素的加权和:
使用softmax函数计算每个权重系数:
每个注意力头316A、316B的输入由查询矩阵320A、320B和键矩阵322A、322B组成,维度均为T×dx,其中T是代码序列长度,dx是嵌入维度。点积是从查询矩阵320和来自键矩阵322的所有键,并且应用softmax函数以获得权重W0…WT 324A、324B,在值上产生相应值矩阵326A、326B而生成的。然后将来自两个值矩阵的结果值联接328,然后线性化330。联接层328从每个注意力头获取T×dv维键矩阵以形成T×dv维矩阵。线性层330获取联接层328的输出并根据以下公式应用线性变换:输出=输入·WT+b,其中输入是T×dv矩阵,W是dx×dv维矩阵,b是T×dx维矩阵,并且输出是矩阵乘法和相加得到的T×dx维矩阵。
然后将层归一化312应用于掩蔽的自注意力层310的输出。然后将层归一化312的输出应用于第一神经网络层。在一个方面,有两个神经网络层,每层由一个一维卷积神经网络组成。给定维度(dx,T)的输入张量和卷积核g,一维卷积运算定义为: 其中运算*是滑动点积运算。
转向图2B,神经网络在最后时间步骤T的输出是隐藏状态向量hT 228,其编码由变换器块226A、B学习的与令牌/子令牌相关的信息。然后将神经变换器模型224的输出隐藏状态乘以定义为A=aij∈Rdh x dx的线性投影矩阵A 230。隐藏状态向量hT∈Rdh228对神经变换器模型从上下文张量学习到的信息进行编码。最后,每个令牌/子令牌的概率分布P|V|238是通过获得作为的非归一化logits预测234,其中bk,k=0…|V|-1是偏置向量,然后使用softmax函数236对它们进行归一化来生成。
现在注意转向对推理阶段使用的模型部件的描述。推理阶段使用束搜索来找到最可能的候选序列。束搜索通过调用神经变换器模型迭代地生成令牌/子令牌。神经变换器模型的输出是针对候选序列中每个位置的令牌概率矩阵。束搜索在每次迭代时集中在k个最可能的令牌上,以获得到最可能的候选序列的最佳路径。在每次迭代中,k个最可能的令牌中的每一个都与前面迭代中的令牌联接以形成部分候选序列。
束搜索使用广度优先搜索来构建搜索树。搜索树由处于一个或多个推理级别的节点组成。每个节点表示由神经变换器模型生成的针对模型词汇表中的令牌/子令牌的概率分布。在每个级别,只有从神经变换器模型生成的输出分布中具有最高概率的前k个令牌/子令牌被扩展到下一个推理级别。变量k是预先配置的,也称为束宽度。然后将k个子令牌/令牌中的每一个扩展到搜索中,该搜索使用所选子令牌/令牌更新当前上下文序列以输入到神经变换器模型中,以生成序列中下一个令牌的附加概率分布。重复此过程,直到行尾令牌被预测为下一个可能的令牌候选。
转向图4A,图4A示出了推理阶段400的部件。代码小片402被输入到源代码编辑器中,其被转换成对应的具体语法树404。令牌提取器406遍历具体语法树404以提取令牌和/或子令牌。形成长度为T的有序序列并对其进行矢量化408。
束搜索410使用上下文向量408以使用从神经变换器模型生成的概率分布P0…P|V|来启动推理过程412(框412)。如果概率分布指示行尾令牌是部分候选序列中最有可能跟随的令牌(框416-是),则输出前k个候选序列(框418)。否则,束搜索410采用从推理过程中神经变换器模型生成的概率分布标识的前k个状态或令牌/子令牌(框420)。使用上下文向量中的新令牌/子令牌,针对k个状态c1、..ck中的每一个生成新的上下文向量(框422A、422B)。然后将新的上下文向量输入到推理过程中(框422A、422B、412)。当行尾令牌被选为最有可能补全部分候选序列的候选时,束搜索410结束。
图4B图示了示例性搜索过程412。序列408中每个令牌和子令牌的嵌入向量和其对应位置向量是从令牌/子令牌嵌入矩阵428和位置嵌入矩阵430获得的。令牌/子令牌嵌入向量及其对应的位置嵌入向量被组合以形成上下文张量432,其被输入到神经变换器模型434中。
神经变换器模型434的输出是具有分量h0…hdh 436的向量。变换器的输出乘以线性投影层438以生成预测的嵌入向量440。令牌/子令牌嵌入向量448用作输出分类矩阵以生成未归一化的预测或logits V0…V|V|442。使用softmax函数444对logits 442进行归一化以生成softmax预测446P0…P|V|。
方法
现在注意转向使用本文公开的系统和设备的各种示例性方法的描述。可以参考各种示例性方法进一步描述这些方面的操作。可以理解,除非另有说明,否则不必按照所呈现的顺序或任何特定顺序来执行代表性方法。此外,关于方法描述的各种活动可以以串行或并行方式或串行和并行操作的任何组合来执行。在一个或多个方面,该方法说明了本文公开的系统和设备的操作。
图5A-5B图示了示例性方法500,其图示了用于代码补全的神经变换器模型的使用。在训练神经变换器模型之前,随机选择一组超参数。超参数是与神经网络模型架构、训练算法和数据归一化相关的参数,并且在模型训练开始之前设置。超参数不是通过深度学习或神经网络学习的。超参数是从一组分类值中随机选择的,或者对于像学习率这样的实值超参数,从给定范围中随机抽取。当使用验证数据集进行测试时,基于神经变换器模型的性能调整超参数。
神经变换器模型的训练是计算密集型工作,需要并行数据处理。一个或多个集群可用于训练神经变换器模型,其中每个集群包含一组松散或紧密联接的计算机(例如,处理器、处理单元、内核),它们在分布式控制器的控制下同时执行同一个任务。每台计算机都使用相同的神经变换器模型副本,并使用分布式数据并行训练算法来同步集群之间的处理。
神经变换器模型使用批处理进行训练,其中训练数据集被划分为特定大小的批次,并在模型更新之前进行处理。批的大小必须大于或等于1且小于或等于训练数据集中的样本数。
参考图1和5A,一个或多个源代码储存库106被搜索源代码程序。每个源代码程序可以用相同或不同的编程语言编写。源代码储存库106可以是广泛使用的代码储存库,诸如GitHub、内部代码储存库和/或它们的组合。源代码提取部件108提取满足预期目标的类型的多个源代码程序,诸如频繁访问的源代码程序、利用特定功能的源代码程序(例如,数据库操作、计算机图形程序、异步方法等)等。这些源代码程序用于生成训练和验证数据集(统称为框502)。
每个选定源代码程序110然后由编译部件112解析和/或编译以产生具体语法树(框504)。
字节对编码用于生成表示源代码程序的上下文的有序令牌/子令牌序列。通过遍历具体语法树获得语法节点和令牌的序列化序列。在一个方面,具体语法树以深度优先顺序遍历(即,深度优先搜索,深度优先遍历)。深度优先遍历从根节点开始,以单条路径遍历树,直到到达终端节点或叶节点。遍历然后回溯,直到它可以选择另一条路径来遍历。重复此过程,直到访问完所有节点。接下来,令牌/子令牌序列被转换为数字向量。(统称为框506)。
一部分序列用作训练数据集,另一部分用作验证数据集。训练数据集被划分到时期,然后在每个时期中序列被划分为批次。每个时期(框508)中的每个批次(框510)中的每个序列然后被用于训练神经变换器模型(框514)。为每个序列的令牌/序列和位置嵌入生成初始值,然后将其用于形成上下文张量(框512)。
现在参考图5B,将第一层归一化应用于上下文张量(框522),然后应用于掩蔽的自注意力(框524)。掩蔽的自注意力的输出被输入到第二层归一化中(框526)。第二层归一化的输出被输入到第一一维卷积神经网络层(框528)。然后将第一一维卷积神经网络层的输出输入到第二一维卷积神经网络层中(框530)。
神经网络被迭代地训练,在收敛到最小值之前对训练数据集进行多次传递。每个训练迭代包括前向传播(框528-530)、损失计算(框532)、反向传播步骤(框534),然后通过计算权重梯度来更新权重(框536)。
损失函数估计损失或误差,这用于比较预测结果的好坏。在一个方面,使用分类交叉熵损失函数。一旦计算出损失,它就会反向传播到直接对输出做出贡献的隐藏层。在反向传播中,确定损失函数相对于可训练参数的偏导数。权重梯度被计算为权重的旧值和新值之间的差。使用梯度下降技术调整权重以使损失尽可能接近零。在一个方面,随机梯度下降(SGD)方法是用于找到最小化损失函数的函数参数值的优化算法。可以使用时间反向传播(BPTT)算法来更新权重。
返回参考图5A,在每个批处理完成时,神经网络的参数以表示为NACCUM的预配置频率更新(框516)。NACCUM是梯度累积频率,在一个方面其值为8。参数包括存储在相应嵌入矩阵中的令牌/子令牌嵌入、位置嵌入。其他参数包括注意力层和卷积层的参数。
接下来,验证神经变换器模型。在训练神经变换器模型之前,随机选择一组超参数,然后进行调整以达到所需的性能。神经变换器模型使用验证数据集进行测试,以确定适当的超参数设置以实现预期目标。当未达到预期目标时,调整一个或多个超参数并重复训练直到达到靶定目标(统称为框518)。
其中Ntop-k表示前k个建议中相关推荐的数目,Q表示测试数据样本的总数,ranki是推荐的预测排名。
前1(top-1)中的精确度表示最前面的推荐是正确的频率,而前5中的精确度表示列表中前三个推荐包含用户正在寻找的候选的频率。MRR捕获结果的排名,从而提供前面候选之外的信息。MRR值越大,表示正确推荐的整体排名越小。(统称为框518)。
在完成模型验证后,模型准备好部署在代码补全系统中(框520)。现在注意转向讨论说明了在代码补全系统中使用神经变换器模型的推理阶段的示例性方法。
图6A-6B图示了利用神经变换器模型的代码行补全的示例性方法600、608。参考图1和图6A,在诸如源代码编辑器130的开发环境中执行代码补全。源代码编辑器130被配置为与代码补全部件142交互,代码补全部件142执行束搜索,束搜索使用神经变换器模型。源代码编辑器130执行后台解析过程,该过程监测输入到源代码编辑器中的字符并持续解析源代码以更新表示当前代码行的源代码的具体语法树(框602)。
源代码编辑器130的用户界面132检测针对用以补全当前源代码行的候选序列的请求。该请求可由标记字符发起,诸如等号“=”,其中代码补全系统将在等号之后提供候选序列以补全表达式的剩余部分。(统称为框604)。
可替代地,用户可以通过输入特定的击键或击键序列来请求候选,诸如CTRL键与空白键的组合。在又一方面,系统可以以暗色自动显示当前源代码行末尾的单个top候选,而不管标记字符如何。无论用户是否决定触发候选,系统都会在后台构建并不断更新候选树。当用户闲置一段时间后,该候选会自动显示在用户界面中。如果用户想要接受候选,则用户可以键入特定的击键或击键组合(例如,CTRL和I)来接受候选。在这种情况下,光标位置将前进到建议的代码序列的末尾,候选代码的暗色将更改为代码的正常颜色。如果用户不想使用该候选,则当用户继续键入时,该候选就会消失。在这种情况下,系统将根据基于新键入的代码的候选树的前缀过滤器来改进代码序列。(统称为框604)。
在检测到对候选序列的请求时,解析具体语法树以从当前代码段提取令牌/子令牌。嵌入是从令牌/子令牌嵌入矩阵和位置矩阵中获得的。从嵌入生成上下文张量。(统称为框606)。
然后执行束搜索,直到概率分布表明下一个可能的令牌是行尾令牌(框608)。
参考图6B,束搜索使用利用上下文张量来生成令牌/子令牌词汇的概率分布的神经变换器模型(框614)。如果概率分布表明下一个可能的令牌是行尾令牌,则束搜索结束(框616-是)并且输出前k个候选序列(框618)。
否则,选择补全部分序列的前k个令牌/子令牌(框620)。
每个选定的令牌/子令牌然后被输入到相应的上下文向量中,并再次具有通过神经变换器模型的单独数据路径。上下文向量利用当前上下文向量中选定的令牌/子令牌,并且移除最后一个令牌/子令牌。新的上下文向量将由T个令牌/子令牌组成,所选令牌/子令牌ck被添加到序列的开头,而最后一个令牌/子令牌从序列中删除。如果当前上下文向量由包含c0、c1、...、cT的令牌/子令牌序列组成,则新的上下文向量将由ck,c0、c1、...、cT-1组成。(统称为框622)。
返回参考图6A,束搜索保持跟踪搜索树中生成的序列并将前面的候选序列返回到用户界面部件以显示给用户(框610)。用户可以选择候选之一,然后将其输入到源代码程序中以补全源代码的行(框612)。可替代地,用户可以忽略候选序列并继续键入。重复该过程(框602-612),直到用户关闭源代码程序、退出源代码编辑器或终止代码补全工具。
代码行补全示例
现在注意转向使用本文描述的技术的代码补全工具的示例性用户界面显示。转向图7,图7示出了在源代码编辑器中正在编辑的源代码程序。用户界面显示了源代码程序702的第10-36行。在用户输入“=”字符之后,弹出窗口704出现在第36行。弹出窗口704包含五个候选序列以补全第36行的代码行。五个候选706-714以从最高概率到最低概率的排名顺序显示。每个候选都是一个很可能补全第36行的表达式的有序令牌序列。
图8是从对图7所示的源代码小片的束搜索生成的搜索树800的图示。搜索树800在搜索树的节点中跟踪由神经变换器模型生成的所有状态。在本示例中,束宽度设置为四(4)。在神经变换器模型802的第一推理级别或执行处,束搜索生成根节点816,其具有词汇表中每个令牌/子令牌的概率分布。然后选择前四个令牌/子令牌,它们是“tf”、“gradient”、“gan”和“gd”。每个选定的令牌都被添加到一个单独的上下文向量中,然后在神经变换器模型的后续执行中使用该上下文向量。示出了由神经变换器模型的每次调用818A-818D产生的针对第二推理级别804中的每个令牌/子令牌的概率分布。
然后从生成新上下文向量的第二推理级别804中的每个节点中选择前四个令牌/子令牌。神经变换器模型的第三次调用是使用从第二推理级别804中的每个选定令牌/子令牌生成的新节点进行的,这在第三推理级别806中示出。这个过程再次重复,直到搜索结束。图8示出了由前七个推理级别802、804、806、808、810、812、814产生的搜索树800。
如图8所示,候选序列tf.train.AdamOptimizer(learning_rate由以下组成:在根节点816中推理得到的令牌/子令牌tf,从第二推理层804中的节点818A推理得到的令牌/子令牌“.”,从第三推理级别806处的节点820推理得到的令牌/子令牌train,从第四推理级别808处的节点822推理得到的令牌/子令牌“.”,从第五推理级别810处的节点824推理得到的令牌/子令牌AdamOptimizer,从第六推理级别812处的节点826推理得到的令牌/子令牌“(”,以及从第七推理级别814处的节点828推理得到的令牌/子令牌learning。
示例性操作环境
现在注意转向对示例性操作环境的讨论。图9图示了示例性操作环境900,在该环境中,使用一个或多个计算设备902来训练神经变换器模型并且第二计算设备904使用神经变换器模型来进行代码补全。然而,应当注意,本文公开的各方面不限于设备的任何特定配置。计算设备902、904中的任何一个可以在其自己的代码补全系统中利用神经变换器模型并且计算设备904也可以生成和测试神经变换器模型。计算设备902可以被配置为生成神经变换器模型作为用于其他代码补全系统的服务的云服务。应当注意,操作环境不限于任何特定配置并且其他配置也是可能的。
计算设备902、904可以是任何类型的电子设备,诸如但不限于移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持计算机、服务器、服务器阵列或服务器群、Web服务器、网络服务器、刀片服务器、互联网服务器、工作站、小型计算机、大型计算机、超级计算机、网络设备、Web设备、分布式计算系统、多处理器系统或其组合。操作环境900可以被配置在网络环境、分布式环境、多处理器环境或能够访问远程或本地存储设备的独立计算设备中。
计算设备902、904可以包括一个或多个处理器908、940,一个或多个通信接口910、942,一个或多个存储设备912、944,一个或多个输入/输出设备914、949和一个或多个存储器设备919、948。处理器908、940可以是任何市售的或定制的处理器并且可以包括双微处理器和多处理器架构。通信接口910、942支持计算设备902、904和其他设备之间的有线或无线通信。存储设备912、944可以是不包含诸如通过载波传输的调制数据信号的传播信号的计算机可读介质。存储设备912、944的示例包括但不限于RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字多功能盘(DVD)或其他光存储、磁带盒、磁带、磁盘存储,所有这些都不包含传播信号,诸如通过载波传输的调制数据信号。在计算设备902、904中可以有多个存储设备912、944。输入/输出设备914、946可以包括键盘、鼠标、笔、语音输入设备、触摸输入设备、显示器、扬声器、打印机等,以及它们的任何组合。
存储器设备916、948可以是可以存储可执行程序、应用和数据的任何非暂时性计算机可读存储介质。计算机可读存储介质不属于传播信号,诸如通过载波传输的调制数据信号。它可以是任何类型的非暂时性存储设备(例如,随机存取存储器、只读存储器等)、磁存储、易失性存储、非易失性存储、光存储、DVD、CD、软盘驱动器等,其不属于传播信号,诸如通过载波传输的调制数据信号。存储器916、948还可以包括一个或多个外部存储设备或远程定位的存储设备,它们不属于传播信号,诸如通过载波传输的调制数据信号。
计算设备904可以利用计算机系统中的集成开发环境(IDE)954,其允许用户(例如,开发人员、程序员、设计人员、编码人员等)设计、编码、编译、测试、运行、编辑、调试或构建程序、一组程序、网站、Web应用和Web服务。软件程序可以包括以一种或多种源代码语言(例如,Visual Basic、VisualJ#、C++、C#、J#、Java Script、APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等)创建的源代码文件。IDE 954可以提供本地代码开发环境或者可以提供在虚拟机上运行的托管代码开发或者可以提供它们的组合。IDE 954可以提供使用.NET框架的托管代码开发环境。需要说明的是,本操作实施例不限于通过IDE提供源代码开发服务,也可以使用其他工具代替,诸如用独立的源代码编辑器等代替。
用户可以经由IDE 954中的用户界面958和源代码编辑器956,根据已知的软件编程技术和与特定源语言相关联的特定逻辑和语法规则来创建和/或编辑源代码程序文件952。此后,源代码程序文件952可以经由编译部件960编译,从而生成表示源代码的语法结构和语义模型的数据结构。
计算设备904的存储器设备948可以包含指令、部件和数据。部件是执行特定功能的软件程序,也称为模块、程序和/或应用。存储器设备948可包括操作系统950、一个或多个源代码程序文件952、可包括源代码编辑器956、用户界面958、编译部件960、代码补全部件962和神经变换器模型964以及其他应用和数据966的IDE 954。
计算设备902的存储器设备916可以包括操作系统918、源代码提取部件920、令牌/子令牌序列提取部件922、语法分析器924、模型训练和测试部件926、神经变换器模型928、源代码储存库930以及其他应用和数据932。
计算设备902、904可以经由网络909通信耦合。网络909可以被配置为自组织网络、内联网、外联网、虚拟专用网(VPN)、局域网(LAN)、无线局域网(WLAN)、广域网(WAN)、无线WAN(WWAN)、城域网(MAN)、互联网、公共交换电话网(PSTN)的一部分、普通老式电话服务(POTS)网络、无线网络、网络或任何其他类型的网络或网络的组合。
网络909可以采用多种有线和/或无线通信协议和/或技术。网络可采用的各代不同通信协议和/或技术可包括但不限于全球移动通信系统(GSM)、通用分组无线电服务(GPRS)、增强型数据GSM环境(EDGE)、码分多址(CDMA)、宽带码分多址(W-CDMA)、码分多址2000、(CDMA-2000)、高速下行链路分组接入(HSDPA)、长期演进(LTE)、通用移动电信系统(UMTS)、演进数据优化(Ev-DO)、微波接入全球互通(WiMax)、时分多址(TDMA)、正交频分复用(OFDM)、超宽带(UWB)、无线应用协议(WAP)、用户数据报协议(UDP)、传输控制协议/互联网协议(TCP/IP)、开放系统互连(OSI)模型协议的任何部分、会话发起协议/实时传输协议(SIP/RTP)、短消息服务(SMS)、多媒体消息服务(MMS)或任何其他通信协议和/或技术。
结论
公开了一种系统,包括一个或多个处理器和存储一个或多个程序的存储器,该程序被配置为由一个或多个处理器执行。一个或多个程序包括以下指令:在编辑会话期间跟踪被输入到源代码程序的一行中的字符序列;以及在源代码程序的行中的一个位置处,使用神经变换器模型生成候选序列以补全源代码的行,其中神经变换器模型在以一种或多种不同的编程语言编写的源代码程序的无监督数据集上被训练。
该系统包括其他指令,当由一个或多个处理器执行时:发起束搜索以构建搜索树以生成候选序列,其中,搜索树包括处于一个或多个推理级别的一个或多个节点,每个节点代表神经变换器模型的词汇表的一组令牌的输出概率分布,其中,输出概率分布由神经变换器模型生成,每个节点将k个令牌/子令牌扩展到下一个推理级别。束搜索通过以下来迭代地扩展搜索树:调用神经变换器模型以在给定表示补全代码行的部分候选的令牌序列的情况下预测下一个令牌。
在一个方面,神经变换器模型仅由译码器块组成。神经变换器模型包括至少一个译码器块,该译码器块具有掩蔽的自注意力层。神经变换器模型包括至少一个一维卷积神经网络层。
系统通过以下来跟踪被输入到源代码程序行中的字符序列:获取表示代码行的当前上下文的令牌/子令牌的序列,并找到针对令牌/子令牌的序列的令牌/子令牌嵌入向量和位置嵌入向量。令牌/子令牌嵌入向量和位置嵌入向量是经预训练的。
该系统包括将令牌/子令牌嵌入向量和位置嵌入向量输入到神经变换器模型中的指令。神经变换器模型生成模型词汇表的令牌/子令牌的概率分布。
公开了一种方法,包括:在源代码开发会话期间监测被输入到源代码程序的代码行中的每个令牌;在新令牌被输入到代码行中时,迭代执行束搜索以生成令牌候选以补全代码行,其中,束搜索使用从神经变换器模型生成的令牌概率矩阵生成令牌候选;将令牌候选联接成候选序列以补全代码行;并且在源代码开发会话期间在检测到代码行中输入的标记字符时输出至少一个候选序列。
该方法进一步包括调用神经变换器模型以在给定上下文向量的情况下预测下一个令牌,上下文向量表示包括新令牌的代码行的上下文。
在一个方面,神经变换器模型包括自注意力层和卷积神经网络。在自注意力层之前进行层归一化,并且该层归一化被应用于自注意力层的输出。神经变换器模型利用表示代码行上下文的令牌嵌入和位置嵌入,其中令牌嵌入和位置嵌入是经预训练的。
在另一方面,对源代码程序中输入的每个令牌的监测进一步包括:将输入解析为具体语法树;执行字节对编码以从具体语法树提取令牌;以及联接长度为T的有序令牌序列。
公开了一种设备,包括耦合到存储器设备的至少一个处理器。至少一个处理器被配置为:从多个源代码程序提取一个或多个有序的令牌序列,其中有序的令牌序列表示来自多个源代码程序中的选定的一个源代码段的上下文;并利用有序的令牌序列训练神经变换器模型来预测下一个令牌以补全令牌的部分序列,其中令牌的部分序列用于产生补全目标源代码程序中的代码行的候选令牌序列,其中,神经变换器模型包括注意力层和至少一个卷积神经网络层。
在一个方面,令牌的有序序列包括一个或多个子令牌。神经变换器块是仅译码器的变换器。在一些方面,多个源代码程序中的至少两个是用不同的编程语言编写的,并且令牌的有序序列是无监督的训练数据集。在一些方面,神经变换器模型生成令牌概率矩阵,其用于预测将在预测的候选序列中成功的下一个令牌。
尽管已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求书中定义的主题不必限于上述的特定特征或动作。而是,上述特定特征和动作被公开为实现权利要求的示例形式。
Claims (14)
1.一种系统,包括:
一个或多个处理器;以及
存储一个或多个程序的存储器,所述一个或多个程序被配置为由所述一个或多个处理器执行,所述一个或多个程序包括指令,所述指令:
在编辑会话期间跟踪被输入到源代码程序的行中的字符序列;以及
在所述源代码程序的所述行中的一个位置处,使用神经变换器模型生成候选序列以补全源代码的所述行,其中所述神经变换器模型在以一种或多种不同的编程语言编写的源代码程序的无监督数据集上被训练。
2.根据权利要求1所述的系统,其中所述一个或多个程序包括其他指令,所述其他指令在由所述一个或多个处理器执行时:
发起束搜索以构建搜索树以生成所述候选序列,其中所述搜索树包括处于一个或多个推理级别的一个或多个节点,每个节点表示所述神经变换器模型的词汇表的一组令牌的输出概率分布,其中所述输出概率分布从所述神经变换器模型生成,每个节点将k个令牌/子令牌扩展到下一个推理级别。
3.根据权利要求2所述的系统,其中所述束搜索通过以下来迭代地扩展所述搜索树:调用所述神经变换器模型以在给定表示用于补全所述代码行的部分候选的令牌序列时预测下一个令牌。
4.根据权利要求1所述的系统,其中所述神经变换器模型仅由译码器块组成。
5.根据权利要求1所述的系统,其中所述神经变换器模型包括至少一个译码器块,所述至少一个译码器块具有掩蔽的自注意力层。
6.根据权利要求1所述的系统,其中所述神经变换器模型包括至少一个一维卷积神经网络层。
7.根据权利要求1所述的系统,其中跟踪被输入到所述源代码程序的所述行中的所述字符序列还包括:
获取表示所述代码行的当前上下文的令牌/子令牌的序列;以及
找到针对令牌/子令牌的所述序列的令牌/子令牌嵌入向量和位置嵌入向量,其中所述令牌/子令牌嵌入向量和所述位置嵌入向量是经预训练的。
8.根据权利要求7所述的系统,其中所述一个或多个程序包括其他指令,所述其他指令在由所述一个或多个处理器执行时:
将所述令牌/子令牌嵌入向量和位置嵌入向量输入到所述神经变换器模型中,其中所述神经变换器模型生成模型词汇表的所述令牌/子令牌的概率分布。
9.一种方法,包括:
在源代码开发会话期间监测被输入到源代码程序的代码行中的每个令牌;
在新令牌被输入到所述代码行中时,迭代地执行束搜索以生成多个令牌候选以补全所述代码行,其中所述束搜索使用从神经变换器模型生成的令牌概率矩阵来生成令牌候选;
将所述多个令牌候选联接成候选序列以补全所述代码行;以及
在所述源代码开发会话期间在检测到所述代码行中的标记字符输入时输出至少一个候选序列。
10.根据权利要求9所述的方法,还包括:
调用所述神经变换器模型以在给定上下文向量时预测下一个令牌,所述上下文向量表示包括所述新令牌的所述代码行的上下文。
11.根据权利要求9所述的方法,其中所述神经变换器模型包括自注意力层和卷积神经网络。
12.根据权利要求11所述的方法,其中在所述自注意力层之前进行层归一化,并且层归一化被应用于所述自注意力层的所述输出。
13.根据权利要求9所述的方法,其中所述神经变换器模型利用表示所述代码行的上下文的令牌嵌入和位置嵌入,其中所述令牌嵌入和所述位置嵌入是经预训练的。
14.根据权利要求9所述的方法,其中监测被输入到所述源代码程序中的每个令牌还包括:
将被输入到所述代码行中的字符解析为具体语法树;
执行字节对编码以从所述具体语法树提取令牌;以及
联接长度为T的令牌的有序序列。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962881736P | 2019-08-01 | 2019-08-01 | |
US62/881,736 | 2019-08-01 | ||
US16/680,328 | 2019-11-11 | ||
US16/680,328 US11262984B2 (en) | 2019-08-01 | 2019-11-11 | Multi-lingual line-of-code completion system |
PCT/US2020/037102 WO2021021322A2 (en) | 2019-08-01 | 2020-06-11 | Multi-lingual line-of-code completion system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114585999A true CN114585999A (zh) | 2022-06-03 |
Family
ID=71944245
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080054713.XA Pending CN114585999A (zh) | 2019-08-01 | 2020-06-11 | 多语言代码行补全系统 |
Country Status (4)
Country | Link |
---|---|
US (3) | US11262984B2 (zh) |
EP (1) | EP4007951B1 (zh) |
CN (1) | CN114585999A (zh) |
WO (1) | WO2021021322A2 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115562649A (zh) * | 2022-10-27 | 2023-01-03 | 新疆品宣生物科技有限责任公司 | 一种计算机混合程序语言源代码辅助编写方法及系统 |
US20230419036A1 (en) * | 2022-06-22 | 2023-12-28 | Amazon Technologies, Inc. | Random token segmentation for training next token prediction models |
WO2024017287A1 (zh) * | 2022-07-20 | 2024-01-25 | 华为技术有限公司 | 一种模型训练方法及其装置 |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11355134B2 (en) * | 2019-08-02 | 2022-06-07 | Audioshake, Inc. | Deep learning segmentation of audio using magnitude spectrogram |
KR20210044559A (ko) * | 2019-10-15 | 2021-04-23 | 삼성전자주식회사 | 출력 토큰 결정 방법 및 장치 |
WO2021098585A1 (en) * | 2019-11-22 | 2021-05-27 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Image search based on combined local and global information |
US11169786B2 (en) * | 2020-02-04 | 2021-11-09 | X Development Llc | Generating and using joint representations of source code |
US11893469B2 (en) * | 2020-05-22 | 2024-02-06 | Microsoft Technology Licensing, Llc | Position masking for transformer models |
US20210383199A1 (en) * | 2020-06-03 | 2021-12-09 | Google Llc | Object-Centric Learning with Slot Attention |
KR20220001821A (ko) * | 2020-06-30 | 2022-01-06 | 삼성전자주식회사 | 텐서 처리 방법, 가속기 및 이를 포함한 가속기 시스템 |
US12112145B2 (en) * | 2020-07-09 | 2024-10-08 | Accenture Global Solutions Limited | Artificial intelligence-based intelligent programming assistance |
US20220058444A1 (en) * | 2020-08-19 | 2022-02-24 | Capital One Services, Llc | Asymmetric adversarial learning framework for multi-turn dialogue response generation |
CN115129233B (zh) * | 2021-03-26 | 2024-03-19 | 中科寒武纪科技股份有限公司 | 数据处理装置、方法及相关产品 |
CN113204679B (zh) * | 2021-04-13 | 2023-08-01 | 武汉大学 | 一种代码查询模型的生成方法和计算机设备 |
US11763078B2 (en) | 2021-04-22 | 2023-09-19 | Microsoft Technology Licensing, Llc | Provisional selection drives edit suggestion generation |
CN113190219A (zh) * | 2021-05-08 | 2021-07-30 | 南通大学 | 一种基于递归神经网络模型的代码注释生成方法 |
US12039295B2 (en) | 2021-05-15 | 2024-07-16 | Microsoft Technology Licensing, Llc. | Code completion with holes |
TWI760234B (zh) * | 2021-05-25 | 2022-04-01 | 仁寶電腦工業股份有限公司 | 翻譯方法 |
US11836467B2 (en) | 2021-06-15 | 2023-12-05 | Microsoft Technology Licensing, Llc. | Code generation with reinforcement learning |
WO2022265745A1 (en) * | 2021-06-15 | 2022-12-22 | Microsoft Technology Licensing, Llc | Code generation with reinforcement learning |
US12010613B2 (en) | 2021-09-20 | 2024-06-11 | Microsoft Technology Licensing, Llc | Accessory device communication utilizing multiple personalities |
US11968732B2 (en) | 2021-10-15 | 2024-04-23 | Microsoft Technology Licensing, Llc | Mixed standard accessory device communication utilizing host-coordinated transmission |
US11656851B2 (en) | 2021-10-22 | 2023-05-23 | Microsoft Technology Licensing, Llc. | Long-range modeling of source code files by syntax hierarchy |
US11442775B1 (en) | 2021-12-03 | 2022-09-13 | FriendliAI Inc. | Dynamic batching for inference system for transformer-based generation tasks |
US11514370B1 (en) * | 2021-12-03 | 2022-11-29 | FriendliAI Inc. | Selective batching for inference system for transformer-based generation tasks |
US12086268B2 (en) * | 2022-03-07 | 2024-09-10 | Microsoft Technology Licensing, Llc. | Constrained decoding for source code generation |
US12032936B2 (en) * | 2022-03-24 | 2024-07-09 | Microsoft Technology Licensing, Llc. | Code adaptation through deep learning |
US20230353264A1 (en) * | 2022-04-29 | 2023-11-02 | Qualcomm Incorporated | Machine learning for beam predictions with confidence indications |
CN114924741A (zh) * | 2022-05-10 | 2022-08-19 | 南京航空航天大学 | 一种基于结构特征和序列特征的代码补全方法 |
US20230409299A1 (en) * | 2022-06-16 | 2023-12-21 | Microsoft Technology Licensing, Llc. | Code insertion completion |
US20230418566A1 (en) * | 2022-06-22 | 2023-12-28 | Amazon Technologies, Inc. | Programmatically generating evaluation data sets for code generation models |
US12014155B2 (en) | 2022-06-22 | 2024-06-18 | Amazon Technologies, Inc. | Constrained prefix matching for generating next token predictions |
US12039304B2 (en) | 2022-07-01 | 2024-07-16 | Microsoft Technology Licensing, Llc | Syntax subtree code strengthening |
US20240231763A9 (en) * | 2022-10-19 | 2024-07-11 | International Business Machines Corporation | Interactive editing of a machine-generated document |
CN115392260B (zh) * | 2022-10-31 | 2023-04-07 | 暨南大学 | 一种面向特定目标的社交媒体推文情感分析方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9471286B2 (en) * | 2013-06-04 | 2016-10-18 | Microsoft Technology Licensing, Llc | System and method for providing code completion features for code modules |
US9244658B2 (en) * | 2013-06-04 | 2016-01-26 | Microsoft Technology Licensing, Llc | Multi-step auto-completion model for software development environments |
US9928040B2 (en) * | 2013-11-12 | 2018-03-27 | Microsoft Technology Licensing, Llc | Source code generation, completion, checking, correction |
US9799327B1 (en) * | 2016-02-26 | 2017-10-24 | Google Inc. | Speech recognition with attention-based recurrent neural networks |
WO2018097907A1 (en) * | 2016-10-20 | 2018-05-31 | Google Llc | Answer to question neural networks |
US10671355B2 (en) | 2018-01-21 | 2020-06-02 | Microsoft Technology Licensing, Llc. | Code completion with machine learning |
EP3732629A1 (en) * | 2018-05-23 | 2020-11-04 | Google LLC | Training sequence generation neural networks using quality scores |
US11442702B2 (en) * | 2018-09-22 | 2022-09-13 | Affirm, Inc. | Code completion |
US11410015B1 (en) * | 2018-09-28 | 2022-08-09 | Meta Platforms, Inc. | Systems and methods for translating with limited attention |
US11657277B2 (en) * | 2019-05-23 | 2023-05-23 | Google Llc | Generating neural network outputs using insertion commands |
US11615255B2 (en) * | 2019-07-22 | 2023-03-28 | Capital One Services, Llc | Multi-turn dialogue response generation with autoregressive transformer models |
US11048482B2 (en) * | 2019-07-26 | 2021-06-29 | X Development Llc | Automated identification of code changes |
-
2019
- 2019-11-11 US US16/680,328 patent/US11262984B2/en active Active
-
2020
- 2020-06-11 EP EP20750843.3A patent/EP4007951B1/en active Active
- 2020-06-11 CN CN202080054713.XA patent/CN114585999A/zh active Pending
- 2020-06-11 WO PCT/US2020/037102 patent/WO2021021322A2/en unknown
-
2022
- 2022-01-20 US US17/580,609 patent/US11809842B2/en active Active
-
2023
- 2023-08-09 US US18/232,326 patent/US20240028306A1/en active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230419036A1 (en) * | 2022-06-22 | 2023-12-28 | Amazon Technologies, Inc. | Random token segmentation for training next token prediction models |
WO2024017287A1 (zh) * | 2022-07-20 | 2024-01-25 | 华为技术有限公司 | 一种模型训练方法及其装置 |
CN115562649A (zh) * | 2022-10-27 | 2023-01-03 | 新疆品宣生物科技有限责任公司 | 一种计算机混合程序语言源代码辅助编写方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US11809842B2 (en) | 2023-11-07 |
US20220147321A1 (en) | 2022-05-12 |
US20240028306A1 (en) | 2024-01-25 |
EP4007951B1 (en) | 2023-10-04 |
US20210034335A1 (en) | 2021-02-04 |
US11262984B2 (en) | 2022-03-01 |
WO2021021322A2 (en) | 2021-02-04 |
EP4007951A2 (en) | 2022-06-08 |
WO2021021322A3 (en) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11809842B2 (en) | Multi-lingual line-of-code completion system | |
US11379190B2 (en) | Deep learning enhanced code completion system | |
US11972232B2 (en) | Neural method completion based on natural language and source code | |
US20210357210A1 (en) | Automatic generation of code documentation | |
US11900261B2 (en) | Transfer learning system for automated software engineering tasks | |
US11513774B2 (en) | Multi-lingual code generation with zero-shot inference | |
EP4204968B1 (en) | Unit test case generation with transformers | |
US11829282B2 (en) | Automatic generation of assert statements for unit test cases | |
US11797426B2 (en) | Automating test-driven development with transformers | |
US11656851B2 (en) | Long-range modeling of source code files by syntax hierarchy | |
US12073195B2 (en) | Retrieval-augmented code completion |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |