Ontplooi jou masjienleermodel met Python

luislang
masjienleer
ML-model
Ontplooi jou masjienleermodel met Python cover image

Wanneer jy in die veld van datawetenskap werk, kom jy gewoonlik voor 'n nuwe uitdaging te staan ​​nadat jy 'n lang lus van opleiding voltooi het, verfyn en verbeter het. Baie geluk met die bou van 'n ML-model wat goeie werkverrigting het en aan jou behoeftes voldoen. Nou is die uitdaging wat jy voorhande het, hoe kan jy hierdie lekker stukkie tegnologie aan die beoogde gebruikers lewer? Of dalk hoe kan jy jou resultaat effektief met belanghebbendes in jou maatskappy kommunikeer? Of selfs hoe kan jy jou modelresultate effektief met jou kollegas deel vir beter samewerking?

Die implementering van masjienleer kan soms moeilik wees, aangesien ons tegnologieë en tegnieke sal gebruik uit die gewone vaardighede wat nodig is om die modelle te bou.

In hierdie artikel gaan ons 'n manier ontdek om masjienleermodelle te ontplooi met slegs luislang. En langs die pad sal ons 'n masjienvertalingsmodel en 'n webblad bou.

So hier is die stappe wat ons gaan sien:

  1. Gebruik Huggingface masjienvertalingsmodelle.

  2. Ontdek Aambeeld en bou 'n web-UI vir ons model.

  3. Verbind backend en frontend en dien die wêreld ons werk!

Bou masjienvertalingsmodel

Huggingface is 'n KI-gemeenskap wat werk om "goeie masjienleer te demokratiseer". Onder hierdie inisiatief kan jy baie opgeleide modelle vind oor verskillende masjienleertake: beeldsegmentering, teks na spraak, teksgenerering ... en ook masjienvertaling!

Masjienvertaling is bloot 'n vertaaltaak tussen twee tale wat uitgevoer word deur 'n stuk sagteware, in ons geval, 'n masjienleermodel wat met transformators gebou is.

'n Transformator is 'n diep leer-argitektuur gebaseer op aandag. Laat ons dit op jou masjien laat loop!

Ons sal transformers, 'n luislang-biblioteek gebruik om die MT-model af te laai en 'n vertaling uit te voer.

pip install torch
pip install transformers

Nadat u die nodige pakkette geïnstalleer het, voer die volgende modules in:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

Kom ons kry 'n model wat 'n sin van Duits na Engels vertaal. Ons benodig die naam van die model:

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

Kom ons voer nou die opgeleide model en die tokenizer in deur die volgende reëls te gebruik:

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

Die aflaaigrootte is ongeveer 300mb, na voltooiing kan u die model in 'n plaaslike gids stoor deur die volgende te gebruik:

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

Kom ons die 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])

Nou behoort jy die Engelse vertaling van die sin in woorde[0] gestoor te hê.

Ontdek Anvil en bou 'n web-UI

Aambeeld is 'n raamwerk en 'n stapel oplossings wat jou toelaat om webtoepassings te bou deur slegs python-kode te gebruik. Dit het 'n sleep-en-drop-redigeerder om web-UI te bou en dit laat jou toe om die kode van jou plaaslike masjien te koppel aan die UI wat jy bou en jou toepassing huisves deur vir jou 'n skakel te gee wat jy kan deel.

Kom ons begin dus met die skep van 'n toepassing vanaf hier. Kies leë toepassing en dan materiaalontwerp.

Jy behoort so iets te sien:

Anvil

Nou sal ek op jou staatmaak om die redigeerder te gebruik en iets soortgelyk aan die volgende te bou:

Anvil Editor

In hierdie eenvoudige UI het ons twee DropDows om die bron- en bestemmingstale te kies. Ons het ook 'n TextBox om die bronteks in te voer en 'n richText-komponent om die vertaalde teks te vertoon. Jy kan ook 'n knoppie sien om die vertaaltaak te begin.

Om te sinchroniseer met die kodebrokkies wat jy hieronder sal sien, gee dieselfde ID's aan die komponente. Hieronder kan jy 'n voorbeeld vind van waar jy die ID van 'n komponent kan stel:

Anvil Editor Rename Component

Die ID's wat ons gebruik is:

Komponent

ID

Onclick-funksie

Ons het 'n knoppie bygevoeg wat gebruik word om die vertaling te begin. Klik in u redigeerder op die knoppie en blaai dan af in die eienskappepaneel. Onderaan sal jy 'n gebeurtenisafdeling sien. In die tekssone langs “klik”, voer “vertaal” in en klik dan op die pyltjie aan die regterkant van hierdie tekssone.

