Datenfeaturisierung mit automatisiertem maschinellem Lernen

GILT FÜR: Python SDK azureml v1

In diesem Artikel wird erläutert, wie Sie die Einstellungen für die Datenfeaturisierung in Azure Machine Learning für Ihre Experimente mit automatisiertem maschinellem Lernen (automatisiertem ML) anpassen können.

Feature Engineering und Featurisierung

Die Trainingsdaten bestehen aus Zeilen und Spalten. Jede Zeile ist eine Beobachtung oder ein Datensatz, und die Spalten jeder Zeile sind die Features, mit denen die einzelnen Datensätze beschrieben werden. In der Regel werden zum Erstellen von Vorhersagemodellen die Features ausgewählt, die die Muster in den Daten am besten beschreiben.

Obwohl viele der Rohdatenfelder direkt zum Trainieren eines Modells verwendet werden können, ist es häufig erforderlich, zusätzliche (entwickelte) Features zu erstellen, die Informationen bereitstellen, mit denen die Muster in den Daten besser unterschieden werden können. Dieser Prozess wird Feature Engineering genannt. Dabei werden Kenntnisse zum Themenbereich der Daten genutzt, um Features zu erstellen, die ML-Algorithmen beim Lernen unterstützen.

In Azure Machine Learning wird das Feature Engineering mithilfe von Datenskalierungs- und Normalisierungstechniken vereinfacht. Zusammen werden diese Techniken und das Feature Engineering in Experimenten mit automatisiertem maschinellem Lernen (ML) als Featurisierung bezeichnet.

Voraussetzungen

In diesem Artikel wird davon ausgegangen, dass Sie bereits mit der Konfiguration eines Experiments für automatisiertes maschinelles Lernen vertraut sind.

Wichtig

Für die Python-Befehle in diesem Artikel ist die neueste azureml-train-automl-Paketversion erforderlich.

Weitere Informationen zur Konfiguration finden Sie in den folgenden Artikeln:

Konfigurieren der Featurisierung

Standardmäßig werden in jedem Experiment mit automatisiertem maschinellem Lernen automatische Skalierungs- und Normalisierungstechniken auf Ihre Daten angewandt. Bei diesen Techniken handelt es sich um Formen der Featurisierung, die für bestimmte Algorithmen hilfreich sind, die auf Features unterschiedlichen Größenordnungen reagieren. Sie können zusätzliche Featurisierungen wie die Zuschreibung fehlender Werte, Codierung und Transformationen aktivieren.

Hinweis

Die Schritte zur Featurisierung bei automatisiertem maschinellen Lernen (Featurenormalisierung, Behandlung fehlender Daten, Umwandlung von Text in numerische Daten usw.) werden Teil des zugrunde liegenden Modells. Bei Verwendung des Modells für Vorhersagen werden die während des Trainings angewendeten Schritte zur Featurisierung automatisch auf Ihre Eingabedaten angewendet.

Bei Experimenten, die mit dem Python SDK konfiguriert werden, können Sie die Featurisierungseinstellung aktivieren oder deaktivieren und die Featurisierungsschritte für Ihr Experiment angeben. Wenn Sie Azure Machine Learning Studio verwenden, finden Sie unter Anpassen der Featurisierung weitere Informationen.

In der folgenden Tabelle sind die akzeptierten Einstellungen für featurization in der AutoMLConfig-Klasse aufgeführt:

Konfiguration der Featurisierung BESCHREIBUNG
"featurization": 'auto' Gibt an, dass im Rahmen der Vorverarbeitung die folgenden Schritte für Datenschutzmaßnahmen und Featurisierung automatisch durchgeführt werden müssen. Dies ist die Standardeinstellung.
"featurization": 'off' Gibt an, dass Featurisierungsschritte nicht automatisch durchgeführt werden sollen
"featurization": 'FeaturizationConfig' Gibt an, dass benutzerdefinierte Featurisierungsschritte verwendet werden sollen. Erfahren Sie, wie Sie die Featurebereitstellung anpassen.

