選自arXiv,做者:Xinyun Chen、Chang Liu、Dawn Song,機器之心編譯,參與:Geek AI、張倩。程序員
程序翻譯是將一種語言的遺留代碼遷移到用另外一種語言構建的生態系統的重要工具。本文做者首次使用深度神經網絡來解決程序翻譯問題。他們觀察到程序翻譯是一個模塊化的過程並據此設計了一個樹到樹的神經網絡,將源樹轉換爲目標樹。與其餘神經翻譯模型相比,該方法始終比對比基線好 15 個百分點以上。此外,該方法的性能在實際項目的翻譯上比目前最早進的程序翻譯方法高 20 個百分點。
程序是構建計算機應用、IT 產業和數碼世界的主要工具。爲了方便程序員爲不一樣的應用開發程序,人們發明了各類編程語言。與此同時,當程序員想要將用不一樣語言編寫的程序組合在一塊兒時,這些編程語言的差別就爲這項工做帶來了困難。所以,實現不一樣編程語言之間的程序翻譯是十分必要的。算法
現在,爲了在不一樣的編程語言之間翻譯程序,程序員一般會本身親自研究兩種語言語法之間的對應關係,而後開發一個基於規則的翻譯器。然而,這個過程可能效率低下,並且十分容易出錯。在本文的工做中,咱們首次嘗試檢驗是否能夠利用深度神經網絡來自動構建一個程序翻譯器。編程
憑直覺看,程序翻譯問題在其形式上相似於天然語言翻譯問題。先前的一些工做提出將基於短語的統計機器翻譯(SMT)用於代碼遷移 [26,20,27]。最近,基於序列到序列(Seq2Seq)的模型等神經網絡方法在機器翻譯方面取得了當前最佳性能 [5,10,14,15,36]。在本文中,做者研究了使用神經機器翻譯方法來處理程序翻譯問題。然而,使基於序列到序列的模型失效的一個巨大挑戰是:與天然語言不一樣,編程語言有嚴格的語法,它不能容忍拼寫錯誤和語法錯誤。已經證實,當編程語言序列變得太長時 [21],基於 RNN 的序列生成器很難生成句法正確的程序。c#
在本文的工做中,咱們注意到,RNN 很難生成句法正確程序的主要緣由是它將兩個子任務——學習語法及對齊序列與語法——糾纏在了一塊兒。當這兩個任務能夠被分別處理時,模型的性能一般會提升。例如,Dong 等人使用了一個基於樹的解碼器來分離兩個任務 [12]。特別是 [12] 中的解碼器利用樹結構信息:(1)使用 LSTM 解碼器在解析樹的相同深度生成節點;(2)展開一個非葉子節點並在解析樹中生成它的子元素。這種方法已被證實能夠在一些語義解析任務上取得目前最好的結果。網絡
受到這個觀測結果的啓發,咱們假設能夠利用源解析樹和目標解析樹的結構信息來實現這種分離。受這種直覺的啓發,咱們提出樹到樹的神經網絡,將樹編碼器和樹解碼器結合在一塊兒。特別地,咱們注意到在程序翻譯問題中,源程序和目標程序都有各自的解析樹。此外,跨語言的編譯器一般遵循一個模塊化過程,將源樹中的各個子組件轉換爲相應的目標組件,而後使用它們組合成最終的目標樹。所以,咱們設計了一種樹到樹神經網絡的工做流程來配合這個過程:當解碼器展開一個非葉子節點時,它會使用注意力機制在源樹中定位對應的子樹,並利用子樹的信息來引導非葉子節點展開。特別須要注意的是,樹編碼器在這種狀況下有很大的做用,由於它能夠將子樹的全部信息聚合到它的根的嵌入中,這樣嵌入就能夠用來指導目標樹的非葉子節點擴展。架構
咱們根據上述直覺來設計樹到樹的轉換模型。一些現有的工做 [34,22] 提出了基於樹的自動編碼器體系架構。可是,在這些模型中,解碼器只能訪問表示源樹的單個隱藏向量,所以它們在翻譯任務中不夠高效。在咱們對模型的評價過程當中,咱們證實了在沒有注意力機制的狀況下,翻譯性能在大多數狀況下爲 0%,而使用注意機制能夠將性能提高到 90% 以上。論文「Towards neural machine translation with latent tree attention」提出了一種用於天然語言翻譯的基於樹的注意力編碼器-譯碼器架構,但其模型的性能甚至比注意力序列到序列的對比基線模型更差。一個主要緣由是,它們的注意力機制獨立地計算每一個節點的注意力權值,這並不能很好地捕獲解析樹的層次結構。在本文的工做中,做者設計了一個父親節點注意力反饋機制,該機制創建了不一樣節點之間的注意力映射依賴關係,做者證實了這種注意力機制進一步提升了樹到樹模型的性能,特別是當解析樹變大時(即得到了 20%−30% 的性能提高)。據咱們所知,這是目前針對翻譯任務提出的樹到樹神經網絡架構的首次成功展現。框架
爲了檢驗咱們的假設,咱們開發了兩個新的程序翻譯任務,並使用現有的 Java 到 c# 的程序翻譯工做 [26,27] 進行對比基準測試。首先,咱們在提出的兩個任務上,對咱們的方法和一些神經網絡方法進行了對比。實驗結果代表,咱們的樹到樹模型在程序翻譯任務上優於其餘最早進的神經網絡,在單詞翻譯的準確率上提高了 5%,在程序翻譯的準確率上提高了 15%。此外,咱們將咱們的方法與之前在 Java 到 c# 對比基準上的程序翻譯方法進行了比較,結果顯示,咱們的樹到樹模型在程序翻譯的準確率上比之前的技術領先 20%。這些結果代表,咱們的樹到樹模型在解決程序翻譯問題上是頗有發展前景的。同時,咱們認爲咱們提出的樹到樹神經網絡也能夠適用於其餘樹到樹的任務,這將是咱們將來的工做。編程語言
論文:Tree-to-tree Neural Networks for Program Translation模塊化
論文連接:https://arxiv.org/pdf/1802.03691.pdf函數
摘要:程序翻譯是將一種語言的遺留代碼遷移到用另外一種語言構建的生態系統的重要工具。在本文的工做中,咱們首次使用深度神經網絡來解決程序翻譯問題。咱們觀察到程序翻譯是一個模塊化的過程,在這個過程當中,源樹的子樹在每一步都被轉換成相應的目標子樹。爲了利用這種直覺,咱們設計了一個樹到樹的神經網絡,將源樹轉換爲目標樹。同時,咱們爲樹到樹模型開發了一種注意力機制,當解碼器在目標樹中展開一個非葉子節點時,注意力機制會在源樹中定位相應的子樹來引導解碼器展開。咱們將樹到樹模型的程序翻譯能力和一些目前最早進的方法進行比較,從而對其進行評價。與其餘神經翻譯模型相比,咱們的方法始終比對比基線好 15 個百分點以上。此外,咱們方法的性能在實際項目的翻譯上比之前最早進的程序翻譯方法提升了 20 個百分點。
定義 1(程序翻譯)
給定兩種編程語言 L_s 和 L_t,每種編程語言都有一組實例(p_k,T_k),其中 T_k 是這種語言對應的解析樹。咱們假設存在標準的翻譯結果 π,它能將 L_s 中的實例完美地映射到 L_t 的實例上。給定一個實例對(i_s,i_t)的數據集,咱們有 i_s ∈ L_s, i_t ∈ L_t 且 π(i_s) = i_t,本文研究的問題就是如何學習到一個函數 F 可以將每一個 i_s ∈ L_s 映射到 i_t = π(i_s) 上。
3.1 將程序翻譯看作一個樹到樹的翻譯問題
圖 1:將一個 CoffeeScript 程序翻譯成一個 JavaScript 程序。CoffeeScript 程序的子組件及其在 JavaScript 中相對應的翻譯結果被高亮顯示了出來。圖 1 展現了一個從 CoffeeScript 到 JavaScript 的翻譯示例。咱們注意到程序翻譯問題的一個有趣特性是,翻譯過程能夠是模塊化的。圖中高亮顯示了源樹中對應於 x=1 的子組件及其在目標樹中對應於 x=1 的翻譯結果;這種對應關係獨立於程序的其餘部分。當程序變得更長,這樣的狀況可能重複發生屢次時,序列到序列模型可能很難僅基於沒有結構信息的 token 序列來捕獲對應關係。所以,當將目標樹中的非葉子節點擴展爲子樹時,這樣的對應關係使得在源樹中定位引用的子樹成爲一種天然的解決方案。
3.2 樹到樹的神經網絡
在上述動機的啓發下,咱們設計了樹到樹的神經網絡,它遵循了一個編碼器-解碼器框架,將源樹編碼爲嵌入,並將嵌入解碼爲目標樹。爲了利用模塊化翻譯過程的直覺,解碼器在展開非葉子節點時採用了注意力機制來定位相應的源子樹。咱們在圖 2 中展現了樹到樹模型的工做流。
圖 2:樹到樹模型的工做流:箭頭表示計算流。藍色實箭頭表示指向左子節點/從左子節點流入的流,橙色虛線箭頭表示右子節點的流。從源樹根到目標樹根的黑色點箭頭表明 LSTM 狀態被複制。綠色框表示擴展節點,灰色框表示隊列中待擴展的節點。與擴展節點對應的源樹的子樹用黃色高亮顯示。右下角列出了預測擴展節點值的公式。
在本章中,做者在程序翻譯任務上評價了本文提出的樹到到樹神經網絡和其它一些對比基準方法。
表 1:在 CoffeeScript 和 JavaScript 之間進行翻譯的程序準確率。token 準確率見附錄 CNeurIPS 2018相關論文連接:
NeurIPS 2018提早看:生物學與學習算法
NeurIPS 2018,最佳論文也許就藏在這30篇oral論文中
NeurIPS 2018 | 騰訊AI Lab&北大提出基於隨機路徑積分的差分估計子非凸優化
NeurIPS 2018亮點選讀:深度推理學習中的圖網絡與關係表徵
NeurIPS 2018提早看:可視化神經網絡泛化能力
Google AI提出物體識別新方法:端到端發現同類物體最優3D關鍵點——NeurIPS 2018提早看
MIT等提出NS-VQA:結合深度學習與符號推理的視覺問答
畫個草圖生成2K高清視頻,這份效果驚豔研究值得你跑一跑
下一個GAN?OpenAI提出可逆生成模型Glow
CMU、NYU與FAIR共同提出GLoMo:遷移學習新範式
Quoc Le提出卷積網絡專屬正則化方法DropBlock
Edward2.2,一種能夠用TPU大規模訓練的機率編程
南大周志華等人提出無組織惡意攻擊檢測算法UMA
MIT新研究參透批歸一化原理
程序翻譯新突破:UC伯克利提出樹到樹的程序翻譯神經網絡
將RNN內存佔用縮小90%:多倫多大學提出可逆循環神經網絡
哪一種特徵分析法適合你的任務?Ian Goodfellow提出顯著性映射的可用性測試
行人重識別告別輔助姿式信息,商湯、中科大提出姿式無關的特徵提取GAN
做爲多目標優化的多任務學習:尋找帕累托最優解
Dropout可能要換了,Hinton等研究者提出神似剪枝的Targeted Dropout
利用Capsule重構過程,Hinton等人實現對抗樣本的自動檢測