Bereitstellen Ihres Modells für maschinelles Lernen mit Python

python
maschinelles lernen
ML-Modell
Bereitstellen Ihres Modells für maschinelles Lernen mit Python cover image

Wenn Sie im Bereich der Datenwissenschaft arbeiten, stehen Sie in der Regel vor einer neuen Herausforderung, nachdem Sie eine lange Schleife des Trainings, der Feinabstimmung und der Verbesserung abgeschlossen haben. Herzlichen Glückwunsch zur Erstellung eines ML-Modells, das eine gute Leistung aufweist und Ihre Anforderungen erfüllt. Nun stehen Sie vor der Herausforderung, wie Sie dieses gute Stück Technologie an die vorgesehenen Nutzer weitergeben können. Oder wie können Sie Ihr Ergebnis effektiv mit den Beteiligten in Ihrem Unternehmen kommunizieren? Oder sogar, wie können Sie Ihre Modellergebnisse mit Ihren Kollegen teilen, um die Zusammenarbeit zu verbessern?

Der Einsatz von maschinellem Lernen kann manchmal schwierig sein, da wir Technologien und Techniken verwenden, die nicht zu den üblichen Fähigkeiten gehören, die für die Erstellung der Modelle erforderlich sind.

In diesem Artikel werden wir einen Weg entdecken, wie man Modelle für maschinelles Lernen nur mit Python einsetzen kann. Nebenbei werden wir ein maschinelles Übersetzungsmodell und eine Webseite erstellen.

Hier sind also die Schritte, die wir uns ansehen werden:

  1. Verwendung von Huggingface maschinellen Übersetzungsmodellen.

  2. Entdeckung von Anvil und Erstellung einer Web-UI für unser Modell.

  3. Verbinden von Backend und Frontend und Bereitstellen unserer Arbeit für die Welt!

Maschinelles Übersetzungsmodell erstellen

Huggingface ist eine KI-Community, die daran arbeitet, "gutes maschinelles Lernen zu demokratisieren". Unter dieser Initiative finden Sie viele trainierte Modelle zu verschiedenen Aufgaben des maschinellen Lernens: Bildsegmentierung, Text zu Sprache, Texterzeugung... und auch maschinelle Übersetzung!

Maschinelle Übersetzung ist einfach eine Übersetzungsaufgabe zwischen zwei Sprachen, die von einer Software ausgeführt wird, in unserem Fall von einem maschinellen Lernmodell, das mit Transformatoren aufgebaut ist.

Ein Transformator ist eine Deep-Learning-Architektur, die auf Aufmerksamkeit basiert. Bringen wir sie auf Ihrem Rechner zum Laufen!

Wir werden transformers verwenden, eine Python-Bibliothek, um das MT-Modell herunterzuladen und eine Übersetzung durchzuführen.

pip install torch
pip install transformers

Nachdem Sie die benötigten Pakete installiert haben, importieren Sie die folgenden Module:

from transformers import MarianTokenizer, MarianMTModel
from typing import List

Lassen Sie uns ein Modell erstellen, das einen Satz vom Deutschen ins Englische übersetzt. Wir brauchen den Namen des Modells:

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

Nun importieren wir das trainierte Modell und den Tokenizer mit den folgenden Zeilen:

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

Der Download ist ca. 300mb groß, danach können Sie das Modell wie folgt in einem lokalen Verzeichnis speichern:

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

Nehmen wir das Modell:

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

Jetzt sollten Sie die englische Übersetzung des Satzes in words[0] gespeichert haben.

Entdecken Sie Anvil und bauen Sie eine Web-UI

Anvil ist ein Framework und ein Stapel von Lösungen, die es Ihnen ermöglichen, Webanwendungen nur mit Python-Code zu erstellen. Es verfügt über einen Drag-and-Drop-Editor zur Erstellung von Web-UIs und ermöglicht es Ihnen, den Code Ihres lokalen Rechners mit der von Ihnen erstellten UI zu verbinden und Ihre Anwendung zu hosten, indem es Ihnen einen Link gibt, den Sie teilen können.

Beginnen wir also mit der Erstellung einer Anwendung von hier. Wählen Sie leere Anwendung und dann Material Design.

Sie sollten etwas wie das hier sehen:

Anvil

Jetzt zähle ich darauf, dass Sie den Editor benutzen und etwas Ähnliches wie das Folgende erstellen:

Anvil Editor

In dieser einfachen Benutzeroberfläche haben wir zwei DropDowns für die Auswahl der Ausgangs- und Zielsprache. Außerdem gibt es eine Textbox zur Eingabe des Ausgangstextes und eine RichText-Komponente zur Anzeige des übersetzten Textes. Sie können auch eine Schaltfläche sehen, um die Übersetzung zu starten.

Geben Sie den Komponenten die gleichen IDs, um sie mit den Codeausschnitten zu synchronisieren, die Sie weiter unten sehen werden. Unten finden Sie ein Beispiel dafür, wo Sie die ID einer Komponente festlegen können:

Anvil-Editor-Komponente umbenennen

Die von uns verwendeten IDs sind:

Component

ID

Source language DropDownsource_lang
Destination language DropDowndest_lang
Source language TextBoxsource_text
Translated text RichTexttranslated_text

Onclick-Funktion