Automatische Featurebereitstellung

In der folgenden Tabelle sind die Verfahren zusammengefasst, die automatisch auf die Daten angewendet werden. Diese Verfahren werden für Experimente angewendet, die mit dem SDK oder der Studio-Benutzeroberfläche konfiguriert werden. Um dieses Verhalten zu deaktivieren, legen Sie "featurization": 'off' in Ihrem AutoMLConfig-Objekt fest.

Hinweis

Wenn Sie Ihre mit ML automatisch erstellten Modelle in ein ONNX-Modell exportieren möchten, beachten Sie, dass nur die mit einem Sternchen („*“) gekennzeichneten Optionen zur Featurisierung im ONNX-Format unterstützt werden. Erfahren Sie mehr über das Konvertieren von Modellen zu ONNX.

Featurisierungsschritte BESCHREIBUNG
Löschen von Features mit hoher Kardinalität oder ohne Varianz* Löschen Sie diese Features aus Trainings-und Validierungssätzen. Gilt für Features, denen alle Werte fehlen, die denselben Wert für alle Zeilen haben oder die eine sehr hohe Kardinalität (z. B. Hashes, IDs oder GUIDs) aufweisen.
Imputieren von fehlenden Werten* Bei numerischen Features werden fehlende Werte mit dem Durchschnitt der Werte in der Spalte imputiert.

Bei kategorischen Features werden fehlende Werte mit dem am häufigsten vorkommenden Wert imputiert.
Generieren weiterer Features* Für DateTime-Funktionen: Jahr, Monat, Tag, Tag der Woche, Tag des Jahres, Quartal, Woche des Jahres, Stunde, Minute, Sekunde.

Für Vorhersageaufgaben werden diese zusätzlichen DateTime-Features erstellt: ISO-Jahr, Halb – Halbjahr, Kalendermonat als Zeichenfolge, Woche, Wochentag als Zeichenfolge, Quartalstag, Tag des Jahres, AM/PM (0, wenn die Stunde vor Mittag ist (12 pm), andernfalls 1), AM/PM als Zeichenfolge, Tageszeit (12-Stunden-Basis)

Für Text-Funktionen: Ausdruckshäufigkeit basierend auf Unigrammen, Bigrammen und Trigrammen. Informieren Sie sich, wie Sie hierzu BERT verwenden.
Transformieren und Codieren* Numerische Features mit wenigen eindeutigen Werten werden in kategorische Features transformiert.

One-Hot-Codierung wird für kategorische Features mit geringer Kardinalität verwendet. One-Hot-Hashcodierung wird für kategorische Features mit hoher Kardinalität verwendet.
Worteinbettungen Ein Textfeaturizer konvertiert Vektoren von Texttoken mithilfe eines vortrainierten Modells in Satzvektoren. Der Einbettungsvektor jedes Worts in einem Dokument wird mit dem Rest zusammengefasst und produziert so einen Dokumentenfeaturevektor.
Clusterabstand Trainiert ein k-Means-Clusteringmodell für alle numerischen Spalten. Gibt k neue Features aus (ein neues numerisches Feature pro Cluster), die den Abstand jeder Stichprobe zum Schwerpunkt jedes Clusters enthalten.

In jedem automatisierten Machine Learning-Experiment werden Ihre Daten automatisch skaliert oder normalisiert, damit die Algorithmen gut funktionieren. Während des Modelltrainings wird eine der folgenden Skalierungs- oder Normalisierungstechniken auf jedes Modell angewendet.

