Pri práci v oblasti vedy o údajoch sa zvyčajne ocitnete pred novou výzvou po dokončení dlhej slučky školení, dolaďovania a zlepšovania. Blahoželáme vám k vybudovaniu modelu ML, ktorý má dobrý výkon a zodpovedá vašim potrebám. Výzvou, ktorú máte teraz po ruke, je, ako môžete dodať tento pekný kus technológie určeným používateľom? Alebo možno ako môžete efektívne komunikovať svoj výsledok so zainteresovanými stranami vo vašej spoločnosti? Alebo dokonca ako môžete efektívne zdieľať výsledky svojich modelov so svojimi kolegami pre lepšiu spoluprácu?
Nasadenie strojového učenia môže byť niekedy ťažké, pretože budeme používať technológie a techniky mimo obvyklých zručností potrebných na zostavenie modelov.
V tomto článku objavíme spôsob, ako nasadiť modely strojového učenia iba pomocou pythonu. A popri tom vytvoríme model strojového prekladu a webovú stránku.
Takže tu sú kroky, ktoré uvidíme:
-
Používanie modelov strojového prekladu Huggingface.
-
Objavenie Nákovy a vytvorenie webového používateľského rozhrania pre náš model.
-
Prepojenie backendu a frontendu a slúžiť svetu svojou prácou!
Zostavte model strojového prekladu
Huggingface je komunita AI pracujúca na „demokratizácii dobrého strojového učenia“. V rámci tejto iniciatívy môžete nájsť mnoho vyškolených modelov na rôzne úlohy strojového učenia: segmentácia obrázkov, prevod textu na reč, generovanie textu... a tiež strojový preklad!
Strojový preklad je jednoducho úloha prekladu medzi dvoma jazykmi, ktorú vykonáva softvér, v našom prípade model strojového učenia vytvorený pomocou transformátorov.
Transformátor je architektúra hlbokého učenia založená na pozornosti. Spustite to na vašom stroji!
Na stiahnutie modelu MT a vykonanie prekladu použijeme transformers, knižnicu python.
pip install torch
pip install transformers
Po nainštalovaní potrebných balíkov importujte nasledujúce moduly:
from transformers import MarianTokenizer, MarianMTModel
from typing import List
Zoberme si model, ktorý preloží vetu z nemčiny do angličtiny. Potrebujeme názov modelu:
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Teraz importujme trénovaný model a tokenizér pomocou nasledujúcich riadkov:
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
Veľkosť sťahovania je asi 300 MB, po dokončení môžete model uložiť do lokálneho adresára pomocou nasledujúceho:
model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")
Poďme na 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])
Teraz by ste mali mať anglický preklad vety uložený v words[0]
.
Objavte Anvil a vytvorte si webové používateľské rozhranie
Nákova je rámec a balík riešení, ktoré vám umožňujú vytvárať webové aplikácie iba pomocou kódu python. Má editor drag and drop na vytváranie webového používateľského rozhrania a umožňuje vám prepojiť kód z vášho lokálneho počítača s používateľským rozhraním, ktoré vytvárate a hosťovať vašu aplikáciu, a to tak, že vám poskytne odkaz, ktorý môžete zdieľať.
Začnime teda vytvorením aplikácie tu. Vyberte prázdnu aplikáciu a potom dizajn materiálu.
Mali by ste vidieť niečo takéto:
Teraz sa budem spoliehať na to, že použijete editor a vytvoríte niečo podobné ako nasledujúce:
V tomto jednoduchom používateľskom rozhraní máme dva rozbaľovacie zoznamy na výber zdrojového a cieľového jazyka. Máme tiež TextBox na zadanie zdrojového textu a komponent richText na zobrazenie preloženého textu. Môžete tiež vidieť tlačidlo na spustenie úlohy prekladu.
Ak chcete synchronizovať s útržkami kódu, ktoré uvidíte nižšie, priraďte komponentom rovnaké ID. Nižšie nájdete príklad, kde môžete nastaviť ID komponentu:
ID, ktoré používame, sú:
Komponent |
ID |
---|---|
Rozbaľovacia ponuka zdrojového jazyka | source_lang |
Rozbaľovacia ponuka cieľového jazyka | dest_lang |
Textové pole zdrojového jazyka | zdrojový_text |
Preložený text RichText | preložený_text |
Funkcia Onclick
Pridali sme tlačidlo, ktoré sa používa na spustenie prekladu. V editore kliknite na tlačidlo a potom prejdite nadol na paneli vlastností. V dolnej časti uvidíte sekciu udalosti. V textovej zóne vedľa „kliknutia“ zadajte „preložiť“ a potom kliknite na šípku napravo od tejto textovej zóny.
Tým sa dostanete do zobrazenia kódu, kde uvidíte nejaký automaticky generovaný kód pythonu.
Zistíte, že kovadlina automaticky pridala funkciu s názvom translate. Zavolá sa pri každom kliknutí na tlačidlo v našom používateľskom rozhraní.
Takto by mala funkcia vyzerať:
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
Táto funkcia vykonáva 3 hlavné úlohy:
-
Získajte informácie z používateľského rozhrania
-
Pošlite informácie na náš backend pomocou serverovej funkcie „preklad“ (vysvetlíme to v ďalšej časti)
-
Pošlite preložený text do používateľského rozhrania.
Funkcia servera
Zamerajme sa na tento riadok kódu:
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
Anvil.server.call používame na volanie serverovej funkcie s názvom translation
, ktorú zadefinujeme v našom backendovom kóde na lokálnom počítači.
Táto funkcia bude slúžiť ako prepojenie medzi webovým používateľským rozhraním a backendovým kódom, ktorý bude bežať na našom modeli strojového prekladu.
Ako ste si všimli, parametre tejto funkcie posielame aj vo funkcii anvil.server.call
.
Nasaďte náš model MT
Najprv nainštalujte nákovu
pip install anvil-uplink
Teraz sme vytvorili naše webové rozhranie v editore nákov a máme základné bloky kódu na spustenie nášho modelu strojového prekladu a vykonanie prekladu.
Ďalším krokom je definovanie funkcie servera, o ktorej sme hovorili v predchádzajúcej časti.
Tu je kód funkcie:
@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]
Funkcia prevezme 3 parametre odoslané z frontendu, skonvertuje zdrojový a cieľový jazyk na príslušné jazykové kódy a potom načíta modely a vypočíta preklad a vráti výsledok.
Spôsob, ako deklarovať túto funkciu na nákove ako funkciu servera, je pomocou dekorátora
@kovadlina.server.callable
.
Musíme urobiť posledný krok, aby sme pripojili backendový kód, ktorý môžeme spustiť v notebooku Jupyter, k našej aplikácii nákovy.
Prejdite do online editora nákovy, kliknite na ikonu ozubeného kolieska a potom kliknite na „Uplink…“.
Pozrite si obrazovku nižšie
Uvidíte vyskakovacie okno, potom kliknite na „Povoliť server uplink pre túto aplikáciu“, aby ste získali kód pripojenia, ktorý skopírujete.
Kód prilepíte do nasledujúceho riadku kódu:
anvil.server.connect("code here")
Tento riadok spustí server, ktorý pripojí váš lokálny kódový skript alebo notebook jupyter k aplikácii nákovy s funkciou translation
zaregistrovanou ako funkcia servera.
Posledný krok
Do tohto bodu máte svoj backend server spustený s funkciou servera, ktorá načíta model strojového prekladu a vykoná preklad po zohľadnení parametrov odoslaných z frontendu. Tento obrázok sumarizuje to, čo sme doteraz spoločne realizovali.
Posledným krokom je spustenie aplikácie kliknutím na tlačidlo spustiť v strede hornej časti editora nákov.
Po spustení aplikácie uvidíte v pravom hornom rohu tlačidlo „zverejniť túto aplikáciu“, ktoré vám poskytne odkaz, ktorý môžete zdieľať na prístup k aplikácii a na preklad!
Záver
Podľa tohto článku sa vám podarilo nasadiť model MT a vytvoriť webové rozhranie na jeho používanie.
Stále je čo objavovať o tom, ako efektívne nasadiť model pomocou nákovy, ale teraz máte základy, aby ste mohli začať svoju cestu nasadenia a rozšíriť potenciál svojich predchádzajúcich znalostí v Pythone, aby ste mohli urobiť oveľa viac!
Príďte na jeden z našich bezplatných workshopov
Začnite svoju kariéru ako dátový vedec s našimi bezplatnými workshopmi, ktoré sú založené na adaptabilnom učebnom pláne a vedené odborníkmi z odvetvia.