{"licence":{"name":"CC BY-SA 4.0","spdx":"CC-BY-SA-4.0","url":"https://creativecommons.org/licenses/by-sa/4.0/","attribution":"Atlas, a bilingual technical dictionary (https://cmaintz.github.io/tech-atlas/)"},"id":"ai/fill-in-the-middle","url":{"en":"https://cmaintz.github.io/tech-atlas/en/terms/ai/fill-in-the-middle/","da":"https://cmaintz.github.io/tech-atlas/da/terms/ai/fill-in-the-middle/"},"term":{"en":"Fill-in-the-middle (FIM)","da":"Fill-in-the-middle (FIM)"},"aka":{"en":["FIM","infilling","code infilling"],"da":["FIM","infilling"]},"domain":["ai"],"cluster":"ai-coding","layer":"training","status":"current","era":2022,"summary":{"en":"A training trick that teaches a model to write the missing piece between the text before a gap and the text after it.","da":"Et træningstrick, der lærer en model at skrive det manglende stykke mellem teksten før et hul og teksten efter det."},"body":{"formal":{"en":"During pretraining, a document is cut into a start, a middle and an end, and the pieces are reordered with special marker tokens as start, end, then middle; ordinary next-token prediction on that order teaches the model to produce a middle that fits both sides.","da":"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."},"plain":{"en":"Like fitting the last piece of a jigsaw - the pieces on every side of the hole show its shape far better than looking at one side alone.","da":"Som at finde den sidste brik i et puslespil - brikkerne på alle sider af hullet viser formen langt bedre end én side alene."},"inPractice":{"en":"At a Danish university, a developer clicks into the middle of a half-written function in the exam booking app; the editor sends the lines above and below, and the model returns only the few lines that belong in the gap.","da":"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."},"whyItMatters":{"en":"Real editing rarely happens at the end of a file, so without it a model would guess blindly about everything below the spot being edited and suggest lines that clash with the rest.","da":"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."}},"deepDive":{"en":"The standard reference is Bavarian et al. (OpenAI, 2022), \"Efficient Training of Language Models to Fill in the Middle\". A training document is split at two uniformly random character positions into prefix, middle and suffix, then serialised with sentinel tokens. In PSM order the sequence is <PRE> prefix <SUF> suffix <MID> middle <EOT>; in SPM order the suffix comes first, so prefix and middle are contiguous, which plays better with key-value caching when the user keeps typing. The transformed sequence is trained with the ordinary causal next-token loss, so no architectural change is needed; at inference the client supplies everything up to <MID> and the model generates the middle until it emits the end-of-text token.\n\nThe paper's central empirical claim is \"FIM for free\": applying the transformation to a large share of pretraining documents (they tested FIM rates up to 90%) did not measurably hurt left-to-right performance, while it gave strong infilling ability. Several design details mattered. Character-level span selection generalised better than splitting on line or token boundaries, because real cursors sit mid-token. Applying FIM at the context level, after documents are packed into training sequences, beat applying it per document. And adding FIM by fine-tuning an existing model was markedly less compute-efficient than including it during pretraining. The authors recommend a FIM rate between 50% and 90% with joint PSM and SPM training, and alongside InCoder's single-line and multi-line infilling benchmarks they introduced a random-span infilling benchmark built on HumanEval.\n\nOther lines of work converged on the same idea. InCoder (Fried et al., 2022) used causal masking, moving masked spans to the end of the sequence, and code models such as StarCoder expose FIM through dedicated tokens like <fim_prefix>, <fim_suffix> and <fim_middle>. Because sentinel names and ordering differ between model families, a completion client must format prompts exactly as the model was trained, or quality collapses silently.\n\nKnown failure modes are practical rather than theoretical. The model may regenerate text that already exists in the suffix, fail to emit the end token and run on, or produce a middle that is syntactically valid but ignores constraints stated far away in the suffix. Tokenisation at the cursor is a subtle source of error: if the prefix ends in the middle of a word, the model sees an unusual token boundary, which is why some clients back up to a token boundary before sending and re-append the characters afterwards. FIM should not be confused with masked language modelling as in BERT, which predicts isolated masked tokens bidirectionally rather than generating a variable-length span autoregressively.","da":"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.\n\nArtiklens 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.\n\nAndre 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.\n\nDe 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."},"edges":[{"type":"requires","to":"ai/next-token-prediction","why":{"en":"It does not change how the model predicts; it only reorders the text so that plain left-to-right prediction ends up filling the gap.","da":"Det ændrer ikke, hvordan modellen forudsiger; det stiller blot teksten om, så almindelig forudsigelse fra venstre mod højre ender med at udfylde hullet."},"confidence":"high","strength":"primary"},{"type":"requires","to":"ai/token","confidence":"high","strength":"normal"},{"type":"part-of","to":"ai/pretraining","why":{"en":"The reordering is applied to a share of the documents during pretraining, so the ability comes built in rather than added afterwards.","da":"Omstillingen anvendes på en del af dokumenterne under fortræningen, så evnen er indbygget i stedet for tilføjet bagefter."},"confidence":"high","strength":"normal"},{"type":"used-with","to":"ai/tokenizer","confidence":"high","strength":"normal"}],"depth":2,"sources":[{"title":"Bavarian et al. (2022), Efficient Training of Language Models to Fill in the Middle","tier":"reference"},{"title":"Fried et al. (2022), InCoder - A Generative Model for Code Infilling and Synthesis","tier":"reference"}],"draft":true}