Skalierung und Verarbeitung Beschreibung
StandardScaleWrapper Standardisieren von Features durch Entfernen des Mittelwerts und der Skalierung auf Einheitenvarianz
MinMaxScalar Transformieren von Features durch Skalieren jedes Features anhand des Mindest- und Maximalwerts der betreffenden Spalte
MaxAbsScaler Skalieren jedes Features anhand seines maximalen absoluten Werts
RobustScalar Skalieren von Features anhand ihres Quantilbereichs
PCA Lineare Dimensionalitätsreduzierung unter Verwendung von Singulärwertzerlegung der Daten, um sie auf einen niedrigeren Dimensionsbereich zu projizieren
TruncatedSVD Dieser Transformator führt eine lineare Dimensionalitätsreduzierung mithilfe einer abgeschnittenen Singulärwertzerlegung (SVD) durch. Im Gegensatz zur PCA zentriert dieser Schätzer die Daten nicht vor der Berechnung der Singulärwertzerlegung, sodass er effizient mit scipy.sparse-Matrizen arbeiten kann.
SparseNormalizer Jedes Beispiel (d. h. jede Zeile der Datenmatrix) mit mindestens einer Komponente ungleich Null wird unabhängig von anderen Beispielen neu skaliert, sodass seine Norm (l1 oder l2) gleich eins ist.

Schutzmaßnahmen für Daten

Der Datenintegritätsschutz hilft Ihnen dabei, potenzielle Probleme mit Ihren Daten zu identifizieren (z. B. fehlende Werte oder ein Klassenungleichgewicht). Sie helfen Ihnen auch, Korrekturmaßnahmen für verbesserte Ergebnisse zu ergreifen.

Der Datenintegritätsschutz wird für Folgendes angewendet:

  • Bei SDK-Experimenten: Wenn in Ihrem AutoMLConfig-Objekt der Parameter "featurization": 'auto' oder validation=auto angegeben ist
  • Bei Studio-Experimenten: Wenn die automatische Featurisierung aktiviert ist

Sie können den Datenintegritätsschutz für Ihr Experiment folgendermaßen überprüfen:

  • Durch Festlegen von show_output=True, wenn Sie ein Experiment mit dem SDK übermitteln
  • In Studio auf der Registerkarte Data guardrails (Datenintegritätsschutz) Ihrer Ausführung des automatisierten maschinellen Lernens

Zustände des Datenintegritätsschutzes

Der Datenintegritätsschutz zeigt einen von drei Zuständen an:

State BESCHREIBUNG
Erfolgreich Es wurden keine Datenprobleme erkannt, und es ist keine Aktion von Ihrer Seite erforderlich.
Fertig Die Änderungen wurden auf Ihre Daten angewendet. Wir empfehlen Ihnen, die vom automatisierten maschinellen Lernen ergriffenen Korrekturmaßnahmen zu überprüfen, um sicherzustellen, dass die Änderungen mit den erwarteten Ergebnissen übereinstimmen.
Benachrichtigt Ein Datenproblem wurde erkannt, konnte aber nicht behoben werden. Wir empfehlen Ihnen, das Problem zu prüfen und zu beheben.

Unterstützter Datenintegritätsschutz

In der folgenden Tabelle werden der derzeit unterstützte Datenintegritätsschutz und die zugehörigen Statuswerte beschrieben, die Ihnen beim Übermitteln Ihres Experiments unter Umständen angezeigt werden:

Schutzmaßnahme Status Bedingung für Trigger
Ergänzen fehlender Featurewerte durch Imputation übergeben


Vorgehensweise
Es wurden keine fehlenden Featurewerte in Ihren Trainingsdaten festgestellt. Erfahren Sie mehr über die Imputation fehlender Werte.

Fehlende Featurewerte wurden in Ihren Trainingsdaten festgestellt und imputiert.
Erkennung von Features mit hoher Kardinalität übergeben


Vorgehensweise
Ihre Eingaben wurden analysiert, und es wurden keine Features mit hoher Kardinalität gefunden.

Features mit hoher Kardinalität wurden in Ihren Eingaben erkannt und behandelt.
Verarbeitung der Überprüfungsaufteilung Vorgehensweise Die Überprüfungskonfiguration wurde auf 'auto' festgelegt, und die Trainingsdaten enthielten mehr als 20.000 Zeilen.
Jede Iteration des trainierten Modells wurde durch Kreuzvalidierung überprüft. Erfahren Sie mehr über Überprüfungsdaten.

