SlideShare a Scribd company logo
1 of 25
Deep API Learning
Xiaodong GU Sunghun Kim
The Hong Kong University of
Science and Technology
Hongyu Zhang Dongmei Zhang
Microsoft Research
Programming is hard
• Unfamiliar problems
• Unfamiliar APIs [Robillard,2009]
DocumentBuilderFactory.newInstance
↓
DocumentBuilderFactory.newDocumentBuilder
↓
DocumentBuilder.parse
“how to parse XML files?”
Obtaining API usage sequences based on a
query
Obtaining API usage sequences based on a
query
The
Proble
m?
Bag-of-words
Assumption!Lack a deep understanding of the
semantics of the query
Limitations of IR-based Approaches
“how to convert
int to string”
“how to convert
string to int”
“how to convert
string to number”
static public Integer str2Int(String str) {
Integer result = null;
try {
result = Integer.parseInt(str);
} catch (Exception e) {
String negativeMode = "";
if(str.indexOf('-') != -1) negativeMode = "-";
str = str.replaceAll("-", "" );
result = Integer.parseInt(negativeMode + str);
}
return result;
}
Limit #1 Cannot identify semantically related
words
Limit #2 Cannot distinguish word ordering
DeepAPI – Learning The Semantics
“how to parse XML files”
DocumentBuilderFactory:newInstance
DocumentBuilderFactory:newDocumentBuilder
DocumentBuilder:parse
DNN – Embedding Model DNN – Language
Model
1.1
2.3
0.4
⋮
5.0
 Better query understanding (recognize semantically related words
and word ordering)
Background – RNN
• Recurrent Neural Network
Hidden Layer
Output Layer
Input Layer
h1 h2 h3
parse xml file
w1 w2 w3
 Hidden layers are recurrently used for computation
 This creates an internal state of the network to record dynamic temporal
behavior
ℎ 𝑡 = 𝑓 ℎ 𝑡−1, 𝑥𝑡
Background – RNN Encoder-Decoder
• A deep learning model for the sequence-to-sequence
learning
 Encoder: An RNN that encodes a sequence of words (query)
into a vector:
ℎ 𝑡 = 𝑓 ℎ 𝑡−1, 𝑥𝑡 𝑐 = ℎ 𝑇𝑥
 Decoder: An RNN (language model) that sequentially generates
a sequence of words (APIs) based on the (query) vector:
Pr 𝑦 =
𝑡=1
𝑇
𝑝(𝑦𝑡|𝑦1, … 𝑦𝑡−1, 𝑐)
Pr(𝑦𝑡|𝑦1, ⋯ 𝑦𝑡−1) = 𝑔(ℎ 𝑡, 𝑦𝑡−1, 𝑐)
h 𝑡 = 𝑓 ℎ 𝑡−1, 𝑦𝑡−1, 𝑐
 Training – minimize the cost function:
𝐿 𝜃 =
1
𝑁 𝑖=1
𝑁
𝑡=1
𝑇
𝑐𝑜𝑠𝑡𝑖𝑡 𝑐𝑜𝑠𝑡𝑖𝑡 = − log p 𝜃(𝑦𝑖𝑡|𝑥𝑖)
RNN Encoder-Decoder Model for API
Sequence Generation
<START>
h1 h2 h3 h4
y1 y2 y3 y4
y1 y2 y3
h1 h2 h3
x1 x2 x3
Read Text File
c
Encoder RNN Decoder RNN
BuffereReader
.new
FileReader
.new
BuffereReader
.read
BuffereReader
.close
<EOS>
BuffereReader
.new
FileReader
.new
BuffereReader
.read
BuffereReader
.close
h5
y5
y4Input
Output
Hidden
Enhancing RNN Encoder-Decoder Model
with API importance
• Different APIs have different importance for a programming task
File.new FileWriter.new Logger.log FileWriter.write
• Weaken the unimportant APIs
 IDF-based weighting
𝑤𝑖𝑑𝑓 𝑦𝑡 = log
𝑁
𝑛 𝑦𝑡
 Regularized Cost Function
