Wdróż swój model uczenia maszynowego za pomocą języka Python

python
uczenie maszynowe
model ML
Wdróż swój model uczenia maszynowego za pomocą języka Python cover image

Pracując w dziedzinie analityki danych, zwykle po zakończeniu długiej pętli szkoleń, dostrajania i doskonalenia stajesz przed nowym wyzwaniem. Gratulujemy zbudowania modelu uczenia maszynowego, który ma dobrą wydajność i odpowiada Twoim potrzebom. Teraz wyzwanie, przed którym stoisz, brzmi: w jaki sposób możesz dostarczyć ten fajny kawałek technologii docelowym użytkownikom? A może jak efektywnie komunikować swój wynik interesariuszom w Twojej firmie? A nawet w jaki sposób możesz skutecznie udostępniać wyniki swojego modelu współpracownikom, aby zapewnić lepszą współpracę?

Wdrożenie uczenia maszynowego może być czasami trudne, ponieważ będziemy używać technologii i technik wykraczających poza zwykły zestaw umiejętności potrzebnych do tworzenia modeli.

W tym artykule odkryjemy sposób wdrażania modeli uczenia maszynowego przy użyciu samego Pythona. Po drodze zbudujemy model tłumaczenia maszynowego i stronę internetową.

Oto kroki, które zobaczymy:

  1. Korzystanie z modeli tłumaczenia maszynowego Huggingface.

  2. Odkrycie Anvil i zbudowanie internetowego interfejsu użytkownika dla naszego modelu.

  3. Łączymy backend i frontend i służymy światu naszą pracą!

Zbuduj model tłumaczenia maszynowego

Huggingface to społeczność AI działająca na rzecz „demokratyzacji dobrego uczenia maszynowego”. W ramach tej inicjatywy można znaleźć wiele przeszkolonych modeli w zakresie różnych zadań związanych z uczeniem maszynowym: segmentacji obrazu, zamiany tekstu na mowę, generowania tekstu… a także tłumaczenia maszynowego!

Tłumaczenie maszynowe to po prostu zadanie tłumaczenia między dwoma językami wykonywane przez oprogramowanie, w naszym przypadku model uczenia maszynowego zbudowany z transformatorów.

Transformator to architektura głębokiego uczenia się oparta na uwadze. Uruchommy go na Twojej maszynie!

Do pobrania modelu MT i wykonania tłumaczenia użyjemy transformers, biblioteki Pythona.

pip install torch
pip install transformers

Po zainstalowaniu potrzebnych pakietów zaimportuj następujące moduły:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

Zdobądźmy model, który tłumaczy zdanie z języka niemieckiego na angielski. Potrzebujemy nazwę modelu:

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

Zaimportujmy teraz wyszkolony model i tokenizer za pomocą następujących linii:

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

Rozmiar pliku do pobrania wynosi około 300 MB, po zakończeniu możesz zapisać model w lokalnym katalogu, korzystając z następujących poleceń:

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

Powiedzmy 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 powinieneś mieć angielskie tłumaczenie zdania zapisane w words[0].

Odkryj Anvil i zbuduj internetowy interfejs użytkownika

Anvil to framework i zbiór rozwiązań pozwalających budować aplikacje internetowe przy użyciu wyłącznie kodu Pythona. Posiada edytor „przeciągnij i upuść” do tworzenia internetowego interfejsu użytkownika i umożliwia połączenie kodu z komputera lokalnego z interfejsem użytkownika, który budujesz i hostujesz aplikację, udostępniając łącze, które możesz udostępnić.

Zacznijmy więc od stworzenia aplikacji tutaj. Wybierz pustą aplikację, a następnie projekt materiału.

Powinieneś zobaczyć coś takiego:

Anvil

Teraz liczę na to, że skorzystasz z edytora i zbudujesz coś podobnego do poniższego:

Anvil Editor

W tym prostym interfejsie użytkownika mamy dwie listy rozwijane umożliwiające wybór języka źródłowego i docelowego. Mamy także TextBox do wprowadzania tekstu źródłowego i komponent richText do wyświetlania przetłumaczonego tekstu. Możesz także zobaczyć przycisk umożliwiający rozpoczęcie zadania tłumaczenia.

Aby zsynchronizować się z fragmentami kodu, które zobaczysz poniżej, nadaj komponentom te same identyfikatory. Poniżej znajdziesz przykład ustawienia identyfikatora komponentu:

Anvil Editor Rename Component

Identyfikatory, których używamy to:

<głowa>

Komponent

Identyfikator

<ciało>

Lista języków źródłowych język_źródłowy Lista języka docelowego dest_lang Pole tekstowe języka źródłowego tekst_źródłowy Przetłumaczony tekst RichText przetłumaczony_tekst

Funkcja Onclick