Die Überprüfungskonfiguration wurde auf 'auto' festgelegt, und die Trainingsdaten enthielten weniger als 20.000 Zeilen.
Die Eingabedaten wurden zur Überprüfung des Modells in ein Trainingsdataset und ein Validierungsdataset aufgeteilt.
Ausgewogenheitserkennung für Klassen übergeben




Benachrichtigt



Fertig
Ihre Eingaben wurden analysiert, und alle Klassen in Ihren Trainingsdaten sind ausgeglichen. Ein Dataset gilt als ausgewogen, wenn jede Klasse im Datensatz gemessen an Anzahl und Verhältnis der Stichproben gut repräsentiert ist.

In Ihren Eingaben wurden unausgeglichene Klassen erkannt. Beheben Sie das Ausgleichsproblem, um den Modelltrend zu beheben. Erfahren Sie mehr über unausgeglichene Daten.

In Ihren Eingaben wurden unausgeglichene Klassen festgestellt, und die Sweeping-Logik hat beschlossen, einen Ausgleich anzuwenden.
Erkennung von Arbeitsspeicherproblemen übergeben



Fertig
Die ausgewählten Werte (Horizont, Verzögerung und rollierendes Zeitfenster) wurden analysiert, und es wurden keine potenziellen Probleme aufgrund von unzureichendem Speicherplatz erkannt. Erfahren Sie mehr über Vorhersagekonfigurationen von Zeitreihen.

Die ausgewählten Werte (Horizont, Verzögerung und rollierendes Zeitfenster) wurden analysiert, und für Ihr Experiment steht unter Umständen nicht genügend Speicherplatz zur Verfügung. Die Konfigurationen für Verzögerungen oder rollierende Zeitfenster sind deaktiviert.
Häufigkeitserkennung übergeben


Vorgehensweise
Die Zeitreihe wurde analysiert, und alle Datenpunkte entsprechen der erkannten Häufigkeit.

Die Zeitreihe wurde analysiert, und es wurden Datenpunkte ermittelt, die nicht mit der erkannten Häufigkeit übereinstimmen. Diese Datenpunkte wurden aus dem Dataset entfernt.
Kreuzvalidierung im Vergleich Fertig Für eine angemessene Auswertung der mit automatisiertem maschinellem Lernen trainierten Modelle nutzen wir ein Dataset, auf das das Modell nicht trainiert wird. Wenn der Benutzer daher keinen expliziten Validierungsdataset bereitstellt, wird ein Teil des Trainingsdatasets verwendet, um dies zu erreichen. Für kleinere Datasets (weniger als 20.000 Beispiele) wird die Kreuzvalidierung genutzt, es sei denn, es wird ein einzelnes zurückgehaltenes Set von den Trainingsdaten abgetrennt, um als Validierungsdataset zu dienen. Daher nutzen wir für Ihre Eingabedaten eine Kreuzvalidierung mit zehn Faltungen, wenn die Anzahl der Trainingsbeispiele weniger als 1.000 beträgt, und in allen anderen Fällen eine Kreuzvalidierung mit drei Faltungen.
Datensplit für Trainingstest Fertig Für eine angemessene Auswertung der mit automatisiertem maschinellem Lernen trainierten Modelle nutzen wir ein Dataset, auf das das Modell nicht trainiert wird. Wenn der Benutzer daher keinen expliziten Validierungsdataset bereitstellt, wird ein Teil des Trainingsdatasets verwendet, um dies zu erreichen. Für kleinere Datasets (weniger als 20.000 Beispiele) wird die Kreuzvalidierung genutzt, es sei denn, es wird ein einzelnes zurückgehaltenes Set von den Trainingsdaten abgetrennt, um als Validierungsdataset zu dienen. Daher werden Ihre Eingabedaten in ein Trainingsdataset und ein zurückgehaltenes Validierungsdataset aufgeteilt.
Erkennung der Zeitreihen-ID übergeben


