Rumah  >  Artikel  >  Peranti teknologi  >  Selesaikan tugasan "Penjanaan Kod"! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

Selesaikan tugasan "Penjanaan Kod"! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

WBOY
WBOYke hadapan
2024-03-16 15:55:25325semak imbas

Kemajuan model bahasa besar (LLM) telah memacu pembangunan bidang penjanaan kod ke tahap yang besar. Dalam penyelidikan terdahulu, pembelajaran pengukuhan (RL) dan isyarat maklum balas pengkompil telah digabungkan untuk meneroka ruang keluaran LLM untuk mengoptimumkan kualiti penjanaan kod.

but masih terdapat dua masalah:

1 ujian unit mungkin tidak meliputi kod kompleks, mengoptimumkan LLM menggunakan coretan kod yang tidak dilaksanakan adalah tidak berkesan.

Untuk menangani cabaran ini, penyelidik mencadangkan rangka kerja pembelajaran pengukuhan baharu yang dipanggil StepCoder, yang dibangunkan bersama oleh pakar dari Universiti Fudan, Universiti Sains dan Teknologi Huazhong dan Institut Teknologi Diraja. StepCoder mengandungi dua komponen utama yang direka untuk meningkatkan kecekapan dan kualiti penjanaan kod.

1. -pengoptimuman berbutir.

Pautan kertas: https://arxiv.org/pdf/2402.01391.pdf

Pautan projek: https://github.com/Ablustrund/APPS_Plus set data yang digunakan untuk latihan pembelajaran pengukuhan, disahkan secara manual untuk memastikan ketepatan ujian unit.

Hasil eksperimen menunjukkan bahawa kaedah itu meningkatkan keupayaan untuk meneroka ruang keluaran dan mengatasi prestasi kaedah terkini pada penanda aras yang sepadan.

Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

StepCoder

Dalam proses penjanaan kod, penerokaan pembelajaran pengukuhan biasa (penerokaan) sukar untuk mengendalikan "persekitaran dengan ganjaran dan kelewatan yang jarang" dan "keperluan kompleks yang melibatkan urutan yang panjang".

Dalam peringkat CCCS (Curriculum of Code Completion Subtasks), penyelidik menguraikan masalah penerokaan yang kompleks kepada satu siri subtugas. Menggunakan sebahagian daripada penyelesaian kanonik sebagai gesaan, LLM boleh mula meneroka daripada jujukan mudah.

Pengiraan ganjaran hanya berkaitan dengan serpihan kod boleh laku, jadi adalah tidak tepat untuk menggunakan keseluruhan kod (bahagian merah dalam gambar) untuk mengoptimumkan LLM (bahagian kelabu dalam gambar).

Dalam peringkat FGO (Fine-Grained Optimization), penyelidik menutup token yang tidak dilaksanakan (bahagian merah) dalam ujian unit dan hanya menggunakan token yang dilaksanakan (bahagian hijau) untuk mengira fungsi kehilangan, yang boleh memberikan Butiran terperinci pengoptimuman.

Pengetahuan awal Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

Andaikan

ialah set data latihan untuk penjanaan kod, di mana x, y, u mewakili keperluan manusia (iaitu perihalan ujian tugasan), penyelesaian standard dan sampel unit masing-masing .

Untuk keperluan manusia x, penyelesaian piawainya y boleh dinyatakan sebagai

; dalam fasa penjanaan kod, memandangkan keperluan manusia x, keadaan terakhir ialah koleksi kod yang lulus ujian unit u. Butiran kaedah ; FGO direka untuk tugas penjanaan kod dan menyediakan pengoptimuman terperinci dengan mengira kerugian hanya untuk serpihan kod yang dilaksanakan.

CCCS

Semasa proses penjanaan kod, menyelesaikan keperluan manusia yang kompleks selalunya memerlukan model dasar untuk mengambil urutan tindakan yang panjang. Pada masa yang sama, maklum balas pengkompil ditangguhkan dan jarang, iaitu model dasar hanya menerima ganjaran selepas keseluruhan kod dijana. Dalam kes ini, penerokaan adalah sangat sukar.

