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:
-
Ús de models de traducció automàtica Huggingface.
-
Descobrir Anvil i crear una interfície d'usuari web per al nostre model.
-
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ò:
Ara comptaré amb tu per utilitzar l'editor i crear alguna cosa semblant al següent:
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:
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:
-
Obteniu informació de la IU
-
Envieu la informació al nostre backend mitjançant la funció de servidor "traducció" (ho explicarem a la següent secció)
-
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
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.
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.
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'origen | source_lang |
Llengua desplegable de destinació | dest_lang |
Idioma font TextBox | text_origen |
Text enriquit de text traduït | text_traduït |