Fest
Das Dataset wurde analysiert und es wurde kein doppelter Zeitindex erkannt.

Im Dataset wurden mehrere Zeitreihen gefunden und die Zeitreihenbezeichner wurden für Ihr Dataset automatisch erstellt.
Zeitreihenaggregation übergeben


Fest
Die Datasetfrequenz wird mit der angegebenen Häufigkeit des Benutzers abgestimmt. Es wurde keine Aggregation durchgeführt.

Die Daten wurden aggregiert, um die vom Benutzer angegebene Häufigkeit zu erfüllen.
Verarbeitung kurzer Reihen übergeben


Fest
Automatisiertes ML hat für jede Reihe in den Eingabedaten genügend Datenpunkte zum Fortsetzen des Trainings ermittelt.

Im Rahmen des automatisierten maschinellen Lernens wurde festgestellt, dass einige Datenreihen nicht genügend Datenpunkte enthielten, um ein Modell zu trainieren. Um mit dem Training fortzufahren, wurden diese kurzen Serien weggelassen oder aufgefüllt.

Anpassen der Featurisierung

Sie können die Featurisierungseinstellungen anpassen, um sicherzustellen, dass die Daten und Features zum Trainieren Ihres ML-Modells zu relevanten Vorhersagen führen.

Um die Featurisierung anzupassen, geben Sie "featurization": FeaturizationConfig in Ihrem AutoMLConfig-Objekt an. Wenn Sie Azure Machine Learning Studio für Ihr Experiment verwenden, finden Sie weitere Informationen in dieser Anleitung. Informationen zum Anpassen der Featurisierung für Vorhersagetasktypen finden Sie unter Vorhersagen.

Unterstützte Anpassungen umfassen:

Anpassung Definition
Aktualisierung des Spaltenzwecks Außerkraftsetzen des automatisch erkannten Featuretyps für die angegebene Spalte.
Aktualisierung von Transformationsparametern Aktualisieren der Parameter für den angegebenen Transformator. Unterstützt derzeit Imputer (Mittelwert, häufigster Wert und medianer Wert) und HashOneHotEncoder.
Löschen von Spalten Gibt Spalten an, die aus der Featureverwendung gelöscht werden sollen.
Blockieren von Transformatoren Gibt Blockiertransformatoren an, die für die Featurebereitstellung verwendet werden.

Hinweis

Die Funktion Spalten löschen ist seit SDK-Version 1.19 veraltet. Löschen Sie Spalten im Rahmen der Datenbereinigung aus Ihrem Dataset, bevor Sie es in Ihrem automatisierten ML-Experiment nutzen.

Erstellen Sie das FeaturizationConfig-Objekt mithilfe von API-Aufrufen:

featurization_config = FeaturizationConfig()
featurization_config.blocked_transformers = ['LabelEncoder']
featurization_config.drop_columns = ['aspiration', 'stroke']
featurization_config.add_column_purpose('engine-size', 'Numeric')
featurization_config.add_column_purpose('body-style', 'CategoricalHash')
#default strategy mean, add transformer param for 3 columns
featurization_config.add_transformer_params('Imputer', ['engine-size'], {"strategy": "median"})
featurization_config.add_transformer_params('Imputer', ['city-mpg'], {"strategy": "median"})
featurization_config.add_transformer_params('Imputer', ['bore'], {"strategy": "most_frequent"})
featurization_config.add_transformer_params('HashOneHotEncoder', [], {"number_of_bits": 3})

Transparenz der Featurisierung