Inti kaedah ini adalah untuk menguraikan senarai panjang masalah penerokaan kepada satu siri subtugasan yang pendek dan mudah diterokai Para penyelidik memudahkan penjanaan kod menjadi subtugasan penyelesaian kod, di mana subtugasan diwakili oleh biasa. contoh dalam set data latihan Penyelesaian dibina secara automatik.

Untuk keperluan manusia x, pada peringkat latihan awal CCCS, titik permulaan s* untuk penerokaan ialah negeri berhampiran keadaan akhir.

Secara khusus, penyelidik menyediakan permintaan manusia x dan separuh pertama penyelesaian standard Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil, dan melatih model dasar untuk melengkapkan kod mengikut x'=(x, xp).

Dengan mengandaikan bahawa y^ ialah jujukan gabungan xp dan trajektori output τ, iaitu, yˆ=(xp,τ), model ganjaran menyediakan ganjaran r berdasarkan ketepatan serpihan kod τ dengan y^ sebagai input.

Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

Para penyelidik menggunakan algoritma pengoptimuman dasar proksimal (PPO) untuk mengoptimumkan model dasar πθ dengan memanfaatkan ganjaran r dan trajektori τ.

Semasa fasa pengoptimuman, segmen kod penyelesaian kanonik xp yang digunakan untuk memberikan pembayang akan bertopeng supaya ia tidak memberi kesan pada kecerunan kemas kini model dasar πθ.

CCCS mengoptimumkan model dasar πθ dengan memaksimumkan fungsi pembangkang, dengan π^ref ialah model rujukan dalam PPO, yang dimulakan oleh model SFT.

Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

Semasa latihan berlangsung, titik permulaan s* penerokaan akan beransur-ansur menuju ke titik permulaan penyelesaian standard Secara khusus, ambang ρ ditetapkan untuk setiap sampel latihan, dan pengumpulan segmen kod yang dihasilkan setiap. masa πθ Apabila kadar ketepatan lebih besar daripada ρ, titik permulaan dialihkan ke permulaan.

Pada peringkat latihan kemudian, proses penerokaan kaedah ini adalah setara dengan pembelajaran peneguhan asal, iaitu, s*=0, dan model dasar hanya menjana kod dengan keperluan manusia sebagai input.

Sampel titik pengecaman awal s* pada kedudukan permulaan pernyataan bersyarat untuk melengkapkan segmen kod tidak bertulis yang tinggal.

Secara khusus, lebih banyak pernyataan bersyarat, lebih banyak laluan bebas yang ada pada program, dan lebih tinggi kerumitan logiknya kerap.

Kaedah pensampelan ini boleh mengekstrak struktur kod perwakilan secara sama rata sambil mengambil kira kedua-dua struktur semantik yang kompleks dan mudah dalam set data latihan.

Untuk mempercepatkan fasa latihan, penyelidik menetapkan bilangan kursus untuk sampel ke-i kepada Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil, di mana Ei ialah bilangan pernyataan bersyaratnya. Jangka masa kursus latihan sampel ke-i ialah Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil, bukan 1.

Titik utama CCC boleh diringkaskan seperti berikut:

1 untuk memulakan penerokaan dari negeri yang jauh dari jantina matlamat, tetapi penerokaan menjadi lebih mudah jika anda boleh memanfaatkan keadaan telah mempelajari cara mencapai matlamat anda.

FGO

Hubungan antara ganjaran dan tindakan dalam penjanaan kod adalah berbeza daripada tugasan pembelajaran pengukuhan yang lain (seperti Atari dalam penjanaan kod, satu set ganjaran yang tidak relevan untuk mengira ganjaran). kod yang dihasilkan boleh dikecualikan tindakan.

Secara khusus, untuk ujian unit, maklum balas pengkompil hanya berkaitan dengan serpihan kod yang dilaksanakan Walau bagaimanapun, dalam matlamat pengoptimuman RL biasa, semua tindakan pada trajektori akan mengambil bahagian dalam pengiraan kecerunan dan pengiraan kecerunan adalah tidak tepat.

