Lære en maskin å snakke med kunstig intelligens

Vi har lenge drømt om å lage en chatbot vi kan ha dialoger med på norsk. Prosjektet vennen.ai ble startet i fjor med et mål om å få til nettopp dette, og selv om de store resultatene ennå lar vente på seg, har vi oppsamlet mye kunnskap og erfaringer underveis. I og med at det allerede finnes mange chatboter der ute, som både kan snakke norsk og være til nytte, tenkte jeg å gå litt dypere inn i hva det er vi forsøker å få til med vår chatbot.

Hva er egentlig en chatbot?

De fleste har vært borti en eller annen form for chatbot. De dukker opp på alle slags nettsider, og tilbyr seg å hjelpe deg med blant annet å bestille billetter, hente informasjon, gi tips, endre innstillinger eller bestille mat. Personlige assistenter som Google sin Alexia og Apple sin Siri har også gjort sitt inntog i nordmenns hverdag, og kan både føre samtaler og hjelpe deg med påminnelser og gjøremål.

En chatbot er altså en programvare du kan snakke med, og som gjerne gir gode svar på det du lurer på, eller utfører konkrete handlinger for deg.

Vi skiller gjerne mellom to ulike typer chatboter: de som er regelstyrte og de som er basert på maskinlæring. De fleste chatboter man møter på innen kundeservice er av førstnevnte kategori. Det opprettes en stor database med spørsmål og svar, gjerne i tillegg til ulike kodeord. Boten skanner inputen fra brukeren for å finne akkurat disse spørsmålene eller kodeordene, og finner et passende svar. Dette medfører ofte at chatboten blir meget spesifikk. Det vil si at en chatbot på nettsiden til et flyselskap vil kunne hjelpe deg med å bestille billetter, men ikke gi deg informasjon om siste nyheter i aksjemarkedet. En chatbot på en netthandel kan hjelpe deg med å finne ordrenummer eller returinformasjon, men ikke være så god på å bestille takeaway. Disse chatbotene er heller ikke kjent for å holde gode samtaler gående.

Den andre typen chatbot er basert på maskinlæring. Den trenes opp på store mengder data og vil fortsette å lære og bli bedre etter hvert som den brukes. Med store nok mengder data og optimale nevrale nettverk kan det bli tilnærmet umulig å skille bot-genererte svar fra menneskelige. Dette er et område i stadig utvikling, og bare det siste året har det dukket opp flere modeller som gir imponerende resultater. Jeg anbefaler blant annet å sjekke ut OpenAI sin nyeste modell GPT-3 som har imponert utviklere verden over med sin evne til å generere tekst.

I Innovatec er det den sistnevnte type chatbot vi ønsker å utvikle. Den skal først og fremst være god på samtaler, og helst både huske hvem den kommuniserer med og hva som har blitt sagt tidligere.

Hvor er vi nå?

Som nevnt i forrige blogginnlegg har vi allerede laget en chatbot – vennen.ai. Det har vært en særdeles interessant og givende prosess, og vi har tilegnet oss større kunnskap innen programmeringsspråket Python, og spesielt biblioteket for maskinlæring PyTorch. Erfaringen med datainnsamling og -behandling har også vært en svært nyttig del av arbeidet, og kommer til å være viktig også i videre fremdrift.

Utfordringen vi står ovenfor nå er følgende: vi ønsker bedre samtaler. De vi kan føre på nåværende tidspunkt er ikke særlig meningsfylte, og ender som oftest i svaret «jeg vet ikke».

Dette kan i praksis løses på to måter, og helst i kombinasjon: Mer data og et større nevralt nettverk.

Og hvilke størrelser er det snakk om? Foreløpige resultater hos de største aktørene peker mot konklusjonen: jo større jo bedre. Antall parametere i OpenAi sin GPT-3 er på 175 milliarder, til sammenlikning med deres forrige modell som hadde 1.5 milliarder. Og selv med en økning på to størrelsesordener ser det ikke ut til at prestasjonskurven flater ut. Det er derfor grunn til å tro at ytelsen bare kan forbedres med større nettverk. Baksiden ved dette er naturligvis at større nettverk krever mer dataressurser. Treningen av GPT-3 ble også gjort på en supercomputer laget av Microsoft nettopp til dette formålet. Med en vanlig Cloud GPU-instans ville GPT-3 tatt 355 år og 4.6 millioner dollar å trene.

Det er derfor nærliggende å tenke: kan dette gjøres på en annen måte? Trenger vi egentlig finne opp kruttet på nytt? Eller er det noen mulighet for å benytte det som allerede er laget for å lage vår egen norske modell?

Etter litt research tror vi at nettopp det skal være mulig!

Med Transformers-biblioteket til Huggingface er det mulig å laste ned ferdigtrente modeller og benytte disse for ulike språkoppgaver, blant annet klassifisering av tekst og tekstgenerering. Blant disse er de fleste på engelsk, men det er også publisert noen norske modeller som kanskje kan benyttes. I tillegg ser modellen DialoGPT veldig lovende ut, som er basert på GPT-2, men bygget spesifikt for dialog. Den finnes dessverre ikke for norsk ennå, men det kan hende vi kan dra nytte av arkitekturen til nettverket likevel og trene på vår egen data.

Om dette er den rette veien å gå vil tiden vise. Vi er i hvert fall veldig motiverte for å ta dette prosjektet videre og synes læringsprosessen underveis også er veldig gøy.

I neste innlegg tenkte jeg å gi en liten introduksjon til hva dette nevrale nettverket egentlig er, og hvordan det har seg at mange milliarder parametere kan trenes til å føre en samtale. Følg med videre!

Kilder brukt i dette innlegget:

Technology review: https://www.technologyreview.com/2020/07/20/1005454/openai-machine-learning-language-generator-gpt-3-nlp/

GPT-3: https://arxiv.org/abs/2005.14165

DialoGPT: https://arxiv.org/abs/1911.00536

Huggingface Transformers: https://huggingface.co/transformers/

Norske NLP-ressurser: https://github.com/web64/norwegian-nlp-resources

GPT-3, teknisk oversikt: https://lambdalabs.com/blog/demystifying-gpt-3/