AutoML instellen om een verwerkingsmodel voor natuurlijke taal te trainen met Python (preview)

VAN TOEPASSING OP:Python SDK azureml v1

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder serviceovereenkomst en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.

Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

In dit artikel leert u hoe u NLP-modellen (Natural Language Processing) traint met geautomatiseerde ML in de Azure Machine Learning Python SDK.

Geautomatiseerde ML ondersteunt NLP, waarmee ML-professionals en gegevenswetenschappers hun eigen tekstgegevens kunnen gebruiken en aangepaste modellen kunnen bouwen voor taken zoals tekstclassificatie met meerdere klassen, tekstclassificatie met meerdere labels en herkenning van benoemde entiteiten (NER).

U kunt naadloos integreren met de azure Machine Learning-functie voor het labelen van uw tekstgegevens of het overbrengen van uw bestaande gelabelde gegevens. Geautomatiseerde ML biedt de optie om gedistribueerde training te gebruiken op rekenclusters met meerdere GPU's voor snellere modeltraining. Het resulterende model kan op schaal worden uitgevoerd door gebruik te maken van de MLOps-mogelijkheden van Azure Machine Learning.

Vereisten

Selecteer uw NLP-taak

Bepaal welke NLP-taak u wilt uitvoeren. Op dit moment ondersteunt geautomatiseerde ML de volgende NLP-taken van het diepe neurale netwerk.

Taak AutoMLConfig-syntaxis Description
Tekstclassificatie met meerdere klassen task = 'text-classification' Er zijn meerdere mogelijke klassen en elke steekproef kan worden geclassificeerd als precies één klasse. De taak bestaat uit het voorspellen van de juiste klasse voor elk voorbeeld.

Bijvoorbeeld het classificeren van een filmscript als 'Komedie' of 'Romantisch'.
Tekstclassificatie met meerdere labels task = 'text-classification-multilabel' Er zijn meerdere mogelijke klassen en aan elk voorbeeld kan een willekeurig aantal klassen worden toegewezen. De taak bestaat uit het voorspellen van alle klassen voor elke steekproef

U kunt bijvoorbeeld een filmscript classificeren als 'Komedie', 'Romantisch' of 'Komedie en romantisch'.
NER (Herkenning van benoemde entiteiten) task = 'text-ner' Er zijn meerdere mogelijke tags voor tokens in reeksen. De taak bestaat uit het voorspellen van de tags voor alle tokens voor elke reeks.

Bijvoorbeeld het extraheren van domeinspecifieke entiteiten uit ongestructureerde tekst, zoals contracten of financiële documenten

Gegevens voorbereiden

Voor NLP-experimenten in geautomatiseerde ML kunt u een Azure Machine Learning-gegevensset met .csv indeling gebruiken voor classificatietaken met meerdere klassen en meerdere labels. Voor NER-taken worden bestanden met twee kolommen .txt ondersteund die een spatie gebruiken als scheidingsteken en voldoen aan de CoNLL-indeling. De volgende secties bevatten aanvullende informatie over de gegevensindeling die voor elke taak wordt geaccepteerd.

Meerdere klassen

Voor classificatie met meerdere klassen kan de gegevensset meerdere tekstkolommen en precies één labelkolom bevatten. Het volgende voorbeeld bevat slechts één tekstkolom.


text,labels
"I love watching Chicago Bulls games.","NBA"
"Tom Brady is a great player.","NFL"
"There is a game between Yankees and Orioles tonight","MLB"
"Stephen Curry made the most number of 3-Pointers","NBA"

Meerdere labels

Voor classificatie met meerdere labels zijn de kolommen van de gegevensset hetzelfde als die met meerdere klassen, maar er zijn speciale indelingsvereisten voor gegevens in de labelkolom. De twee geaccepteerde indelingen en voorbeelden staan in de volgende tabel.

Opties voor labelkolomopmaak Meerdere labels Eén label Geen labels
Tekst zonder opmaak "label1, label2, label3" "label1" ""
Python-lijst met aanhalingstekens "['label1','label2','label3']" "['label1']" "[]"