Dit sal jou na die kode-aansig neem waar jy 'n paar outomaties-gegenereerde luislangkode sal sien.

Jy sal vind dat aambeeld outomaties 'n funksie genaamd translate bygevoeg het. Dit sal genoem word elke keer as die knoppie in ons UI geklik word.

Hier is hoe die funksie moet lyk:

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

Hierdie funksie voer 3 hooftake uit:

  1. Kry inligting van die UI

  2. Stuur die inligting na ons backend met behulp van bedienerfunksie “vertaling” (ons sal dit in die volgende afdeling verduidelik)

  3. Stuur die vertaalde teks na die UI.

Bedienerfunksie

Kom ons fokus op hierdie reël kode:

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

Ons gebruik anvil.server.call om 'n bedienerfunksie genaamd 'vertaling' te noem wat ons in ons backend-kode in die plaaslike masjien sal definieer.

Hierdie funksie sal dien as 'n verbinding tussen die web-UI en die backend-kode wat op ons masjienvertalingsmodel sal loop.

Soos u opgemerk het, stuur ons ook die parameters van hierdie funksie in die funksie anvil.server.call.

Ontplooi ons MT-model

Kom ons installeer eers aambeeld

pip install anvil-uplink

Nou het ons ons webkoppelvlak in aambeeldredigeerder gebou en ons het basiese kodeblokke om ons masjienvertalingsmodel uit te voer en 'n vertaling te doen.

Die volgende stap is om die bedienerfunksie wat ons in die vorige afdeling bespreek het, te definieer.

Hier is die kode van die funksie:

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

Die funksie sal die 3 parameters wat vanaf die frontend gestuur word, neem, die bron- en bestemmingstale omskakel na die onderskeie taalkodes en dan die modelle laai en die vertaling bereken en die resultaat terugstuur.

Die manier om hierdie funksie aan aambeeld as 'n bedienerfunksie te verklaar, is deur die versierder te gebruik

@anvil.server.callable.

Ons het 'n laaste stap om te doen om die backend-kode wat ons in 'n jupyter-notaboek kan laat loop, aan ons aambeeldtoepassing te koppel.

Gaan na aambeeld-aanlynredigeerder, klik op die rat-ikoon en klik dan op "Uplink ...".

Sien die skerm hieronder

Anvil Editor Uplink

Jy sal 'n opspringer sien verskyn en klik dan op "Aktiveer bediener-opskakel vir hierdie toepassing" om die verbindingskode te kry wat jy kopieer.

Anvil Uplink

Jy plak die kode in die volgende kodelyn:

anvil.server.connect("code here")

Hierdie reël sal 'n bediener begin wat jou plaaslike kodeskrif of jupyter-notaboek met die aambeeldtoepassing verbind met die funksie vertaling wat as 'n bedienerfunksie geregistreer is.

Finale stap

Tot op hierdie punt het u u backend-bediener aan die gang met 'n bedienerfunksie wat die masjienvertalingsmodel laai en die vertaling doen nadat die parameters wat vanaf die frontend gestuur is, in ag geneem is. Hierdie figuur gee 'n opsomming van wat ons tot dusver saam geïmplementeer het.

Anvil Uplink

'n Laaste stap is om die toepassing te laat loop deur op die hardloop-knoppie bo in die middel van die aambeeldredigeerder te klik.

Nadat u die toepassing laat loop het, sien u in die regter boonste hoek 'n knoppie "publiseer hierdie toepassing" wat vir u 'n skakel sal gee wat u kan deel om toegang tot die toepassing te verkry en u vertaling te doen!

Gevolgtrekking

Deur hierdie artikel te volg, kon u 'n MT-model ontplooi en 'n webkoppelvlak bou om dit te gebruik.

Daar is nog baie om te ontdek oor hoe om 'n model effektief te ontplooi met behulp van aambeeld, maar nou het jy die basiese beginsels om jou ontplooiingsreis te begin en die potensiaal van jou voorkennis in Python te bevorder om baie meer te doen!

Kom na een van ons gratis werkswinkels

Begin jou loopbaan as 'n datawetenskaplike met ons gratis werkswinkels, wat gebaseer is op 'n aanpasbare kurrikulum en gelei word deur kundiges in die bedryf.

Brontaal DropDownbrontaal
Bestemming taal DropDownbestemming_lang
Brontaal TextBoxbronteks
Vertaalde teks RichTextvertaalde_teks

Career Services background pattern

Loopbaandienste

Contact Section background image

Kom ons bly in kontak

Code Labs Academy © 2024 Alle regte voorbehou.