Aller au contenu principal

Development Guides

Label Studio propose une fonctionnalité de génération automatique d'étiquettes à partir de l'inférence d'un modèle.

Cependant, Label Studio requiert une interface spécifique, ce qui implique de coder une surcouche pour l'inférence de notre serveur afin d'assurer son bon fonctionnement.

À cette fin, nous avons développé un exemple utilisant le modèle suivant, disponible sur Hugging Face : urchade/gliner_small-v2.1.

Il s'agit d'un modèle de reconnaissance d'entités nommées (NER) capable d'identifier tout type d'entité grâce à un encodeur transformeur bidirectionnel.

Voici comment Label Studio interagit avec ce modèle :

  • Lancez manuellement une session d'entraînement en utilisant les tâches déjà soumises comme jeu de données. Les 10 premiers éléments servent de jeu de données d'évaluation,

les suivants de jeu de données d'entraînement. - Lancez une session d'entraînement après chaque soumission, en utilisant uniquement cette nouvelle tâche pour l'ajustement fin. Cela met également à jour le modèle actuellement chargé.

  • Créez des annotations en envoyant des tâches à ce modèle. Il renverra les annotations qu'il a pu générer. Leur qualité doit encore être mesurée avant

de soumettre la tâche d'étiquetage. Les annotations créées automatiquement par un modèle sont appelées predictions dans le lexique de Label Studio.

  • Une session d'entraînement manuelle signalera une erreur de passerelle, qu'il convient d'ignorer. Cela signifie simplement que le modèle n'a pas terminé la session d'entraînement.

Un statut précis peut être obtenu auprès de MLFlow.

Utilisation

Dépendances

Aucune dépendance requise.

Dépendances optionnelles :

  • Label Studio : pour pouvoir interagir avec les tâches d'annotation.

  • MLFlow : utilisé pour le suivi des expériences d'entraînement et d'ajustement fin, et comme registre de modèles.

Installation

Vous pouvez déployer le modèle utilisé par Label Studio via Helm :

cd kosmos-apps/label-studio/ml-backend

helm install ml-backend ml-backend \

--namespace kosmos-data \

-f values.yaml

Modifications apportées au backend Label Studio fourni

Limitations de Label Studio

Voici un aperçu des limitations que nous avons dû contourner :

  • Les interfaces génériques ne fonctionnent pas et nous devons coder la prise en charge d'une API spécifique pour l'interaction.

  • La soumission de texte seul ne suffit pas. Nous devons soit exiger des utilisateurs qu'ils soumettent un champ supplémentaire « tokens » contenant une liste de jetons,

soit la générer automatiquement à l'aide d'un tokenizer WhiteSpace.

  • Les URL distantes ne sont pas prises en charge. Si la tâche d'annotation Label Studio contient une URL au lieu de texte intégré, le wrapper Python doit la télécharger avant de la transmettre au modèle pour les prédictions.

Les bibliothèques Python liées à Hugging Face et aux transformateurs stockent les fichiers dans de nombreux répertoires. Cependant, cela n'est pas possible avec readOnlyRootFS.

Il est donc nécessaire de définir des variables d'environnement pour éviter ce problème.

Le téléchargement d'un modèle depuis Hugging Face nécessite parfois le téléchargement d'autres modèles de base. Ces derniers doivent être préparés à l'avance dans l'image conteneur

dans le cas d'un déploiement isolé (sans accès réseau).

Fonctionnalités supplémentaires implémentées dans l'exemple

  • La configuration des hyperparamètres d'entraînement n'était pas accessible ; elle a été ajoutée à l'exemple.

  • Par défaut, un seul événement d'annotation déclenche le réglage fin. Ce comportement doit être paramétré. Il est possible de l'améliorer en utilisant

la référence des événements Webhook.

  • Ajout de la prise en charge de MLFlow pendant l'entraînement. Ceci inclut la journalisation des métriques système, des métriques d'entraînement, des artefacts liés au modèle et l'envoi du modèle

au registre de modèles MLFlow.

  • La même image conteneur peut être utilisée comme serveur API pour interagir avec Label Studio. Ou dans le cadre d'une charge de travail d'entraînement autonome, en tant qu'étape d'un pipeline

non lié à Label Studio.

Adaptation à votre propre modèle

Si vous souhaitez utiliser votre propre modèle, la majeure partie du code reste inchangée.

Vous devrez uniquement modifier :

  • La manière dont le modèle est chargé en mémoire et stocké dans la variable MODEL.

  • Entraînement :

  • chargeur de données.

  • Étapes d'entraînement et d'évaluation.

  • Signature du modèle.

  • Prédiction : Uniquement la partie où les entités sont renseignées. Dans notre exemple, nous utilisons une méthode sous-jacente predict_entities(text, labels, threshold).

Vous devrez utiliser l'équivalent pour votre modèle.

D'autres éléments sont recommandés pour une adaptation à votre modèle spécifique, tels que l'optimiseur à utiliser, le planificateur et d'autres aspects comme l'ajustement du modèle. Vous pouvez toutefois modifier tout élément non mentionné dans ces suggestions.