首頁>技術>

引用

LeClair, Alexander & Jiang, Siyuan & McMillan, Collin. (2019). A Neural Model for Generating Natural Language Summaries of Program Subroutines.

介紹

原始碼的“摘要”是對該部分原始碼的簡要自然語言描述。摘要最常見的目標之一是程式中的子程式。例如自動格式化文件中廣泛使用的對 Java 方法的簡要描述,如 JavaDocs。這些描述之所以有用,是因為它們可以幫助程式設計師理解子程式在程式中所扮演的角色。實證研究一再表明,理解子程式在程式中的角色是理解程式整體行為的關鍵步驟。即使是子程式的簡短摘要,例如“返回玩家的擊球點數”,也能告訴程式設計師很多關於該子程式和程式整體的資訊。

對程式碼自然語言描述的生成研究被稱為“原始碼摘要”,大量的努力集中在子程式摘要的生成上。基於內容選擇和句子模板,甚至是模仿人類眼球運動等有點偏僻的解決方法都取得了重大進展。然而,與許多研究領域一樣,這些技術在很大程度上已經讓位於基於大資料輸入的人工智慧。

生成子程式自然語言摘要的神經模型

絕大多數進入基於人工智慧的程式碼摘要的努力的靈感來源於自然語言處理研究界的神經機器翻譯(NMT)。NMT 系統將一種自然語言轉換為另一種自然語言。它通常被認為是序列到序列(seq2seq)的學習。在軟體工程研究中,機器翻譯可以被認為是原始碼摘要的一個隱喻:子程式主體中的單詞和標記是一個序列,而所需的自然語言摘要是目標序列。NMT 在各種應用中都顯示出了強大的優勢。

然而,幾乎所有原始碼摘要技術的致命弱點是依賴程式設計師以識別符號名稱或註釋的形式編寫了高質量的內部文件。為了生成一個有意義的摘要,必須在子程式的主體中觀察到有意義的詞語。在傳統的 NMT 中,這是可以接受的,因為一個自然語言輸入句子一定會有與輸出目標句子相關的詞。但在軟體中,程式碼中的詞實際上與該程式碼的行為無關。一個子程式的行為是由程式語言的關鍵字和標記的結構決定的,這些關鍵字和標記定義了控制流、資料流等。

在本文中,我們提出了一個用於生成子程式摘要的神經模型。我們的模型結合了兩種型別的原始碼資訊。1)將程式碼視為文字的詞表示法,2)抽象語法樹(AST)表示法。與早期的方法相比,我們的模型的一個突出因素是我們將這兩種表示法分開處理。以前的技術透過用 AST 資訊來註釋詞表示法,但最終註釋後的表示法是作為一個單一的序列透過一個標準的 seq2seq 模型傳送的。相比之下,我們的模型接受兩個輸入,一個是詞表示,一個是 AST。其優點是我們能夠以不同的方式處理每個輸入,這增加了我們方法的靈活性。

從本質上講,我們提出的神經模型涉及兩個單方向門控遞迴單元(GRU)層:一個用來處理原始碼中的單詞,一個用來處理 AST。我們修改了 Hu 等人的 SBT AST 扁平化程式來表示 AST。然後,我們使用一個注意機制將輸出摘要句中的詞參加到程式碼詞表示中的詞中,並使用一個單獨的注意機制將摘要詞參加到 AST 的部分。我們將每個注意機制的向量進行串聯,建立一個上下文向量。最後,我們按照 seq2seq 模型中的典型做法,從上下文向量中每次預測一個詞的摘要。

評估與結果

我們分兩個階段來評估我們的技術。首先,我們從 Sourcerer 資源庫中收集了超過 5100 萬個 Java 方法,並對它們進行預處理,形成了一個由約 210 萬個方法組成的資料集,其中包含合適的 JavaDoc 摘要註釋。我們將資料集分為訓練/驗證/測試集,並執行一組測試,將我們模型的結果與三個競爭性基線進行比較。我們稱之為標準實驗,因為它符合 SE 和 NLP 場所的常見做法。

下方表格內是每個方法和資料集的 BLEU 1-4 得分和 BLEU 綜合得分。上方的示圖只描述了綜合得分。我們觀察到 attendgru 和 ast-attendgru 在標準集上的 BLEU 得分表現相同,不過我們後續用合集解碼器對其進行了改進。

其次,為了評估我們的模型在沒有來自原始碼的詞的情況下的侷限性,我們重複標準實驗,只使用每個 Java 方法的 AST--在這項研究中,我們假設沒有程式碼詞,如混淆程式碼、寫得不好的程式碼,或者只有位元組碼的情況。這種 "沒有程式碼詞 "的實驗模擬了 SE 領域特有的情況,正如我們將展示的那樣,它比程式設計師提供有用關鍵字的 NMT 標準應用要困難得多。我們稱之為挑戰實驗。

我們的結果: 1)在標準實驗中,我們的模型和競爭性的 NLP 基線提供了相當的效能,但具有正交的預測,這意味著它們是合集解碼的良好候選。合集提供了 20.9 BLEU 的最先進效能(比最接近的基線提高了 8%)。2)在挑戰實驗中,我們的模型實現了 9.5 BLEU,而其他任何基線都是 0。這是在原始碼摘要方面邁出的重要一步,因為它不需要有意義的程式碼詞。

總結

本文提出了一個用於生成子程式的自然語言描述的神經模型。本文實現了該模型,並在一個大型的 Java 方法資料集上對其進行了評估。本文證明了模型 ast-attendgru 在 BLEU 評分方面優於 SE 文獻中的基線,並且略微領先於 NLP 文獻中基線。本文還證明了本文中的方法和現成的 NLP 方法的合集優於所有其他測試配置。本文的結論是預設的 NMT 系統在提供了良好的內部文件的情況下工作得很好,但在沒有提供文件的情況下就不那麼好了,而 ast-attendgru 在這些情況下提供了幫助。

致謝

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • CAN匯流排報文淺析