Abordarea diversității seturilor de date generate
În capitolul anterior, am discutat despre potențialul folosirii LLM-ului pentru generarea de seturi de date sintetice pentru a fine-tuna ulterior un model local de Recuperare. Această metodă este posibilă datorită disponibilității unui corpus mare de documente neetichetate. Fiecare document este folosit pentru a genera una sau mai multe interogări sintetice și pentru a forma o pereche interogare-document.
Dar ce se întâmplă dacă Recuperarea Informațiilor nu este sarcina ta? Să zicem că lucrezi la o problemă de clasificare a documentelor juridice, dar nu ai voie să trimiți date către un API extern. În această situație, ar trebui să antrenezi un model local. Cu toate acestea, colectarea datelor ar putea deveni un obstacol semnificativ, cauzând întârzieri în dezvoltarea produsului.
Pentru simplitate, să presupunem că scopul este să generezi povești pentru copii. Această sarcină a fost punctul de plecare pentru cercetarea lui Eldan et al. (2023). Fiecare poveste constă în 2-3 paragrafe care urmează o intrigă și o temă simplă, în timp ce întregul set de date acoperă vocabularul unui copil și cunoștințele factuale.
Limba nu este doar un sistem de reguli și simboluri; ea transmite și interpretează sensul. Principala provocare a folosirii modelelor de limbaj mari pentru a produce date de antrenament este asigurarea diversității setului de date. Chiar și cu o temperatură de generare ridicată, modelele pot produce seturi de date repetitive care lipsesc diversitatea necesară (chiar și pentru limba unui copil). Coerența și relevanța sunt alte provocări ale generării limbajului natural.
Tehnici de îmbunătățire a diversității
Pentru a aborda problema diversității, autorii au pregătit un vocabular de aproximativ 1500 de cuvinte de bază, oglindind vocabularul tipic al unui copil, împărțit în substantive, verbe și adjective. În fiecare generare, un verb, un substantiv și un adjective au fost selectați aleator. Modelul generează apoi o poveste integrând aceste cuvinte aleatorii.
Această tehnică a extins semnificativ diversitatea setului de date, asigurând că poveștile acoperă întregul vocabular al unui copil și combinații diverse de concepte. În plus, autorii au integrat caracteristici potențiale ale poveștilor (precum dialogul, întorsăturile de intrigă, sfârșiturile rele sau lecțiile morale). Un subset aleator dintre aceste caracteristici a fost ales pentru fiecare poveste, iar modelul a fost promptat să le includă.
Exemplu de șablon de prompt
Prompt:
Scrie o poveste scurtă (3-5 paragrafe) care folosește doar cuvinte foarte simple pe care un copil de 3 ani le-ar putea înțelege probabil. Povestea ar trebui să folosească verbul "{random.choice(verbs_list)}", substantivul "{random.choice(nouns_list)}" și adjectivul "{random.choice(adjectives_list)}". Povestea ar trebui să aibă următoarele caracteristici: {random.choice(features_list)}, {random.choice(features_list)}. Amintește-ți să folosești doar cuvinte simple!
Să presupunem că golurile au fost completate astfel:
Prompt:
Scrie o poveste scurtă (3-5 paragrafe) care folosește doar cuvinte foarte simple pe care un copil de 3 ani le-ar putea înțelege probabil. Povestea ar trebui să folosească verbul "decorate", substantivul "thunder" și adjectivul "ancient". Povestea ar trebui să aibă următoarele caracteristici: povestea ar trebui să conțină cel puțin un dialog, povestea are un sfârșit rău. Amintește-ți să folosești doar cuvinte simple!
Ieșire:
Odată, într-o casă veche, trăia o fetiță numită Lily. Îi plăcea să-și decoreze camera cu lucruri frumoase. Într-o zi, a găsit o cutie mare în mansardă. A deschis-o și a văzut multe decorațiuni strălucitoare. Lily era foarte fericită și a decis să le folosească în camera sa. Pe măsură ce Lily își decora camera, cerul afară s-a întunecat. A fost un sunet tare de tunet, iar Lily s-a speriat. A alergat la mama sa și a spus: "Mama, tunetul este atât de tare!" Mama sa a îmbrățișat-o și a spus: "Nu-ți face griji, va trece în curând." Dar tunetul nu s-a oprit. S-a făcut din ce în ce mai tare, iar casa veche a început să se clatine. Deodată, acoperișul a căzut pe decorațiunile frumoase. Lily era tristă pentru că camera sa nu mai era frumoasă. Sfârșitul.
Aici ne bazăm pe cele mai recente modele de generare de text (GPT-3.5 și GPT-4), care pot produce cantități vaste de conținut sintetic, urmând instrucțiunile. Deoarece formulăm promptul aleator de fiecare dată, iar modelul se conformează precis la acesta, poveștile se dovedesc a fi incredibil de variate. Narativul va fi complet diferit chiar dacă unul sau două cuvinte rămân la fel. În esență, aplicăm această tehnică pentru a injecta aleatoriu în prompt, generând un set de date divers.
Strategia de implementare
Înțelegi ideea:
- Identifică ce parametri/entități ar putea varia între diferitele eșantioane din setul tău de date sintetice;
- Generează sau compilează manual o colecție dintre aceste entități pentru a completa golurile;
- Produce setul de date prin selectarea aleatorie a entităților pentru inserare. Este cel mai bine să setezi temperatura de generare mai mare decât cea implicită, dar sub maximul;
- Antrenează un model local pe rezultatele generării ChatGPT/GPT-4.
Este important să reții că una dintre entitățile folosite pentru a-ți semăna generarea ar putea fi o etichetă de clasă. De exemplu, în sarcina de clasificare a sentimentelor, poți menționa direct "pozitiv" sau "negativ" în prompt pentru a primi un text generat cu eticheta corespunzătoare. Apoi, un clasificator local este antrenat pe aceste date.
Generarea iterativă (ierarhică) de date sintetice
Formatul poate fi făcut mai complex prin folosirea unor entități și mai multe, unele dintre acestea fiind generate dinainte de LLM-ul însuși. De exemplu, cineva ar putea începe cu o cerere de a genera un rezumat al poveștii și să scrie o propoziție care trebuie să apară în poveste. Mai târziu, folosește doar acele date intermediare generate în cererea finală.
Prompt:
Rezumat: {un rezumat scurt generat de LLM, folosind abordarea de mai sus}
Caracteristici: {copiază caracteristicile din promptul inițial}
Propoziția: {o propoziție generată de LLM, care ar trebui să fie prezentă în poveste}
Cuvintele: {copiază cuvintele din promptul inițial}
Povestea:Exemplu de prompt completat:
Prompt:
Rezumat: Lily și Timmy construiesc împreună un castel de nisip și învață să facă compromisuri, dar acesta este dărâmat de o rafală de vânt. Ei găsesc frumusețea în castelul de nisip stricat și se joacă fericiți cu un fluture.
Caracteristici: Dialog, Presimțire, Întorsătură
Propoziția: Într-o zi, a mers în parc și a văzut un fluture frumos.
Cuvintele: disagree, network, beautiful
Povestea:Ieșire:
Odată, era o fetiță numită Lily. Îi plăcea să se joace cu jucăriile și prietenii săi. Într-o zi, a mers în parc și a văzut un fluture frumos. A încercat să-l prindă, dar a zburat. Prietenul Lily, Timmy, a venit să se joace cu ea. Au decis să construiască un castel de nisip, dar nu au fost de acord asupra modului de a-l construi. Lily voia să-l facă înalt, în timp ce Timmy voia să-l facă lat. S-au certat o vreme, dar în final au fost de acord să-l facă atât înalt cât și lat. Pe măsură ce construiau castelul de nisip, au observat un grup de furnici care lucrau împreună. Au realizat că furnicile construiau o rețea de tunele. Deodată, a venit o rafală de vânt și a dărâmat castelul lor de nisip. Erau triști, dar apoi au văzut din nou fluturele. A aterizat pe rămășițele castelului lor de nisip și au realizat că era încă frumos, chiar și în starea sa stricată. Au zâmbit și s-au jucat împreună fericiți.
Astfel, este posibil să generezi sute de mii de exemple foarte diverse pentru a antrena modelul. Să zicem că trebuie să antrenezi un clasificator care determină dacă un text conține un dialog sau o întorsătură de intrigă. Deoarece promptul inițial conține etichete, se știe ce valoare țintă trebuie prezisă pentru fiecare eșantion generat.
Manualele sunt tot ce ai nevoie
O întrebare crucială care apare din această abordare este dacă sinteza unui set de date poate oferi cu adevărat beneficii când antrenezi rețelele pentru aplicații din lumea reală. Din fericire, autorii au abordat această întrebare prin desfășurarea investigației lor și validarea eficacității antrenării modelelor de limbaj mai mici folosind date sintetice derivate din LLM-urile de ultimă generație.
În studiul lor, Gunasekar et al. (2023) subliniază importanța datelor de antrenament de înaltă calitate în modelul lor. Ei susțin că modelele de limbaj ar fi mai eficiente dacă ar fi antrenate pe materiale care seamănă cu caracteristicile unui "manual" respectat: clar, comprehensiv, informativ și nepărtinitor.
Aceste principii au format baza pentru crearea unui set de date semi-sintetic pentru a antrena LLM-ul numit Phi-1. Sarcina principală de evaluare este să generezi o funcție Python care urmează o descriere text dată sau docstring. Calitatea modelului este evaluată folosind benchmark-ul HumanEval (Chen et al., 2021).
Autorii subliniază importanța diversității în această abordare din mai multe motive. Aceasta expune modelul de limbaj la o varietate de expresii de codare și abordări de rezolvare a problemelor, reduce riscul de overfitting sau de a se baza pe pattern-uri specifice, și îmbunătățește capacitatea modelului de a gestiona sarcini nefamiliarizate sau inovatoare.
Pentru a aborda provocarea scrierii de cod, autorii au creat documente asemănătoare manualelor care se concentrează pe subiecte care promovează raționamentul și abilitățile algoritmice de bază. Au obținut diversitatea prin impunerea unor restricții asupra:
- subiectelor
- publicului țintă
Din păcate, autorii nu au furnizat informații specifice despre șablonul de prompt folosit pentru a genera datele sintetice. Cu toate acestea, au demonstrat rezultatul rezultat. Au ales să folosească ChatGPT (GPT-3.5) în loc de GPT-4, și chiar această strategie a dat rezultate excelente deoarece au fine-tunat modelul folosind date sintetice.
Eșantion generat asemănător manualului
Sursa imaginii: Gunasekar et al. (2023)
Este esențial să acorzi atenție constrângerii publicului țintă. Desemnarea unui public țintă este o modalitate excelentă de a îmbunătăți diversitatea datelor sintetice. Un student de liceu, un student CS și un candidat PhD cu siguranță își formulează explicațiile și procesează informațiile diferit, făcând datele generate și mai variate. Să încercăm să recreăm promptul.
Prompt:
