Depuis son introduction en 2018, Bert a transformé le traitement du langage naturel. Il fonctionne bien dans des tâches comme l'analyse des sentiments, la réponse aux questions et l'inférence du langage. En utilisant une formation bidirectionnelle et une auto-attention à base de transformateurs, Bert a introduit une nouvelle façon de comprendre les relations entre les mots dans le texte. Cependant, malgré son succès, Bert a des limites. Il lutte contre l'efficacité de calcul, la gestion des textes plus longs et la fourniture d'interprétabilité. Cela a conduit au développement de Modernbert, un modèle conçu pour relever ces défis. Modernbert améliore la vitesse de traitement, gère mieux les textes plus longs et offre plus de transparence pour les développeurs. Dans cet article, nous explorerons comment utiliser Modernbert pour l'analyse des sentiments, mettant en évidence ses caractéristiques et ses améliorations par rapport à Bert.
Cet article a été publié dans le cadre du Data Science Blogathon.
Questions
Bert, qui signifie Bidirectional Encoder Representations de Transformers, change la donne depuis son introduction par Google en 2018. Bert a introduit le concept de formation bidirectionnelle qui a permis au modèle de comprendre le contexte en regardant les mots environnants dans toutes les directions. Cela a conduit à des performances considérablement meilleures des modèles pour un certain nombre de tâches PNL, notamment la réponse aux questions, l'analyse des sentiments et l'inférence du langage. L'architecture de Bert est basée sur des transformateurs uniquement en encodeur, qui utilisent des mécanismes d'auto-agencement pour peser l'influence de différents mots dans une phrase et n'ont que des encodeurs. Cela signifie qu'ils ne comprennent et codent que l'entrée, et ne reconstruisent ni ne générent de sortie. Ainsi, Bert est excellent pour capturer des relations contextuelles dans le texte, ce qui en fait l'un des modèles NLP les plus puissants et les plus largement adoptés ces dernières années. Qu'est-ce que Modernbert? Malgré le succès révolutionnaire de Bert, il a certaines limites. Certains d'entre eux sont:
BERT | ModernBERT |
It has fixed positional embeddings | It uses Rotary Positional Embeddings (RoPE) |
Standard self-attention | Flash Attention for improved efficiency |
It has fixed-length context windows | It can support longer contexts with Local-Global Alternating Attention |
Complex and less interpretable | Improved interpretability |
Primarily trained on English text | Primarily trained on English and code data |
Modernbert aborde ces limitations en incorporant des algorithmes plus efficaces tels que l'attention du flash et l'attention alternative locale-globale , qui optimiser la consommation de la mémoire et améliore la vitesse de traitement. De plus, Modernbert introduit des améliorations pour gérer plus efficacement les longueurs de contexte plus longues en intégrant des techniques telles que incorporation de position rotative (corde) pour prendre en charge les longueurs de contexte plus longues.
Il améliore l'interprétabilité en visant à être plus transparent et convivial, ce qui permet aux développeurs de déboguer et d'adapter plus facilement le modèle à des tâches spécifiques. En outre, Modernbert intègre des progrès dans le raisonnement de bon sens, ce qui lui permet de mieux comprendre le contexte, les nuances et les relations logiques au-delà des informations explicites fournies. Il convient aux GPU communs comme NVIDIA T4, A100 et RTX 4090.
Modernbert est formé sur les données provenant de diverses sources anglaises, notamment des documents Web, du code et des articles scientifiques. Il est formé sur 2 billions de jetons uniques, contrairement aux répétitions standard 20-40 populaires dans les encodeurs précédents.
Il est publié dans les tailles suivantes:
certaines des caractéristiques uniques de Modernbert sont:
Il s'agit d'un nouvel algorithme développé pour accélérer le mécanisme d'attention des modèles de transformateurs en termes de temps et d'utilisation de la mémoire. Le calcul de l'attention peut être accéléré en réorganisant les opérations et en utilisant le carrelage et la recomputation. Le carrelage aide à décomposer de grandes données en morceaux gérables, et Recomputation réduit l'utilisation de la mémoire en recalculant les résultats intermédiaires au besoin. Cela réduit l'utilisation de la mémoire quadratique jusqu'à la linéaire, ce qui le rend beaucoup plus efficace pour les séquences longues. La surcharge de calcul réduit. Il est 2-4x plus rapide que les mécanismes d'attention traditionnels. L'attention des flashs est utilisée pour accélérer l'entraînement et l'inférence des modèles de transformateurs.
L'une des caractéristiques les plus nouvelles de Modernbert est l'attention alternée, plutôt que l'attention mondiale complète.
Les incorporations de positionnt rotatives (corde) sont une technique de modèle de transformateur qui code la position des jetons dans une séquence à l'aide de matrices de rotation. Il intègre des informations positionnelles absolues et relatives, ajustant le mécanisme d'attention pour comprendre l'ordre et la distance entre les jetons. La corde code la position absolue des jetons à l'aide d'une matrice de rotation et prend également note des informations de position relatives ou de l'ordre et de la distance entre les jetons.
Unfadding et l'emballage de séquence sont des techniques conçues pour optimiser la mémoire et l'efficacité de calcul.
Mise en œuvre de l'analyse des sentiments en utilisant pratiquement Modernbert. Nous allons effectuer une tâche d'analyse des sentiments à l'aide de Modernbert. L'analyse des sentiments est un type spécifique de tâche de classification du texte qui vise à classer le texte (ex. Revues) en positif ou négatif.
L'ensemble de données que nous utilisons est un ensemble de données IMDB Movie pour classer les avis en sentiments positifs ou négatifs.
Remarque:
Installez les bibliothèques nécessaires pour travailler avec des transformateurs de face étreintes.
#install libraries !pip install git+https://github.com/huggingface/transformers.git datasets accelerate scikit-learn -Uqq !pip install -U transformers>=4.48.0 import torch from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer,AutoModelForMaskedLM,AutoConfig from datasets import load_dataset
La commande IMDB [«test»] [0] imprimera le premier échantillon dans la répartition du test de l'ensemble de données de revue de film IMDB, c'est-à-dire la première revue de test avec son étiquette associée.
#Load the dataset from datasets import load_dataset imdb = load_dataset("imdb") #print the first test sample imdb["test"][0]
Okenize l'ensemble de données à l'aide de tokenizer à base moderne-bases prélevés. Ce processus convertit le texte en entrées numériques adaptées au modèle.La commande «tokeniszed_test_dataset [0]» imprimera le premier échantillon de l'ensemble de données de test de tokenisé, y compris les entrées de tokenisés telles que les ID d'entrée et les étiquettes.
#initialize the tokenizer and the model tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base") model = AutoModelForMaskedLM.from_pretrained("answerdotai/ModernBERT-base") #define the tokenizer function def tokenizer_function(example): return tokenizer( example["text"], padding="max_length", truncation=True, max_length=512, ## max length can be modified return_tensors="pt" ) #tokenize training and testing data set based on above defined tokenizer function tokenized_train_dataset = imdb["train"].map(tokenizer_function, batched=True) tokenized_test_dataset = imdb["test"].map(tokenizer_function, batched=True) #print the tokenized output of first test sample print(tokenized_test_dataset[0])
#install libraries !pip install git+https://github.com/huggingface/transformers.git datasets accelerate scikit-learn -Uqq !pip install -U transformers>=4.48.0 import torch from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer,AutoModelForMaskedLM,AutoConfig from datasets import load_dataset
Préparez les ensembles de données en renommant la colonne (étiquette) des étiquettes de sentiment aux «étiquettes» et en supprimant les colonnes inutiles.
#Load the dataset from datasets import load_dataset imdb = load_dataset("imdb") #print the first test sample imdb["test"][0]
Utilisons F1_Score comme métrique pour évaluer notre modèle. Nous définirons une fonction pour traiter les prévisions d'évaluation et calculer leur score F1. Cela nous compare les prédictions du modèle par rapport aux véritables étiquettes.
#initialize the tokenizer and the model tokenizer = AutoTokenizer.from_pretrained("answerdotai/ModernBERT-base") model = AutoModelForMaskedLM.from_pretrained("answerdotai/ModernBERT-base") #define the tokenizer function def tokenizer_function(example): return tokenizer( example["text"], padding="max_length", truncation=True, max_length=512, ## max length can be modified return_tensors="pt" ) #tokenize training and testing data set based on above defined tokenizer function tokenized_train_dataset = imdb["train"].map(tokenizer_function, batched=True) tokenized_test_dataset = imdb["test"].map(tokenizer_function, batched=True) #print the tokenized output of first test sample print(tokenized_test_dataset[0])
Définissez les hyperparamètres et autres configurations pour affiner le modèle en utilisant des arguments de formation de Face. Comprenons quelques arguments:
#initialize the model config = AutoConfig.from_pretrained("answerdotai/ModernBERT-base") model = AutoModelForSequenceClassification.from_config(config)
Utilisez la classe des formateurs pour effectuer le processus de formation et d'évaluation du modèle.
#data preparation step - train_dataset = tokenized_train_dataset.remove_columns(['text']).rename_column('label', 'labels') test_dataset = tokenized_test_dataset.remove_columns(['text']).rename_column('label', 'labels')
Évaluer le modèle formé sur le test de l'ensemble de données.
import numpy as np from sklearn.metrics import f1_score # Metric helper method def compute_metrics(eval_pred): predictions, labels = eval_pred predictions = np.argmax(predictions, axis=1) score = f1_score( labels, predictions, labels=labels, pos_label=1, average="weighted" ) return {"f1": float(score) if score == 1 else score}
Enregistrez le modèle et le jetons affinés pour une réutilisation supplémentaire.
#define training arguments train_bsz, val_bsz = 32, 32 lr = 8e-5 betas = (0.9, 0.98) n_epochs = 2 eps = 1e-6 wd = 8e-6 training_args = TrainingArguments( output_dir=f"fine_tuned_modern_bert", learning_rate=lr, per_device_train_batch_size=train_bsz, per_device_eval_batch_size=val_bsz, num_train_epochs=n_epochs, lr_scheduler_type="linear", optim="adamw_torch", adam_beta1=betas[0], adam_beta2=betas[1], adam_epsilon=eps, logging_strategy="epoch", eval_strategy="epoch", save_strategy="epoch", load_best_model_at_end=True, bf16=True, bf16_full_eval=True, push_to_hub=False, )
Ici: 0 indique une revue négative et 1 indique une revue positive. Pour mon nouvel exemple, la sortie doit être [0,1] car l'ennui indique une revue négative (0) et la spectaculaire indique une opinion positive, donc 1 sera donnée comme sortie.
#Create a Trainer instance trainer = Trainer( model=model, # The pre-trained model args=training_args, # Training arguments train_dataset=train_dataset, # Tokenized training dataset eval_dataset=test_dataset, # Tokenized test dataset compute_metrics=compute_metrics, # Personally, I missed this step, my output won't show F1 score )
Alors que Modernbert apporte plusieurs améliorations par rapport à Bert traditionnel, il a encore certaines limites:
Modernbert prend la fondation de Bert et l'améliore avec un traitement plus rapide, une meilleure gestion des textes longs et une interprétabilité améliorée. Bien qu'il soit toujours confronté à des défis tels que la formation du biais des données et de la complexité, il représente un saut significatif dans la PNL. Modernbert ouvre de nouvelles possibilités de tâches comme l'analyse des sentiments et la classification du texte, ce qui rend la compréhension avancée de la langue plus efficace et accessible.
Références:
Le média présenté dans cet article ne appartient pas à l'analyse vidhya et est utilisé à la discrétion de l'auteur.
ANS. Ans. Les architectures de l'encodeur traitent les séquences d'entrée sans générer de séquences de sortie, en se concentrant sur la compréhension et le codage de l'entrée.
Q2. Quelles sont les limites de Bert?Ans. Certaines limites de Bert comprennent des ressources de calcul élevées, une longueur de contexte fixe, une inefficacité, une complexité et un manque de raisonnement de bon sens.
Q3. Qu'est-ce que le mécanisme d'attention?Ans. Un mécanisme d'attention est une technique qui permet au modèle de se concentrer sur des parties spécifiques de l'entrée pour déterminer quelles pièces sont plus ou moins importantes.
Q4. Qu'est-ce que l'attention alternée?Ans. Ce mécanisme alterne entre se concentrer sur les contextes locaux et globaux dans les séquences de texte. L'attention locale met en évidence des mots ou des phrases adjacents, la collecte d'informations à grain fin, tandis que l'attention globale reconnaît les modèles et les relations globaux à travers le texte.
Q5. Que sont les intérêts du potentiel rotatif? En quoi sont-ils différents des incorporations positionnelles fixes?ANS. Contrairement aux incorporations de position de position fixe, qui ne capturent que les positions absolues, les intérêts de position rotatif (corde) utilisent des matrices de rotation pour coder à la fois des positions absolues et relatives. La corde fonctionne mieux avec des séquences étendues.
Q6. Quelles sont les applications potentielles de Modernbert?Ans. Certaines applications de Modernbert peuvent être dans les domaines de la classification du texte, de l'analyse des sentiments, de la réponse aux questions, de la reconnaissance de l'entité nommée, de l'analyse juridique du texte, de la compréhension du code, etc.
Q7. De quoi et pourquoi l'API WANDB est-elle nécessaire?ANS. Les poids et biais (W&B) sont une plate-forme pour suivre, visualiser et partager des expériences ML. Il aide à suivre les mesures du modèle, à visualiser les données de l'expérience, à partager les résultats et plus encore. Il aide à surveiller les mesures comme la précision, à visualiser les progrès, à régler les hyperparamètres, à garder une trace des versions du modèle, etc.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!