IP Library Granted Patent US 11,693,637
Granted Patent B1
US 11,693,637 · App. 17/319,739 · Granted Jul 4, 2023

Using natural language latent representation in automated conversion of source code from base programming language to target programming language

Inventors: Rishabh Singh (San Jose, CA); Hanjun Dai (San Jose, CA); Manzil Zaheer (Mountain View, CA); Artem Goncharuk (Mountain View, CA); Karen Davis (Portola Valley, CA); David Andre (San Francisco, CA)
Assignee: GOOGLE LLC
G06F8/436G06F40/279G06F40/40G06N3/08G06N7/01
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,693,637
App. No.
17/319,739
Granted
Jul 4, 2023
Kind
B1
Abstract

Using a natural language (NL) latent presentation in the automated conversion of source code from a base programming language (e.g., C++) to a target programming language (e.g., Python). A base-to-NL model can be used to generate an NL latent representation by processing a base source code snippet in the base programming language. Further, an NL-to-target model can be used to generate a target source code snippet in the target programming language (that is functionally equivalent to the base source code snippet), by processing the NL latent representation. In some implementations, output(s) from the NL-to-target model indicate canonical representation(s) of variables, and in generating the target source code snippet, technique(s) are used to match those canonical representation(s) to variable(s) of the base source code snippet. In some implementations, multiple candidate target source code snippets are generated, and a subset (e.g., one) is selected based on evaluation(s).

Claims (76)

1. A method implemented by one or more processors, the method comprising:

identifying a base source code snippet that is programmed in a base higher-level programming language;

processing the base source code snippet, using a first neural network model, to generate a first sequence of first outputs;

generating, based on the first sequence of the first outputs, a natural language description of the base source code snippet;

processing the natural language description, using a second neural network model, to generate a second sequence of second outputs;

generating, based on the second sequence of the second outputs, a predicted target source code snippet in the target higher-level programming language; and

causing the predicted target source code snippet to be rendered as output of a software development application.

2. The method of claim 1 , wherein the base source code snippet is a modification of an initial base source code snippet and further comprising:

generating the base source code snippet by replacing a variable, in the initial base source code snippet, with a base canonical variable.

3. The method of claim 2 , wherein generating the predicted target source code snippet in the target higher-level programming language comprises:

determining that a given second output, of the second outputs, indicates a target canonical variable;

determining that the target canonical variable corresponds to the variable in the initial base source code snippet; and

generating the predicted target source code snippet by including the variable, in the predicted target source code snippet and in a location indicated by the given output, wherein including the variable is responsive to determining that the target canonical variable corresponds to the variable in the initial base source code snippet.

4. The method of claim 3 , wherein determining that the target canonical variable corresponds to the variable in the initial base source code snippet comprises:

determining that an additional second output, in the second outputs, indicates a data type for the target canonical variable; and

determining that the variable also has the data type in the initial base source code snippet.

5. The method of claim 3 , wherein determining that the target canonical variable corresponds to the variable in the initial base source code snippet comprises:

determining that an additional second output, that immediately precedes or immediately follows the given second output in the second outputs, matches a portion of the base source code snippet that immediately precedes or immediately follows the variable in the base source code snippet.

6. The method of claim 1 , wherein the second outputs of the second sequence each comprise a corresponding probability distribution, and further comprising:

generating, based on the corresponding probability distributions of the second outputs, an additional predicted target source code snippet, in the target higher-level programming language, wherein the additional predicted target source code snippet is generated based on highest probabilities in the corresponding probability distributions of the sequence of outputs, and

generating, based on the corresponding probability distributions of the second outputs, the predicted target source code snippet, wherein the predicted target source code snippet includes one or more portions that differ from the additional predicted target source code snippet based on the one or more portions being generated based on non-highest probabilities in the corresponding probability distributions of the second outputs;

evaluating the predicted target source code snippet and evaluating the additional predicted target source code snippet; and

selecting, based on the evaluations, the predicted target source code snippet over the additional predicted target source code snippet;

wherein causing the predicted target source code snippet to be rendered as output of the software development application is responsive to selecting the predicted target source code snippet, and wherein the additional predicted source code snippet is not rendered as output of the software development application.

7. The method of claim 6 , further comprising:

executing the base source code snippet to generate a base source code output;

wherein evaluating the additional predicted target source code snippet comprises:

executing the additional target source code snippet to generate an additional target source code output, and

determining that the base source code output fails to match the additional target source code output; and

wherein evaluating the predicted target source code snippet comprises:

executing the predicted target source code snippet to generate a target source code output; and

determining that the base source code matches the target source code output.

8. The method of claim 7 , wherein generating the predicted target source code snippet and/or evaluating the predicted target source code snippet are performed in response to determining that the base source code output fails to match the additional target source code output.

9. The method of claim 7 ,

wherein evaluating the additional predicted target source code snippet comprises:

analyzing the additional predicted target source code snippet with respect to a syntax for the target higher-level programming language, and

determining that the additional predicted target source code snippet fails to conform to the syntax; and

wherein evaluating the predicted target source code snippet comprises:

analyzing the predicted target source code language with respect to the syntax; and

determining that the predicted target source code snippet conforms to the syntax.

10. The method of claim 9 , wherein generating the predicted target source code snippet and/or evaluating the predicted target source code snippet are performed in response to determining that the additional predicted target source code snippet fails to conform to the syntax.

11. The method of claim 7 , further comprising:

generating, based on processing the base source code snippet using an additional neural network model, a base embedding of the base source code snippet;

generating, based on processing the additional predicted target source code snippet using the additional neural network model, an additional target embedding of the additional predicted target source code snippet; and

generating, based on processing the predicted target source code snippet using the additional neural network model, a target embedding of the additional predicted target source code snippet;

wherein evaluating the predicted target source code snippet and the additional predicted target source code snippet comprises:

determining that the target embedding is closer, in embedding space, to the base embedding than is the additional target embedding to the base embedding.

12. The method of claim 1 , wherein the first neural network model comprises a plurality of transformers.

13. A method implemented by one or more processors, the method comprising:

identifying, from a repository, a target source code snippet that is programmed in a target programming language;

identifying, from the repository, a target document string for the target source code snippet;

generating multiple training instances based on the target source code snippet and the target document string, wherein each of the training instances differs from all other of the training instances and each includes corresponding training instance input that is based on the target document string and corresponding training instance output that is based on the target source code snippet;

using the training instances to train a neural network model for use in generating target source code based on natural language.

14. The method of claim 13 , wherein generating the multiple training instances comprises:

generating a first training instance with first training instance input that conforms strictly to the target document string, and with first training instance output that conforms strictly to the target source code or is the target source code with any variables replaced with a corresponding canonical representation; and

generating a second training instance with second training instance input that omits one or more words of the target document string, and with second training instance output that conforms strictly to the first training instance output.

15. The method of claim 13 , wherein generating the multiple training instances comprises:

generating a first training instance with first training instance input that conforms strictly to the target document string, and with first training instance output that conforms strictly to the target source code or is the target source code with any variables replaced with a corresponding canonical representation; and

generating a second training instance, with second training instance input that replaces a word, of the target document string, that matches a first data type with an alternate word that matches a second data type, and with second training instance output that includes a modification of the target source code that replaces, in the target source code, a term that matches the data type with an alternate term that matches the second data type.

16. The method of claim 13 , wherein generating the multiple training instances comprises:

generating a first training instance with first training instance output that replaces a term of the target source code, that corresponds to a variable, with a first alternate term; and

generating a second training instance with second training instance output that replaces a term of the target source code, that corresponds to a variable, with a second alternate term.

17. The method of claim 16 ,

wherein generating the first training instance further comprises generating a first training instance input, of the first training instances, that replaces any occurrences of the term, in the target document string, with the first alternate term; and

wherein generating the second training instance further comprises generating a second training instance input, of the second training instance, that replaces any occurrences of the term, in the target document string, with the second alternate term.

18. The method of claim 13 , wherein generating the multiple training instances comprises:

generating a first training instance with first training instance input that replaces a term of the target document string with a synonym; and

generating a second training instance with second training instance input that includes the term, or that replaces the term with an alternate synonym.

19. The method of claim 13 , further comparing, subsequent to using the training instances to train the neural network model:

processing, using the neural network model, a given instance of natural language; and

generating, based on processing the given instance of natural language, a given target source code snippet.

20. The method of claim 19 , further comprising:

identifying, from a repository, a base source code snippet that is programmed in a base programming language;

identifying, from the repository, a base document string for the base source code snippet;

generating multiple base training instances based on the base source code snippet and the base document string, wherein each of the base training instances differs from all other of the base training instances and each includes corresponding base training instance output that is based on the base target document string and corresponding base training instance input that is based on the base target source code snippet; and

using the base training instances to train a base neural network model for use in generating natural language based on base source code.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 2, 2023
From: X DEVELOPMENT LLC
To: GOOGLE LLC
Reel/Frame 062572/0565 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 19, 2021
From: SINGH, RISHABH; DAI, HANJUN; ZAHEER, MANZIL; GONCHARUK, ARTEM; DAVIS, KAREN; ANDRE, DAVID
To: X DEVELOPMENT LLC
Reel/Frame 056289/0294 →
Continuity (1)
Provisional Application 63025816 · May 15, 2020
Cited By (13)
US 12,190,218 US 12,217,029 US 12,333,636 US 12,360,745 US 12,417,360 US 12,487,796 US 12,518,358 US 12,530,527 US 12,578,940 US 12,591,421 US 12,626,431 US 12,639,634 US 12,689,653