Si vous ne disposez pas d'un ensemble fixe de termes ou si vous ne pouvez pas exprimer des entités que vous souhaitez détecter en tant qu'expressions régulières, vous pouvez créer un modèle de transformateur personnalisé. Le modèle est basé sur le modèle Slate IBM Foundation préentraîné.
Lorsque vous utilisez le modèle préentraîné, vous pouvez créer des modèles multilingues. Il n'est pas nécessaire d'avoir des modèles distincts pour chaque langue.
Vous avez besoin de suffisamment de données de formation pour atteindre une qualité élevée (2000-5000 par type d'entité). Si des GPU sont disponibles, utilisez-les pour l'entraînement.
Les modèles de transformateur d'entraînement consomment beaucoup d'UC et de mémoire. Les environnements prédéfinis ne sont pas assez grands pour effectuer l'entraînement. Créez un environnement de bloc-notes personnalisé avec une plus grande quantité d'UC et de mémoire, et utilisez-le pour exécuter votre bloc-notes. Si vous avez des GPU disponibles, il est fortement recommandé de les utiliser. Voir Création de votre propre modèle d'environnement.
Format des données d'entrée
Les données de formation sont représentées sous la forme d'un tableau contenant plusieurs objets JSON. Chaque objet JSON représente une instance d'entraînement et doit comporter une zone text
et une zone mentions
. La zone text
représente le texte de la phrase d'apprentissage et mentions
est un tableau d'objets JSON avec le texte, le type et l'emplacement de chaque mention:
[
{
"text": str,
"mentions": [{
"location": {
"begin": int,
"end": int
},
"text": str,
"type": str
},...]
},...
]
Exemple :
[
{
"id": 38863234,
"text": "I'm moving to Colorado in a couple months.",
"mentions": [{
"text": "Colorado",
"type": "Location",
"location": {
"begin": 14,
"end": 22
}
},
{
"text": "couple months",
"type": "Duration",
"location": {
"begin": 28,
"end": 41
}
}]
}
]
Entraînement de votre modèle
L'algorithme du transformateur utilise le modèle Slate préentraîné.
Pour une liste des modèles Slate disponibles, consultez ce tableau :
Modèle | Descriptif | Disponible en version release | Disponible en version d'exécution |
---|---|---|---|
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased |
Modèle générique et polyvalent | 23.1, 24.1 | |
pretrained-model_slate.125m.finance_many_transformer_en_cased |
Modèle pré-entraîné sur le contenu financier | 24.1 | |
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased |
Modèle pré-formé sur les contenus de cybersécurité | 24.1 | |
pretrained-model_slate.125m.biomedical_many_transformer_en_cased |
Modèle pré-entraîné sur le contenu biomédical | 24.1 |
Pour obtenir les options disponibles pour la configuration de l'entraînement Transformer, entrez:
help(watson_nlp.workflows.entity_mentions.transformer.Transformer.train)
Exemple de code
import watson_nlp
from watson_nlp.toolkit.entity_mentions_utils.train_util import prepare_stream_of_train_records_from_JSON_collection
# load the syntax models for all languages to be supported
syntax_model = watson_nlp.load('syntax_izumo_en_stock')
syntax_models = [syntax_model]
# load the pretrained Slate model
pretrained_model_resource = watson_nlp.load('<pretrained Slate model>')
# prepare the train and dev data
# entity_train_data is a directory with one or more json files in the input format specified above
train_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')
dev_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')
# train a transformer workflow model
trained_workflow = watson_nlp.workflows.entity_mentions.transformer.Transformer.train(
train_data_stream=train_data_stream,
dev_data_stream=dev_data_stream,
syntax_models=syntax_models,
template_resource=pretrained_model_resource,
num_train_epochs=3,
)
Application du modèle sur de nouvelles données
Appliquez le modèle de flux de travaux du transformateur entraîné sur les nouvelles données à l'aide de la méthode run()
, comme vous le feriez sur tous les blocs pré-entraînés existants.
Exemple de code
trained_workflow.run('Bruce is at Times Square')
Stockage et chargement du modèle
Le modèle de transformateur personnalisé peut être stocké comme n'importe quel autre modèle, comme décrit dans Sauvegarde et chargement de modèles personnalisés, à l'aide de ibm_watson_studio_lib
.
Pour charger le modèle de transformateur personnalisé, des étapes supplémentaires sont requises:
Vérifiez que vous disposez d'un jeton d'accès sur la page Contrôle d'accès de l'onglet Gérer de votre projet. Seuls les administrateurs de projet peuvent créer des jetons d'accès. Le jeton d'accès peut disposer des droits d'accès Afficheur ou Editeur . Seuls les éditeurs peuvent injecter le jeton dans un bloc-notes.
Ajoutez le jeton de projet au bloc-notes en cliquant sur Plus > Insérer un jeton de projet dans la barre d'actions du bloc-notes, puis exécutez la cellule.
En exécutant la cellule de code masquée insérée, vous créez un objet
wslib
que vous pouvez utiliser pour les fonctions de la bibliothèqueibm-watson-studio-lib
. Pour plus d'informations sur les fonctionsibm-watson-studio-lib
disponibles, voir Utilisation d'ibm-watson-studio-lib pour Python.Téléchargez et extrayez le modèle dans votre environnement d'exécution local:
import zipfile model_zip = 'trained_workflow_file' model_folder = 'trained_workflow_folder' wslib.download_file('trained_workflow', file_name=model_zip) with zipfile.ZipFile(model_zip, 'r') as zip_ref: zip_ref.extractall(model_folder)
Chargez le modèle à partir du dossier extrait:
trained_workflow = watson_nlp.load(model_folder)
Rubrique parent : Création de vos propres modèles