İçbükey tapınaktan Xiaocha
Qubit Raporu | Genel Hesap QbitAI
"Android yazılım klavyesi nasıl kapatılır veya gizlenir?"
Yeni başlayan bir Android geliştiricisiyseniz, çok popüler Android geliştirme soruları bulmak için Stack Overflow forumuna gidin. Birisi yakında bir kod parçası gönderecek.
Programlama problemleriyle karşılaştıklarında, programcıların aklına ilk gelen şey, teknik forumların sonuçlarını aramak ve ardından cevaplardan kodları aramaktır.
Ancak, genellikle forumda tartışılmayan pek çok popüler olmayan soru var.Yanıtı geniş GitHub kod tabanında hızlı bir şekilde bulabilirseniz iyi olur.
Bu amaçla Facebook, doğal dil işleme (NLP) ve bilgi alma (IR) teknolojilerini doğrudan kaynak kod metnine uygulayabilen bir kod arama aracı geliştirdi.
Bu araç setine Sinirsel kod araması (NCS), doğal dil sorgularını kabul eder ve ilgili kod parçacıklarını doğrudan GitHub deposundan alır ve döndürür.
NCS'ye ek olarak, ağ performansını iyileştirmek için denetim verilerini kullanan başka bir yöntem vardır. UNIF .
Küçük ölçekli kıyıcı
Facebook, modelin GitHub'dan doğru yanıtı bulup bulamayacağını görmek için NCS'nin performansını değerlendirmek için Stack Overflow'da Android tarafından geliştirilen soruları kullanır.
Stack Overflow değerlendirme veri setindeki 287 soru arasında, NCS'nin en iyi 10 sorgu sonucu 175 soruya doğru cevap verebilir ve tüm veri setinin% 60'ından fazlasını oluşturur. Geleneksel bilgi erişim teknolojisi BM25 ile karşılaştırıldığında, büyük ölçüde geliştirildi.
NCS ve UNIF'i Stack Overflow değerlendirme veri seti ile karşılaştırdık ve UNIF'in NCS'den daha fazla cevaplanan soru sayısını artırdığını doğruladık.
Sonuçlar, denetleme teknolojisinin ideal bir eğitim külliyatını elde ederken daha iyi arama performansı sağlayabileceğini göstermektedir.
Örneğin, "Uygulamadan nasıl çıkılır ve ana ekran nasıl görüntülenir" sorusu aranırken, NCS şunu döndürür:
public void showHomeScreenDialog (Görünümü Görüntüle) { Intent nextScreen = new Intent (getApplicationContext (), HomeScreenActivity.class); startActivity (nextScreen); }Ve UNIF daha uygun bir kod segmenti sağlar:
public void clickExit (MenuItem öğesi) { Amaç amaç = yeni Amaç (Amaç.ACTION_MAIN); intent.addCategory (Intent.CATEGORY_HOME); intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); metr.stop (); startActivity (amaç); bitiş(); }prensip
Facebook, doğal dil sorgularını ve kod parçalarını vektör olarak ifade etmek için açık kaynaklı yapay zeka araçları fastText, FAISS ve PyTorch, NCS ve UNIF kullanır ve daha sonra, semantik olarak benzer kod parçaları ve sorgunun vektör gösteriminin vektör uzayında yakından bağlantılı olması için ağı eğitir.
Bu modeller aracılığıyla kod parçaları, programcıların sorularını etkili bir şekilde yanıtlayarak doğrudan kod külliyatından bulunabilir.
NCS
NCS modeli, program anlambilimini elde etmek için katıştırmayı kullanır ve vektör uzayında benzer anlambilimlere sahip varlıklar birbirine yakın beklenen özniteliklere sahiptir. Aşağıdaki örnekte, her ikisi de Android klavyeyi kapatmak veya gizlemekle ilgili iki farklı kod bulunmaktadır. Benzer anlamsal anlamlara sahip oldukları için, kodları tam olarak aynı olmasa bile, vektör uzayındaki uzaklık çok yakındır.
Facebook, NCS modelini oluşturmak için bu kavramı kullanır. Yüksek düzeyde, model tarafından oluşturulan her kod parçası, yöntem düzeyinde ayrıntı düzeyiyle vektör uzayına gömülür. Model oluşturulduktan sonra, belirli bir sorgu aynı vektör uzayına eşlenecek ve vektör mesafesi, kod segmenti ile sorgu arasındaki ilişkiyi tahmin etmek için kullanılacaktır.
Bir model oluşturmak için NCS'nin kelimeleri çıkarması, kelime düğünleri oluşturması ve ardından belge yerleştirmeleri oluşturması gerekir.
Facebook, kodu temsil eden bir vektör oluşturmak için kaynak kodunu metin olarak ele alır ve aşağıdaki dilbilgisi kategorilerinden çıkarır: yöntem adı, yöntem çağrısı, numaralandırma, dizgi değişmezi ve yorum. Ardından onu standart İngilizce kurallarına (boşluklar, noktalama işaretleri gibi) ve kodla ilgili noktalama işaretlerine göre işaretleriz.
Örneğin, yukarıdaki şekilde "pxToDp" yöntem gövdesi için, kaynak kodu bir kelime koleksiyonu olarak kabul edilebilir: "dp px'deki px'i kaynakları elde etmek ve görüntüleme göstergelerini elde etmek için dp'ye dönüştür".
fastText Kelime korpusundaki tüm kelimeler için kelime düğünleri oluşturun. fastText vektör temsillerini hesaplamak için iki katmanlı yoğun bir sinir ağı kullanır ve bunlar büyük bir külliyatta denetimsiz olarak eğitilebilir.
UNIF, NCS'nin bir uzantısıdır ve eğitim için denetlenen veriler mevcut olduğunda performansı artırmak için kullanılabilir.
GitHub'da 26.109 en popüler Android projesini seçin ve denetimsiz NCS modelimizi doğrudan arama derlemesinde eğitin. Bu aynı zamanda NCS dönüş kodu parçacıklarının arama külliyatı olur.
UNIF modeline gelince, veri setini elde etmek için Facebook'taki Stack Overflow forumundan soru başlığını ve kod parçalarını çıkardım. Soruları filtrelemek için çeşitli sezgisel yöntemler kullandıktan sonra nihayet 451.000 eğitim örneği elde edildi.
Kağıt adresi:
https://arxiv.org/pdf/1905.03813.pdf
- Bitiş -
Samimi işe alım
Qubit, editörleri / muhabirleri işe alıyor ve merkezi Pekin, Zhongguancun'da bulunuyor. Yetenekli ve hevesli öğrencilerin bize katılmasını dört gözle bekliyoruz! Ayrıntılar için, lütfen QbitAI diyalog arayüzünde "işe alım" kelimesiyle yanıt verin.
Qubit QbitAI · Toutiao İmzalama Yazarı
' ' Yapay zeka teknolojisi ve ürünlerindeki yeni eğilimleri takip edin