Kod ayrıca önceden eğitilebilir.Microsoft Harbin Teknoloji Enstitüsü yakın zamanda doğal programlama iki dilli işlemeyi destekleyen CodeBERT modelini önerdi

Kısa bir süre önce, Microsoft ve Harbin Teknoloji Enstitüsü ortaklaşa arxiv üzerine "CodeBERT: Programlama ve Doğal Diller için Önceden Eğitilmiş Bir Model" başlıklı bir makale yayınladılar. , Go, Ruby ve diğer programlama dilleri kod arama ve oluşturma görevleri.

Makaleye bağlantı: https://arxiv.org/pdf/2002.08155.pdf

Bu makale, "CodeBERT" adlı çift modlu bir ön eğitim modeli önermektedir Yazara göre, bu aynı zamanda bilinen ilk büyük ölçekli NL-PL (Doğal Dil-Programlama Dili) ön eğitim modelidir.

Önceden eğitilmiş model, doğal dilde kod arama, otomatik olarak kod oluşturma vb. Gibi yaygın NL-PL sorunlarıyla başa çıkabilir. Doğal dil kodu araması olarak adlandırılan, çözülmesi gereken sorun, yaygın olarak kullanılan arama motorlarımıza benzer olan doğal dil sorgusu yoluyla gerekli kod bloğunun nasıl bulunacağıdır (gerekli web sayfasını doğal dil sorgusu yoluyla bulun).

Aslında, Microsoft Bing 2018'de benzer bir işlevi başlattı. Arama kutusuna "R'nin bir işlevini kullanarak büyük / küçük harf dönüştür" ifadesini girmek, bir parça R kodu döndürecektir.

(Lei Feng Ağı)

Doğal dilde kod araması için, bu makalede yazar, CodeSearchNet derlemesinde CodeBERT'i önceden eğitmiş ve ince ayarını yapmış. Bu, 6 ortak kod dilini (Ruby, JavaScript, Go, Python, Java, PHP) külliyat. Aşağıdaki şekilde gösterildiği gibi, doğal dil kodu arama görevinde SOTA sonuçları elde ettiler:

Öte yandan, kod dokümantasyonu oluşturma görevi, gelecekte programcıların iş yükünü büyük ölçüde azaltabilecek umut verici bir araştırma yönüdür. Aşağıda gösterildiği gibi,

CodeBERT, bu görev için, özellikle önemli ölçüde geliştirilmiş önceki ROBERTa modeline kıyasla temelde SOTA sonuçlarına ulaşmıştır. CodeBERT'in parlak bir noktaya sahip olduğundan bahsetmeye değer. Yalnızca Ruby, JavaScript, Go, Python, Java, PHP ve diğer kod dillerinde önceden eğitilmiş olmasına rağmen, önceden eğitilmiş model diğer kod dili görevlerine genelleştirilebilir. Açık, örneğin C # dili.

1. Arkaplan

İki yönlü bir Transformatör kodlayıcı olarak, BERT'nin eğitim öncesi yöntemlerdeki yeniliği endüstri ve akademi tarafından derinden sevilir, ancak ELMo, GPT vb. Gibi diğer büyük ölçekli ön eğitim modelleri çeşitli NLP görevlerinde SOTA'yı iyileştirmeyi başardı.

Ancak yukarıda bahsedilen modeller temel olarak, maskeleme dili modellemesi ve etiketlenmemiş metinden bağlam temsilini öğrenme gibi doğal dil işlemeye yöneliktir. Bert'in önceki uygulama senaryolarıyla karşılaştırıldığında, yazar farklı bir yaklaşım benimsedi ve NLP görevlerini ve Python ve Java gibi programlama dillerini hesaba katan çift modlu bir ön eğitim modeli geliştirdi.

CodeBERT, özellikle, doğal dil ve programlama dili arasındaki anlamsal bağlantıyı yakalar ve doğal dil kodu arama ve kod oluşturma gibi bir dizi oluşturma görevi gibi NL-PL anlama görevlerini destekleyebilir.

(Lei Feng Ağı)

Kırmızı kutunun NL metni ve kara kutunun PL metni olduğu bir NL-PL çifti. Nl-PL çiftinin iki modlu örneklerini ve çok sayıda mevcut tek modlu kodu kullanmak için, yazar, standart maske dili modellemesi ve değiştirilebilir simge saptama dahil olmak üzere CodeBERT'i eğitmek için bir karma hedef işlevi kullandı.

