Fill-in-the-middle (FIM)
Også kendt som: FIM, infilling
Et træningstrick, der lærer en model at skrive det manglende stykke mellem teksten før et hul og teksten efter det.
Kladde - dette opslag er endnu ikke gennemgået.
Formelt
Under fortræningen skæres et dokument i en start, en midte og en slutning, og stykkerne stilles om med særlige markør-tokens som start, slutning og så midte; almindelig forudsigelse af næste token på den rækkefølge lærer modellen at lave en midte, der passer til begge sider.
Forklaret enkelt
Som at finde den sidste brik i et puslespil - brikkerne på alle sider af hullet viser formen langt bedre end én side alene.
I praksis
På et dansk universitet sætter en udvikler markøren midt i en halvskrevet funktion i appen til eksamensbooking; editoren sender linjerne over og under, og modellen returnerer kun de få linjer, der hører til i hullet.
Hvorfor det betyder noget
Rigtig redigering sker sjældent i slutningen af en fil, så uden det ville en model gætte i blinde om alt under det sted, man retter, og foreslå linjer, der støder mod resten.
Teknisk uddybning
Standardreferencen er Bavarian et al. (OpenAI, 2022), "Efficient Training of Language Models to Fill in the Middle". Et træningsdokument deles ved to tilfældige tegnpositioner i præfiks, midte og suffiks og serialiseres derefter med sentinel-tokens. I PSM-rækkefølge er sekvensen <PRE> præfiks <SUF> suffiks <MID> midte <EOT>; i SPM-rækkefølge kommer suffikset først, så præfiks og midte ligger i forlængelse af hinanden, hvilket passer bedre med key-value-caching, når brugeren skriver videre. Den omstillede sekvens trænes med det almindelige kausale tab for næste token, så der kræves ingen ændring af arkitekturen; ved inferens leverer klienten alt til og med <MID>, og modellen genererer midten, indtil den udsender end-of-text-tokenet.
Artiklens centrale empiriske påstand er "FIM for free": At anvende omstillingen på en stor del af fortræningsdokumenterne (de testede FIM-rater op til 90 %) forringede ikke målbart evnen til at skrive fra venstre mod højre, men gav stærk infilling-evne. Flere designdetaljer havde betydning. Valg af spænd på tegnniveau generaliserede bedre end opdeling ved linje- eller tokengrænser, fordi rigtige markører står midt i tokens. At anvende FIM på kontekstniveau, efter at dokumenterne er pakket i træningssekvenser, slog anvendelse pr. dokument. Og at tilføje FIM ved finjustering af en eksisterende model var markant mindre beregningseffektivt end at have det med under fortræningen. Forfatterne anbefaler en FIM-rate mellem 50 % og 90 % med fælles træning i PSM og SPM, og ud over InCoders benchmarks for infilling af én og flere linjer introducerede de et benchmark for tilfældige spænd bygget på HumanEval.
Andre forskningsspor nåede frem til samme idé. InCoder (Fried et al., 2022) brugte causal masking, hvor maskerede spænd flyttes til slutningen af sekvensen, og kodemodeller som StarCoder udstiller FIM via særlige tokens som <fim_prefix>, <fim_suffix> og <fim_middle>. Da navne og rækkefølge på sentinels varierer mellem modelfamilier, skal en fuldførelsesklient formatere prompten præcis, som modellen blev trænet, ellers falder kvaliteten stille og roligt sammen.
De kendte fejlmåder er praktiske snarere end teoretiske. Modellen kan gentage tekst, der allerede står i suffikset, undlade at udsende sluttokenet og fortsætte, eller lave en midte, der er syntaktisk gyldig, men ignorerer betingelser, som står langt væk i suffikset. Tokenisering ved markøren er en lumsk fejlkilde: Slutter præfikset midt i et ord, ser modellen en usædvanlig tokengrænse, og derfor rykker nogle klienter tilbage til en tokengrænse, før de sender, og tilføjer tegnene igen bagefter. FIM må ikke forveksles med masked language modelling som i BERT, der forudsiger enkelte maskerede tokens bidirektionelt i stedet for autoregressivt at generere et spænd af variabel længde.
Hvad du bør lære først
Alt det, dette bygger på - grundlaget først.
- Inferens
- →Token
- →Forudsigelse af næste token
- →Fill-in-the-middle (FIM)
Relationer
- Del af
- Fortræning (pretraining)
- Forudsætter
- Forudsigelse af næste tokenToken
- Åbner for
- Kodefuldførelse (code completion)
- Bruges sammen med
- Tokenizer
Kilder og videre læsning
Opslagsværker
- Bavarian et al. (2022), Efficient Training of Language Models to Fill in the Middle
- Fried et al. (2022), InCoder - A Generative Model for Code Infilling and Synthesis
Hvor dataene kommer fra
Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.
Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON
Test dig selv
Indlæser…