/selab-note

some notes in my graduate period including the summaries of paper, deep learning knowledge...

論文列表



Buse為程式可讀性分類模型之始祖,使用數個structural feature做為分類可讀性之依據,使用logistic regression訓練二元分類器,其搜集100份Java snippets之可讀性評分作為訓練用途。


Dorn使用傅立葉轉換的技巧幫助分類程式可讀性,其dataset大小為readability研究中最大,包含Python、Java、Cuda各120個snippets之人工標記評分。


提出幾個textual feature做為度量software readability的依據,再加上Buse提出的feature,訓練成程式可讀性的分類器,使用Java file作為訓練dataset


第一位使用深度學習訓練程式可讀性之研究,此篇研究使用CNN,並使用CheckStyle和PMD兩款tool自動標記訓練資料(25000筆Java file),為當前可讀性分類準確度最高,其使用token level、character level、和node level (abstract syntax tree)三種表示法做訓練。


將source code透過深度學習模型,學習function內之語句內容,並預測該function名稱,其應用可用於大範圍之source code分析研究,例如可幫助工程師檢測function取名是否恰當,亦可幫助defect prediction、code completion等研究。其深度學習模型使用兩層full connected layer和attention機制。


Javascript領域有許多人會將source code做minification,將變數名稱縮短為無意義之名稱,並且將空格縮排全刪除,以確保達到縮小容量之目的,亦或是達到隱藏程式邏輯之目的,這研究使用深度學習學習source code之邏輯,並將無意義名稱之變數還原成有意義之名稱,以方便閱讀。在此領域之研究,以有JSNice、JSNaughty等還原工具。


Code caption,使用深度學習之技術描述一段code在做什麼事情,使用RNN+attention+embedding,縮寫CODE-NN。Dataset使用C#和SQL,但大部分code都不完整,難以生成語法樹。


使用CNN+Attention預測function名稱


dataset使用[11]的dataset


Yao Wan[10]使用此論文之dataset


Source code summarization,縮寫DeepCom,比CODE-NN強,使用了自創的方法描述AST,因為傳統travesal approach(pre-order、post-order)還原的AST無法唯一。使用Seq2seq model,encoder和decoder都是LSTM,word embedding和hidden state都是512維,使用BLEU-4度量生成的句子。Dataset很多重複data。


Source code summarization,比DeepCom和CODE-NN強,dataset取自DeepCom。這世界上除了LSTM之外,還有Tree-LSTM,它不像LSTM是那種sequence順序的,而是以tree的結構訓練,看一下論文裡的figure 2(c)就能明白。Tree-LSTM又依照他cell裡計算方式的不同分兩種,一種是child-sum Tree-LSTM,另一種是N-ary Tree-LSTM。但由於傳統Tree-LSTM不能handle tree中任意數量的子節點,所以作者提出Tree-LSTM的改良版,Extended Tree-LSTM,也稱為multi-way Tree-LSTM。最後的BLEU4結果,我不明白為何可以那麼低,只有0.2左右,我猜是他code沒寫好,因為DeepCom跟我自己訓練都至少0.35。他在dataset的部分一樣沒有解決DeepCom的dataset有重複的data的問題。


待讀


待讀


待讀


用非deep learning的方法生成function的註解,包含“描述程式碼的行為”、“該function什麼樣的function呼叫”、“被何種statement使用(if、for、while)”


用非deep learning的方法生出function的數個關鍵字,幫助工程師了解該function的用途


用非deep learning的方法生出function的數個關鍵字,幫助工程師了解該function的用途,作者為[18]的作者,所以做法很類似


用非deep learning的方法描述function的行為,然而該方法使用的工具已經連結失效


主要針對一個project中的function,找出與該function具有耦合性的物件,並用一篇summary列出說明,如附檔圖一所示。其輸出的內容非描述function的行為,而是描述該function與哪些物件耦合


目的為針對一個function註解進行auto completion,對寫到一半的註解,進行自動生成,以加速工程師撰寫註解的速度。例如某個function的註解為“Train a named-entity extractor”,當工程師撰寫到”Train a named-“時,該論文的工具可根據程式碼自動完成”Train a named-entity“,而工程師再次撰寫至”Train a named-entity ext“時,該論文的工具可自動完成”Train a named-entity extractor“


針對Java class進行class分類,並根據他的分類和內容對class生成一句註解