cost 𝑖𝑡 = − log 𝑝 𝜃 𝑦𝑖𝑡 𝑥𝑖 − 𝝀𝒘𝒊𝒅𝒇 𝒚𝒊𝒕
System Overview
Code Corpus
RNN
Encoder-
Decoder
API-related
User Query
Suggested API
sequences
Natural
Language
Annotations Training
Instances
API
sequences
Training
Offline
Training
Step1 – Preparing a Parallel Corpus
InputStream.read OutputStream.write # copy a file from an inputstream to an
outputstream
URL.new URL.openConnection # open a url
File.new File.exists # test file exists
File.renameTo File.delete # rename a file
StringBuffer.new StreanBuffer.reverse # reverse a string
⋮ # ⋮
API Sequences
(Java)
Annotations(English)
<API Sequence, Annotation>
pairs
• Collect 442,928 Java projects from GitHub (2008-2014)
• Parse source files into ASTs using Eclipse JDT
• Extract an API sequence and an annotation for each method body (when Javadoc
comment exists)
Extracting API Usage Sequences
Post-order traverse on each AST
tree:
 Constructor invocation:
new C() => C.new
 Method call:
o.m() => C.m
 Parameters:
o1.m1(o2.m2(),o3.m3())=> C2.m2-C3.m3-
C1.m1
 A sequence of statements:
stmt1;stmt2;,,,stmtt;=>s1-s2-…-st
 Conditional statement:
if(stmt1){stmt2;} else{stmt3;} =>s1-s2-s3
 Loop statements:
