Distribuer maskinlæringsmodellen din med Python

python
maskinlæring
ML-modell
Distribuer maskinlæringsmodellen din med Python cover image

Når du jobber innen datavitenskap, står du vanligvis overfor en ny utfordring etter å ha fullført en lang løkke med trening, finjustering og forbedring. Gratulerer med å bygge en ML-modell som har god ytelse og svarer til dine behov. Nå er utfordringen du har for hånden, hvordan kan du levere denne fine teknologien til de tiltenkte brukerne? Eller kanskje hvordan kan du effektivt kommunisere resultatet med interessenter i din bedrift? Eller til og med hvordan kan du dele modellresultatene dine med kollegene dine effektivt for bedre samarbeid?

Implementering av maskinlæring kan noen ganger være vanskelig siden vi vil bruke teknologier og teknikker utenfor det vanlige ferdighetssettet som trengs for å bygge modellene.

I denne artikkelen skal vi oppdage en måte å distribuere maskinlæringsmodeller kun ved å bruke python. Og underveis skal vi bygge en maskinoversettelsesmodell og en nettside.

Så her er trinnene vi skal se:

  1. Bruke Huggingface maskinoversettelsesmodeller.

  2. Oppdage Anvil og bygge et nettgrensesnitt for modellen vår.

  3. Koble sammen backend og frontend og tjene verden vårt arbeid!

Bygg maskinoversettelsesmodell

Huggingface er et AI-fellesskap som jobber for å «demokratisere god maskinlæring». Under dette initiativet kan du finne mange trente modeller for ulike maskinlæringsoppgaver: bildesegmentering, tekst til tale, tekstgenerering... og også maskinoversettelse!

Maskinoversettelse er ganske enkelt en oversettelsesoppgave mellom to språk utført av et stykke programvare, i vårt tilfelle, en maskinlæringsmodell bygget med transformatorer.

En transformator er en dyp læringsarkitektur basert på oppmerksomhet. La oss få den til å kjøre på maskinen din!

Vi vil bruke transformers, et python-bibliotek for å laste ned MT-modellen og utføre en oversettelse.

pip install torch
pip install transformers

Etter at du har installert de nødvendige pakkene, importerer du følgende moduler:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

La oss få en modell som oversetter en setning fra tysk til engelsk. Vi trenger navnet på modellen:

src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'

La oss nå importere den trente modellen og tokenizeren ved å bruke følgende linjer:

model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)

Nedlastingsstørrelsen er omtrent 300 MB, etter at du er ferdig kan du lagre modellen i en lokal katalog ved å bruke følgende:

model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")

La oss modellen:

text="ich habe keine ahnung"
gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
print(words[0])

Nå bør du ha den engelske oversettelsen av setningen lagret i ord[0].

Oppdag Amvil og bygg et nettgrensesnitt

Anvil er et rammeverk og en stabel med løsninger som lar deg bygge nettapplikasjoner med kun python-kode. Den har en dra-og-slipp-editor for å bygge web-UI, og den lar deg koble koden fra din lokale maskin til brukergrensesnittet du bygger og er vert for applikasjonen ved å gi deg en lenke du kan dele.

Så la oss begynne med å lage en applikasjon fra her. Velg blank applikasjon og deretter materialdesign.

Du bør se noe slikt:

Anvil

Nå vil jeg stole på at du bruker editoren og bygger noe som ligner på følgende:

Anvil Editor

I dette enkle brukergrensesnittet har vi to DropDows for å velge kilde- og destinasjonsspråk. Vi har også en tekstboks for å legge inn kildeteksten og en richText-komponent for å vise den oversatte teksten. Du kan også se en knapp for å starte oversettelsesoppgaven.

For å synkronisere med kodebitene som du vil se nedenfor, gi de samme IDene til komponentene. Nedenfor finner du et eksempel på hvor du kan angi id for en komponent:

Anvil Editor Rename Component

ID-ene vi bruker er:

Komponent

ID

Kildespråk DropDownsource_lang
Destinasjonsspråk DropDowndest_lang
Kildespråk TextBoxkildetekst
Oversatt tekst RichTextoversatt_tekst

Onclick-funksjon

Vi har lagt til en knapp som brukes til å starte oversettelsen. Fra redaktøren din klikker du på knappen og bla nedover i egenskapspanelet. Nederst vil du se en hendelsesdel. I tekstsonen ved siden av "klikk", skriv inn "oversett" og klikk deretter på pilen til høyre for denne tekstsonen.

Dette tar deg til kodevisningen hvor du vil se noe automatisk generert python-kode.

Du vil oppdage at ambolten automatisk har lagt til en funksjon som heter translate. Den vil bli kalt opp hver gang knappen i brukergrensesnittet vårt klikkes.