Belangrijk

Er worden verschillende parsers gebruikt om labels voor deze indelingen te lezen. Als u de indeling tekst zonder opmaak gebruikt, gebruikt u alleen alfabetisch, numeriek en '_' in uw labels. Alle andere tekens worden herkend als het scheidingsteken van labels.

Als uw label bijvoorbeeld is, wordt "cs.AI"het gelezen als "cs" en "AI". Bij de Python-lijstindeling zou het label zijn "['cs.AI']", wat wordt gelezen als "cs.AI" .

Voorbeeldgegevens voor multilabels in tekst zonder opmaak.

text,labels
"I love watching Chicago Bulls games.","basketball"
"The four most popular leagues are NFL, MLB, NBA and NHL","football,baseball,basketball,hockey"
"I like drinking beer.",""

Voorbeeldgegevens voor meerdere labels in Python-lijst met aanhalingstekens.

text,labels
"I love watching Chicago Bulls games.","['basketball']"
"The four most popular leagues are NFL, MLB, NBA and NHL","['football','baseball','basketball','hockey']"
"I like drinking beer.","[]"

Herkenning van benoemde entiteiten (NER)

In tegenstelling tot multiklassen of meerdere labels, waarvoor .csv indelingsgegevenssets nodig zijn, vereist de herkenning van benoemde entiteiten de CoNLL-indeling. Het bestand moet precies twee kolommen bevatten en in elke rij worden het token en het label gescheiden door één spatie.

Bijvoorbeeld:

Hudson B-loc
Square I-loc
is O
a O
famous O
place O
in O
New B-loc
York I-loc
City I-loc

Stephen B-per
Curry I-per
got O
three O
championship O
rings O

Gegevensvalidatie

Vóór de training past geautomatiseerde ML gegevensvalidatiecontroles toe op de invoergegevens om ervoor te zorgen dat de gegevens correct kunnen worden verwerkt. Als een van deze controles mislukt, mislukt de uitvoering met het relevante foutbericht. Hier volgen de vereisten voor het doorstaan van gegevensvalidatiecontroles voor elke taak.

Notitie

Sommige gegevensvalidatiecontroles zijn van toepassing op zowel de training als de validatieset, terwijl andere alleen van toepassing zijn op de trainingsset. Als de testgegevensset de gegevensvalidatie niet kan doorstaan, betekent dit dat geautomatiseerde ML deze niet kan vastleggen en dat er een fout met modeldeductie kan optreden of dat de modelprestaties afnemen.

Taak Controle van gegevensvalidatie
Alle taken - Zowel trainings- als validatiesets moeten worden verstrekt
- Ten minste 50 trainingsvoorbeelden zijn vereist
Meerdere klassen en meerdere labels De trainingsgegevens en validatiegegevens moeten
- Dezelfde set kolommen
- Dezelfde volgorde van kolommen van links naar rechts
- Hetzelfde gegevenstype voor kolommen met dezelfde naam
- Ten minste twee unieke labels
- Unieke kolomnamen in elke gegevensset (de trainingsset kan bijvoorbeeld niet meerdere kolommen bevatten met de naam Leeftijd)
Alleen meerdere klassen Geen
Alleen meerdere labels - De indeling van de labelkolom moet de geaccepteerde indeling hebben
- Ten minste één voorbeeld moet 0 of 2+ labels hebben, anders moet het een multiclass taak zijn
- Alle labels moeten de notatie of int de str notatie hebben, zonder overlapping. U mag niet zowel het label 1 als het label hebben '1'
Alleen NER - Het bestand mag niet beginnen met een lege regel
- Elke regel moet een lege regel zijn, of de notatie {token} {label}volgen, waarbij er precies één spatie is tussen het token en het label en geen witruimte na het label
- Alle labels moeten beginnen met I-, B-of precies Ozijn. Hoofdlettergevoelig
- Precies één lege lijn tussen twee steekproeven
- Precies één lege regel aan het einde van het bestand

Experiment configureren