while(stmt1){stmt2;}=>s1-s2
1 …
2 BufferedReader reader = new BufferedReader(…);
4 while((line=reader.readLine())!=null)
5 …
6 reader.close;
Body
Statement
While
Statement
Variable
Declaration
Constructor
Invocation
Method
Invocation
Block
Statement
Type Variable
BufferedReader reader
readLineVariable
reader
BufferedReader.new BufferedReader.readLine
BufferedReader.close
…
Extracting Natural Language Annotations
/***
* Copies bytes from a large (over 2GB) InputStream to an OutputStream.
* This method uses the provided buffer, so there is no need to use a
* BufferedInputStream.
* @param input the InputStream to read from
* . . .
* @since 2.2
*/
public static long copyLarge(final InputStream input,
final OutputStream output, final byte[] buffer) throws IOException {
long count = 0;
int n;
while (EOF != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
API sequence: InputStream.read OutputStream.write
Annotation: copies bytes from a large inputstream
to an outputstream.
MethodDefinition
Javadoc
Comment
Body
… …
The first sentence of a documentation comment
Step2 – Training RNN Encoder-Decoder
Model
• Data
 7,519,907 <API Sequence, Annotation> pairs
• Neural Network
 Bi-GRU, 2 hidden layers, 1,000 hidden unites
 Word Embedding: 120
• Training Algorithm
 SGD+Adadelta
 Batch size: 200
• Hardware:
 Nvidia K20 GPU
Evaluation
• RQ1: How accurate is DeepAPI for generating API usage
sequences?
• RQ2: How accurate is DeepAPI under different parameter
settings?
• RQ3: Do the enhanced RNN Encoder-Decoder models improve
the accuracy of DeepAPI?
Automatic Evaluation:
 Data set:
7,519,907 snippets with Javadoc comments
Training set: 7,509,907 pairs Test Set: 10,000 pairs
 Accuracy Measure
BLEU – The hits of n-grams of a candidate sequence to the ground truth
sequence.
𝐵𝐿𝐸𝑈 = 𝐵𝑃 ∙ exp 𝑛=1
𝑁
𝑤 𝑛 𝑙𝑜𝑔𝑝 𝑛
𝑝 𝑛 =
# n−grams appear in the reference+1
# n−grams of candidate+1
𝐵𝑃 =
1 𝑖𝑓 𝑐 > 𝑟
𝑒(1−𝑟/𝑐)
𝑖𝑓 𝑐 ≤ 𝑟
RQ1: How accurate is DeepAPI for generating API
usage sequences?
 Comparison Methods
• Code Search with Pattern Mining
Code Search – Lucene
Summarizing API patterns – UP-Miner [Wang, MSR’13]
• SWIM [Raghothaman, ICSE’16]
Query-to-API Mapping – Statistical Word Alignment
Search API sequence using the bag of APIs – Information retrieval
RQ1: How accurate is DeepAPI for generating API
usage sequences?
Human Evaluation:
 30 API-related natural language queries:
• 17 from Bing search logs
• 13 longer queries and queries with semantic related words
 Accuracy Metrics:
• FRank: the rank of the first relevant result in the result list
• Relevancy Ratio: relevancy ratio =
# relevant results
# all selected results
RQ1: How accurate is DeepAPI for generating API
usage sequences?
RQ1: How accurate is DeepAPI for generating API
usage sequences?
• Examples
DeepAPI
 Distinguishing word ordering
convert int to string => Integer.toString
convert string to int => Integer.parseInt
 Identify Semantically related words
save an image to a file => File.new ImageIO.write
write an image to a file=> File.new ImageIO.write
 Understand longer queries
copy a file and save it to your destination path
play the audio clip at the specified absolute URL
SWIM
 Partially matched sequences
generate md5 hashcode=> Object.hashCode
 Project-specific results
test file exists => File.new, File.exists, File.getName,
File.new, File.delete, FileInputStream.new,…
 Hard to understand longer queries
copy a file and save it to your destination path
RQ2 – Accuracy Under Different Parameter
Settings
BLEU scores under different number of hidden units and word
dimensions
RQ3 – Performance of the Enhanced RNN
Encoder-Decoder Models
• BLEU scores of different Models(%)
• BLEU scores under different λ
Conclusion
Apply RNN Encoder-Decoder for generating API usage sequences
for a given natural language query
 Recognize semantically related words
 Recognize word ordering
Future Work
 Explore the applications of this model to other problems.
 Investigate the synthesis of sample code from the generated API
sequences.
Thanks!

More Related Content

Similar to Deep API Learning Generates Accurate API Usage Sequences from Natural Language Queries

Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)Itzik Kotler
 
An Overview Of Python With Functional Programming
An Overview Of Python With Functional ProgrammingAn Overview Of Python With Functional Programming
An Overview Of Python With Functional ProgrammingAdam Getchell
 
Practices and tools for building better APIs
Practices and tools for building better APIsPractices and tools for building better APIs
Practices and tools for building better APIsNLJUG
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Peter Hendriks
 
Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPeter Hendriks
 
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCTim Burks
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
 
Juan josefumeroarray14
Juan josefumeroarray14Juan josefumeroarray14
Juan josefumeroarray14Juan Fumero
 
Enforcing API Design Rules for High Quality Code Generation
Enforcing API Design Rules for High Quality Code GenerationEnforcing API Design Rules for High Quality Code Generation
Enforcing API Design Rules for High Quality Code GenerationTim Burks
 
(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel ArchitecturesJoel Falcou
 
ACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdfACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdfAnyscale
 
ElixirでFPGAを設計する
ElixirでFPGAを設計するElixirでFPGAを設計する
ElixirでFPGAを設計するHideki Takase
 
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...apidays
 
Implementing OpenAPI and GraphQL services with gRPC
Implementing OpenAPI and GraphQL services with gRPCImplementing OpenAPI and GraphQL services with gRPC
Implementing OpenAPI and GraphQL services with gRPCTim Burks
 
OpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-SideOpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-SideTim Burks
 
LF_APIStrat17_OpenAPI and gRPC Side-by-Side
LF_APIStrat17_OpenAPI and gRPC Side-by-SideLF_APIStrat17_OpenAPI and gRPC Side-by-Side
LF_APIStrat17_OpenAPI and gRPC Side-by-SideLF_APIStrat
 
Code Analysis-run time error prediction
Code Analysis-run time error predictionCode Analysis-run time error prediction
Code Analysis-run time error predictionNIKHIL NAWATHE
 
ISI work
ISI workISI work
ISI workdgarijo
 
Cockatrice: A Hardware Design Environment with Elixir
Cockatrice: A Hardware Design Environment with ElixirCockatrice: A Hardware Design Environment with Elixir
Cockatrice: A Hardware Design Environment with ElixirHideki Takase
 

Similar to Deep API Learning Generates Accurate API Usage Sequences from Natural Language Queries (20)

Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)Hack Like It's 2013 (The Workshop)
Hack Like It's 2013 (The Workshop)
 
An Overview Of Python With Functional Programming
An Overview Of Python With Functional ProgrammingAn Overview Of Python With Functional Programming
An Overview Of Python With Functional Programming
 
Practices and tools for building better APIs
Practices and tools for building better APIsPractices and tools for building better APIs
Practices and tools for building better APIs
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)
 
