Lorsque vous travaillez dans le domaine de la science des données, vous vous retrouvez généralement confronté à un nouveau défi après avoir terminé une longue boucle de formation, de mise au point et d’amélioration. Félicitations pour avoir créé un modèle ML qui offre de bonnes performances et répond à vos besoins. Maintenant, le défi qui vous attend est de savoir comment fournir cette belle technologie aux utilisateurs visés ? Ou peut-être comment pouvez-vous communiquer efficacement vos résultats aux parties prenantes de votre entreprise ? Ou même comment partager efficacement les résultats de votre modèle avec vos collègues pour une meilleure collaboration ?
Le déploiement de l'apprentissage automatique peut parfois être difficile car nous utiliserons des technologies et des techniques en dehors des compétences habituelles nécessaires pour construire les modèles.
Dans cet article, nous allons découvrir un moyen de déployer des modèles de machine learning en utilisant uniquement python. Et en cours de route, nous créerons un modèle de traduction automatique et une page Web.
Voici donc les étapes que nous allons voir :
-
Utilisation des modèles de traduction automatique Huggingface.
-
Découvrir Anvil et créer une interface utilisateur Web pour notre modèle.
-
Connecter le backend et le frontend et servir le monde grâce à notre travail !
Créer un modèle de traduction automatique
Huggingface est une communauté d'IA qui travaille à « démocratiser le bon apprentissage automatique ». Dans le cadre de cette initiative, vous pouvez trouver de nombreux modèles formés sur différentes tâches d'apprentissage automatique : segmentation d'images, synthèse vocale, génération de texte… et aussi traduction automatique !
La traduction automatique est simplement une tâche de traduction entre deux langues effectuée par un logiciel, dans notre cas, un modèle d'apprentissage automatique construit avec des transformateurs.
Un transformateur est une architecture d’apprentissage profond basée sur l’attention. Faisons-le fonctionner sur votre machine !
Nous utiliserons transformers, une bibliothèque python pour télécharger le modèle MT et effectuer une traduction.
pip install torch
pip install transformers
Après avoir installé les packages nécessaires, importez les modules suivants :
from transformers import MarianTokenizer, MarianMTModel
from typing import List
Prenons un modèle qui traduit une phrase de l'allemand vers l'anglais. Nous avons besoin du nom du modèle :
src= "de"
trg= "en"
mname= f'Helsinki-NLP/opus-mt-{src}-{trg}'
Importons maintenant le modèle entraîné et le tokenizer en utilisant les lignes suivantes :
model = MarianMTModel.from_pretrained(mname)
tok = MarianTokenizer.from_pretrained(mname)
La taille du téléchargement est d'environ 300 Mo. Une fois terminé, vous pouvez stocker le modèle dans un répertoire local en utilisant les éléments suivants :
model.save_pretrained("./models/de_en/")
tok.save_pretrained("./models/de_en/tok")
Prenons le modèle :
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])
Vous devriez maintenant avoir la traduction anglaise de la phrase stockée dans « words[0] ».
Découvrez Anvil et créez une interface utilisateur Web
Anvil est un framework et une pile de solutions vous permettant de créer des applications Web en utilisant uniquement du code python. Il dispose d'un éditeur glisser-déposer pour créer une interface utilisateur Web et il vous permet de connecter le code de votre machine locale à l'interface utilisateur que vous créez et hébergez votre application en vous donnant un lien que vous pouvez partager.
Commençons donc par créer une application à partir de ici. Choisissez une application vierge, puis la conception matérielle.
Vous devriez voir quelque chose comme ceci :
Maintenant, je compte sur vous pour utiliser l'éditeur et créer quelque chose de similaire à ce qui suit :
Dans cette interface utilisateur simple, nous avons deux DropDowns pour choisir les langues source et de destination. Nous avons également un TextBox pour saisir le texte source et un composant richText pour afficher le texte traduit. Vous pouvez également voir un bouton pour démarrer la tâche de traduction.
Pour synchroniser avec les extraits de code que vous verrez ci-dessous, donnez les mêmes identifiants aux composants. Vous trouverez ci-dessous un exemple où vous pouvez définir l'identifiant d'un composant :
Les identifiants que nous utilisons sont :
<tête>
Composant
Pièce d'identité
</tête>
Fonction Onclick
Nous avons ajouté un bouton qui permet de démarrer la traduction. Depuis votre éditeur, cliquez sur le bouton puis faites défiler vers le bas dans le panneau des propriétés. En bas, vous verrez une section événement. Dans la zone de texte à côté de « cliquer », saisissez « traduire » puis cliquez sur la flèche à droite de cette zone de texte.
Cela vous amènera à la vue code où vous verrez du code python généré automatiquement.
Vous constaterez qu'anvil a automatiquement ajouté une fonction appelée traduire. Il sera appelé à chaque fois que vous cliquerez sur le bouton de notre interface utilisateur.
Voici à quoi devrait ressembler la fonction :
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
Cette fonction réalise 3 tâches principales :
-
Obtenez des informations à partir de l'interface utilisateur
-
Envoyez les informations à notre backend en utilisant la fonction serveur « traduction » (nous l'expliquerons dans la section suivante)
-
Envoyez le texte traduit à l'interface utilisateur.
Fonction serveur
Concentrons-nous sur cette ligne de code :
translated_text=anvil.server.call("translation",text,src_lang,dest_lang)
Nous utilisons anvil.server.call pour appeler une fonction serveur appelée « traduction » que nous définirons dans notre code backend sur la machine locale.
Cette fonction servira de connexion entre l'interface utilisateur Web et le code backend qui s'exécutera sur notre modèle de traduction automatique.
Comme vous l'avez remarqué nous envoyons également les paramètres de cette fonction dans la fonction anvil.server.call
.
Déployer notre modèle MT
Commençons par installer l'enclume
pip install anvil-uplink
Nous avons maintenant construit notre interface Web dans l'éditeur Anvil et nous disposons de blocs de code de base pour exécuter notre modèle de traduction automatique et effectuer une traduction.
L'étape suivante consiste à définir la fonction serveur dont nous avons parlé dans la section précédente.
Voici le code de la fonction :
@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]
La fonction prendra les 3 paramètres envoyés depuis le frontend, convertira les langues source et de destination en codes de langue respectifs, puis chargera les modèles, calculera la traduction et renverra le résultat.
La façon de déclarer cette fonction à Anvil en tant que fonction serveur consiste à utiliser le décorateur.
@anvil.server.callable
.
Nous avons une dernière étape à faire pour connecter le code backend que nous pouvons exécuter dans un notebook Jupyter à notre application Anvil.
Accédez à l’éditeur en ligne Anvil, cliquez sur l’icône d’engrenage, puis cliquez sur « Uplink… ».
Voir l'écran ci-dessous
Vous verrez une fenêtre contextuelle apparaître, puis cliquez sur « Activer la liaison montante du serveur pour cette application » pour obtenir le code de connexion que vous copiez.
Vous collez le code dans la ligne de code suivante :
anvil.server.connect("code here")
Cette ligne démarrera un serveur qui connectera votre script de code local ou votre notebook Jupyter à l'application Anvil avec la fonction « traduction » enregistrée en tant que fonction serveur.
Dernière étape
À ce stade, votre serveur backend fonctionne avec une fonction serveur qui charge le modèle de traduction automatique et effectue la traduction après avoir pris en compte les paramètres envoyés depuis le frontend. Ce chiffre résume ce que nous avons mis en œuvre ensemble jusqu’à présent.
Une dernière étape consiste à exécuter l'application en cliquant sur le bouton Exécuter en haut au centre de l'éditeur d'enclume.
Après avoir exécuté l'application, vous voyez dans le coin supérieur droit un bouton « publier cette application » qui vous donnera un lien que vous pourrez partager pour accéder à l'application et faire votre traduction !
Conclusion
En suivant cet article, vous avez pu déployer un modèle MT et créer une interface Web pour l'utiliser.
Il reste encore beaucoup à découvrir sur la façon de déployer efficacement un modèle à l'aide d'Anvil, mais vous disposez désormais des bases pour commencer votre parcours de déploiement et approfondir le potentiel de vos connaissances préalables en Python pour faire bien plus !
Venez à l'un de nos ateliers gratuits
Commencez votre carrière en tant que data scientist avec nos ateliers gratuits, qui sont basés sur un programme adaptable et guidés par des experts du secteur.