Untuk meningkatkan ketepatan pengoptimuman, para penyelidik melindungi tindakan yang tidak dilaksanakan (iaitu token) dalam ujian unit dan kehilangan model strategi.

Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

Bahagian eksperimen

APPS+dataset

Pembelajaran pengukuhan memerlukan sejumlah besar data latihan berkualiti tinggi di kalangan penyelidik yang ada pada masa ini mendapati bahawa semasa penyiasatan. hanya APPS yang memenuhi keperluan ini Satu permintaan.

Tetapi terdapat beberapa kejadian yang tidak betul dalam APPS, seperti input, output atau penyelesaian standard yang hilang, di mana penyelesaian standard mungkin tidak menyusun atau melaksanakan, atau terdapat perbezaan dalam output pelaksanaan.

Untuk menambah baik set data APPS, penyelidik menapis contoh dengan input, output atau penyelesaian standard yang hilang, dan kemudian menyeragamkan format input dan output untuk memudahkan pelaksanaan dan perbandingan ujian unit, kemudian, untuk setiap contoh Ujian unit dan analisis manual dilakukan untuk menghapuskan kejadian kod yang tidak lengkap atau tidak berkaitan, ralat sintaks, penyalahgunaan API atau kebergantungan perpustakaan yang hilang.

Untuk perbezaan dalam output, penyelidik menyemak huraian masalah secara manual, membetulkan output yang dijangkakan atau menghapuskan kejadian tersebut.

Akhir sekali, kami membina set data APPS+, yang mengandungi 7456 kejadian Setiap kejadian termasuk penerangan masalah pengaturcaraan, penyelesaian standard, nama fungsi, ujian unit (iaitu input dan output) dan kod permulaan (iaitu penyelesaian standard) bahagian permulaan) .

Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

Hasil eksperimen

Untuk menilai prestasi LLM dan StepCoder lain dalam penjanaan kod, penyelidik menjalankan eksperimen pada set data APPS+.

Hasilnya menunjukkan bahawa model berasaskan RL mengatasi model bahasa lain, termasuk model asas dan model SFT.

Selesaikan tugasan Penjanaan Kod! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil

Para penyelidik berpendapat bahawa pembelajaran pengukuhan boleh meningkatkan lagi kualiti penjanaan kod dengan meneroka ruang keluaran model dengan lebih cekap, berpandukan maklum balas pengkompil.

Selain itu, StepCoder melepasi semua model garis dasar, termasuk kaedah berasaskan RL lain, dan mencapai skor tertinggi.

Secara khusus, kaedah ini mencapai markah tinggi masing-masing 59.7%, 23.5% dan 8.6% dalam soalan ujian peringkat "Pengenalan", "Temuduga" dan "Pertandingan".

Berbanding dengan kaedah berasaskan pembelajaran pengukuhan yang lain, kaedah ini cemerlang dalam meneroka ruang keluaran dengan memudahkan tugas penjanaan kod yang kompleks kepada subtugas pelengkap kod, dan proses FGO memainkan peranan penting dalam mengoptimumkan kesan model dasar dengan tepat.

Ia juga boleh didapati bahawa pada set data APPS+ berdasarkan rangkaian seni bina yang sama, StepCoder berprestasi lebih baik daripada LLM yang diselia untuk penalaan halus berbanding dengan rangkaian tulang belakang, yang kedua hampir tidak meningkatkan kadar lulus kod yang dijana; yang Ia juga secara langsung menunjukkan bahawa menggunakan maklum balas pengkompil untuk mengoptimumkan model boleh meningkatkan kualiti kod yang dijana lebih daripada ramalan token seterusnya dalam penjanaan kod.

Atas ialah kandungan terperinci Selesaikan tugasan "Penjanaan Kod"! Fudan et al. melepaskan rangka kerja StepCoder: Pembelajaran pengukuhan daripada isyarat maklum balas pengkompil. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam