Desplegueu el vostre model d'aprenentatge automàtic amb Python

python
aprenentatge automàtic
model ML
Desplegueu el vostre model d'aprenentatge automàtic amb Python cover image

Quan treballeu en el camp de la ciència de dades, normalment us trobeu davant d'un nou repte després d'acabar un llarg cicle d'entrenament, afinació i millora. Enhorabona per crear un model ML que tingui un bon rendiment i respongui a les vostres necessitats. Ara el repte que teniu a l'abast és com podeu oferir aquesta bona peça de tecnologia als usuaris previstos? O potser com podeu comunicar eficaçment el vostre resultat amb els grups d'interès de la vostra empresa? O fins i tot com podeu compartir els resultats del vostre model amb els vostres companys de manera eficaç per a una millor col·laboració?

El desplegament de l'aprenentatge automàtic pot ser de vegades difícil, ja que utilitzarem tecnologies i tècniques fora del conjunt d'habilitats habituals necessàries per construir els models.

En aquest article, descobrirem una manera de desplegar models d'aprenentatge automàtic utilitzant només Python. I al llarg del camí, construirem un model de traducció automàtica i una pàgina web.

Així doncs, aquí teniu els passos que veurem:

  1. Ús de models de traducció automàtica Huggingface.

  2. Descobrir Anvil i crear una interfície d'usuari web per al nostre model.

  3. Connectar el backend i el frontend i servir al món la nostra feina!

Construeix un model de traducció automàtica

Huggingface és una comunitat d'IA que treballa per "democratitzar un bon aprenentatge automàtic". Sota aquesta iniciativa, podeu trobar molts models entrenats en diferents tasques d'aprenentatge automàtic: segmentació d'imatges, text a veu, generació de text... i també traducció automàtica!

La traducció automàtica és simplement una tasca de traducció entre dos idiomes realitzada per un programari, en el nostre cas, un model d'aprenentatge automàtic construït amb transformadors.

Un transformador és una arquitectura d'aprenentatge profund basada en l'atenció. Posem-lo en marxa a la teva màquina!

Utilitzarem transformers, una biblioteca de Python per descarregar el model MT i realitzar una traducció.

pip install torch
pip install transformers

Després d'instal·lar els paquets necessaris, importeu els mòduls següents:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

Aconseguim un model que tradueixi una frase de l'alemany a l'anglès. Necessitem el nom del model:

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

Ara importem el model entrenat i el tokenitzador mitjançant les següents línies:

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

La mida de la descàrrega és d'uns 300 MB, després d'acabar podeu emmagatzemar el model en un directori local mitjançant el següent:

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

Fem el model:

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])

Ara hauríeu de tenir la traducció a l'anglès de la frase emmagatzemada a words[0].

Descobreix Anvil i crea una interfície d'usuari web

Anvil és un marc i una pila de solucions que us permeten crear aplicacions web utilitzant només codi Python. Té un editor d'arrossegar i deixar anar per crear una interfície d'usuari web i us permet connectar el codi de la vostra màquina local a la interfície d'usuari que creeu i allotjar la vostra aplicació donant-vos un enllaç que podeu compartir.

Per tant, comencem per crear una aplicació des d'aquí. Trieu l'aplicació en blanc i després el disseny del material.

Hauríeu de veure alguna cosa com això:

Anvil

Ara comptaré amb tu per utilitzar l'editor i crear alguna cosa semblant al següent:

Anvil Editor

En aquesta senzilla interfície d'usuari, tenim dos desplegables per triar els idiomes d'origen i de destinació. També tenim un TextBox per introduir el text font i un component richText per mostrar el text traduït. També podeu veure un botó per iniciar la tasca de traducció.

Per sincronitzar-se amb els fragments de codi que veureu a continuació, doneu els mateixos identificadors als components. A continuació podeu trobar un exemple d'on podeu establir l'identificador d'un component:

Anvil Editor Rename Component

Els identificadors que fem servir són:

Funció Onclick

Hem afegit un botó que s'utilitza per iniciar la traducció. Des del vostre editor, feu clic al botó i desplaceu-vos cap avall al tauler de propietats. A la part inferior, veureu una secció d'esdeveniments. A la zona de text al costat de "clic", introduïu "tradueix" i després feu clic a la fletxa a la dreta d'aquesta zona de text.

Això us portarà a la vista de codi on veureu algun codi Python generat automàticament.

Trobareu que l'enclusa ha afegit automàticament una funció anomenada traducir. Es cridarà cada vegada que es faci clic al botó de la nostra interfície d'usuari.

Aquí és com hauria de ser la funció:

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

Aquesta funció realitza 3 tasques principals:

  1. Obteniu informació de la IU

  2. Envieu la informació al nostre backend mitjançant la funció de servidor "traducció" (ho explicarem a la següent secció)

  3. Envieu el text traduït a la IU.

Funció de servidor

Centrem-nos en aquesta línia de codi:

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

Utilitzem anvil.server.call per cridar una funció de servidor anomenada traducció que definirem al nostre codi de fons a la màquina local.

Aquesta funció servirà com a connexió entre la interfície d'usuari web i el codi de fons que s'executarà al nostre model de traducció automàtica.

Com heu observat també enviem els paràmetres d'aquesta funció a la funció anvil.server.call.

Desplegueu el nostre model MT

Primer instal·lem l'enclusa

pip install anvil-uplink

Ara hem construït la nostra interfície web a l'editor d'enclusa i tenim blocs de codi bàsics per executar el nostre model de traducció automàtica i fer una traducció.

El següent pas és definir la funció del servidor que hem comentat a la secció anterior.

Aquí teniu el codi de la funció:

@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]

La funció agafarà els 3 paràmetres enviats des del frontend, convertirà els idiomes d'origen i de destinació als codis d'idioma respectius i després carregarà els models i calcularà la traducció i retornarà el resultat.

La manera de declarar aquesta funció a l'enclusa com a funció de servidor és utilitzant el decorador

@anvil.server.callable.

Tenim un últim pas a fer per connectar el codi de fons que podem executar en un quadern jupyter a la nostra aplicació d'enclusa.

Aneu a l'editor en línia d'enclusa, feu clic a la icona d'engranatge i, a continuació, feu clic a "Enllaç ascendent...".

Vegeu la pantalla següent

Anvil Editor Uplink

Veureu que apareix una finestra emergent i, a continuació, feu clic a "Activa l'enllaç ascendent del servidor per a aquesta aplicació" per obtenir el codi de connexió que copieu.

Anvil Uplink

Enganxeu el codi a la línia de codi següent:

anvil.server.connect("code here")

Aquesta línia iniciarà un servidor que connecta el vostre script de codi local o quadern jupyter a l'aplicació enclusa amb la funció traducció registrada com a funció de servidor.

Pas final

Fins a aquest punt, teniu el vostre servidor de fons en funcionament amb una funció de servidor que carrega el model de traducció automàtica i fa la traducció després de tenir en compte els paràmetres enviats des de la interfície. Aquesta figura resumeix el que hem implementat junts fins ara.

Anvil Uplink

Un darrer pas és executar l'aplicació fent clic al botó d'execució a la part superior central de l'editor d'enclusa.

Després d'executar l'aplicació, veureu a l'extrem superior dret un botó "publicar aquesta aplicació" que us donarà un enllaç que podreu compartir per accedir a l'aplicació i fer la vostra traducció!

Conclusió

Seguint aquest article, heu pogut implementar un model MT i crear una interfície web per utilitzar-lo.

Encara hi ha molt per descobrir sobre com desplegar de manera eficaç un model amb enclusa, però ara teniu els fonaments bàsics per començar el vostre viatge de desplegament i ampliar el potencial dels vostres coneixements previs en Python per fer molt més!

Vine a un dels nostres tallers gratuïts

Comença la teva carrera com a científic de dades amb els nostres tallers gratuïts, que es basen en un currículum adaptable i estan guiats per experts del sector.

Component

ID

Desplegament de l'idioma d'origensource_lang
Llengua desplegable de destinaciódest_lang
Idioma font TextBoxtext_origen
Text enriquit de text traduïttext_traduït

Career Services background pattern

Serveis de carrera

Contact Section background image

Seguim en contacte

Code Labs Academy © 2024 Tots els drets reservats.