Auf jedes AutoML-Modell wird automatisch eine Featurisierung angewendet. Die Featurisierung umfasst automatisiertes Feature Engineering (wenn "featurization": 'auto') sowie Skalierung und Normalisierung, was sich dann auf den ausgewählten Algorithmus und seine Hyperparameterwerte auswirkt. AutoML unterstützt verschiedene Methoden, um sicherzustellen, dass Sie einen Überblick darüber haben, was auf Ihr Modell angewendet wurde.

Betrachten Sie dieses Vorhersagebeispiel:

  • Es gibt vier Eingabemerkmale: A (numerisch), B (numerisch), C (numerisch), D (DateTime).
  • Das numerische Feature C wird weggelassen, da es sich um eine ID-Spalte mit ausschließlich eindeutigen Werten handelt.
  • Die Werte der numerischen Features A und B fehlen und werden daher als Mittelwerte zugerechnet.
  • DateTime-Feature D wird in 11 verschiedenen entwickelten Features bereitgestellt.

Verwenden Sie die fitted_model-Ausgabe Ihrer automatisierten ML-Experimentausführung, um diese Informationen zu erhalten.

automl_config = AutoMLConfig(…)
automl_run = experiment.submit(automl_config …)
best_run, fitted_model = automl_run.get_output()

Automatisierte Featureentwicklung

get_engineered_feature_names() gibt eine Liste von Namen entwickelter Features zurück.

Hinweis

Verwenden Sie „timeseriestransformer“ für die Aufgabe „forecasting“ und andernfalls „datatransformer“ für die Aufgaben „regression“ oder „classification“.

fitted_model.named_steps['timeseriestransformer']. get_engineered_feature_names ()

Diese Liste enthält alle Namen entwickelter Features.

['A', 'B', 'A_WASNULL', 'B_WASNULL', 'year', 'half', 'quarter', 'month', 'day', 'hour', 'am_pm', 'hour12', 'wday', 'qday', 'week']

get_featurization_summary() erhält eine Zusammenfassung der Featurisierung aller Eingabefeatures.

fitted_model.named_steps['timeseriestransformer'].get_featurization_summary()

Output