Slik skal funksjonen se ut:

def translate(self, **event_args):
 """This method is called when the button is clicked"""
 src_lang=self.source_lang.selected_value #get the selected source language
 dest_lang=self.dest_lang.selected_value #get the selected destination language
 text=self.source_text.text   #get the text written in source language
 #call the server function
 translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
 #write the translated text to the UI
 self.translated_text.content=translated_text

Denne funksjonen utfører 3 hovedoppgaver:

  1. Få informasjon fra brukergrensesnittet

  2. Send informasjonen til vår backend ved hjelp av serverfunksjonen "oversettelse" (vi vil forklare det i neste avsnitt)

  3. Send den oversatte teksten til brukergrensesnittet.

Serverfunksjon

La oss fokusere på denne kodelinjen:

translated_text=anvil.server.call("translation",text,src_lang,dest_lang)

Vi bruker anvil.server.call for å kalle en serverfunksjon kalt translation som vi vil definere i vår backend-kode på den lokale maskinen.

Denne funksjonen vil fungere som en forbindelse mellom nettgrensesnittet og backend-koden som vil kjøre på vår maskinoversettelsesmodell.

Som du har lagt merke til sender vi også parametrene til denne funksjonen i funksjonen anvil.server.call.

Implementer MT-modellen vår

La oss først installere ambolt

pip install anvil-uplink

Nå har vi bygget nettgrensesnittet vårt i ambolteditor, og vi har grunnleggende kodeblokker for å kjøre vår maskinoversettelsesmodell og gjøre en oversettelse.

Det neste trinnet er å definere serverfunksjonen som vi har diskutert i forrige avsnitt.

Her er koden til funksjonen:

@anvil.server.callable
def translation(text,src,dest):
 lang_code={"English":"en",
       "German":"de",
       "French":"fr",
       "Spanish":"es"}
      model=MarianMTModel.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest])
 tok=MarianTokenizer.from_pretrained("./models/"+lang_code[src]+"_"+lang_code[dest]+"/tok")
 gen = model.generate(**tok.prepare_seq2seq_batch(src_texts=[text], return_tensors="pt"))
 words: List[str] = tok.batch_decode(gen, skip_special_tokens=True)
 return words[0]

Funksjonen vil ta de 3 parameterne som sendes fra frontend, konvertere kilde- og destinasjonsspråkene til de respektive språkkodene og deretter laste modellene og beregne oversettelsen og returnere resultatet.

Måten å erklære denne funksjonen for ambolt som en serverfunksjon er ved å bruke dekoratoren

@anvil.server.callable.

Vi har et siste trinn å gjøre for å koble backend-koden som vi kan kjøre i en jupyter-notisbok til amboltapplikasjonen vår.

Gå til ambolt online editor, klikk på tannhjulikonet, og klikk deretter på "Uplink...".

Se skjermen nedenfor

Anvil Editor Uplink

Du vil se en popup vises, og klikk deretter på "Aktiver serveroppkobling for denne appen" for å få tilkoblingskoden du kopierer.

Anvil Uplink

Du limer inn koden i følgende kodelinje:

anvil.server.connect("code here")

Denne linjen vil starte en server som kobler ditt lokale kodeskript eller jupyter-notisbok til amboltapplikasjonen med funksjonen oversettelse registrert som en serverfunksjon.

Siste trinn

Til dette punktet har du backend-serveren din som kjører med en serverfunksjon som laster maskinoversettelsesmodellen og gjør oversettelsen etter å ha tatt hensyn til parametrene sendt fra frontend. Denne figuren oppsummerer det vi har gjennomført sammen så langt.

Anvil Uplink

Et siste trinn er å kjøre programmet ved å klikke på kjør-knappen øverst i midten av ambolt-editoren.

Etter å ha kjørt applikasjonen ser du øverst til høyre en knapp "publiser denne appen" som vil gi deg en lenke som du kan dele for å få tilgang til applikasjonen og gjøre oversettelsen din!

Konklusjon

Ved å følge denne artikkelen har du vært i stand til å distribuere en MT-modell og bygge et nettgrensesnitt for å bruke den.

Det er fortsatt mye å finne ut om hvordan du effektivt kan distribuere en modell ved hjelp av ambolt, men nå har du det grunnleggende for å starte din distribusjonsreise og fremme potensialet til forkunnskapene dine i Python til å gjøre mye mer!

Kom til en av våre gratis workshops

Start din karriere som dataforsker med våre gratis workshops, som er basert på en tilpasningsdyktig læreplan og veiledet av bransjeeksperter.


Career Services background pattern

Karrieretjenester

Contact Section background image

La oss holde kontakten

Code Labs Academy © 2024 Alle rettigheter forbeholdes.