Spesifik eğitim sürecinde, yazar modeli çok dilli BERT ortamında eğitmek için altı programlama dili kullandı. Öncelikle CodeBERT'in model çerçevesine bakalım.

İkincisi, çerçeve

Modelin genel mimarisinde CodeBERT, BERT ve Roberta'nın fikirlerinden sapmadı. Çoğu çalışmaya benzer şekilde, yazar çok katmanlı bir çift yönlü Transformatör kullanıyor. Daha spesifik olmak gerekirse, yazarın kullandığı model mimarisi, Roberta-base ile tamamen aynıdır, yani 12 katman vardır, her biri 12 öz dikkat kafasına sahiptir, her bir kafanın boyutu 64, gizli boyutu 768'dir ve ileri besleme katmanının içi gizlidir. Boyut 3072'dir.

Toplam model parametresi sayısı 125M'dir. Eğitim öncesi aşamada, biri doğal dil metni, diğeri programlama dili kodu olmak üzere toplam iki bölüm girdi tasarlanır. Doğal dildeki metinle ilgili olarak, onu bir dizi kelime olarak ele alın ve WordPiece'e bölün. Programlama kodu için, bunu bir belirteç dizisi olarak düşünün. CodeBERT'in çıktısı ayrıca iki bölüm içerir: 1. Toplu dizi gösterimi 2. Etiketli bağlam vektörü (bağlamsal vektör).

CodeBERT istatistiksel eğitim için kullanılan veri seti, Husain ve diğerleri tarafından 2019 yılında sağlanan en son veri setidir. 2,1 M çift modlu veri ve 6,4 M tek kodlu verileri içerir. Çift modlu kod verileri, doğal dil-kod çiftlerini ifade eder. Paralel veri, tek kod "eşleşmemiş" verileri ifade eder. Diğer bazı veriler, açık kaynak Nonfork GitHub deposundan gelir. Bu verilerin işlenmesi, filtrelemek için bazı kısıtlamalar ve kurallar benimser.

(Lei Feng Ağı)

Değiştirilebilir simge saptama hedeflerinin gösterimi Model eğitiminin tasarımında, esas olarak iki hedef içerir, biri maske dili modellemesi ve diğeri değiştirilebilir belirteç algılamasıdır. İkinci hedefte, yazar ayrıca büyük miktarda tek modlu kod verisi kullanır.

Hedef 1: Maskeleme dili modellemesi. Giriş olarak NL-PL çiftini alın, maskelemek için NL ve PL için rastgele pozisyon seçin ve ardından özel bir maske Jetonuyla değiştirin. Dil modellemesini maskeleme görevinin, maskelenen orijinal Jetonu tahmin etmek olduğunu unutmayın.

Hedef 2: Jeton algılamayı değiştirin. Bu bölümde, rastgele maskelenmiş pozisyonlar için makul alternatifler oluşturmak için kullanılan NL üreteci ve PL üreteci olmak üzere iki veri oluşturucu bulunmaktadır.

Ek olarak, bir kelimenin orijinal kelime olup olmadığını tespit etmek için kullanılan bir öğrenme üreteci de vardır. Bunun arkasındaki ilke bir ikili sınıflandırıcıdır. Buradaki fark, eğer jeneratör doğru jetonu üretirse, Token etiketi "gerçek "Sahte" yerine.

Öğrencinin kayıp işlevini ayarladıktan sonra, kayıp işlevi aşağıdaki şekilde optimize edilir:

Model eğitiminin son adımı model ince ayarlamadır. Spesifik işlem, NL-PL görevinde farklı CodeBERT ayarları kullanmaktır. Örneğin, doğal dil kodu aramasında, eğitim öncesi aşamadaki ile aynı giriş yöntemi kullanılır. Koddan metne oluşturmada, kodlayıcı-kod çözücü çerçevesi kullanılır ve CodeBERT, üretilen modelin kodlayıcısını başlatmak için kullanılır.

Üç, deney

Yazar dört deney yaptı: 1) CodeBERT'i doğal dil kodu arama görevlerine uygulayın ve bunları geleneksel yöntemlerle karşılaştırın; 2) CodeBERT'in eğitim öncesi aşamada öğrendiği bilgileri araştırmak için NL-PL Problama deneyleri yapın ; 3) CodeBERT'i oluşturma görevine uygulayın; 4) CodeBERT ön eğitim modelinin genelleme yeteneğini araştırın ve etkinin çok iyi olduğunu bulun.