[{'RawFeatureName': 'A',
  'TypeDetected': 'Numeric',
  'Dropped': 'No',
  'EngineeredFeatureCount': 2,
  'Tranformations': ['MeanImputer', 'ImputationMarker']},
 {'RawFeatureName': 'B',
  'TypeDetected': 'Numeric',
  'Dropped': 'No',
  'EngineeredFeatureCount': 2,
  'Tranformations': ['MeanImputer', 'ImputationMarker']},
 {'RawFeatureName': 'C',
  'TypeDetected': 'Numeric',
  'Dropped': 'Yes',
  'EngineeredFeatureCount': 0,
  'Tranformations': []},
 {'RawFeatureName': 'D',
  'TypeDetected': 'DateTime',
  'Dropped': 'No',
  'EngineeredFeatureCount': 11,
  'Tranformations': ['DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime',ateTime','DateTime','DateTime']}]
Output Definition
RawFeatureName Eingabefeature-/Spaltenname aus dem bereitgestellten Dataset.
TypeDetected Erkannter Datentyp des Eingabefeatures.
Dropped Gibt an, ob das Eingabefeature gelöscht oder verwendet wurde.
EngineeringFeatureCount Anzahl von Features, die über automatisierte Featureentwicklungstransformationen generiert wurden.
Transformationen Liste der Transformationen, die zum Generieren entwickelter Features auf Eingabefeatures angewendet wurden.

Skalierung und Normalisierung

Verwenden Sie fitted_model.steps, um die Skalierung/Normalisierung und den ausgewählten Algorithmus mit seinen Hyperparameterwerten zu verstehen.

Das folgende Beispiel zeigt die Ausgabe der Ausführung von fitted_model.steps für eine ausgewählte Ausführung:

[('RobustScaler', 
  RobustScaler(copy=True, 
  quantile_range=[10, 90], 
  with_centering=True, 
  with_scaling=True)), 

  ('LogisticRegression', 
  LogisticRegression(C=0.18420699693267145, class_weight='balanced', 
  dual=False, 
  fit_intercept=True, 
  intercept_scaling=1, 
  max_iter=100, 
  multi_class='multinomial', 
  n_jobs=1, penalty='l2', 
  random_state=None, 
  solver='newton-cg', 
  tol=0.0001, 
  verbose=0, 
  warm_start=False))]

Verwenden Sie diese Hilfsfunktion, um weitere Details zu erhalten:

from pprint import pprint

def print_model(model, prefix=""):
    for step in model.steps:
        print(prefix + step[0])
        if hasattr(step[1], 'estimators') and hasattr(step[1], 'weights'):
            pprint({'estimators': list(e[0] for e in step[1].estimators), 'weights': step[1].weights})
            print()
            for estimator in step[1].estimators:
                print_model(estimator[1], estimator[0]+ ' - ')
        elif hasattr(step[1], '_base_learners') and hasattr(step[1], '_meta_learner'):
            print("\nMeta Learner")
            pprint(step[1]._meta_learner)
            print()
            for estimator in step[1]._base_learners:
                print_model(estimator[1], estimator[0]+ ' - ')
        else:
            pprint(step[1].get_params())
            print()   

Diese Hilfsfunktion gibt die folgende Ausgabe für eine bestimmte Ausführung zurück, wobei LogisticRegression with RobustScalar als spezifischer Algorithmus verwendet wird.

RobustScaler
{'copy': True,
'quantile_range': [10, 90],
'with_centering': True,
'with_scaling': True}

LogisticRegression
{'C': 0.18420699693267145,
'class_weight': 'balanced',
'dual': False,
'fit_intercept': True,
'intercept_scaling': 1,
'max_iter': 100,
'multi_class': 'multinomial',
'n_jobs': 1,
'penalty': 'l2',
'random_state': None,
'solver': 'newton-cg',
'tol': 0.0001,
'verbose': 0,
'warm_start': False}

Vorhersage der Klassenwahrscheinlichkeit

Mithilfe von automatisiertem ML erzeugte Modelle verfügen sämtlich über Wrapper-Objekte, die die Funktionalität ihrer Open-Source-Ursprungsklasse widerspiegeln. Die meisten Wrapper-Objekte von Klassifizierungsmodellen, die von automatisiertem ML zurückgegeben werden, implementieren die predict_proba()-Funktion, die eine Datenstichprobe Ihrer Features (X-Werte) in einer Array-ähnlichen oder Sparsematrixform akzeptiert und ein n-dimensionales Array jeder Stichprobe und ihrer jeweiligen Klassenwahrscheinlichkeit zurückgibt.

Wenn Sie mithilfe derselben Aufrufe die beste Ausführung und das angepasste Modell abgerufen haben, können Sie predict_proba() direkt aus dem angepassten Modell aufrufen, wobei Sie ein X_test-Beispiel im für den Modelltyp passenden Format bereitstellen.

best_run, fitted_model = automl_run.get_output()
class_prob = fitted_model.predict_proba(X_test)

Wenn das zugrunde liegende Modell die predict_proba()-Funktion nicht unterstützt oder das Format falsch ist, wird eine für die Modellklasse spezifische Ausnahme ausgelöst. Beispiele zur Implementierung dieser Funktion für verschiedene Modelltypen finden Sie in den Referenzdokumenten zu RandomForestClassifier und XGBoost.

BERT-Integration im automatisierten maschinellen Lernen

BERT wird auf der Featurisierungsebene des automatisierten maschinellen Lernens verwendet. Wenn in dieser Ebene eine Spalte freien Text oder andere Datentypen wie Zeitstempel oder einfache Zahlen enthält, dann wird die Featurisierung entsprechend angewendet.

Für BERT wird das Modell unter Verwendung der von den Anbietern zur Verfügung gestellten Bezeichnungen optimiert und trainiert. Von hier aus werden die Dokumenteinbettungen als Features neben anderen ausgegeben, z. B. zeitstempelbasierte Features, Wochentag.

Weitere Informationen finden Sie unter Einrichten von automatisiertem ML zum Trainieren eines Modells zur Verarbeitung natürlicher Sprache mit Python.

Schritte zum Aufrufen von BERT

Um BERT aufzurufen, legen Sie enable_dnn: True in Ihren „automl_settings“ fest und verwenden eine GPU-Computeressource (vm_size = "STANDARD_NC6" oder eine höhere GPU). Wenn eine CPU-Computeressource verwendet wird, aktiviert AutoML anstatt BERT den BiLSTM DNN-Featurizer.

Automatisiertes maschinelles Lernen führt die folgenden Schritte für BERT aus.

  1. Vorverarbeitung und Tokenisierung aller Textspalten. Beispielsweise ist der StringCast-Transformator in der Featurisierungszusammenfassung für das endgültige Modell zu finden. Ein Beispiel dafür, wie die Zusammenfassung der Featurisierung des Modells zu erstellen ist, findet sich in diesem Notebook.

  2. Verketten Sie alle Textspalten zu einer einzelnen Textspalte, daher das StringConcatTransformer im endgültigen Modell.

    Bei unserer Implementierung von BERT ist die Gesamttextlänge eines Trainingsbeispiels auf 128 Token eingeschränkt. Das bedeutet, dass bei der Verkettung alle Textspalten idealerweise höchstens 128 Token aufweisen sollten. Wenn mehrere Spalten vorhanden sind, sollte jede Spalte gekürzt werden, sodass diese Bedingung erfüllt ist. Bei verketteten Spalten mit einer Länge von mehr als >128 Token kürzt die Tokenizerebene von BERT diese Eingabe andernfalls auf 128 Token.

  3. Im Rahmen des Featuresweepings wird BERT von AutoML mit der Baseline (Sammlung von Wortfeatures) für eine Stichprobe der Daten verglichen. Dieser Vergleich bestimmt, ob BERT die Genauigkeit erhöhen würde. Wenn BERT besser abschneidet als die Baseline, verwendet AutoML dann BERT zur Textfeatureisierung für die gesamten Daten. In diesem Fall wird im endgültigen Modell PretrainedTextDNNTransformer angezeigt.

Die Ausführung von BERT dauert im Allgemeinen länger als bei den anderen Featurizern. Für eine bessere Leistung wird aufgrund der jeweiligen RDMA-Funktionen die Verwendung von STANDARD_NC24r oder STANDARD_NC24rs_V3 empfohlen.

Beim automatisierten maschinellen Lernen wird das BERT-Training auf mehrere Knoten verteilt, wenn diese verfügbar sind (bis zu maximal acht Knoten). Dies kann in Ihrem AutoMLConfig-Objekt erfolgen, indem Sie den max_concurrent_iterations-Parameter auf einen höheren Wert als 1 festlegen.

Unterstützte Sprachen für BERT in AutoML

AutoML unterstützt derzeit ungefähr 100 Sprachen und wählt abhängig von der Sprache des Datasets das entsprechende BERT-Modell aus. Für Daten in deutscher Sprache wird das deutsche BERT-Modell verwendet. Für englische Daten wird das englische BERT-Modell verwendet. Für alle anderen Sprachen nutzen wir das mehrsprachige BERT-Modell.

Im folgenden Code wird das deutsche BERT-Modell ausgelöst, da deu als Datasetsprache angegeben ist, was gemäß ISO-Klassifizierung dem dreibuchstabigen Ländercode für Deutschland entspricht.

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='deu')

automl_settings = {
    "experiment_timeout_minutes": 120,
    "primary_metric": 'accuracy',
# All other settings you want to use
    "featurization": featurization_config,
    
    "enable_dnn": True, # This enables BERT DNN featurizer
    "enable_voting_ensemble": False,
    "enable_stack_ensemble": False
}