Datu-zientzien alorrean lan egiten duzunean, normalean, erronka berri baten aurrean aurkitzen zara entrenamendu, doikuntza eta hobekuntza luze bat amaitu ondoren. Zorionak errendimendu ona duen eta zure beharrei erantzuten dien ML eredu bat eraikitzeagatik. Orain esku artean duzun erronka zera da: nola eman diezaiekezu teknologia polit hau aurreikusitako erabiltzaileei? Edo agian nola komunika diezaiekezu zure emaitza modu eraginkorrean zure enpresako interesdunei? Edo nola parteka ditzakezu zure ereduaren emaitzak zure lankideekin modu eraginkorrean lankidetza hobea izateko?
Ikaskuntza automatikoa zabaltzea batzuetan zaila izan daiteke, ereduak eraikitzeko behar den ohiko trebetasunetik kanpoko teknologiak eta teknikak erabiliko baititugu.
Artikulu honetan, ikaskuntza automatikoko ereduak python soilik erabiliz hedatzeko modu bat ezagutuko dugu. Eta bide horretan, itzulpen automatikoko eredu bat eta web orri bat eraikiko ditugu.
Beraz, hona hemen ikusiko ditugun urratsak:
-
Huggingface itzulpen automatikoko ereduak erabiltzea.
-
Anvil ezagutu eta gure eredurako web UI bat eraikitzea.
-
Backend-a eta frontend-a konektatzea eta munduari gure lana zerbitzatzea!
Eraiki itzulpen automatikoko eredua
Huggingface "makina ikasketa ona demokratizatzeko" lan egiten duen AI komunitatea da. Ekimen honen baitan, trebatutako eredu asko aurki ditzakezu ikaskuntza automatikoko ataza ezberdinetan: irudien segmentazioa, testutik hizketara, testua sortzea... eta itzulpen automatikoa ere!
Itzulpen automatikoa software baten bidez egiten den bi hizkuntzen arteko itzulpen-zeregin bat besterik ez da, gure kasuan, transformadoreekin eraikitako ikaskuntza automatikoaren eredua.
Transformadorea arretan oinarritutako ikaskuntza sakoneko arkitektura bat da. Jar dezagun martxan zure makinan!
transformers, python liburutegia erabiliko dugu MT eredua deskargatzeko eta itzulpen bat egiteko.
pip install torch
pip install transformers
Behar diren paketeak instalatu ondoren, inportatu modulu hauek:
from transformers import MarianTokenizer, MarianMTModel
from typing import List
Lor dezagun esaldi bat alemanetik ingelesera itzultzen duen eredu bat. Ereduaren izena behar dugu:
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Orain inporta ditzagun trebatutako eredua eta tokenizatzailea lerro hauek erabiliz:
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
Deskargaren tamaina 300 MB ingurukoa da, amaitu ondoren eredua tokiko direktorio batean gorde dezakezu honako hau erabiliz:
model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")
Ea eredua:
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])
Orain esaldiaren ingelesezko itzulpena words[0]
-n gordeta izan beharko zenuke.
Ezagutu Anvil eta sortu web UI bat
Anvil python kodea erabiliz soilik web aplikazioak eraikitzeko aukera ematen duen marko bat eta irtenbide pila bat da. Web UI eraikitzeko arrastatu eta jaregin editore bat du eta zure tokiko makinatik kodea eraikitzen duzun UI-ra konektatzeko eta zure aplikazioa ostatatzeko aukera ematen dizu parteka dezakezun esteka bat emanez.
Beraz, has gaitezen [hemen] aplikazio bat sortzen (https://anvil.works/build). Aukeratu aplikazio hutsa eta gero materialaren diseinua.
Horrelako zerbait ikusi beharko zenuke:
Orain zurekin kontatuko naiz editorea erabiltzeko eta honen antzeko zerbait eraikitzeko:
UI sinple honetan, bi DropDown ditugu sorburu eta helmuga hizkuntzak aukeratzeko. Iturburuko testua sartzeko TextBox bat ere badugu eta testu aberatsa testu itzulia bistaratzeko osagai bat. Itzulpen-ataza hasteko Botoi bat ere ikus dezakezu.
Jarraian ikusiko dituzun kode zatiekin sinkronizatzeko, eman ID berdinak osagaiei. Jarraian osagai baten IDa ezar dezakezun adibide bat aurki dezakezu:
Erabiltzen ari garen IDak hauek dira:
Osagaia
ID
Iturburu-hizkuntza DropDown | iturburu_hizkuntza |
Helmuga-hizkuntza DropDown | dest_lang |
Iturburu hizkuntza TextBox | iturburu_testua |
Itzulitako testua RichText | testu_itzultua |
Onclick funtzioa
Itzulpena hasteko erabiltzen den botoi bat gehitu dugu. Zure editoretik egin klik botoian eta joan behera propietateen panelean. Behealdean, gertaera atal bat ikusiko duzu. "Klik" ondoko testu-eremuan, idatzi "itzuli" eta, ondoren, egin klik testu-eremu honen eskuinaldean dagoen gezian.
Honek kodearen ikuspegira eramango zaitu eta bertan automatikoki sortutako python kode batzuk ikusiko dituzu.
Ingudea automatikoki gehitu duela itzulpena izeneko funtzioa ikusiko duzu. Gure IUko botoia sakatzen den bakoitzean deituko da.
Hona hemen funtzioak nolakoa izan behar duen:
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
Funtzio honek 3 zeregin nagusi betetzen ditu:
-
Lortu informazioa UI-tik
-
Bidali informazioa gure backend-era zerbitzariaren "itzulpena" funtzioa erabiliz (hurrengo atalean azalduko dugu)
-
Bidali itzulitako testua UI-ra.
Zerbitzariaren funtzioa
Zentratu gaitezen kode-lerro honetan:
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
Anvil.server.call erabiltzen dugu translation
izeneko zerbitzari-funtzioa deitzeko, gure backend kodean definituko dugun tokiko makinan.
Funtzio honek gure itzulpen automatikoko ereduan exekutatzen den web interfazearen eta backend kodearen arteko konexio gisa balioko du.
Konturatu zarenez funtzio honen parametroak anvil.server.call
funtzioan ere bidaltzen ditugu.
Inplementatu gure MT eredua
Instala dezagun lehenik ingude
pip install anvil-uplink
Orain gure web interfazea ingude editorean eraiki dugu eta oinarrizko kode blokeak ditugu gure itzulpen automatikoko eredua exekutatu eta itzulpen bat egiteko.
Hurrengo urratsa aurreko atalean aztertu dugun zerbitzariaren funtzioa definitzea da.
Hona hemen funtzioaren kodea:
@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]
Funtzioak frontend-etik bidalitako 3 parametroak hartuko ditu, jatorriko eta helmugako hizkuntzak dagozkien hizkuntza-kodeetara bihurtuko ditu eta, ondoren, ereduak kargatu eta itzulpena kalkulatuko du eta emaitza itzuliko du.
Funtzio hau ingudeari zerbitzari funtzio gisa deklaratzeko modua dekoratzailea erabiltzea da
@anvil.server.callable
.
Azken urrats bat egin behar dugu jupyter koaderno batean exekutatu dezakegun backend kodea gure ingude aplikaziora konektatzeko.
Joan ingude lineako editorera, egin klik engranajearen ikonoan eta, ondoren, egin klik "Gora esteka...".
Ikusi beheko pantaila
Popup bat agertuko zaizu, eta egin klik "Gaitu zerbitzariaren gorako esteka aplikazio honetarako" aukeran kopiatzen duzun konexio-kodea lortzeko.
Kodea hurrengo kode lerroan itsatsi duzu:
anvil.server.connect("code here")
Lerro honek zure tokiko kodearen gidoia edo jupyter koadernoa ingude aplikazioarekin konektatzen duen zerbitzari bat abiaraziko du itzulpena
funtzioa zerbitzari funtzio gisa erregistratuta.
Azken urratsa
Puntu honetara arte, zure backend zerbitzaria exekutatzen duzu itzulpen automatikoko eredua kargatzen duen zerbitzari-funtzio batekin eta frontend-etik bidalitako parametroak kontuan hartu ondoren itzulpena egiten du. Irudi honek orain arte elkarrekin gauzatu duguna laburbiltzen du.
Azken urratsa aplikazioa exekutatzea da ingude editorearen goiko erdiko exekutatu botoian klik eginez.
Aplikazioa exekutatu ondoren, goiko eskuineko izkinan "argitaratu aplikazioa" botoi bat ikusiko duzu, aplikaziora sartzeko eta zure itzulpena egiteko parteka dezakezun esteka bat emango dizuna!
Ondorioa
Artikulu hau jarraituz MT eredu bat zabaldu eta hura erabiltzeko web interfaze bat eraiki ahal izan duzu.
Ingudea erabiliz eredu bat modu eraginkorrean zabaltzeko asko dago oraindik ezagutzeko, baina orain zure inplementazio-bidaia hasteko oinarriak dituzu eta Python-en zure aurretiko ezagutzak askoz gehiago egiteko ahalmena areagotzeko!
Zatoz gure doako tailer batera
Hasi zure karrera datu-zientzialari gisa gure doako tailerrak, curriculum moldagarri batean oinarritutakoak eta industriako adituek gidatutakoak.