NatGen: Generative Pre-Training by “Naturalizing” Source Code
Saikat Chakraborty, Toufique Ahmed, Yangruibo Ding,
Prem Devanbu, Baishakhi Ray
Columbia University and UC Davis
1
Machine Learning for Code
2
Coding
Test
Bug Fix
Bug
Finding
Document
Machine Learning for Code
3
Language Model
Task Model
Machine Learning for Code
4
Language Model
Task Model
Pretraining
Fine-Tuning
Hurdles of Using Pretrained Language Model
5
PLBART – Token Based Denoising
6
Correct Code
Noisy Code
Encoder
Decoder
Noise Injector
PLBART
Token Masking
Token Deletion
Token Infilling
Dual Information Channel of Code
7
[1] Casalanuovo et. al. 2020
[2] Karampatsis et. al. 2020
Natural Channel
Formal Channel
Pre-Training through Formal Channel Mutation
8
Encoder
Decoder
Noise Injector
NatGen
Semantic Preserving Formal Channel Mutations
Correct Code
Noisy Code
Pre-Training through Formal Channel Mutation
9
De-Naturalizing Transformation
De-Naturalizing Transformations
10
De-Naturalizing Transformations
11
Pre-Training through Formal Channel Mutation
12
Encoder
Decoder
Noise Injector
NatGen
Semantic Preserving Formal Channel Mutations
Correct Code
Noisy Code
Pre-training NatGen
13
Language | BlockSwap | OperandSwap | Confusion | DeadCode | VarRenamer | LoopTransformer | Total | % |
Go | 13299 | 116756 | 0 | 250506 | 322325 | 0 | 702886 | 8.65 |
Java | 41286 | 182666 | 43925 | 557741 | 628122 | 55546 | 1509286 | 18.57 |
JavaScript | 14170 | 251474 | 0 | 576047 | 765796 | 90389 | 1697876 | 20.89 |
Php | 8411 | 95506 | 0 | 379711 | 451493 | 11353 | 946474 | 11.64 |
Python | 27395 | 79854 | 0 | 480264 | 516266 | 3194 | 1106973 | 13.62 |
Ruby | 3375 | 10990 | 0 | 74086 | 74482 | 0 | 162933 | 2.00 |
C | 19618 | 121522 | 16850 | 380702 | 411401 | 49534 | 999627 | 12.30 |
C# | 6563 | 63714 | 5703 | 395560 | 515125 | 12084 | 998749 | 12.29 |
Total | 134117 | 922482 | 66478 | 3094617 | 3685010 | 222100 | 8124804 | 100 |
% | 1.65 | 11.35 | 0.82 | 38.09 | 45.35 | 2.73 | 100 | |
Q: Fine-tuning on downstream tasks
14
15
NL to Code Generation
Code Translation
Bug Fix
Q: NatGen �on Resource Constraint Environment�(Zero-shot)
16
Q: NatGen �on Resource Constraint Environment�(200 �Training Examples)
17
18
Other Comparison
19
Code Summarization
Lessons Learned
20
Code and Model
21
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("saikatc/NatGen")
model = AutoModelForSeq2SeqLM.from_pretrained("saikatc/NatGen")
22
Prem Devanbu
UC Davis
Yangruibo Ding
Columbia
Toufique Ahmed Parag
UC Davis
Baishakhi Ray
Columbia
Thanks (for feedback)
ARiSE lab, Columbia & DECAL lab, UC Davis.
23
Thanks!