De NLP-mogelijkheid van Geautomatiseerde ML wordt geactiveerd via AutoMLConfig. Dit is dezelfde werkstroom voor het indienen van geautomatiseerde ML-experimenten voor classificatie-, regressie- en prognosetaken. U stelt de meeste parameters in zoals voor deze experimenten, zoals task, compute_target en gegevensinvoer.

Er zijn echter belangrijke verschillen:

  • U kunt negeren primary_metric, omdat dit alleen voor rapportagedoeleinden is. Op dit moment traint geautomatiseerde ML slechts één model per uitvoering voor NLP en is er geen modelselectie.
  • De label_column_name parameter is alleen vereist voor tekstclassificatietaken met meerdere klassen en meerdere labels.
  • Als het merendeel van de voorbeelden in uw gegevensset meer dan 128 woorden bevat, wordt dit beschouwd als een groot bereik. Voor dit scenario kunt u de optie tekst met lange afstand inschakelen met de enable_long_range_text=True parameter in uw AutoMLConfig. Dit helpt de modelprestaties te verbeteren, maar vereist langere trainingstijden.
    • Als u tekst met een groot bereik inschakelt, is een GPU met meer geheugen vereist, zoals NCv3-serie of ND-serie .
    • De enable_long_range_text parameter is alleen beschikbaar voor classificatietaken met meerdere klassen.
automl_settings = {
    "verbosity": logging.INFO,
    "enable_long_range_text": True, # # You only need to set this parameter if you want to enable the long-range text setting
}

automl_config = AutoMLConfig(
    task="text-classification",
    debug_log="automl_errors.log",
    compute_target=compute_target,
    training_data=train_dataset,
    validation_data=val_dataset,
    label_column_name=target_column_name,
    **automl_settings
)

Taalinstellingen

Als onderdeel van de NLP-functionaliteit ondersteunt geautomatiseerde ML 104 talen die gebruikmaken van taalspecifieke en meertalige vooraf getrainde tekst-DNN-modellen, zoals de BERT-serie van modellen. Op dit moment is de taalselectie standaard ingesteld op Engels.

In de volgende tabel ziet u een overzicht van het model dat wordt toegepast op basis van taaktype en taal. Bekijk de volledige lijst met ondersteunde talen en de bijbehorende codes.

Taaktype Syntaxis voor dataset_language Algoritme voor tekstmodel
Tekstclassificatie met meerdere labels 'eng'
'deu'
'mul'
Engels BERT ongekapt
Duits BERT
Meertalige BERT

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe
Tekstclassificatie met meerdere klassen 'eng'
'deu'
'mul'
Engels BERT cased
Meertalige BERT

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe
Herkenning van benoemde entiteiten (NER) 'eng'
'deu'
'mul'
Engels BERT cased
Duits BERT
Meertalige BERT

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe

U kunt de taal van uw gegevensset opgeven in uw FeaturizationConfig. BERT wordt ook gebruikt in het featurization-proces van geautomatiseerde ML-experimenttraining, meer informatie over BERT-integratie en -featurization in geautomatiseerde ML.

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='{your language code}')
automl_config = AutomlConfig("featurization": featurization_config)

Gedistribueerde training

U kunt uw NLP-experimenten ook uitvoeren met gedistribueerde training op een Azure Machine Learning-rekencluster. Dit wordt automatisch verwerkt door geautomatiseerde ML wanneer de parameters max_concurrent_iterations = number_of_vms en enable_distributed_dnn_training = True worden opgegeven in uw AutoMLConfig tijdens het instellen van het experiment.

max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True

Hiermee plant u gedistribueerde training van de NLP-modellen en wordt automatisch geschaald naar elke GPU op uw virtuele machine of cluster van virtuele machines. Het maximum aantal toegestane virtuele machines is 32. De training wordt gepland met het aantal virtuele machines met twee bevoegdheden.

Voorbeeldnotebooks

Zie de voorbeeldnotitieblokken voor gedetailleerde codevoorbeelden voor elke NLP-taak.

Volgende stappen