Dodaliśmy przycisk służący do rozpoczęcia tłumaczenia. W edytorze kliknij przycisk, a następnie przewiń w dół panel właściwości. Na dole zobaczysz sekcję wydarzeń. W strefie tekstowej obok „kliknij” wpisz „przetłumacz”, a następnie kliknij strzałkę po prawej stronie tej strefy tekstowej.

Spowoduje to przejście do widoku kodu, w którym zobaczysz automatycznie wygenerowany kod Pythona.

Przekonasz się, że kowadło automatycznie dodało funkcję zwaną tłumaczeniem. Będzie wywoływany za każdym razem, gdy zostanie kliknięty przycisk w naszym interfejsie użytkownika.

Oto jak powinna wyglądać funkcja:

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

Funkcja ta realizuje 3 główne zadania:

  1. Uzyskaj informacje z interfejsu użytkownika

  2. Wyślij informację do naszego backendu za pomocą funkcji serwera „tłumaczenie” (wyjaśnimy to w następnej sekcji)

  3. Wyślij przetłumaczony tekst do interfejsu użytkownika.

Funkcja serwera

Skupmy się na tej linijce kodu:

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

Używamy anvil.server.call do wywoływania funkcji serwera zwanej „translation”, którą zdefiniujemy w naszym kodzie zaplecza na maszynie lokalnej.

Ta funkcja będzie służyć jako połączenie między internetowym interfejsem użytkownika a kodem zaplecza, który będzie działał w naszym modelu tłumaczenia maszynowego.

Jak zauważyłeś, parametry tej funkcji przesyłamy również w funkcji anvil.server.call.

Wdróż nasz model MT

Najpierw zainstalujmy kowadło

pip install anvil-uplink

Teraz zbudowaliśmy nasz interfejs sieciowy w edytorze Anvil i mamy podstawowe bloki kodu do uruchomienia naszego modelu tłumaczenia maszynowego i wykonania tłumaczenia.

Następnym krokiem jest zdefiniowanie funkcji serwera, którą omówiliśmy w poprzedniej sekcji.

Oto kod funkcji:

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

Funkcja pobierze 3 parametry przesłane z frontendu, przekonwertuje języki źródłowy i docelowy na odpowiednie kody języków, a następnie załaduje modele, obliczy tłumaczenie i zwróci wynik.

Sposobem zadeklarowania tej funkcji na Anvil jako funkcję serwera jest użycie dekoratora

@anvil.server.callable.

Pozostał nam jeszcze ostatni krok, aby połączyć kod backendu, który możemy uruchomić w notatniku jupyter, z naszą aplikacją Anvil.

Przejdź do edytora online Anvil, kliknij ikonę koła zębatego, a następnie kliknij „Uplink…”.

Zobacz poniższy ekran

Anvil Editor Uplink

Zobaczysz wyskakujące okienko, a następnie kliknij „Włącz łącze do serwera dla tej aplikacji”, aby uzyskać skopiowany kod połączenia.

Anvil Uplink

Wklejasz kod do następującej linii kodu:

anvil.server.connect("code here")

Ta linia uruchomi serwer, który połączy lokalny skrypt kodu lub notatnik jupyter z aplikacją Anvil z funkcją „translation” zarejestrowaną jako funkcja serwera.

Ostatni krok

Do tego momentu masz serwer zaplecza działający z funkcją serwera, która ładuje model tłumaczenia maszynowego i wykonuje tłumaczenie po uwzględnieniu parametrów przesłanych z frontendu. Liczba ta podsumowuje to, co wspólnie wdrożyliśmy do tej pory.

Anvil Uplink

Ostatnim krokiem jest uruchomienie aplikacji poprzez kliknięcie przycisku uruchamiania znajdującego się w górnej części edytora kowadła.

Po uruchomieniu aplikacji w prawym górnym rogu zobaczysz przycisk „opublikuj tę aplikację”, który wyświetli link, który możesz udostępnić, aby uzyskać dostęp do aplikacji i wykonać tłumaczenie!

Wniosek

Postępując zgodnie z tym artykułem, udało Ci się wdrożyć model MT i zbudować interfejs sieciowy, aby z niego korzystać.

Nadal jest wiele do odkrycia, jeśli chodzi o skuteczne wdrażanie modelu za pomocą kowadła, ale teraz masz podstawy, aby rozpocząć podróż wdrożeniową i dalej wykorzystywać potencjał swojej wcześniejszej wiedzy w języku Python, aby osiągnąć znacznie więcej!

Przyjdź na jeden z naszych bezpłatnych warsztatów

Rozpocznij karierę jako analityk danych dzięki naszym bezpłatnym warsztatom, które opierają się na elastycznym programie nauczania i są prowadzone przez ekspertów branżowych.


Career Services background pattern

Usługi związane z karierą

Contact Section background image

Pozostańmy w kontakcie

Code Labs Academy © 2024 Wszelkie prawa zastrzeżone.