Wir haben eine Schaltfläche hinzugefügt, die zum Starten der Übersetzung verwendet wird. Klicken Sie in Ihrem Editor auf die Schaltfläche und scrollen Sie dann in der Eigenschaftsleiste nach unten. Unten sehen Sie einen Ereignisbereich. Geben Sie im Textfeld neben "click" "translate" ein und klicken Sie dann auf den Pfeil rechts neben dem Textfeld.

Dadurch gelangen Sie in die Codeansicht, in der Sie einen automatisch generierten Python-Code sehen.

Sie werden feststellen, dass Amboss automatisch eine Funktion namens translate hinzugefügt hat. Sie wird jedes Mal aufgerufen, wenn die Schaltfläche in unserer Benutzeroberfläche angeklickt wird.

So sollte die Funktion aussehen:

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

Diese Funktion erfüllt 3 Hauptaufgaben:

  1. Abrufen von Informationen aus der Benutzeroberfläche

  2. Senden der Informationen an unser Backend mit Hilfe der Serverfunktion "Übersetzung" (wir werden sie im nächsten Abschnitt erklären)

  3. Senden Sie den übersetzten Text an die UI.

Server-Funktion

Konzentrieren wir uns auf diese Code-Zeile:

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

Wir verwenden anvil.server.call, um eine Serverfunktion namens translation aufzurufen, die wir in unserem Backend-Code auf dem lokalen Rechner definieren werden.

Diese Funktion dient als Verbindung zwischen der Web-UI und dem Backend-Code, der auf unserem maschinellen Übersetzungsmodell laufen wird.

Wie Sie bemerkt haben, senden wir auch die Parameter dieser Funktion in der Funktion anvil.server.call.

Einsatz unseres MT-Modells

Lassen Sie uns zuerst anvil installieren

pip install anvil-uplink

Jetzt haben wir unser Webinterface im anvil-Editor erstellt und verfügen über grundlegende Codeblöcke, um unser maschinelles Übersetzungsmodell auszuführen und eine Übersetzung zu erstellen.

Der nächste Schritt ist die Definition der Serverfunktion, die wir im vorherigen Abschnitt besprochen haben.

Hier ist der Code der Funktion:

@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 Funktion nimmt die drei vom Frontend gesendeten Parameter entgegen, konvertiert die Ausgangs- und Zielsprachen in die jeweiligen Sprachcodes, lädt die Modelle, berechnet die Übersetzung und gibt das Ergebnis zurück.

Der Weg, diese Funktion in Anvil als Serverfunktion zu deklarieren, ist durch die Verwendung des Dekorators

@anvil.server.callable`.

Wir müssen noch einen letzten Schritt tun, um den Backend-Code, den wir in einem Jupyter-Notebook ausführen können, mit unserer Anvil-Anwendung zu verbinden.

Gehen Sie zum Anvil Online-Editor, klicken Sie auf das Zahnradsymbol und dann auf "Uplink...".

Siehe den folgenden Bildschirm

Anvil Editor Uplink

Es erscheint ein Popup-Fenster. Klicken Sie auf "Enable server uplink for this app", um den Verbindungscode zu erhalten, den Sie kopieren.

Anvil Uplink

Fügen Sie den Code in die folgende Codezeile ein:

anvil.server.connect("code here")

Diese Zeile startet einen Server, der Ihr lokales Code-Skript oder Jupyter-Notizbuch mit der Amboss-Anwendung verbindet, wobei die Funktion translation als Server-Funktion registriert wird.

Letzter Schritt

Bis zu diesem Punkt läuft Ihr Backend-Server mit einer Serverfunktion, die das maschinelle Übersetzungsmodell lädt und die Übersetzung unter Berücksichtigung der vom Frontend gesendeten Parameter vornimmt. Diese Abbildung fasst zusammen, was wir bis jetzt gemeinsam implementiert haben.

Anvil Uplink

Der letzte Schritt besteht darin, die Anwendung zu starten, indem Sie auf die Schaltfläche "Ausführen" in der oberen Mitte des Amboss-Editors klicken.

Nach dem Ausführen der Anwendung sehen Sie in der oberen rechten Ecke die Schaltfläche "Diese Anwendung veröffentlichen", die Ihnen einen Link gibt, den Sie freigeben können, um auf die Anwendung zuzugreifen und Ihre Übersetzung durchzuführen!

Fazit

Mit Hilfe dieses Artikels konnten Sie ein MÜ-Modell einsetzen und eine Weboberfläche erstellen, um es zu verwenden.

Es gibt noch viel zu entdecken, wie man ein Modell mit Amboss effektiv einsetzt, aber jetzt haben Sie die Grundlagen, um Ihre Einsatzreise zu beginnen und das Potenzial Ihrer Vorkenntnisse in Python zu erweitern, um viel mehr zu tun!

Besuchen Sie einen unserer kostenlosen Workshops

Starten Sie Ihre Karriere als Datenwissenschaftler mit unseren kostenlosen Workshops, die auf einem anpassbaren Lehrplan basieren und von Branchenexperten geleitet werden.


Career Services background pattern

Karrieredienste

Contact Section background image

Lass uns in Kontakt bleiben

Code Labs Academy © 2024 Alle Rechte vorbehalten.