Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Nikolaos Oikonomou

86 views

Published on

Extracting Semantics from Online Source Code for Software Reuse

Published in: Education
  • Be the first to comment

  • Be the first to like this

Nikolaos Oikonomou

  1. 1. Σημασιολογική Ανάλυση Κώδικα από Διαδικτυακές Πηγές με Σκοπό την Επαναχρησιμοποίηση Λογισμικού Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Οικονόμου Νικόλαος (Α.Ε.Μ. 7742) Επιβλέπων: Ανδρέας Συμεωνίδης, Καθηγητής Συνεπιβλέπων: Θεμιστοκλής Διαμαντόπουλος, Υποψήφιος Διδάκτορας Θεσσαλονίκη, 2 Ιουλίου 2018
  2. 2. Δομή Παρουσίασης • Εισαγωγή • Δομή/Υλοποίηση Συστήματος • Αξιολόγηση Συστήματος • Συμπεράσματα & Μελλοντική Εργασία • Επίδειξη Συστήματος (Video Demo) • Ερωτήσεις Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 2/35
  3. 3. Σκοπός της Διπλωματικής • Τα σημερινά έργα λογισμικού είναι πολύπλοκα και μεγάλα σε μέγεθος • Πλήθος επιλογών (APIs, βιβλιοθήκες, frameworks, πλατφόρμες κ.λπ.) • Ελλιπής ή δυσκολονόητη τεκμηρίωση Πρόβλημα: Δαπάνη χρόνου για την αναζήτηση και την κατανόηση χρήσιμων παραδειγμάτων κώδικα χρησιμοποιώντας τις συμβατικές μηχανές αναζήτησης. Σκοπός Διπλωματικής: Αυτοματοποίηση της διαδικασίας ανεύρεσης παραδειγμάτων κώδικα για ερωτήματα του προγραμματιστή, με τη χρήση ενός Συστήματος Προτάσεων στην Τεχνολογία Λογισμικού (Recommendation System in Software Engineering ή RSSE) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 3/35
  4. 4. RSSEs στη Βιβλιογραφία Αδυναμίες υπαρχόντων συστημάτων • Δε δέχονται ερωτήματα σε φυσική γλώσσα (περίπλοκη δομή ερωτημάτων) • Δε γίνεται εκμετάλλευση της διαθέσιμης πληροφορίας (κείμενο που συνοδεύει τμήματα κώδικα) • Αδύναμοι μηχανισμοί κατάταξης • Δεν προτείνονται έτοιμα τμήματα κώδικα (ακολουθίες APIs, συμπλήρωση κώδικα κ.λπ.) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 4/35
  5. 5. Αρχιτεκτονική του Συστήματος Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 5/35
  6. 6. Code Parser & Database Builder Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 6/35
  7. 7. Code Parser Δυνατότητες του parser • Επικύρωση συντακτικής ορθότητας • Εξαγωγή ακολουθίας στοιχείων (imports, comments, αντικείμενα, κλήσεις μεθόδων κ.λπ.) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 7/35
  8. 8. Database Builder – Μορφή Βάσης Δεδομένων Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 8/35 Επιπλέον Στοιχεία • Τμήματα κώδικα (Snippets) • Αριθμός τμημάτων κώδικα (SnippetCount) • Ονόματα Οντοτήτων (NamedEntities)
  9. 9. Database Builder – Εξαγωγή Ονομάτων Οντοτήτων Ταξινομητής CRF (Conditional Random Fields) Χαρακτηριστικά όρων • Ορθογραφικά (π.χ. προθέματα, καταλήξεις, ύπαρξη τελείας ή κάτω παύλας, κεφαλαίος πρώτος χαρακτήρας) • Χαρακτηριστικά Αναπαραστάσεων (π.χ. ομάδα Brown, ομάδα K-Means βάσει διανύσματος) Εξαγόμενες οντότητες • APIs (π.χ. toString(), ArrayList) • Platforms (π.χ. Android, Ubuntu, Windows) • Tools-Frameworks (π.χ. Maven, Weka, JProfiler) • Software Standards (π.χ. JSON, TCP, JDBC, jar) • Programming Languages (π.χ. Java, C#) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 9/35
  10. 10. Αρχιτεκτονική του Συστήματος – Corpus Builder Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 10/35
  11. 11. Corpus Builder – Μορφή Αναρτήσεων (Posts) • Μετατροπή html μορφής σε κείμενο • Εξαγωγή ακολουθιών από τα τμήματα κώδικα • Αξιολόγηση και επιλογή ποιοτικών αναρτήσεων • Τελική επεξεργασία κειμένου Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 11/35
  12. 12. Corpus Builder – Επιλογή Αναρτήσεων LSTM Ταξινομητής για αναρτήσεις με θόρυβο: • 1 layer LSTM • 1 layer CNN • Εκπαίδευση σε 2500 κατηγοριοποιημένα post • Accuracy > 92% στο σετ δεδομένων Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 12/35 Μετρικές χρήσιμων αναρτήσεων: • Μέγεθος γραμμής < 1000 χαρακτήρες • Λόγος # 𝜆𝜀𝜉𝜀𝜔𝜈 # 𝜎𝜂𝜇𝜀𝜄𝜔𝜈 𝜎𝜏𝜄𝜉𝜂𝜍 > 1.6 1η Παρατήρηση Αναρτήσεις με μεγάλο αριθμό σημείων στίξης περιέχουν μη χρήσιμες πληροφορίες. 2η Παρατήρηση Αναρτήσεις με debug logs και κώδικα σε άλλες γλώσσες (html, javascript κ.λπ.) αποτελούν θόρυβο για το corpus εκπαίδευσης.
  13. 13. Corpus Builder – Επεξεργασία Κειμένου Κατακερματισμός κειμένου με custom tokenizer • Διατήρηση όρων API • Διατήρηση τελεστών της Java (π.χ. ==, !=, >=) • Αφαίρεση σημείων στίξης • Αφαίρεση συμβόλων, αριθμών και URLs Κανονικοποίηση όρων κειμένου • Ανάπτυξη συντομογραφιών • Αντικατάσταση αριθμών με λέξεις Στόχοι • Ομοιομορφία κειμένου • Μείωση του συνόλου των όρων (λεξικό όρων) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 13/35 Original Tokenized Normalized 10 10 ten don’t do n’t do not that’s that ‘s that is U.K. U.K. U.K. properties/fields properties / fields properties fields Java/C++ Java / C++ Java C++ (active) ( active ) active java.io* java.io java.io System.out.println() System.out.println System.out.println
  14. 14. Corpus Builder – Χρήση RegEx Χρήση κανονικών εκφράσεων για την τελική επεξεργασία του κειμένου • Αφαίρεση σημείων στίξης που έχουν μείνει • Αφαίρεση κοινότυπων Java stack traces ή debug logs • Αφαίρεση μεγάλων ονομάτων πακέτων ή άλλων string • Συμπίεση κενών χαρακτήρων Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 14/35
  15. 15. Word Embeddings Builder Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 15/35
  16. 16. Word Embeddings Builder Γνωστά Μοντέλα Διανυσματικού Χώρου (Vector Space Models) • TF-IDF • Αραιά διανύσματα • Χρήση συχνότητας των όρων για τον υπολογισμό βαρών των όρων • Word2vec • Ρηχό νευρωνικό δίκτυο • Πυκνά διανύσματα n διαστάσεων • FastText • Επέκταση του word2vec • Χρήση character n-grams (model ⇨ ‘<mo’, ‘mod’, ‘mode’, ‘model’, ‘odel’, ‘del’, el>’) • Πυκνά διανύσματα n διαστάσεων Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 16/35
  17. 17. Index Builder Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 17/35
  18. 18. Index Builder – Πίνακας Διανυσματικών Αναπαραστάσεων των Αναρτήσεων Περιγραφή των αναρτήσεων (posts) με τρεις αναπαραστάσεις • Διανύσματα των τίτλων (TitleVectors) • Διανύσματα των σωμάτων (BodyVectors) • Διανύσματα των ακολουθιών των tags (TagVectors) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 18/35
  19. 19. Index Builder – Ευρετήριο Μεταδεδομένων των Αναρτήσεων Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 19/35 • Μορφή JSON • Πληροφορίες ανάρτησης • Σχετικές οντότητες • Τμήματα κώδικα
  20. 20. Search Engine & Presentation Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 20/35
  21. 21. Search Engine – Ερώτημα • Διατύπωση ερωτήματος σε φυσική γλώσσα • Αφαίρεση σημείων στίξης • Κανονικοποίηση ερωτήματος (όπως πριν) • Δημιουργία διανυσματικής αναπαράστασης ερωτήματος (FastText ή TF-IDF) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 21/35
  22. 22. Search Engine – Μηχανισμός Κατάταξης Σενάριο μεμονομένου μοντέλου (FastText ή TF-IDF) • Κατάταξη με βάση την ομοιότητα συνημιτόνου • Σύγκριση διανυσμάτων ερωτήματος και αναρτήσεων (Πίνακα Διανυσματικών Αναπαραστάσεων) • Κάθε ανάρτηση έχει τρεις διανυσματικές αναπαραστάσεις (Τίτλος, Σώμα, Tags) • Υπολογισμός ομοιοτήτων ως: 𝑠𝑖𝑚(𝑞, 𝑑) = 𝑖=1 3 𝑤𝑖 𝑐𝑜𝑠𝑠𝑖𝑚(𝑄, 𝑓𝑖) Σενάριο υβριδικού μοντέλου (FastText και TF-IDF) • Συνδυασμός ομοιοτήτων των επιμέρους μοντέλων (FastText, TF-IDF) • Υπολογισμός ομοιοτήτων ως: ℎ𝑦𝑏𝑟𝑖𝑑_𝑠𝑖𝑚(𝑞, 𝑑) = 𝑤𝑓𝑡 · 𝑓𝑡_𝑠𝑖𝑚(𝑞, 𝑑) + 𝑤𝑡𝑓𝑖𝑑𝑓 · 𝑡𝑓𝑖𝑑𝑓_𝑠𝑖𝑚(𝑞, 𝑑) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 22/35
  23. 23. Search Engine – Presenter • Διεπαφή τύπου Command Line Input (CLI) • Παρουσίαση των παραδειγμάτων κώδικα μέσω της διεπαφής • Παρουσίαση επιπλέον πληροφοριών από τον πίνακα μεταδεδομένων • σύνδεσμος της ανάρτησης-απάντησης (απ’ όπου έγινε η εξαγωγή του κώδικα) • τίτλος της ανάρτησης-ερώτησης • βαθμολογία της ανάρτησης • οντότητες που περιγράφουν το ερώτημα Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 23/35
  24. 24. Αξιολόγηση Συστήματος – Πείραμα 1ο • Συλλογή ρεαλιστικών ερωτημάτων για την εκτέλεση του πρώτου πειράματος • Χρήση ερωτημάτων ίδιου περιεχομένου με διαφορετική διατύπωση • Ομαδοποίηση ερωτημάτων βάσει περιεχομένου Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 24/35 Index Query Group 1 How to read a comma separated file? 1 2 How to read a CSV file? 1 3 How to read a delimited file? 1 4 How to read input from console? 2 5 How to read input from terminal? 2 6 How to read input from command prompt? 2 7 How to play an mp3 file? 3 8 How to play an audio file? 3 9 How to compare dates? 4 10 How to compare time strings? 4 11 How to dynamically load a class? 5 12 How to load a jar/class at runtime? 5 13 How to calculate checksums for files? 6 14 How to calculate MD5 checksum for files? 6 15 How to iterate through a hashmap? 7 16 How to loop over a hashmap? 7 17 How to split a string? 8 18 How to handle an exception? 9
  25. 25. Πείραμα 1ο – Ποιοτική Αξιολόγηση • Μετρικές όπως το precision και το recall δεν είναι εύκολα εφαρμόσιμες. • Θέλουμε να λαμβάνεται υπόψιν και η σειρά με την οποία εμφανίζονται τα χρήσιμα αποτελέσματα. Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 25/35 Average Precision Το Average Precision ισούται με: 𝐴𝑣𝑒𝑃 = 0 1 𝑝(𝑟)𝑑𝑟 = 𝑘=1 𝑛 𝑃(𝑘)𝛥𝑟(𝑘) = 𝑘=1 𝑛 (𝑃(𝑘) · 𝑟𝑒𝑙(𝑘)) 𝑛𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑟𝑒𝑙𝑒𝑣𝑎𝑛𝑡 𝑑𝑜𝑐𝑢𝑚𝑒𝑛𝑡𝑠 Mean Average Precision Αν Q το πλήθος των ερωτημάτων, τότε το Mean Average Precision ισούται με: 𝑀𝐴𝑃 = 𝑞=1 𝑄 𝐴𝑣𝑒𝑃(𝑞) 𝑄 Mean Search Length Ως μήκος αναζήτησης SL ορίζεται το πλήθος των μη σχετικών αποτελεσμάτων που εμφανίζονται στο χρήστη μέχρι να εμφανιστούν N σχετικά. Για ένα πλήθος ερωτημάτων Q το μέσο μήκος αναζήτησης MSL ισούται με: 𝑀𝑆𝐿 = 𝑞=1 𝑄 𝑆𝐿(𝑞) 𝑄
  26. 26. Πείραμα 1ο – Average Precision Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 26/35
  27. 27. Πείραμα 1ο – Mean Average Precision (MAP) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 27/35
  28. 28. Πείραμα 1ο – Mean Search Length (MSL) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 28/35
  29. 29. Πείραμα 2ο – Ποσοτική Αξιολόγηση με PostLinks PostLinks ή Σύνδεσμοι Αναρτήσεων • Ζεύγη αναγνωριστικών αναρτήσεων (PostId – PostId) • Τύπος PostLink (συνδεδεμένη ή διπλότυπη ανάρτηση) • Τα PostLinks υποδεικνύουν σχετικές αναρτήσεις Βήματα Πειράματος 1. Περιορισμός του σετ δεδομένων • Αναρτήσεις με τουλάχιστον ένα snippet • Αναρτήσεις με σκορ > -3 • Αναρτήσεις με AcceptedAnswer 2. Χρήση των τίτλων σαν ερωτήματα 3. Για κάθε ερώτημα/τίτλο γίνεται λήψη των πρώτων 20 αποτελεσμάτων από το σύστημα 4. Για κάθε ερώτημα/τίτλο γίνεται σχηματισμός όλων των ζευγών αναγνωριστικών (ερώτημα – αποτέλεσμα) 5. Υπολογισμός ποσοστού των ζευγών που βρίσκονται στη λίστα των PostLinks Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 28/35
  30. 30. Πείραμα 2ο – PostLinks Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 30/35
  31. 31. Συμπεράσματα • Εξοικονόμηση χρόνου χρησιμοποιώντας το RSSE και παρουσιάζοντας παραδείγματα κώδικα με ορθή σύνταξη • Η καλή προεπεξεργασία του κειμένου παράγει ποιοτικότερα μοντέλα διανυσματικού χώρου (VSMs) • Η χρήση του μοντέλου FastText εξάγει χρήσιμη σημασιολογική πληροφορία • Ο συνδυασμός των δύο μοντέλων (TF-IDF, FastText) καταφέρνει καλύτερα αποτελέσματα Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 31/35
  32. 32. Μελλοντική Εργασία • Γραφικό Περιβάλλον (GUI) σε ιστοσελίδα • Ρύθμιση βαρών του μηχανισμού κατάταξης • Συμπίεση ευρετηρίων/πινάκων αναζήτησης διανυσμάτων • Υποστήριξη και άλλων γλωσσών προγραμματισμού (C/C++, Python, Scala) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 32/35
  33. 33. Παρουσίαση Συστήματος (Video Demo) Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 33/35
  34. 34. Ευχαριστίες Οφείλω ένα μεγάλο ευχαριστώ: • στον κ. Ανδρέα Συμεωνίδη για την ευκαιρία που μου έδωσε να ασχοληθώ με το αντικείμενο της διπλωματικής. • στο Θέμη Διαμαντόπουλο για τη συνεχή στήριξη και καθοδήγηση που μου παρείχε. • σε εσάς για την προσοχή σας. Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 34/35
  35. 35. Ερωτήσεις Θεσσαλονίκη, Ιούλιος 2018 StackSearch RSSE 35/35

×