L'identification du texte paraphrasé a une valeur commerciale dans de nombreux cas d'utilisation. Par exemple, en identifiant les paraphrases de phrases, un système de résumé de texte pourrait supprimer les informations redondantes. Une autre application consiste à identifier les documents plagiés. Dans cet article, nous peaufinons un Étreindre le visage transformateur allumé Amazon Sage Maker identifier les paires de phrases paraphrasées en quelques étapes.
Un modèle vraiment robuste peut identifier le texte paraphrasé lorsque la langue utilisée peut être complètement différente, et également identifier les différences lorsque la langue utilisée a un chevauchement lexical élevé. Dans cet article, nous nous concentrons sur ce dernier aspect. Plus précisément, nous examinons si nous pouvons former un modèle capable d'identifier la différence entre deux phrases qui ont un chevauchement lexical élevé et des significations très différentes ou opposées. Par exemple, les phrases suivantes ont exactement les mêmes mots mais des sens opposés :
- J'ai pris un vol de New York à Paris
- J'ai pris un vol de Paris à New York
Vue d'ensemble de la solution
Nous vous accompagnons dans les étapes de haut niveau suivantes :
- Configurez l'environnement.
- Préparez les données.
- Tokéniser l'ensemble de données.
- Affiner le modèle.
- Déployez le modèle et effectuez l'inférence.
- Évaluer les performances du modèle.
Si vous souhaitez ignorer la configuration de l'environnement, vous pouvez utiliser le bloc-notes suivant sur GitHub et exécutez le code dans SageMaker.
Hugging Face et AWS ont annoncé un partenariat plus tôt en 2022 qui facilite encore plus la formation des modèles Hugging Face sur SageMaker. Cette fonctionnalité est disponible via le développement de Hugging Face Conteneurs d'apprentissage en profondeur AWS (DLC). Ces conteneurs incluent Hugging Face Transformers, Tokenizers et la bibliothèque Datasets, qui nous permet d'utiliser ces ressources pour les tâches de formation et d'inférence. Pour une liste des images DLC disponibles, voir Images de conteneurs de Deep Learning disponibles. Ils sont maintenus et régulièrement mis à jour avec des correctifs de sécurité. Vous pouvez trouver de nombreux exemples sur la façon de former des modèles Hugging Face avec ces DLC et le Kit de développement logiciel Python pour étreindre le visage dans ce qui suit GitHub repo.
Le jeu de données PAWS
Réalisant le manque d'ensembles de données de paires de phrases efficaces qui présentent un chevauchement lexical élevé sans être des paraphrases, l'original PAWS L'ensemble de données publié en 2019 visait à fournir à la communauté du traitement du langage naturel (TAL) une nouvelle ressource pour la formation et l'évaluation des modèles de détection de paraphrase. Les paires de phrases PAWS sont générées en deux étapes en utilisant Wikipédia et par Paires de questions Quora (QQP). Un modèle de langage échange d'abord les mots d'une paire de phrases avec le même sac de mots (BOW) pour générer une paire de phrases. Une étape de rétrotraduction génère alors des paraphrases avec un chevauchement BOW élevé mais en utilisant un ordre des mots différent. L'ensemble de données PAWS final contient un total de 108,000 656,000 paires marquées par l'homme et XNUMX XNUMX paires marquées de manière bruyante.
Dans cet article, nous utilisons le PAWS-Wiki étiqueté (final) ensemble de données de Hugging Face. Hugging Face a déjà effectué la division des données pour nous, ce qui donne 49,000 8,000 paires de phrases dans l'ensemble de données d'entraînement et 1 XNUMX paires de phrases chacune pour les ensembles de données de validation et de test. Deux exemples de paires de phrases de l'ensemble de données d'apprentissage sont présentés dans l'exemple suivant. Une étiquette de XNUMX indique que les deux phrases sont des paraphrases l'une de l'autre.
Phrase 1 | Phrase 2 | Libellé |
Bien qu'interchangeables, les pièces de carrosserie des 2 voitures ne sont pas similaires. | Bien que similaires, les pièces de carrosserie ne sont pas interchangeables sur les 2 voitures. | 0 |
Katz est né en Suède en 1947 et a déménagé à New York à l'âge de 1 an. | Katz est né en 1947 en Suède et a déménagé à New York à l'âge d'un an. | 1 |
Pré-requis
Vous devez remplir les conditions préalables suivantes :
- Créez un compte AWS si vous n'en avez pas. Pour plus d'informations, voir Configurer les prérequis d'Amazon SageMaker.
- Commencez à utiliser Instances de bloc-notes SageMaker.
- Mettre en place le droit Gestion des identités et des accès AWS (IAM). Pour plus d'informations, voir Rôles SageMaker.
Mettre en place l'environnement
Avant de commencer à examiner et à préparer nos données pour le réglage fin du modèle, nous devons configurer notre environnement. Commençons par faire tourner une instance de bloc-notes SageMaker. Choisissez une région AWS dans votre compte AWS et suivez les instructions pour créer une instance de bloc-notes SageMaker. L'instance de bloc-notes peut prendre quelques minutes pour démarrer.
Lorsque l'instance de bloc-notes est en cours d'exécution, choisissez conda_pytorch_p38
comme type de noyau. Pour utiliser le jeu de données Hugging Face, nous devons d'abord installer et importer la bibliothèque Hugging Face :
Ensuite, établissons une session SageMaker. Nous utilisons la valeur par défaut Service de stockage simple Amazon Compartiment (Amazon S3) associé à la session SageMaker pour stocker l'ensemble de données PAWS et les artefacts de modèle :
Préparer les données
Nous pouvons charger la version Hugging Face du jeu de données PAWS avec son load_dataset()
commande. Cet appel télécharge et importe le script de traitement Python PAWS à partir du référentiel GitHub de Hugging Face, qui télécharge ensuite l'ensemble de données PAWS à partir de l'URL d'origine stockée dans le script et met les données en cache sous forme de tableau fléché sur le lecteur. Voir le code suivant :
Avant de commencer à affiner notre modèle BERT pré-formé, examinons notre distribution de classe cible. Pour notre cas d'utilisation, l'ensemble de données PAWS a des étiquettes binaires (0 indique que la paire de phrases n'est pas une paraphrase et 1 indique qu'elle l'est). Créons un histogramme pour afficher la distribution des classes, comme indiqué dans le code suivant. Nous constatons qu'il existe un léger problème de déséquilibre de classe dans notre ensemble d'apprentissage (56 % d'échantillons négatifs contre 44 % d'échantillons positifs). Cependant, le déséquilibre est suffisamment faible pour éviter d'employer des techniques d'atténuation du déséquilibre de classe.
Tokeniser l'ensemble de données
Avant de pouvoir commencer à peaufiner, nous devons tokeniser notre ensemble de données. Comme point de départ, disons que nous voulons affiner et évaluer le roberta-base
transformateur. Nous avons sélectionné roberta-base
car il s'agit d'un transformateur à usage général qui a été pré-formé sur un grand corpus de données en anglais et qui a fréquemment montré de hautes performances sur une variété de tâches NLP. Le modèle a été présenté à l'origine dans l'article RoBERTa: une approche de pré-formation BERT fortement optimisée.
Nous effectuons une tokenisation sur les phrases avec un roberta-base
tokenizer de Hugging Face, qui utilise l'encodage de paires d'octets au niveau de l'octet pour diviser le document en jetons. Pour plus de détails sur le tokenizer RoBERTa, reportez-vous à RobertaTokenizer. Étant donné que nos entrées sont des paires de phrases, nous devons tokeniser les deux phrases simultanément. Étant donné que la plupart des modèles BERT exigent que l'entrée ait une longueur d'entrée tokenisée fixe, nous définissons les paramètres suivants : max_len=128
ainsi que truncation=True
. Voir le code suivant:
La dernière étape de prétraitement pour affiner notre modèle BERT consiste à convertir les ensembles de données de train et de validation tokenisés en tenseurs PyTorch et à les télécharger dans notre compartiment S3 :
Affiner le modèle
Maintenant que nous en avons terminé avec la préparation des données, nous sommes prêts à affiner notre pré-formé roberta-base
modèle sur la tâche d'identification de paraphrase. Nous pouvons utiliser la classe SageMaker Hugging Face Estimator pour lancer le processus de réglage fin en deux étapes. La première étape consiste à spécifier les hyperparamètres de formation et les définitions de métriques. La variable de définitions de métriques indique à l'estimateur de visage étreignant les types de métriques à extraire des journaux d'entraînement du modèle. Ici, nous nous intéressons principalement à l'extraction des métriques de l'ensemble de validation à chaque époque de formation.
La deuxième étape consiste à instancier l'estimateur de visage étreignant et à démarrer le processus de réglage fin avec le .fit()
méthode:
Le processus de réglage fin prend environ 30 minutes en utilisant les hyperparamètres spécifiés.
Déployer le modèle et effectuer l'inférence
SageMaker propose plusieurs options de déploiement en fonction de votre cas d'utilisation. Pour les points de terminaison persistants en temps réel qui effectuent une prédiction à la fois, nous vous recommandons d'utiliser Services d'hébergement en temps réel SageMaker. Si vous avez des charges de travail qui ont des périodes d'inactivité entre les pics de trafic et qui peuvent tolérer les démarrages à froid, nous vous recommandons d'utiliser Inférence sans serveur. Les points de terminaison sans serveur lancent automatiquement les ressources de calcul et les augmentent et diminuent en fonction du trafic, éliminant ainsi le besoin de choisir des types d'instance ou de gérer des politiques de mise à l'échelle. Nous montrons comment déployer notre modèle de visage étreignant affiné à la fois sur un point de terminaison d'inférence en temps réel et sur un point de terminaison d'inférence sans serveur.
Déployer sur un point de terminaison d'inférence en temps réel
Vous pouvez déployer un objet de formation sur un hébergement d'inférence en temps réel dans SageMaker à l'aide de .deploy()
méthode. Pour une liste complète des paramètres acceptés, reportez-vous à Modèle de visage étreignant. Pour commencer, déployons le modèle sur une instance, en transmettant les paramètres suivants : initial_instance_count
, instance_type
et endpoint_name
. Voir le code suivant:
Le modèle prend quelques minutes à se déployer. Une fois le modèle déployé, nous pouvons soumettre des exemples d'enregistrements de l'ensemble de données de test invisible au point de terminaison pour inférence.
Déployer sur un point de terminaison d'inférence sans serveur
Pour déployer notre objet de formation sur un point de terminaison sans serveur, nous devons d'abord spécifier un fichier de configuration sans serveur avec memory_size_in_mb
ainsi que max_concurrency
arguments:
memory_size_in_mb
définit la taille totale de la RAM de votre point de terminaison sans serveur ; la taille minimale de la RAM est de 1024 Mo (1 Go) et elle peut évoluer jusqu'à 6144 Mo (6 Go). En règle générale, vous devez viser à choisir une taille de mémoire au moins aussi grande que la taille de votre modèle. max_concurrency
définit le quota du nombre d'appels simultanés pouvant être traités en même temps (jusqu'à 50 appels simultanés) pour un point de terminaison unique.
Nous devons également fournir l'URI de l'image d'inférence Hugging Face, que vous pouvez récupérer à l'aide du code suivant :
Maintenant que nous avons le fichier de configuration sans serveur, nous pouvons créer un point de terminaison sans serveur de la même manière que notre point de terminaison d'inférence en temps réel, en utilisant le .deploy()
méthode:
Le point de terminaison devrait être créé en quelques minutes.
Effectuer une inférence de modèle
Pour faire des prédictions, nous devons créer la paire de phrases en ajoutant le [CLS]
ainsi que [SEP]
des jetons spéciaux et soumettre ensuite l'entrée aux points de terminaison du modèle. La syntaxe de l'inférence en temps réel et de l'inférence sans serveur est la même :
Dans les exemples suivants, nous pouvons voir que le modèle est capable de classer correctement si la paire de phrases d'entrée contient des phrases paraphrasées.
Voici un exemple d'inférence en temps réel.
Voici un exemple d'inférence sans serveur.
Évaluer les performances du modèle
Pour évaluer le modèle, développons le code précédent et soumettons les 8,000 XNUMX enregistrements de test invisibles au point de terminaison en temps réel :
Ensuite, nous pouvons créer un rapport de classification à l'aide des prédictions extraites :
Nous obtenons les résultats des tests suivants.
Nous pouvons observer que roberta-base
a un score F1 macro-moyen combiné de 92 % et détecte légèrement mieux les phrases qui sont des paraphrases. Le roberta-base
modèle fonctionne bien, mais il est recommandé de calculer les performances du modèle en utilisant au moins un autre modèle.
Le tableau suivant compare roberta-base
résultats de performance sur le même ensemble de test par rapport à un autre transformateur affiné appelé paraphrase-mpnet-base-v2
, un transformateur de phrase pré-formé spécifiquement pour la tâche d'identification de paraphrase. Les deux modèles ont été entraînés sur une instance ml.p3.8xlarge.
Les résultats montrent que roberta-base
a un score F1 supérieur de 1 % avec des temps de formation et d'inférence très similaires en utilisant l'hébergement d'inférence en temps réel sur SageMaker. La différence de performance entre les modèles est relativement mineure, cependant, roberta-base
est finalement le gagnant car il a des mesures de performance légèrement meilleures et des temps de formation et d'inférence presque identiques.
La précision | Rappeler | Score F1 | Temps de formation (facturable) | Temps d'inférence (jeu de test complet) | |
roberta-base | 0.92 | 0.93 | 0.92 | 18 minutes | 2 minutes |
paraphraser-mpnet- base-v2 |
0.92 | 0.91 | 0.91 | 17 minutes | 2 minutes |
Nettoyer
Une fois que vous avez terminé d'utiliser les points de terminaison du modèle, vous pouvez les supprimer pour éviter des frais futurs :
Conclusion
Dans cet article, nous avons expliqué comment créer rapidement un modèle d'identification de paraphrase à l'aide de transformateurs Hugging Face sur SageMaker. Nous avons mis au point deux transformateurs pré-formés, roberta-base
ainsi que paraphrase-mpnet-base-v2
, en utilisant le jeu de données PAWS (qui contient des paires de phrases avec un chevauchement lexical élevé). Nous avons démontré et discuté des avantages de l'inférence en temps réel par rapport au déploiement de l'inférence sans serveur, cette dernière étant une nouvelle fonctionnalité qui cible les charges de travail sporadiques et élimine le besoin de gérer les politiques de mise à l'échelle. Sur un ensemble de tests inédits avec 8,000 1 enregistrements, nous avons démontré que les deux modèles obtenaient un score F90 supérieur à XNUMX %.
Pour développer cette solution, considérez ce qui suit :
- Essayez d'affiner avec votre propre jeu de données personnalisé. Si vous ne disposez pas d'étiquettes d'entraînement suffisantes, vous pouvez évaluer les performances d'un modèle affiné comme celui présenté dans cet article sur un jeu de données de test personnalisé.
- Intégrez ce modèle affiné dans une application en aval qui nécessite des informations indiquant si deux phrases (ou blocs de texte) sont des paraphrases l'une de l'autre.
Bonne construction!
À propos des auteurs
Bala Krishnamoorthy est Data Scientist chez AWS Professional Services, où il aime appliquer l'apprentissage automatique pour résoudre les problèmes commerciaux des clients. Il est spécialisé dans les cas d'utilisation du traitement du langage naturel et a travaillé avec des clients dans des secteurs tels que les logiciels, la finance et la santé. Pendant son temps libre, il aime essayer de nouveaux plats, regarder des comédies et des documentaires, s'entraîner à Orange Theory et être sur l'eau (pagaie, plongée en apnée et, espérons-le, plongée bientôt).
Ivan Cui est un Data Scientist chez AWS Professional Services, où il aide les clients à créer et à déployer des solutions à l'aide de l'apprentissage automatique sur AWS. Il a travaillé avec des clients dans divers secteurs, notamment les logiciels, la finance, les produits pharmaceutiques et les soins de santé. Pendant son temps libre, il aime lire, passer du temps avec sa famille et maximiser son portefeuille d'actions.
- Coinsmart. Le meilleur échange Bitcoin et Crypto d'Europe.
- Platoblockchain. Intelligence métaverse Web3. Connaissance amplifiée. ACCÈS LIBRE.
- CryptoHawk. Radar Altcoins. Essai gratuit.
- Source : https://aws.amazon.com/blogs/machine-learning/identify-paraphrased-text-with-hugging-face-on-amazon-sagemaker/
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- Qui sommes-nous
- accès
- Compte
- atteint
- à travers
- Tous
- déjà
- Amazon
- annoncé
- Une autre
- Application
- Application
- d'environ
- arguments
- disponibles
- AWS
- va
- avantages.
- corps
- frontière
- construire
- la performance des entreprises
- Appelez-nous
- capable
- voitures
- cas
- des charges
- Selectionnez
- Ville
- classe
- classification
- code
- Colonne
- combiné
- Communautés
- complètement
- calcul
- confiance
- Conteneurs
- contient
- pourriez
- engendrent
- créée
- Customiser
- des clients
- Clients
- données
- Data Scientist
- démontrer
- démontré
- Selon
- déployer
- déployé
- déploiement
- détails
- Détection
- Développement
- différent
- distribution
- documentaires
- INSTITUTIONNELS
- téléchargements
- motivation
- efficace
- Endpoint
- Anglais
- Environment
- établir
- évaluer
- exemple
- exposer
- Développer vous
- Visage
- famille
- Fonctionnalité
- finance
- Prénom
- vol
- Focus
- suivre
- Abonnement
- nourriture
- Test d'anglais
- plein
- fonction
- avenir
- à usage général
- généralement
- générer
- GitHub
- Bien
- plus grand
- la médecine
- la taille
- aide
- ici
- Haute
- augmentation
- hébergement
- Comment
- How To
- HTTPS
- Identification
- identifier
- identifier
- Active
- image
- comprendre
- Y compris
- secteurs
- d'information
- contribution
- installer
- intéressé
- aide
- IT
- Emplois
- Etiquettes
- langue
- gros
- lancer
- apprentissage
- Bibliothèque
- Liste
- charge
- click
- machine learning
- FAIT DU
- gérer
- Mémoire
- Métrique
- ML
- modèle
- numériques jumeaux (digital twin models)
- PLUS
- (en fait, presque toutes)
- plusieurs
- Nature
- négatif
- New York
- New York City
- cahier
- Offres Speciales
- optimisé
- Options
- de commander
- Autre
- propre
- Papier
- Paris
- Partenariat
- En passant
- Patches
- performant
- périodes
- Pharmaceutique
- Point
- politiques
- portefeuille
- positif
- pratique
- prédiction
- Prédictions
- d'ouvrabilité
- processus
- traitement
- professionels
- fournir
- question
- quora
- RAM
- rand
- en cours
- en temps réel
- recommander
- Articles
- libéré
- rapport
- dépôt
- exigent
- ressource
- Ressources
- Résultats
- retourner
- Courir
- pour le running
- Escaliers intérieurs
- mise à l'échelle
- Scientifique
- sécurité
- choisi
- Sans serveur
- Services
- set
- mise
- similaires
- étapes
- Taille
- petit
- Logiciels
- solide
- sur mesure
- Solutions
- RÉSOUDRE
- spécial
- spécialise
- spécifiquement
- Dépenses
- Spin
- scission
- Commencer
- j'ai commencé
- départs
- stock
- storage
- Boutique
- Par la suite
- la quantité
- Suède
- combustion propre
- Target
- tâches
- techniques
- raconte
- tester
- Avec
- fiable
- tokenization
- tokenisé
- Tokens
- top
- torche
- circulation
- Formation
- Traduction
- us
- utilisé
- validation
- Plus-value
- variété
- Voir
- Eau
- Quoi
- que
- Wikipédia
- dans les
- sans
- des mots
- travaillé
- de travail
- s'entraîner