Dirbdami duomenų mokslo srityje dažniausiai susiduriate su nauju iššūkiu, kai baigiate ilgą treniruočių, koregavimo ir tobulėjimo ciklą. Sveikiname sukūrus ML modelį, kuris turi gerą našumą ir atitinka jūsų poreikius. Dabar jūsų laukia iššūkis – kaip pristatyti šią gražią technologiją numatytiems vartotojams? O gal kaip galite efektyviai perteikti savo rezultatą su suinteresuotosiomis savo įmonės šalimis? Ar net kaip galite efektyviai pasidalinti modelio rezultatais su kolegomis, kad galėtumėte geriau bendradarbiauti?
Įdiegti mašininį mokymąsi kartais gali būti sunku, nes naudosime technologijas ir metodus iš įprastų įgūdžių rinkinio, reikalingo modeliams kurti.
Šiame straipsnyje mes ketiname atrasti būdą, kaip įdiegti mašininio mokymosi modelius naudojant tik python. Be to, mes sukursime mašininio vertimo modelį ir tinklalapį.
Taigi čia yra žingsniai, kuriuos matysime:
-
Naudojant Huggingface mašininio vertimo modelius.
-
Atraskite Anvil ir sukurkite žiniatinklio vartotojo sąsają mūsų modeliui.
-
Užpakalinės ir priekinės sistemos sujungimas ir mūsų darbo aptarnavimas pasauliui!
Sukurkite mašininio vertimo modelį
Huggingface yra AI bendruomenė, siekianti „demokratizuoti gerą mašininį mokymąsi“. Pagal šią iniciatyvą galite rasti daug apmokytų skirtingų mašininio mokymosi užduočių modelių: vaizdo segmentavimo, teksto į kalbą, teksto generavimo ir taip pat mašininio vertimo!
Mašininis vertimas yra tiesiog vertimo tarp dviejų kalbų užduotis, kurią atlieka programinė įranga, mūsų atveju, mašininio mokymosi modelis, sukurtas naudojant transformatorius.
Transformatorius yra gilaus mokymosi architektūra, pagrįsta dėmesiu. Paleiskite jį jūsų kompiuteryje!
MT modeliui atsisiųsti ir vertimui atlikti naudosime transformerius, python biblioteką.
pip install torch
pip install transformers
Įdiegę reikiamus paketus, importuokite šiuos modulius:
from transformers import MarianTokenizer, MarianMTModel
from typing import List
Paimkime modelį, kuris verčia sakinį iš vokiečių į anglų kalbą. Mums reikia modelio pavadinimo:
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Dabar importuokime išmokytą modelį ir tokenizatorių naudodami šias eilutes:
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
Atsisiuntimo dydis yra apie 300 mb, baigę modelį galite išsaugoti vietiniame kataloge naudodami šiuos veiksmus:
model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")
Pažiūrėkime 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])
Dabar turėtumėte turėti sakinio vertimą į anglų kalbą, saugomą „žodžiais[0]“.
Atraskite Anvil ir sukurkite žiniatinklio vartotojo sąsają
Anvil yra sistema ir sprendimų krūva, leidžianti kurti žiniatinklio programas naudojant tik python kodą. Jame yra vilkimo redagavimo priemonė, skirta sukurti žiniatinklio vartotojo sąsają, ir ji leidžia prijungti kodą iš vietinio įrenginio prie sukurtos vartotojo sąsajos ir priglobti programą, suteikiant nuorodą, kurią galite bendrinti.
Taigi pradėkime nuo programos kūrimo iš čia. Pasirinkite tuščią aplikaciją, tada medžiagos dizainą.
Turėtumėte pamatyti kažką panašaus:
Dabar tikėsiuosi, kad naudosite redaktorių ir sukursite kažką panašaus į toliau pateiktą:
Šioje paprastoje vartotojo sąsajoje turime du išskleidžiamuosius meniu šaltinio ir paskirties kalboms pasirinkti. Taip pat turime „TextBox“ šaltinio tekstui įvesti ir „richText“ komponentą, kad būtų rodomas išverstas tekstas. Taip pat galite pamatyti mygtuką, kad pradėtumėte vertimo užduotį.
Norėdami sinchronizuoti su kodo fragmentais, kuriuos matysite toliau, suteikite komponentams tuos pačius ID. Žemiau rasite pavyzdį, kur galite nustatyti komponento ID:
Mūsų naudojami ID:
Komponentas |
ID |
---|---|
Pirminės kalbos išskleidžiamasis meniu | source_lang |
Paskirties kalbos išskleidžiamasis meniu | dest_lang |
Pirminė kalba TextBox | šaltinio_tekstas |
Išverstas tekstas RichText | išverstas_tekstas |
Funkcija Onclick
Pridėjome mygtuką, kuris naudojamas vertimui pradėti. Redagavimo priemonėje spustelėkite mygtuką, tada ypatybių skydelyje slinkite žemyn. Apačioje pamatysite įvykių skyrių. Teksto zonoje šalia „spustelėkite“ įveskite „išversti“, tada spustelėkite rodyklę, esančią šios teksto zonos dešinėje.
Taip pateksite į kodo rodinį, kuriame pamatysite tam tikrą automatiškai sugeneruotą python kodą.
Pamatysite, kad priekalas automatiškai pridėjo funkciją, vadinamą vertimu. Jis bus iškviestas kiekvieną kartą, kai spustelėsite mygtuką mūsų vartotojo sąsajoje.
Štai kaip turėtų atrodyti funkcija:
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
Ši funkcija atlieka 3 pagrindines užduotis:
-
Gaukite informaciją iš vartotojo sąsajos
-
Išsiųskite informaciją į mūsų užpakalinę programą naudodami serverio funkciją „vertimas“ (tai paaiškinsime kitame skyriuje)
-
Nusiųskite išverstą tekstą į vartotojo sąsają.
Serverio funkcija
Sutelkime dėmesį į šią kodo eilutę:
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
Naudojame anvil.server.call, kad iškviestume serverio funkciją, vadinamą „translation“, kurią apibrėžsime vietinio kompiuterio užpakalinės programos kode.
Ši funkcija veiks kaip ryšys tarp žiniatinklio vartotojo sąsajos ir užpakalinio kodo, kuris veiks mūsų mašininio vertimo modelyje.
Kaip pastebėjote, šios funkcijos parametrus taip pat siunčiame funkcijoje anvil.server.call
.
Įdiekite mūsų MT modelį
Pirmiausia įdiekime priekalą
pip install anvil-uplink
Dabar sukūrėme žiniatinklio sąsają priekalų rengyklėje ir turime pagrindinius kodo blokus, kad galėtume paleisti mašininio vertimo modelį ir atlikti vertimą.
Kitas žingsnis – apibrėžti serverio funkciją, kurią aptarėme ankstesniame skyriuje.
Čia yra funkcijos kodas:
@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]
Funkcija paims 3 parametrus, siunčiamus iš sąsajos, konvertuos šaltinio ir paskirties kalbas į atitinkamus kalbos kodus, tada įkels modelius, apskaičiuos vertimą ir pateiks rezultatą.
Šią funkciją galima paskelbti priekalu kaip serverio funkciją naudojant dekoratorių
„@anvil.server.callable“.
Turime atlikti paskutinį veiksmą, kad prijungtume pagrindinį kodą, kurį galime paleisti „jupyter“ nešiojamajame kompiuteryje, su priekalo programa.
Eikite į priekalo internetinį redaktorių, spustelėkite krumpliaračio piktogramą, tada spustelėkite „Įkelti...“.
Žiūrėkite žemiau esantį ekraną
Pamatysite iššokantįjį langą, tada spustelėkite „Įgalinti šios programos serverio nukreipimą“, kad gautumėte nukopijuotą ryšio kodą.
Įklijuojate kodą į šią kodo eilutę:
anvil.server.connect("code here")
Ši eilutė paleis serverį, kuris sujungia jūsų vietinio kodo scenarijų arba „jupyter“ bloknotą su priekalo programa su funkcija „vertimas“, užregistruota kaip serverio funkcija.
Paskutinis žingsnis
Šiuo metu jūsų vidinis serveris veikia su serverio funkcija, kuri įkelia mašininio vertimo modelį ir atlieka vertimą, atsižvelgdama į parametrus, siunčiamus iš sąsajos. Šiame paveiksle apibendrinama tai, ką iki šiol kartu įgyvendinome.
Paskutinis veiksmas yra paleisti programą spustelėjus paleisties mygtuką viršutiniame priekalo redaktoriaus centre.
Paleidę programą, viršutiniame dešiniajame kampe matote mygtuką „Paskelbti šią programą“, kuris suteiks jums nuorodą, kurią galėsite bendrinti, kad pasiektumėte programą ir atliktumėte vertimą!
Išvada
Vadovaudamiesi šiuo straipsniu galėjote įdiegti MT modelį ir sukurti žiniatinklio sąsają, kad galėtumėte jį naudoti.
Dar reikia daug ką atrasti, kaip efektyviai įdiegti modelį naudojant priekalą, bet dabar turite pagrindus, kad pradėtumėte diegimo kelionę ir praplėstumėte ankstesnių Python žinių potencialą, kad nuveiktumėte daug daugiau!
Ateikite į vieną iš mūsų nemokamų seminarų
Pradėkite savo, kaip duomenų mokslininko, karjerą mūsų nemokamuose seminaruose, kurie yra pagrįsti pritaikoma mokymo programa ir vadovaujami pramonės ekspertų.