Practices and Tools for Building Better APIs
Practices and Tools for Building Better APIsPractices and Tools for Building Better APIs
Practices and Tools for Building Better APIs
 
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPCBuild Great Networked APIs with Swift, OpenAPI, and gRPC
Build Great Networked APIs with Swift, OpenAPI, and gRPC
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
Juan josefumeroarray14
Juan josefumeroarray14Juan josefumeroarray14
Juan josefumeroarray14
 
Enforcing API Design Rules for High Quality Code Generation
Enforcing API Design Rules for High Quality Code GenerationEnforcing API Design Rules for High Quality Code Generation
Enforcing API Design Rules for High Quality Code Generation
 
Inroduction to r
Inroduction to rInroduction to r
Inroduction to r
 
(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures
 
ACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdfACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdf
 
ElixirでFPGAを設計する
ElixirでFPGAを設計するElixirでFPGAを設計する
ElixirでFPGAを設計する
 
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
apidays LIVE Helsinki - Implementing OpenAPI and GraphQL Services with gRPC b...
 
Implementing OpenAPI and GraphQL services with gRPC
Implementing OpenAPI and GraphQL services with gRPCImplementing OpenAPI and GraphQL services with gRPC
Implementing OpenAPI and GraphQL services with gRPC
 
OpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-SideOpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-Side
 
LF_APIStrat17_OpenAPI and gRPC Side-by-Side
LF_APIStrat17_OpenAPI and gRPC Side-by-SideLF_APIStrat17_OpenAPI and gRPC Side-by-Side
LF_APIStrat17_OpenAPI and gRPC Side-by-Side
 
Code Analysis-run time error prediction
Code Analysis-run time error predictionCode Analysis-run time error prediction
Code Analysis-run time error prediction
 
ISI work
ISI workISI work
ISI work
 
Cockatrice: A Hardware Design Environment with Elixir
Cockatrice: A Hardware Design Environment with ElixirCockatrice: A Hardware Design Environment with Elixir
Cockatrice: A Hardware Design Environment with Elixir
 

More from Sung Kim

Time series classification
Time series classificationTime series classification
Time series classificationSung Kim
 
Tensor board
Tensor boardTensor board
Tensor boardSung Kim
 
REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...
REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...
REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...Sung Kim
 
Heterogeneous Defect Prediction (

ESEC/FSE 2015)
Heterogeneous Defect Prediction (

ESEC/FSE 2015)Heterogeneous Defect Prediction (

ESEC/FSE 2015)
Heterogeneous Defect Prediction (

ESEC/FSE 2015)Sung Kim
 
A Survey on Automatic Software Evolution Techniques
A Survey on Automatic Software Evolution TechniquesA Survey on Automatic Software Evolution Techniques
A Survey on Automatic Software Evolution TechniquesSung Kim
 
Crowd debugging (FSE 2015)
Crowd debugging (FSE 2015)Crowd debugging (FSE 2015)
Crowd debugging (FSE 2015)Sung Kim
 
Software Defect Prediction on Unlabeled Datasets
Software Defect Prediction on Unlabeled DatasetsSoftware Defect Prediction on Unlabeled Datasets
Software Defect Prediction on Unlabeled DatasetsSung Kim
 
Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)
Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)
Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)Sung Kim
 
Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)
Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)
Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)Sung Kim
 
How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...
How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...
How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...Sung Kim
 
CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)
CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)
CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)Sung Kim
 