1. Doğal dil kodu araması

Giriş olarak bir doğal dil parçası verildiğinde, kod aramanın amacı, bir dizi koddan anlamsal olarak en alakalı kodu bulmaktır. Karşılaştırma amacıyla yazar, Husain ve diğerleri tarafından 2019'da eğitim için yayınlanan CodeSearchNet derlemesini seçti. Bu külliyat çerçevesi, 6 yaygın programlama dilini (Python, JavaScript, Java, Ruby, PHP, Go) içeren aşağıdaki şekilde gösterilmektedir.

Eğitim öncesi aşamada, yazar ilk olarak her dilin veri seti üzerinde eğitim aldı. Veri seti aşağıdaki şekilde bölünmüştür:

İnce ayar aşamasında, öğrenme oranını 1e-5'e, parti boyutunu 64'e, maksimum sıra uzunluğunu 200'e ve maksimum ince ayar periyodunu 8'e ayarlayın ve parametreleri güncellemek için Adam'ı kullanın ve geliştirme setinden en iyi performans gösteren modeli seçin ve kullanın Test seti üzerinde değerlendirin. Sonuçlar aşağıdaki tabloda gösterilmektedir:

Önceki SOTA modeli ROBERTa ile karşılaştırıldığında, performans önemli ölçüde iyileştirildi.

2. NL-PL Problama

Deneyin bu kısmı, temel olarak BERT Kodunun parametreleri değiştirmeden ne tür bilgiler öğrenebileceğini inceler. Şu anda akademik çevrede NL-PLProbing üzerine çalışma yok, bu nedenle deneyin bu bölümünde yazar veri kümesini kendisi oluşturdu. Bir NL-PL çifti verildiğinde, NL-PL Probing'in amacı modelin doğru tahmin yeteneğini test etmektir. Model karşılaştırma sonuçları aşağıdaki şekilde gösterilmektedir:

Yukarıdaki tablo, doğru tahmin edilen örneklerin sayısının toplam örnek sayısına oranını gösterir. CodeBERT'in temelde her dilin tahmininde en yüksek puanları aldığı görülmektedir. Ancak, farklı programlama dillerinin veri setleri çok dengesiz olduğu için, biriken verileri karşılaştırma için kullanmak daha uygundur.PL ve NL araştırmasında CodeBERT sonuçları RoBERTa'nınkinden% 10-20 daha yüksektir. Belirli bir durumla da karşılaştırılabilir. Aşağıdaki desen örnekleri, NL ve PL'deki "min" i kapsar:

Yukarıdaki resim RoBERTa ve CodeBert'in tahmin olasılığını göstermektedir.Sonuçlardan, CodeBERT'in NL'de doğru tahmin oranı% 60.6, PL'de ise doğrudan% 99.999 kadar yüksektir.

3. Kod belgeleri oluşturma

Bu bölüm, koddan belgeye üretim problemini inceler ve altı programlama dilinde Code Search Net Corpus'taki oluşturma görevinin sonuçlarını inceler. Ek olarak, CodeBERT'in NL'ye kod üretme görevindeki etkinliğini kanıtlamak için, yazar kodlayıcı olarak çeşitli önceden eğitilmiş modeller kullanır ve hiperparametrelerin tutarlılığını korur. Deneysel sonuçlar aşağıdaki gibidir:

Programlama dili üzerine önceden eğitilmiş modelin performansı ROBERTa'nınkinden daha iyidir

4. Genelleme yeteneği

Öyleyse, Python, JavaScript, Java, Ruby, PHP ve Go'da yapılmış önceden eğitilmiş modeller diğer programlama dillerine uygulanabilir mi? Yazar, önceden eğitilmiş CodeBERT modelini aldı ve C # dilinde test etti. Yazar, CodeSearchNet derlemesinden birkaç büyüklük sırası olan Stack Overflow tarafından otomatik olarak toplanan 66015 soru ve cevap çiftini içeren bir veri kümesi olan Codenn veri kümesini seçti. Modeli güvenilir bir şekilde değerlendirmek için, yazar, test setindeki kod parçaları için iki ek başlık sağlayarak test setini manuel olarak genişletti. Model değerlendirme standardı pürüzsüz bir BLEU-4 puanı kullanır ve değerlendirme sonuçları aşağıdaki gibidir:

