123.398 plantebeskrivelser på 16 sprog. Tekst der allerede var skrevet og bare skulle findes på femten sprog mere.
Skal teksten skrives eller bare oversættes
PlantGeekz findes på 16 sprog. En del af teksten er skrevet med en betalt model, fordi den skulle være rigtig. Resten bliver oversat på vores egen GPU, fordi der er hundrede tusind af dem. Linjen mellem de to er ikke størrelsen, og det tog os et stykke tid at finde ud af.
Den købte bunke er den største
Da appen skulle på 16 sprog, så det ud som én opgave. Det er to, og de har næsten intet til fælles. Den ene er at skrive noget, der ikke findes i forvejen, og få fagudtryk og botaniske navne rigtige. Den anden er at tage tekst, der allerede er skrevet, og få den til at findes på femten sprog mere. Vi prøvede at løse dem med det samme værktøj, og det var den dyre måde at lære forskellen på.
412 redaktionelle slægts- og familieguider, hver på 16 sprog. De skulle skrives fra bunden, ikke bare oversættes.
Knapper, labels og fejlbeskeder i app og API. Ingenting i mængde, men den tekst brugeren læser hver eneste dag.
Læg mærke til rækkefølgen. Det vi betaler for, fylder mere end det, vi kører selv. Mængden afgør altså ikke noget som helst.
Skrive er noget andet end at oversætte
Det så ud som en beslutning om mængde. Det er en beslutning om, hvad teksten skal igennem.
- Hub-artiklerne: 412 slægts- og familieguider, skrevet fra research
- De godt tolv hundrede UI-strenge i app og API
- Alt hvor et botanisk navn eller et fagudtryk skal være rigtigt første gang
- Alt hvor tone og redaktionel dømmekraft er en del af opgaven
- De 123.398 plantebeskrivelser, der allerede var skrevet på engelsk
- Brugerindhold i feedet, som skal oversættes live og aldrig holder op
- Alt hvor teksten findes i forvejen og bare skal skifte sprog
- Alt der indeholder noget, en bruger har skrevet til en anden bruger
En hub-artikel er en pasningsguide for en hel slægt. Den skal researches, den skal have en holdning, og den skal bruge de rigtige ord om planten. Det er skrivearbejde, og det er præcis der, en dyr model er pengene værd. De 412 hubs findes på 16 sprog hver, og det er den dyreste enkeltpost i hele projektet. Den var det værd.
Plantebeskrivelserne er den modsatte opgave. De var skrevet i forvejen, der er hundrede tusind af dem, og ingen læser dem alle sammen. Der skal ingen dømmekraft til. Der skal bare stå det samme på femten sprog mere, og det er noget helt andet at bede om.
Den billige model er ikke genvejen
Det oplagte greb er at flytte det store arbejde ned på en billigere model og blive ved med at købe. Det virker ikke her. Vi har målt det på vores eget indhold: de små og mellemstore modeller driver af på botanisk latin og fagudtryk. De omskriver et slægtsnavn, de laver et kemisk stof om til et andet, og de gør det stille og roligt uden at markere, at de var i tvivl. Et forkert artsnavn er værre end ingen tekst, for det ser rigtigt ud.
Så den billige kolonne findes ikke for den her slags tekst. Enten køber man den dyre model, eller også gør man det selv. Og det ændrer regnestykket fuldstændigt. De 34 millioner tegn, der ligger i databasen nu, svarer til cirka ti millioner tokens ind og ni millioner ud. På den model, der faktisk kan finde ud af det, er det et par hundrede dollars. Til at overse, hvis det var hele opgaven.
Men vi er cirka to procent færdige. Der er tekst på 9.428 planter, og målet er alle de omkring 450.000 arter. Ganges det op, står der over ti tusind dollars for én kørsel. Og vi har allerede lavet den kørsel om én gang, fordi den første oversættelsesmodel viste sig at klare fagudtryk og kinesisk dårligt. På vores egen maskine kostede den fejl nogle timers GPU-tid. På en målt regning havde den kostet det hele en gang til.
Første kørsel
Den er den, alle regner på, og den er som regel til at betale. Det er også den eneste, der står i budgettet, når nogen beslutter at købe sig til det.
Alle kørslerne bagefter
Kildeteksten bliver rettet. Et sprog kommer til. En model viser sig at være dårlig til fagsproget. Hver af de ting koster hele beløbet igen, og de sker oftere, end man tror, mens indholdet stadig bliver bygget op.
Det der aldrig stopper
Brugerindhold skal oversættes, mens folk skriver, og det holder aldrig op. Det er den eneste post, man ikke kan sætte et loft på, og den vokser præcis lige så hurtigt, som produktet lykkes.
Hvad der faktisk står og kører
Ingen har trænet noget. Vi har hentet en model, der er tunet til den ene opgave, og sat den til at lave den ene opgave.
Find sproget
En lille sprogdetektor på en megabyte afgør, hvad teksten er skrevet på. Den kører på CPU og fylder ingenting. Er kilde og mål det samme sprog, stopper det her.
Gem det, der ikke må oversættes
Omtaler af brugere og planter og tags bliver maskeret, før teksten sendes af sted, og sat tilbage bagefter. Uden det trin forsvandt et @navn undervejs, og det tog et stykke tid at opdage.
Oversæt
translategemma, en oversættelses-tunet Gemma 3 på fire milliarder parametre, kører i en lokal Ollama på den samme GPU som plantegenkendelsen. En plantebeskrivelse tager under tre sekunder, mens maskinen samtidig laver tre andre ting.
Gem svaret
Resultatet ligger i databasen. Den samme tekst bliver aldrig oversat to gange, og det er faktisk den billigste optimering i hele kæden.
Pointen ved en oversættelses-tunet model er, at den holder på de ord, den ikke forstår, i stedet for at gætte på dem. Det er præcis den egenskab, en lille alment tunet model mangler, og grunden til at den her opgave godt kan flyttes hjem, selvom skrivearbejdet ikke kan.
Det er ikke gratis, det er bare en anden slags regning
Man sparer tokens ved at flytte det hjem. Man betaler et andet sted, og det skal med i regnestykket.
Du skal selv måle kvaliteten
Ingen fortæller dig, at modellen driver af på fagudtryk. Det opdager du ved selv at læse noget af det igennem på et sprog, du kan. Vi gjorde det for sent, og det er den fejl, jeg ville lave anderledes.
Den skal passes
Der er en container mere at holde kørende, en model mere at opdatere og en GPU, der skal deles med andre ting. Det er ikke meget arbejde, men det er ikke nul.
Det tager tid i stedet for penge
Et par sekunder pr. tekst bliver til dage, når der er hundrede tusind af dem. Det kører i baggrunden og generer ingen, men det er ikke noget, der er færdigt i eftermiddag.
Pointen er ikke, at man skal køre alting selv. Vi betaler stadig for den dyre model, hvor den er pengene værd, og den bunke er større end den, vi kører hjemme. Pointen er, at spørgsmålet ikke er hvor meget tekst der er. Spørgsmålet er, om teksten skal skrives eller bare oversættes. Skal den skrives, så køb den bedste model, du har råd til. Skal den bare oversættes, så er en lille specialiseret model på din egen maskine både billigere og bedre end en billig generel model, du betaler for.
Mere at læse
Plantegenkendelse på egen GPU
Sådan sætter PlantGeekz navn på et plantefoto med BioCLIP 2 på vores egen GPU. Hvad den kan, hvad den ikke kan, og hvorfor det er en fordel at have den stående hjemme.
Store datamængder
Hvad der sker med et system, når tabellerne vokser fra hundrede tusind rækker til tyve millioner. Hvad det koster ikke at have styr på datamodellen, og hvad jeg gør ved det.
Har I noget, der skal bygges ordentligt?
Skriv et par linjer om, hvad I sidder med. Så vender jeg tilbage med, hvad jeg tænker. Også hvis svaret er, at en anden løser det bedre.