Stellen Sie Ihr Modell für maschinelles Lernen mit Python bereit
Aktualisiert auf September 24, 2024 6 Minuten gelesen

Wenn man im Bereich Data Science arbeitet, steht man nach einer langen Schleife aus Training, Feinabstimmung und Verbesserung meist vor einer neuen Herausforderung. Herzlichen Glückwunsch zum Aufbau eines ML-Modells, das eine gute Leistung bietet und Ihren Anforderungen entspricht. Die Herausforderung, vor der Sie stehen, besteht nun darin, wie Sie dieses schöne Stück Technologie den beabsichtigten Benutzern zur Verfügung stellen können. Oder wie können Sie Ihr Ergebnis effektiv mit den Stakeholdern in Ihrem Unternehmen kommunizieren? Oder wie können Sie Ihre Modellergebnisse effektiv 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 über die üblichen Fähigkeiten hinausgehen, die zum Erstellen der Modelle erforderlich sind.
In diesem Artikel werden wir eine Möglichkeit entdecken, Modelle für maschinelles Lernen nur mit Python bereitzustellen. Und nebenbei werden wir ein maschinelles Übersetzungsmodell und eine Webseite erstellen.
Hier sind also die Schritte, die wir sehen werden:
-
Verwendung von Huggingface maschinellen Übersetzungsmodellen.
-
Entdecken Sie Anvil und erstellen Sie eine Web-Benutzeroberfläche für unser Modell.
-
Backend und Frontend verbinden und der Welt unsere Arbeit dienen!
Erstellen Sie ein Modell für maschinelle Übersetzung
Huggingface ist eine KI-Community, die sich dafür einsetzt, „gutes maschinelles Lernen zu demokratisieren“. Im Rahmen dieser Initiative finden Sie viele trainierte Modelle zu verschiedenen maschinellen Lernaufgaben: Bildsegmentierung, Text-to-Speech, Textgenerierung … und auch maschinelle Übersetzung!
Maschinelle Übersetzung ist einfach eine Übersetzungsaufgabe zwischen zwei Sprachen, die von einer Software ausgeführt wird, in unserem Fall einem maschinellen Lernmodell, das mit Transformatoren erstellt wurde.
Ein Transformer ist eine Deep-Learning-Architektur, die auf Aufmerksamkeit basiert. Lassen Sie es uns auf Ihrem Rechner zum Laufen bringen!
Wir werden transformers verwenden, eine Python-Bibliothek, um das MT-Modell herunterzuladen und eine Übersetzung durchzuführen.
pip install torch
pip install transformers
Importieren Sie nach der Installation der benötigten Pakete 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 benötigen den Namen des Modells:
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Importieren wir nun das trainierte Modell und den Tokenizer mit den folgenden Zeilen:
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
Die Downloadgröße beträgt etwa 300 MB. Nach Abschluss 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")
Lassen Sie uns 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 sollte die englische Übersetzung des Satzes in „words[0]“ gespeichert sein.
Entdecken Sie Anvil und erstellen Sie eine Web-Benutzeroberfläche
Anvil ist ein Framework und eine Reihe von Lösungen, mit denen Sie Webanwendungen nur mit Python-Code erstellen können. Es verfügt über einen Drag-and-Drop-Editor zum Erstellen einer Web-Benutzeroberfläche und ermöglicht es Ihnen, den Code von Ihrem lokalen Computer mit der von Ihnen erstellten Benutzeroberfläche zu verbinden und Ihre Anwendung zu hosten, indem Sie einen Link erhalten, den Sie teilen können.
Beginnen wir also mit der Erstellung einer Anwendung von hier. Wählen Sie eine leere Anwendung und dann Materialdesign.
Sie sollten etwa Folgendes sehen:
Jetzt werde ich darauf zählen, dass Sie den Editor verwenden und etwas Ähnliches wie das Folgende erstellen:
In dieser einfachen Benutzeroberfläche verfügen wir über zwei Dropdown-Menüs zur Auswahl der Quell- und Zielsprache. Wir haben außerdem eine TextBox zur Eingabe des Quelltexts und eine richText-Komponente zur Anzeige des übersetzten Textes. Sie können auch eine Schaltfläche zum Starten der Übersetzungsaufgabe sehen.
Um mit den unten angezeigten Codeausschnitten zu synchronisieren, geben Sie den Komponenten dieselben IDs. Nachfolgend finden Sie ein Beispiel, wo Sie die ID einer Komponente festlegen können:
Die von uns verwendeten IDs sind:
Komponente |
ID |
---|---|
DropDown der Quellsprache | source_lang |
DropDown der Zielsprache | dest_lang |
TextBox der Quellsprache | source_text |
Übersetzter Text RichText | translated_text |
Onclick-Funktion
Wir haben eine Schaltfläche hinzugefügt, mit der die Übersetzung gestartet werden kann. Klicken Sie in Ihrem Editor auf die Schaltfläche und scrollen Sie dann im Eigenschaftenfenster nach unten. Unten sehen Sie einen Veranstaltungsbereich. Geben Sie im Textfeld neben „Klicken“ „Übersetzen“ ein und klicken Sie dann auf den Pfeil rechts neben diesem Textfeld.
Dadurch gelangen Sie zur Codeansicht, in der Sie automatisch generierten Python-Code sehen.
Sie werden feststellen, dass Amboss automatisch eine Funktion namens „Übersetzen“ hinzugefügt hat. Es wird jedes Mal aufgerufen, wenn auf die Schaltfläche in unserer Benutzeroberfläche geklickt 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 führt drei Hauptaufgaben aus:
-
Informationen über die Benutzeroberfläche abrufen
-
Senden Sie die Informationen mithilfe der Serverfunktion „Übersetzung“ an unser Backend (wir werden es im nächsten Abschnitt erklären).
-
Senden Sie den übersetzten Text an die Benutzeroberfläche.
Serverfunktion
Konzentrieren wir uns auf diese Codezeile:
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 Computer definieren.
Diese Funktion dient als Verbindung zwischen der Web-Benutzeroberfläche und dem Backend-Code, der auf unserem maschinellen Übersetzungsmodell ausgeführt wird.
Wie Sie bemerkt haben, senden wir die Parameter dieser Funktion auch in der Funktion „anvil.server.call“.
Stellen Sie unser MT-Modell bereit
Lassen Sie uns zunächst den Amboss installieren
pip install anvil-uplink
Jetzt haben wir unsere Weboberfläche im Amboss-Editor erstellt und verfügen über grundlegende Codeblöcke, um unser maschinelles Übersetzungsmodell auszuführen und eine Übersetzung durchzuführen.
Der nächste Schritt besteht darin, die Serverfunktion zu definieren, 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 übernimmt die drei vom Frontend gesendeten Parameter, konvertiert die Quell- und Zielsprache in die jeweiligen Sprachcodes, lädt dann die Modelle, berechnet die Übersetzung und gibt das Ergebnis zurück.
Die Möglichkeit, diese Funktion als Serverfunktion für Amboss zu deklarieren, besteht darin, den Dekorator zu verwenden
@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 Online-Editor von Anvil, klicken Sie auf das Zahnradsymbol und dann auf „Uplink…“.
Siehe den Bildschirm unten
Es erscheint ein Popup. Klicken Sie dann auf „Server-Uplink für diese App aktivieren“, um den Verbindungscode zu erhalten, den Sie kopieren.
Den Code fügen Sie in die folgende Codezeile ein:
anvil.server.connect("code here")
Diese Zeile startet einen Server, der Ihr lokales Codeskript oder Jupyter-Notebook mit der Anvil-Anwendung verbindet, wobei die Funktion „Übersetzung“ als Serverfunktion registriert ist.
Letzter Schritt
Zu diesem Zeitpunkt 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 durchführt. Diese Abbildung fasst zusammen, was wir bisher gemeinsam umgesetzt haben.
Ein letzter Schritt besteht darin, die Anwendung auszuführen, indem Sie oben in der Mitte des Amboss-Editors auf die Schaltfläche „Ausführen“ klicken.
Nachdem Sie die Anwendung ausgeführt haben, sehen Sie in der oberen rechten Ecke die Schaltfläche „Diese App veröffentlichen“, über die Sie einen Link erhalten, den Sie teilen können, um auf die Anwendung zuzugreifen und Ihre Übersetzung durchzuführen!
Abschluss
Durch die Befolgung dieses Artikels konnten Sie ein MT-Modell bereitstellen und eine Webschnittstelle für dessen Verwendung erstellen.
Es gibt noch viel zu entdecken, wie Sie ein Modell mit Amboss effektiv bereitstellen können, aber jetzt verfügen Sie über die Grundlagen, um Ihre Bereitstellungsreise zu beginnen und das Potenzial Ihrer Vorkenntnisse in Python zu erweitern, um noch viel mehr zu tun!
Kommen Sie zu einem unserer kostenlosen Workshops
Beginnen Sie Ihre Karriere als Datenwissenschaftler mit unseren kostenlosen Workshops, die auf einem anpassbaren Lehrplan basieren und von Branchenexperten geleitet werden.