Source code comprehension on evolving software
Source code comprehension on evolving softwareSource code comprehension on evolving software
Source code comprehension on evolving softwareSung Kim
 
A Survey on Dynamic Symbolic Execution for Automatic Test Generation
A Survey on  Dynamic Symbolic Execution  for Automatic Test GenerationA Survey on  Dynamic Symbolic Execution  for Automatic Test Generation
A Survey on Dynamic Symbolic Execution for Automatic Test GenerationSung Kim
 
Survey on Software Defect Prediction
Survey on Software Defect PredictionSurvey on Software Defect Prediction
Survey on Software Defect PredictionSung Kim
 
MSR2014 opening
MSR2014 openingMSR2014 opening
MSR2014 openingSung Kim
 
Personalized Defect Prediction
Personalized Defect PredictionPersonalized Defect Prediction
Personalized Defect PredictionSung Kim
 
STAR: Stack Trace based Automatic Crash Reproduction
STAR: Stack Trace based Automatic Crash ReproductionSTAR: Stack Trace based Automatic Crash Reproduction
STAR: Stack Trace based Automatic Crash ReproductionSung Kim
 
Transfer defect learning
Transfer defect learningTransfer defect learning
Transfer defect learningSung Kim
 
Automatic patch generation learned from human written patches
Automatic patch generation learned from human written patchesAutomatic patch generation learned from human written patches
Automatic patch generation learned from human written patchesSung Kim
 
The Anatomy of Developer Social Networks
The Anatomy of Developer Social NetworksThe Anatomy of Developer Social Networks
The Anatomy of Developer Social NetworksSung Kim
 

More from Sung Kim (20)

Time series classification
Time series classificationTime series classification
Time series classification
 
Tensor board
Tensor boardTensor board
Tensor board
 
REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...
REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...
REMI: Defect Prediction for Efficient API Testing (

ESEC/FSE 2015, Industria...
 
Heterogeneous Defect Prediction (

ESEC/FSE 2015)
Heterogeneous Defect Prediction (

ESEC/FSE 2015)Heterogeneous Defect Prediction (

ESEC/FSE 2015)
Heterogeneous Defect Prediction (

ESEC/FSE 2015)
 
A Survey on Automatic Software Evolution Techniques
A Survey on Automatic Software Evolution TechniquesA Survey on Automatic Software Evolution Techniques
A Survey on Automatic Software Evolution Techniques
 
Crowd debugging (FSE 2015)
Crowd debugging (FSE 2015)Crowd debugging (FSE 2015)
Crowd debugging (FSE 2015)
 
Software Defect Prediction on Unlabeled Datasets
Software Defect Prediction on Unlabeled DatasetsSoftware Defect Prediction on Unlabeled Datasets
Software Defect Prediction on Unlabeled Datasets
 
Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)
Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)
Partitioning Composite Code Changes to Facilitate Code Review (MSR2015)
 
Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)
Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)
Automatically Generated Patches as Debugging Aids: A Human Study (FSE 2014)
 
How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...
How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...
How We Get There: A Context-Guided Search Strategy in Concolic Testing (FSE 2...
 
CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)
CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)
CrashLocator: Locating Crashing Faults Based on Crash Stacks (ISSTA 2014)
 
Source code comprehension on evolving software
Source code comprehension on evolving softwareSource code comprehension on evolving software
Source code comprehension on evolving software
 
A Survey on Dynamic Symbolic Execution for Automatic Test Generation
A Survey on  Dynamic Symbolic Execution  for Automatic Test GenerationA Survey on  Dynamic Symbolic Execution  for Automatic Test Generation
A Survey on Dynamic Symbolic Execution for Automatic Test Generation
 
Survey on Software Defect Prediction
Survey on Software Defect PredictionSurvey on Software Defect Prediction
Survey on Software Defect Prediction
 
MSR2014 opening
MSR2014 openingMSR2014 opening
MSR2014 opening
 
Personalized Defect Prediction
Personalized Defect PredictionPersonalized Defect Prediction
Personalized Defect Prediction
 
