paint-brush
Büyük Dil Modelleri Kullanılarak Genetik İyileştirme Mutasyonlarının Geliştirilmesiile@escholar
493 okumalar
493 okumalar

Büyük Dil Modelleri Kullanılarak Genetik İyileştirme Mutasyonlarının Geliştirilmesi

Çok uzun; Okumak

Bu makale, deneysel değerlendirme yoluyla yazılım mühendisliğinde genetik iyileştirmede (GI) büyük dil modellerinin (LLM'ler) uygulanmasını araştırmaktadır. Analizler, JCodec projesine odaklanarak LLM'lerin arama tabanlı teknikler, program onarımı ve kod oluşturma üzerindeki etkisini ortaya koyuyor. LLM mutasyonlarının yazılım geliştirme süreçlerini nasıl geliştirdiğini keşfedin.
featured image - Büyük Dil Modelleri Kullanılarak Genetik İyileştirme Mutasyonlarının Geliştirilmesi
EScholar: Electronic Academic Papers for Scholars HackerNoon profile picture

Yazarlar:

(1) Alexander EI Brownlee, Stirling Üniversitesi, Birleşik Krallık;

(2) James Callan, University College London, Birleşik Krallık;

(3) Karine Even-Mendoza, King's College Londra, Birleşik Krallık;

(4) Alina Geiger, Johannes Gutenberg Üniversitesi Mainz, Almanya;

(5) Carol Hanna, University College London, Birleşik Krallık;

(6) Justyna Petke, University College London, Birleşik Krallık;

(7) Federica Sarro, University College London, Birleşik Krallık;

(8) Dominik Sobania, Johannes Gutenberg Üniversitesi Mainz, Almanya.

İçeriğe Genel Bakış

  • Soyut
  • giriiş
  • Deneysel kurulum
  • Sonuçlar
  • Sonuçlar ve Gelecekteki Çalışmalar
  • Referanslar

Soyut

Büyük dil modelleri (LLM'ler), program onarımı da dahil olmak üzere yazılım mühendisliği görevlerine başarıyla uygulanmıştır. Ancak bunların Genetik İyileştirme (GI) gibi araştırmaya dayalı tekniklerdeki uygulamaları hâlâ büyük ölçüde keşfedilmemiştir. Bu yazıda, arama sürecini iyileştirmek amacıyla LLM'lerin GI için mutasyon operatörleri olarak kullanımını değerlendiriyoruz. JCodec aracı için düzenlemeler oluşturmak amacıyla OpenAI'nin API'sini çağırmak için Gin Java GI araç kitini genişletiyoruz. 5 farklı düzenleme türünü kullanarak düzenleme alanını rastgele örnekliyoruz. Birim testlerini geçen yama sayısının LLM tabanlı düzenlemelerde standart Insert düzenlemelerine göre %75'e kadar daha yüksek olduğunu bulduk. Ayrıca LLM'lerde bulunan yamaların standart düzenlemelere kıyasla genellikle daha az çeşitliliğe sahip olduğunu gözlemliyoruz. Çalışma zamanı iyileştirmelerini bulmak için GI'yi yerel aramayla çalıştırdık. LLM ile geliştirilmiş GI tarafından birçok iyileştirici yama bulunmasına rağmen, en iyi iyileştirici yama standart GI tarafından bulunmuştur.


giriiş

Yazılım sistemleri büyüdükçe ve karmaşıklaştıkça, bunların bakımı için önemli miktarda manuel çaba gerekmektedir [2]. Yazılım bakımı ve optimizasyon görevlerinde geliştiricinin çabasını azaltmak için otomatikleştirilmiş paradigmalar çok önemlidir. Genetik İyileştirme (GI) [15], mevcut yazılımın yürütme süresi gibi işlevsel olmayan özelliklerinin yanı sıra hataların onarılması gibi işlevsel özelliklerini geliştirmek için aramaya dayalı teknikler uygular. Her ne kadar GI endüstride başarı elde etmiş olsa da [12,13], aramada kullandığı mutasyon operatörleri seti ile sınırlı kalmaktadır [14].


Büyük Dil Modelleri (LLM'ler), eldeki belirli görev için ek eğitim gerektirmeden metin sorgularını işleyebildikleri için geniş bir uygulama yelpazesine sahiptir. LLM'ler birçok farklı programlama dilini kapsayan milyonlarca kod deposunda önceden eğitilmiştir [5]. Yazılım mühendisliği görevlerinde kullanımları büyük başarı elde etti [9,6] ve program onarımı için de umut vaat ediyor [17,19].


Kang ve Yoo [10] GI'yi geliştirmek için LLM'lerin kullanılmasında kullanılmayan bir potansiyel olduğunu öne sürdüler. GI, farklı optimizasyon görevleri için aynı mutasyon operatörlerini kullanır. Bu operatörler aramaya başlamadan önce elle yapılır ve bu nedenle sınırlı bir arama alanıyla sonuçlanır. Ek bir mutasyon operatörü olarak LLM yama önerilerini artırmanın, arama alanını zenginleştireceğini ve daha başarılı varyantlarla sonuçlanacağını varsayıyoruz.


Bu yazıda, LLM'leri GI'de bir mutasyon operatörü olarak kullanmanın, aramanın verimliliğini ve etkinliğini artırıp artıramayacağını araştırmak için çeşitli deneyler yürütüyoruz. Sonuçlarımız LLM tarafından oluşturulan yamaların rastgele arama ve yerel arama için (Orta bilgi istemi kategorisiyle) sırasıyla %51,32 ve %53,54 derleme oranlarına sahip olduğunu göstermektedir. Daha önce Yüksek Lisans'ların (olduğu gibi bir Yüksek Lisans modelini kullanan) zamanın kabaca %40'ını derleyen kod ürettiği gösterilmişti [16,18]. Rastgele örneklenen LLM tabanlı düzenlemelerin, standart GI düzenlemelerine kıyasla daha sık derlendiğini ve birim testlerden geçtiğini bulduk. Birim testlerini geçen yama sayısının LLM tabanlı düzenlemelerde GI Insert düzenlemelerine göre %75'e kadar daha yüksek olduğunu gözlemliyoruz. Ancak LLM'lerde bulunan yamaların daha az çeşitliliğe sahip olduğunu gözlemliyoruz. Yerel arama için en iyi iyileştirme, standart GI Beyanı düzenlemeleri ve ardından LLM tabanlı düzenlemeler kullanılarak elde edilir. Bu bulgular, mutasyon operatörleri olarak Yüksek Lisans'ların potansiyelini ortaya koymakta ve bu alanda daha fazla araştırma yapılması ihtiyacını vurgulamaktadır.


Deneysel kurulum

GI'de mutasyon operatörü olarak LLM'lerin kullanımını analiz etmek için OpenAI'nin GPT 3.5 Turbo modelini ve GI araç kutusu Gin'i kullandık [3]. Gin'de uygulanan iki tür aramayı denedik: rastgele arama ve yerel arama. OpenAI API kullanılarak LLM'ye yapılan talepler, 0,7 sıcaklıkta Langchain4J kütüphanesi aracılığıyla yapıldı. Deneylerimizde iyileştirme için hedef proje Java ile yazılmış popüler JCodec [7] projesiydi. Düzenlemelerin hedefleyeceği 'sıcak' yöntemler, profil oluşturmanın 20 kez tekrarlanması ve ortaya çıkan setin birleşiminin alınmasıyla Gin'in profil oluşturma aracı kullanılarak belirlendi.


Rastgele örnekleme deneyleri için, ifade düzeyinde düzenlemeler ([14]'ten kopyala/sil/değiştir/değiştir ve [4]'ten ara/devam et/dönüş ekle) ve LLM düzenlemeleri ile çalıştırmalar ayarladık ve her türden rastgele 1000 adet ürettik. . Düzenlemelerin getirdiği sonsuz döngüleri yakalamak için her birim testinde 10000 milisaniyelik bir zaman aşımı kullanıldı; Zaman aşımı sürelerinin aşılması test hatası olarak sayılır. Yerel arama için deneyler benzer şekilde kuruldu. 10 tekrar çalışması vardı (ilk 10 sıcak yöntemin her biri için bir tane) ancak çalışmalar 100 değerlendirme ile sınırlıydı ve sonuçta rastgele aramayla eşleşen toplamda 1000 değerlendirme elde edildi. Uygulamada bu, ilk düzeltme eklenmemiş orijinal kodu zamanlamak için kullanıldığından çalıştırma başına 99 düzenlemeydi.


Her iki arama türü için LLM'ye istek göndermek için üç farklı bilgi istemi denedik: basit bir bilgi istemi, bir orta bilgi istemi ve ayrıntılı bir bilgi istemi. Her üç istemle birlikte uygulamamız, elimizdeki kodun beş farklı varyasyonunu talep eder. Basit istem, herhangi bir ek bilgi olmadan yalnızca kodu ister. Orta bilgi istemi, Şekil 1'de gösterildiği gibi sağlanan kod ve gereksinimler hakkında daha fazla bilgi sağlar. Özellikle, LLM'ye kullanılan programlama dilini, kodun ait olduğu projeyi ve ayrıca biçimlendirme talimatlarını sağlıyoruz. Ayrıntılı bilgi istemi, orta düzeydeki istemi yararlı bir değişiklik örneğiyle genişletir. Bu örnek Brownlee ve arkadaşları tarafından elde edilen sonuçlardan alınmıştır. [4]. Yama, jCodec projesine uygulanan ekleme düzenlemesinin başarılı bir örneğidir (yani derleyen, birim testlerini geçen ve orijinal kod üzerinde hızlanma sunan bir düzenleme). Deneylerimizde kullanılan tüm ayrıntılı bilgi istemi istekleri için aynı örneği kullanıyoruz; bunun nedeni, Yüksek Lisans'ların, kullanıcının belirli bilgileri sunduğu tümevarımsal akıl yürütme yeteneğine sahip olması ve Yüksek Lisans'ın bu girdiyi, GPT-4'te daha da geliştirilmiş olan daha genel ifadeler oluşturmak için kullanabilmesidir [8].



Şekil 1. Okunabilirlik için satır sonlarının eklendiği LLM istekleri için orta bilgi istemi.



LLM düzenlemeleri, hedef 'sıcak' yöntemde rastgele bir blok ifadesi seçilerek uygulanır. Bu bloğun içeriği in the prompt. The first code block in the LLM response is identified. Gin uses JavaParser (https://javaparser.org) internally to represent target source files, so we attempt to parse the LLM suggestion with JavaParser, and replace the original block with the LLM suggestion.


Sonuçlar

İlk deney, Rastgele Örnekleme kullanarak farklı ayrıntılı bilgi istemleri (Basit, Orta ve Ayrıntılı) kullanan standart GI mutasyonlarını, yani Insert ve Statement düzenlemelerini LLM düzenlemeleriyle karşılaştırır. Tablo 1'de tüm yamaların yanı sıra yalnızca benzersiz yamalara ilişkin sonuçlar gösterilmektedir. Kaç yamanın JavaParser tarafından başarıyla ayrıştırıldığını (Geçerli olarak adlandırılır), kaçının derlendiğini ve kaçının tüm birim testlerini geçtiğini (Geçerli olarak adlandırılır) bildiririz. Sözdizimsel olarak orijinal yazılıma eşdeğer yamaları hariç tuttuk. En iyi sonuçlar kalın harflerle yazılmıştır.


Standart Insert ve Statement düzenlemeleriyle önemli ölçüde daha geçerli yamalar bulunmasına rağmen, LLM tarafından oluşturulan düzenlemeler kullanılarak daha fazla geçen yamaların bulunabileceğini görüyoruz. Özellikle Orta ve Ayrıntılı istemler için sırasıyla 292 ve 230 yama birim testlerini geçti. Insert ve Statement düzenlemeleri için sırasıyla yalnızca 166 ve 91 tanesi birim testlerini geçti. Anekdot olarak, en düşük/en yüksek yama geçiş oranlarına sahip sıcak yöntemler her operatör için farklıydı: bu varyasyonun anlaşılması gelecekteki araştırmalar için ilginç olacaktır.


LLM yamalarının daha az çeşitliliğe sahip olması da dikkat çekicidir: standart mutasyon operatörleri tarafından Medium kullanan LLM'ye kıyasla %50'den fazla benzersiz yama bulunmuştur,



Tablo 1. Rastgele Örnekleme denememizin sonuçları. Bu tabloda orijinal yazılıma sözdizimsel olarak eşdeğer olan yamaları hariç tutuyoruz. Tüm ve benzersiz yamalar için rapor ediyoruz: kaç yamanın JavaParser'ı geçtiğini, derlendiğini ve tüm birim testlerini geçtiğini.




Tablo 2. Yerel Arama sonuçları. Tüm boş yamaları hariç tutuyoruz. Kaç yamanın derlendiğini, tüm birim testlerini geçtiğini ve kaçının çalışma zamanında iyileştirmelere yol açtığını rapor ediyoruz. Bulunan en iyi iyileşmeyi ve iyileşen yamalar arasında ortalama iyileşmeyi rapor ediyoruz.



ve Ayrıntılı istemler. Ancak Basit istemle, önerilen düzenlemeler genellikle ayrıştırılamadığı için tek bir yama birim testlerini geçemedi. Bu nedenle, LLM'yi kullanılabilir çıktılar üretmeye zorlamak için ayrıntılı istemler gereklidir.


Medium'un daha fazla sayıda derlenmiş ve aktarılmış yamasına sahip olması nedeniyle, Ayrıntılı (benzersiz yama kümelerinde) ile performanstaki düşüşü anlamak için Orta ve Ayrıntılı istemler arasındaki farkları daha ayrıntılı olarak araştırdık. Her iki bilgi istemi düzeyinde de oluşturulan yanıt 42 vaka için (toplam benzersiz geçerli vakalar arasından) aynıydı. Bununla birlikte, Ayrıntılı ortalama 363 karakterle daha uzun yanıtlar üretme eğilimindeyken, Orta ortalama 304 karaktere sahipti. Diğer dosyalardan değişkenler içeren bazılarını tanımladığımız ve potansiyel olarak GI'nin keşfedebileceği kod değişkenleri kümesinde önemli bir genişleme sunan birkaç Ayrıntılı bilgi istemi yanıtını manuel olarak inceledik.


İkinci deney, standart ve LLM düzenlemelerinin performansını Yerel Arama ile karşılaştırarak analizimizi genişletiyor. Tablo 2 Yerel Arama deneyinin sonuçlarını göstermektedir. Derleme ve aktarma yamalarının sayısının yanı sıra çalışma zamanı iyileştirmelerinin bulunduğu yamaların sayısını da rapor ediyoruz. Ayrıca, medyan ve en iyi iyileşmeyi milisaniye (ms) cinsinden rapor ediyoruz. Tabloda tüm boş yamaları hariç tuttuk. Daha önce olduğu gibi, en iyi sonuçlar kalın harflerle yazılmıştır.


Yine, Orta ve Ayrıntılı istemleri kullanarak LLM'de birim testlerini geçen daha fazla yamanın bulunabileceğini görüyoruz. Ek olarak, LLM'nin bu istemlerle birlikte kullanılmasıyla daha fazla iyileştirme bulunabilir. Özellikle Orta ve Ayrıntılı ile sırasıyla 164 ve 196 iyileştirme bulduk; Insert ile yalnızca 136 ve Statement ile 71 iyileştirme bulduk. En iyi gelişme, Statement düzenlemesi ile 508 ms ile bulunabilir. Yüksek Lisans (LLM'ler) kullanılarak (Orta komut istemi kullanılarak) bulunan en iyi gelişme, çalışma süresini yalnızca 395 ms kadar iyileştirmeyi başardı. Ayrıca, Ayrıntılı istem yanıtlarının düşük derleme oranı nedeniyle Orta ve Ayrıntılı istemler arasındaki ayrımlara ilişkin bilgi edinmek için Yerel Arama sonuçlarındaki bir dizi düzenlemeyi de inceledik. Örnekte, bir işlev çağrısı klibinin satır içi olmasını amaçlayan bir düzenleme dizisi. Ayrıntılı bilgi istemi, çağrıyı neredeyse anında birkaç düzenlemeye dahil etmeye çalıştı ve muhtemelen geçersiz koda yol açtı. Öte yandan, Orta komut istemi daha az radikal değişiklikler yaparak kodu kademeli olarak geliştirdi. Üçlü operatör ifadesini bir if-then-else ifadesi ve sistem işlev çağrıları ile değiştirerek, sonunda klip işlev çağrısını satır içi yapmaya çalışarak başladı.


Sonuçlar ve Gelecekteki Çalışmalar

Yazılımın genetik gelişimi büyük ölçüde arama sürecinde kullandığı mutasyon operatörlerine bağlıdır. Operatörleri çeşitlendirmek ve arama alanını daha da zenginleştirmek için operatör olarak Büyük Dil Modelini (LLM) dahil ettik.


Sınırlamalar . Genellemek gerekirse, gelecekteki çalışmalarda hedefimiz olan jCodec'in yanı sıra projeler de dikkate alınmalıdır. Deneylerimiz, LLM tarafından oluşturulan yanıtlar üzerinde veya bunları değiştirmenin veya optimize etmenin herhangi bir yolu üzerinde bize hiçbir kontrol sağlamayan bir API kullandı. Deneylerimiz sırasında davranışlarda değişiklik gözlemlememiş olsak da OpenAI modeli her an değiştirebilir, dolayısıyla gelecekteki çalışmalarda yerel modeller dikkate alınmalıdır. LLM istekleri için yalnızca üç bilgi istemi türüyle denemeler yaptık ve bu sınırlı sayıdaki istemler içerisinde sonuçlarda bir değişiklik bulduk. Son olarak, LLM'lerden gelen yanıtları ayrıştırmaya yönelik uygulamamız nispeten basitti. Ancak bu yalnızca rapor edilen sonuçlarımızın kötümser olduğu ve LLM tabanlı operatör tarafından daha da büyük bir iyileşme sağlanabileceği anlamına gelecektir.


Özet . Rastgele Örnekleme kullanılarak standart düzenlemelerde daha geçerli ve çeşitli yamalar bulunmasına rağmen, LLM tabanlı düzenlemelerde birim testlerini geçen daha fazla yama bulunduğunu gördük. Örneğin, Orta komut istemini kullanan LLM düzenlemesinde, klasik Ekleme düzenlemesine kıyasla birim testlerini geçen %75'in üzerinde yamanın daha fazla olduğunu bulduk. Yerel Arama denememizde en iyi gelişmeyi Açıklama düzenlemesinde (508 ms) bulduk. En iyi LLM tabanlı gelişme Orta komut isteminde (395 ms) bulundu. Bu nedenle, hem Yüksek Lisans hem de 'klasik' GI düzenlemelerini birleştiren yaklaşımları keşfetme potansiyeli vardır.


Deneylerimiz, LLM istekleri için kullanılan istemlerin sonuçları büyük ölçüde etkilediğini ortaya çıkardı. Bu nedenle gelecekteki çalışmalarda hızlı mühendislikle daha fazla deneme yapmayı umuyoruz. İstemleri bir arada kullanmak da yararlı olabilir: örneğin, orta düzeyden başlayıp ardından yerel minimumları aşan daha büyük düzenlemeler yapmak için ayrıntılıya geçiş yapmak. Ayrıca, LLM düzenlemelerini standart kopyalama/silme/değiştirme/takas veya PAR şablonları [11] gibi diğerleriyle birleştirme olasılığı ilginç olabilir. Son olarak, ek test programları üzerinde daha kapsamlı deneyler yapmayı umuyoruz.


Veri kullanılabilirliği. Kod, LLM'nin istemi ve deneysel altyapısı, değerlendirmeden elde edilen veriler ve sonuçlar, [1] adresinde açık kaynak olarak mevcuttur. Kod aynı zamanda github.com/gintool/gin adresinin 'llm' şubesi altındadır (9fe9bdf işlemini gerçekleştirin; Gin ile tam entegrasyonu bekleyen ana işlem 2359f57'den dallanmıştır).


Teşekkür UKRI EPSRC EP/P023991/1 ve ERC 741278.

Referanslar

  1. Büyük Dil Modellerini Kullanarak Genetik İyileştirme Mutasyonlarını Geliştirme Eseri. Zenodo (Eylül 2023). https://doi.org/10.5281/zenodo.8304433


  2. B¨ohme, M., Soremekun, EO, Chattopadhyay, S., Ugherughe, E., Zeller, A.: Hata nerede ve nasıl düzeltilir? Uygulayıcılarla yapılan bir deney. İçinde: Proc. Yazılım Mühendisliğinin Temelleri ACM Sempozyumu. sayfa 117–128 (2017)


  3. Brownlee, AE, Petke, J., Alexander, B., Barr, ET, Wagner, M., White, DR: Gin: genetik iyileştirme araştırması kolaylaştırıldı. İçinde: GECCO. sayfa 985–993 (2019)


  4. Brownlee, AE, Petke, J., Rasburn, AF: Java kodunu daha hızlı çalıştırmak için kısayollar ekleme. İçinde: IEEE CEC 2020. s. 1–8


  5. Chen, M., Tworek, J., Jun, H., Yuan, Q., Pinto, HPdO, Kaplan, J., Edwards, H., Burda, Y., Joseph, N., Brockman, G., ve al.: Kodla eğitilmiş büyük dil modellerinin değerlendirilmesi. arXiv ön baskı arXiv:2107.03374 (2021)


  6. Fan, A., Gökkaya, B., Harman, M., Lyubarskiy, M., Sengupta, S., Yoo, S., Zhang, JM: Yazılım mühendisliği için geniş dil modelleri: Anket ve açık problemler (2023)

  7. Github - jcodec/jcodec: Jcodec ana deposu, https://github.com/jcodec/jcodec


  8. Han, SJ, Ransom, KJ, Perfors, A., Kemp, C.: İnsanlarda tümevarımsal akıl yürütme ve büyük dil modelleri. Bilişsel Sistem Araştırması s. 101155 (2023)


  9. Hou, X., Liu, Y., Yang, Z., Grundy, J., Zhao, Y., Li, L., Wang, K., Luo, X., Lo, D., Wang, H.: Yazılım mühendisliği için büyük dil modelleri: Sistematik bir literatür taraması. arXiv:2308.10620 (2023)


  10. Kang, S., Yoo, S.: Büyük dil modelleri aracılığıyla hedefe yönelik genetik iyileştirmeye doğru. arXiv:2304.09386 (2023)


  11. Kim, D., Nam, J., Song, J., Kim, S.: İnsan Tarafından Yazılan Yamalardan Öğrenilen Otomatik Yama Oluşturma (2013), http://logging.apache.org/log4j/


  12. Kirbas, S., Windels, E., Mcbello, O., Kells, K., Pagano, M., Szalanski, R., Nowack, V., Winter, E., Counsell, S., Bowes, D., Hall, T., Haraldsson, S., Woodward, J.: Bloomberg'de otomatik program onarımının başlatılması üzerine. IEEE Yazılımı 38(4), 43–51 (2021)


  13. Marginean, A., Bader, J., Chandra, S., Harman, M., Jia, Y., Mao, K., Mols, A., Scott, A.: Sapfix: Otomatik uçtan uca onarım ölçek. İçinde: ICSE-SEIP. sayfa 269–278 (2019)


  14. Petke, J., Alexander, B., Barr, ET, Brownlee, AE, Wagner, M., White, DR: Gin kullanılarak otomatik program değişikliği için program dönüştürme ortamları. Ampirik Yazılım Mühendisliği 28(4), 1–41 (2023)


  15. Petke, J., Haraldsson, SO, Harman, M., Langdon, WB, White, DR, Woodward, JR: Yazılımın genetik gelişimi: Kapsamlı bir araştırma. Evrimsel Hesaplamada IEEE İşlemleri 22, 415–432 (2018)


  16. Siddiq, ML, Santos, J., Tanvir, RH, Ulfat, N., Rifat, FA, Lopes, VC: Birim testleri oluşturmada büyük dil modellerinin etkinliğinin araştırılması. arXiv ön baskı arXiv:2305.00418 (2023)


  17. Sobania, D., Briesch, M., Hanna, C., Petke, J.: Chatgpt'in otomatik hata düzeltme performansının analizi. İçinde: 2023 IEEE/ACM Uluslararası Otomatik Program Onarımı Çalıştayı (APR). s. 23–30. IEEE Bilgisayar Topluluğu (2023)


  18. Xia, CS, Paltenghi, M., Tian, JL, Pradel, M., Zhang, L.: Büyük dil modelleri aracılığıyla evrensel bulanıklaştırma. arXiv ön baskı arXiv:2308.04748 (2023)


  19. Xia, CS, Zhang, L.: Konuşmayı sürdürün: Chatgpt kullanarak 337 hatadan 162'sini her biri 0,42 $ karşılığında düzeltiyoruz. arXiv ön baskı arXiv:2304.00385 (2023)