Bu sonuçtan, CodeBERT'in diğer programlama dillerine RoBERTa'dan daha iyi genişletilebileceği görülmektedir. Bununla birlikte, modelin etkisinin code2seq'in etkisinden biraz daha düşük olduğuna dikkat çekmek önemlidir.Yazar, Code2seq'in kendi soyut sözdizimi ağacı AST'de birleşik yolu kullanırken CodeBERT'in girdi olarak yalnızca orijinal kodu kullanması olabileceğine inanmaktadır.

Yazar, AST'nin ağaç yapısını belirli bir sırayla geçerek CodeBert'i de eğitse de, üretim görevinin iyileştirilmesini sağlamaz. Bu sonuç codebert'i iyileştirmek için AST'nin birleştirilmesinin potansiyel bir yön olduğu anlamına gelir.

Dört, özet

Daha önce belirtildiği gibi, Microsoft'un Bing'i 2018'de kod arama işlevini başlattı. Gelişmiş kaliteli hizmetler sağlamak için eğitim öncesi temelli kod işlevlerinin yakında Bing ürünlerinde uygulanması beklenebilir. Aynı zamanda, daha fazla araştırmacının bu çalışmayı hızlı bir şekilde takip edebilmesi için bu çalışmanın yakın gelecekte açık kaynaklı olmasını da bekleyebiliriz.

Bu çalışmanın önemini özetlemek için birkaç cümle kullanıyoruz:

1. Yazara göre, CodeBERT aynı zamanda şimdiye kadar bilinen ilk büyük ölçekli NL-PL (Doğal Dil-Programlama Dili) ön eğitim modelidir;

2. Bu makale, çift modlu veri NL-PL kullanımını destekleyebilen ve tek modlu verilere (örneğin, doğal dil metni olmadan programlama kodu) kolayca uygulanabilen bir karma öğrenme hedefi önermektedir;

3. CodeBERT, hem doğal dilde kod arama hem de kod belgesi oluşturma görevlerinde SOTA performansı elde etmiştir.Ayrıca, yazar ayrıca deneyde, gelecekteki takibi kolaylaştıran NL-PL ön eğitim modelinin algılama yeteneğini incelemek için bir veri kümesi oluşturmuştur. Araştırmacıların.

İş ve üretimin yeniden başlamasını teşvik edin! Chongqing'deki bu şirketlerin temel önleme ve kontrol "taktiklerine" bakın
önceki
Guangdong Aid Wuhan Medical Team'in genel lideri: Aiding Han aynı zamanda Guangdong için bir testtir.
Sonraki
Aşkı ayırmadan virüsü izole edin! Nanshan Sağlık Denetleme Cephesinin Misyon ve Sorumlulukları
iyi haberler! Hunan ve Fujian'daki birçok hasta tedavi edildi ve taburcu edildi
Shenzhou Jingdong, kavun yığınları yiyerek bir "peri savaşı" düzenledi: kazanmayı veya kaybetmeyi çevrimiçi beklemek
Salgın durumda, Henanın "Hava İpek Yolu" kargosu yelken açmaya devam ediyor
Today Paper | TRANSFORMER yapısı; görüntüden görüntüye çeviri; eksik açıklamalı hedef algılama çözümü; GAN su altı görüntü rengi düzeltme, vb.
Çip endüstrisinin bugünü ve geleceği olan ISSCC2020'de yonga ve kuantum hesaplama
Öncülere saygı! Kopyala ve yapıştır kullanıcı arayüzünün babası, Java'nın ve İnternetin yaratıcısı vefat etti
Şarj devrimi burada! GaN endüstrisi patladı: Apple, Samsung, Huawei ve Xiaomi oyuna girdi
Illustration Yeni koronavirüs nükleik asit testi nasıl yapılır? Uzmanlar sizin için cevap veriyor
Dört adımda verimli bir makine öğrenimi ekibi oluşturun
Salgın önleme yolunda yenilik yapın ve Xili Caddesi'ndeki bu şirketin bunu nasıl yaptığını görün
China Chengxin International: Yeni taç salgınının ilaç endüstrisi üzerindeki etkisi
To Top