STAR: Stack Trace based Automatic Crash Reproduction
STAR: Stack Trace based Automatic Crash ReproductionSTAR: Stack Trace based Automatic Crash Reproduction
STAR: Stack Trace based Automatic Crash Reproduction
 
Transfer defect learning
Transfer defect learningTransfer defect learning
Transfer defect learning
 
Automatic patch generation learned from human written patches
Automatic patch generation learned from human written patchesAutomatic patch generation learned from human written patches
Automatic patch generation learned from human written patches
 
The Anatomy of Developer Social Networks
The Anatomy of Developer Social NetworksThe Anatomy of Developer Social Networks
The Anatomy of Developer Social Networks
 

Recently uploaded

8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitterShivangiSharma879191
 
Comparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization TechniquesComparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization Techniquesugginaramesh
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHC Sai Kiran
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort servicejennyeacort
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfROCENODodongVILLACER
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)dollysharma2066
 
computer application and construction management
computer application and construction managementcomputer application and construction management
computer application and construction managementMariconPadriquez1
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catcherssdickerson1
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxPoojaBan
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024Mark Billinghurst
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...121011101441
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile servicerehmti665
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncssuser2ae721
 
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxDecoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxJoão Esperancinha
 

Recently uploaded (20)

8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter
 
Comparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization TechniquesComparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization Techniques
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECH
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdf
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
 
computer application and construction management
computer application and construction managementcomputer application and construction management
computer application and construction management
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptx
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...
 
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile service
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
 
Design and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdfDesign and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdf
 
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxDecoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
 

Deep API Learning Generates Accurate API Usage Sequences from Natural Language Queries

  • 1. Deep API Learning Xiaodong GU Sunghun Kim The Hong Kong University of Science and Technology Hongyu Zhang Dongmei Zhang Microsoft Research
  • 2. Programming is hard • Unfamiliar problems • Unfamiliar APIs [Robillard,2009] DocumentBuilderFactory.newInstance ↓ DocumentBuilderFactory.newDocumentBuilder ↓ DocumentBuilder.parse “how to parse XML files?”
  • 3. Obtaining API usage sequences based on a query
  • 4. Obtaining API usage sequences based on a query The Proble m? Bag-of-words Assumption!Lack a deep understanding of the semantics of the query
  • 5. Limitations of IR-based Approaches “how to convert int to string” “how to convert string to int” “how to convert string to number” static public Integer str2Int(String str) { Integer result = null; try { result = Integer.parseInt(str); } catch (Exception e) { String negativeMode = ""; if(str.indexOf('-') != -1) negativeMode = "-"; str = str.replaceAll("-", "" ); result = Integer.parseInt(negativeMode + str); } return result; } Limit #1 Cannot identify semantically related words Limit #2 Cannot distinguish word ordering
  • 6. DeepAPI – Learning The Semantics “how to parse XML files” DocumentBuilderFactory:newInstance DocumentBuilderFactory:newDocumentBuilder DocumentBuilder:parse DNN – Embedding Model DNN – Language Model 1.1 2.3 0.4 ⋮ 5.0  Better query understanding (recognize semantically related words and word ordering)
  • 7. Background – RNN • Recurrent Neural Network Hidden Layer Output Layer Input Layer h1 h2 h3 parse xml file w1 w2 w3  Hidden layers are recurrently used for computation  This creates an internal state of the network to record dynamic temporal behavior ℎ 𝑡 = 𝑓 ℎ 𝑡−1, 𝑥𝑡
  • 8. Background – RNN Encoder-Decoder • A deep learning model for the sequence-to-sequence learning  Encoder: An RNN that encodes a sequence of words (query) into a vector: ℎ 𝑡 = 𝑓 ℎ 𝑡−1, 𝑥𝑡 𝑐 = ℎ 𝑇𝑥  Decoder: An RNN (language model) that sequentially generates a sequence of words (APIs) based on the (query) vector: Pr 𝑦 = 𝑡=1 𝑇 𝑝(𝑦𝑡|𝑦1, … 𝑦𝑡−1, 𝑐) Pr(𝑦𝑡|𝑦1, ⋯ 𝑦𝑡−1) = 𝑔(ℎ 𝑡, 𝑦𝑡−1, 𝑐) h 𝑡 = 𝑓 ℎ 𝑡−1, 𝑦𝑡−1, 𝑐  Training – minimize the cost function: 𝐿 𝜃 = 1 𝑁 𝑖=1 𝑁 𝑡=1 𝑇 𝑐𝑜𝑠𝑡𝑖𝑡 𝑐𝑜𝑠𝑡𝑖𝑡 = − log p 𝜃(𝑦𝑖𝑡|𝑥𝑖)
  • 9. RNN Encoder-Decoder Model for API Sequence Generation <START> h1 h2 h3 h4 y1 y2 y3 y4 y1 y2 y3 h1 h2 h3 x1 x2 x3 Read Text File c Encoder RNN Decoder RNN BuffereReader .new FileReader .new BuffereReader .read BuffereReader .close <EOS> BuffereReader .new FileReader .new BuffereReader .read BuffereReader .close h5 y5 y4Input Output Hidden
  • 10. Enhancing RNN Encoder-Decoder Model with API importance • Different APIs have different importance for a programming task File.new FileWriter.new Logger.log FileWriter.write • Weaken the unimportant APIs  IDF-based weighting 𝑤𝑖𝑑𝑓 𝑦𝑡 = log 𝑁 𝑛 𝑦𝑡  Regularized Cost Function cost 𝑖𝑡 = − log 𝑝 𝜃 𝑦𝑖𝑡 𝑥𝑖 − 𝝀𝒘𝒊𝒅𝒇 𝒚𝒊𝒕
  • 11. System Overview Code Corpus RNN Encoder- Decoder API-related User Query Suggested API sequences Natural Language Annotations Training Instances API sequences Training Offline Training
  • 12. Step1 – Preparing a Parallel Corpus InputStream.read OutputStream.write # copy a file from an inputstream to an outputstream URL.new URL.openConnection # open a url File.new File.exists # test file exists File.renameTo File.delete # rename a file StringBuffer.new StreanBuffer.reverse # reverse a string ⋮ # ⋮ API Sequences (Java) Annotations(English) <API Sequence, Annotation> pairs • Collect 442,928 Java projects from GitHub (2008-2014) • Parse source files into ASTs using Eclipse JDT • Extract an API sequence and an annotation for each method body (when Javadoc comment exists)
  • 13. Extracting API Usage Sequences Post-order traverse on each AST tree:  Constructor invocation: new C() => C.new  Method call: o.m() => C.m  Parameters: o1.m1(o2.m2(),o3.m3())=> C2.m2-C3.m3- C1.m1  A sequence of statements: stmt1;stmt2;,,,stmtt;=>s1-s2-…-st  Conditional statement: if(stmt1){stmt2;} else{stmt3;} =>s1-s2-s3  Loop statements: while(stmt1){stmt2;}=>s1-s2 1 … 2 BufferedReader reader = new BufferedReader(…); 4 while((line=reader.readLine())!=null) 5 … 6 reader.close; Body Statement While Statement Variable Declaration Constructor Invocation Method Invocation Block Statement Type Variable BufferedReader reader readLineVariable reader BufferedReader.new BufferedReader.readLine BufferedReader.close …
  • 14. Extracting Natural Language Annotations /*** * Copies bytes from a large (over 2GB) InputStream to an OutputStream. * This method uses the provided buffer, so there is no need to use a * BufferedInputStream. * @param input the InputStream to read from * . . . * @since 2.2 */ public static long copyLarge(final InputStream input, final OutputStream output, final byte[] buffer) throws IOException { long count = 0; int n; while (EOF != (n = input.read(buffer))) { output.write(buffer, 0, n); count += n; } return count; } API sequence: InputStream.read OutputStream.write Annotation: copies bytes from a large inputstream to an outputstream. MethodDefinition Javadoc Comment Body … … The first sentence of a documentation comment
  • 15. Step2 – Training RNN Encoder-Decoder Model • Data  7,519,907 <API Sequence, Annotation> pairs • Neural Network  Bi-GRU, 2 hidden layers, 1,000 hidden unites  Word Embedding: 120 • Training Algorithm  SGD+Adadelta  Batch size: 200 • Hardware:  Nvidia K20 GPU
  • 16. Evaluation • RQ1: How accurate is DeepAPI for generating API usage sequences? • RQ2: How accurate is DeepAPI under different parameter settings? • RQ3: Do the enhanced RNN Encoder-Decoder models improve the accuracy of DeepAPI?
  • 17. Automatic Evaluation:  Data set: 7,519,907 snippets with Javadoc comments Training set: 7,509,907 pairs Test Set: 10,000 pairs  Accuracy Measure BLEU – The hits of n-grams of a candidate sequence to the ground truth sequence. 𝐵𝐿𝐸𝑈 = 𝐵𝑃 ∙ exp 𝑛=1 𝑁 𝑤 𝑛 𝑙𝑜𝑔𝑝 𝑛 𝑝 𝑛 = # n−grams appear in the reference+1 # n−grams of candidate+1 𝐵𝑃 = 1 𝑖𝑓 𝑐 > 𝑟 𝑒(1−𝑟/𝑐) 𝑖𝑓 𝑐 ≤ 𝑟 RQ1: How accurate is DeepAPI for generating API usage sequences?
  • 18.  Comparison Methods • Code Search with Pattern Mining Code Search – Lucene Summarizing API patterns – UP-Miner [Wang, MSR’13] • SWIM [Raghothaman, ICSE’16] Query-to-API Mapping – Statistical Word Alignment Search API sequence using the bag of APIs – Information retrieval RQ1: How accurate is DeepAPI for generating API usage sequences?
  • 19. Human Evaluation:  30 API-related natural language queries: • 17 from Bing search logs • 13 longer queries and queries with semantic related words  Accuracy Metrics: • FRank: the rank of the first relevant result in the result list • Relevancy Ratio: relevancy ratio = # relevant results # all selected results RQ1: How accurate is DeepAPI for generating API usage sequences?
  • 20.
  • 21. RQ1: How accurate is DeepAPI for generating API usage sequences? • Examples DeepAPI  Distinguishing word ordering convert int to string => Integer.toString convert string to int => Integer.parseInt  Identify Semantically related words save an image to a file => File.new ImageIO.write write an image to a file=> File.new ImageIO.write  Understand longer queries copy a file and save it to your destination path play the audio clip at the specified absolute URL SWIM  Partially matched sequences generate md5 hashcode=> Object.hashCode  Project-specific results test file exists => File.new, File.exists, File.getName, File.new, File.delete, FileInputStream.new,…  Hard to understand longer queries copy a file and save it to your destination path
  • 22. RQ2 – Accuracy Under Different Parameter Settings BLEU scores under different number of hidden units and word dimensions
  • 23. RQ3 – Performance of the Enhanced RNN Encoder-Decoder Models • BLEU scores of different Models(%) • BLEU scores under different λ
  • 24. Conclusion Apply RNN Encoder-Decoder for generating API usage sequences for a given natural language query  Recognize semantically related words  Recognize word ordering Future Work  Explore the applications of this model to other problems.  Investigate the synthesis of sample code from the generated API sequences.

Editor's Notes

  1. Quality of API sequences such as API bugs. -> language model learn the probability from large-scale data, so they are just noises. DeepAPI only produce commonly used API sequences. Second, this is a threat to validity. Our future work will explore better training data The augment of the loss function will affect the original conditional probabilities? => It is just a regularization. The motivation example “convert int to string” is not convincing as google can distinguish? How the model distinguish words with different forms? For example, “write an image”->”writing an image”? An word embedding mechanism to identify similar words.. In real world, developers want API graph, instead of a sequence. =>No need for graph, sequences indicates difference usages, developers can synthesize their own graphical structure of APIs.
  2. General search engines are not designed for source code and could have many unrelated results such as discussions and programming experience. Besides, developers need to brows many web pages to check the results.
  3. Q: Bi-GRU will affect API sequence? Why reverse API sequences? => we just use Bi-GRU for the query. For API sequence, we use traditional GRU.