[PYTHON] Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 4 Schritt 14 Memo "Hyperparametersuche"

Inhalt

Dies ist ein Memo für mich, während ich Einführung in Anwendungen zur Verarbeitung natürlicher Sprache in 15 Schritten lese. Notieren Sie sich diesmal in Kapitel 4, Schritt 14 Ihre eigenen Punkte.

Vorbereitung

Kapitelübersicht

In diesem Kapitel versuchen wir, die Werte geeigneter Parameter (nicht Lernparameter) zu finden, die dem maschinellen Lernsystem extern übergeben werden sollten.

--Grid-Suche

14.1 Hyperparameter

Ein-Schritt-Metaparameter, die von Designern und Programmierern vor dem Lernen festgelegt wurden, nicht Parameter, die durch Lernen angepasst und erfasst wurden.

--Feature Extractor --Identifier

14.2 Rastersuche

Dies ist eine Methode, um die zu durchsuchenden Parameter und die Kandidaten für jeden Wert aufzulisten und alle Kombinationen zu versuchen, den besten zu finden. Scikit-learn bietet sklearn.model_selection.GridSearchCV.

--Verwenden Sie die Klassifikatorklasse mit der Scikit-Learn-API

#Verwenden Sie keine Pipeline

## train
vectorizer = TfidfVectorizer(tokenizer=tokenize, ngram_range=(1, 2))
train_vectors = vectorizer.fit_transform(train_texts)
parameters = {  # <1>
    'n_estimators': [10, 20, 30, 40, 50, 100, 200, 300, 400, 500],
    'max_features': ('sqrt', 'log2', None),
}
classifier = RandomForestClassifier()
gridsearch = GridSearchCV(classifier, parameters)
gridsearch.fit(train_vectors, train_labels)

## predict
test_vectors = vectorizer.transform(test_texts)
predictions = gridsearch.predict(test_vectors)


#Pipeline verwenden

## train 
pipeline = Pipeline([
    ('vectorizer', TfidfVectorizer(tokenizer=tokenize, ngram_range=(1, 2))),
    ('classifier', RandomForestClassifier()),
])
parameters = {
    'vectorizer__ngram_range':[(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)],
    'classifier__n_estimators':[10, 20, 30, 40, 50, 100, 200, 300, 400, 500],
    'classifier__max_features':('sqrt', 'log2', None),
}
gridsearch = GridSearchCV(pipeline, parameters)
gridsearch.fit(texts, labels)

## predict
gridsearch.predict(texts)

GridSearchCV


#ausführlich: Wird angezeigt, weil ich den Ausführungsstatus der Rastersuche nicht kannte(1)
# n_Jobs: so viel wie möglich(-1)Parallel laufen
clf = GridSearchCV(pipeline, parameters, verbose=1, n_jobs=-1)

Ausführungsergebnis


from dialogue_agent import DialogueAgent  # <1>
↓
from dialogue_agent_pipeline_gridsearch import DialogueAgent  # <1>

$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python evaluate_dialogue_agent.py
#Es dauerte ungefähr 20 Minuten, um die Ausführung abzuschließen
Fitting 3 folds for each of 180 candidates, totalling 540 fits

[Parallel(n_jobs=-1)]: Done  46 tasks      | elapsed:    5.4s
[Parallel(n_jobs=-1)]: Done 196 tasks      | elapsed:  2.2min
[Parallel(n_jobs=-1)]: Done 446 tasks      | elapsed:  5.5min
[Parallel(n_jobs=-1)]: Done 540 out of 540 | elapsed: 19.9min finished

0.7021276595744681
{'classifier__max_features': 'log2', 'classifier__n_estimators': 300, 'vectorizer__ngram_range': (1, 1)}

―― Mit zunehmender Anzahl der zu durchsuchenden Parameter wird die zum Durchsuchen der Rastersuche erforderliche Zeit exponentiell lang. --In GridSearchCV # fit wird die Leistungsbewertung jedes Mal durchgeführt, wenn Sie einen Parametersatz ausprobieren.

14.3 Verwenden von Hyperopt 14.4 Wahrscheinlichkeitsverteilung

Ein Tool zum effizienteren Suchen von Hyperparametern als die Rastersuche. Gibt den Parameterraum und die Zielfunktion an und gibt die optimalen Hyperparameter zurück.

--Parameterraum: Zu durchsuchende Parameter und Kandidaten für jeden Wert

#Parametersuche
vectorizer = TfidfVectorizer(tokenizer=tokenize, ngram_range=(1, 2))
train_vectors = vectorizer.fit_transform(train_texts)

##Zielfunktion
def objective(args):
    classifier = RandomForestClassifier(n_estimators=int(args['n_estimators']),
                                        max_features=args['max_features'])
    classifier.fit(tr_vectors, tr_labels)
    val_predictions = classifier.predict(val_vectors)
    accuracy = accuracy_score(val_predictions, val_labels)
    return -accuracy

##Parameterraum
max_features_choices = ('sqrt', 'log2', None)
space = {
    'n_estimators': hp.quniform('n_estimators', 10, 500, 10),
    'max_features': hp.choice('max_features', max_features_choices),
}
best = fmin(objective, space, algo=tpe.suggest, max_evals=30)

# train
best_classifier = RandomForestClassifier(
    n_estimators=int(best['n_estimators']),
    max_features=max_features_choices[best['max_features']])
best_classifier.fit(train_vectors, train_labels)

# predict
test_vectors = vectorizer.transform(test_texts)
predictions = best_classifier.predict(test_vectors)

14.5 Anwendung auf Keras

Details werden weggelassen, da die Ausführung nicht einfach abgeschlossen werden kann.

Auswertung

Die Ausführung schreitet nicht gut voran (da es sich um eine CPU handelt, dauert es einige Zeit, kann sie nicht mit einer CPU ausgeführt werden?). Daher werde ich sie später aktualisieren, wenn ich es mir leisten kann.

Recommended Posts

Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 4 Schritt 14 Memo "Hyperparametersuche"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 06 Memo "Identifier"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 07 Memo "Evaluation"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 04 Memo "Feature Extraction"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 3 Schritt 08 Memo "Einführung in neuronale Netze".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 3 Schritt 11 Memo "Worteinbettungen"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 12 Memo "Convolutional Neural Networks".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 13 Memo "Wiederkehrende neuronale Netze"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 01 Memo "Erstellen eines Dialogagenten"
Versuchen Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 2 Schritt 03 Memo "Morphologische Analyse und schriftliches Schreiben"
Versuchen wir das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 10 Memo "Details und Verbesserung des neuronalen Netzes"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 1 Memo "Vorkenntnisse vor Beginn der Übungen".
[WIP] Vorverarbeiten von Notizen in der Verarbeitung natürlicher Sprache
Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Jobwechsel-Meeting] Versuchen Sie, Unternehmen zu klassifizieren, indem Sie Mundpropaganda in natürlicher Sprache mit word2vec verarbeiten
[Verarbeitung natürlicher Sprache] Ich habe diese Woche versucht, die aktuellen Themen in der Slack-Community zu visualisieren
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
Zusammenfassung von Kapitel 2 der Einführung in Entwurfsmuster, die in Java gelernt wurden
Kapitel 4 Zusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
Zusammenfassung von Kapitel 3 der Einführung in Entwurfsmuster, die in Java gelernt wurden
[Einführung in RasPi4] Umgebungskonstruktion, Mecab des Verarbeitungssystems für natürliche Sprache usw. .. .. ♪
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
100 Sprachverarbeitung Knock Kapitel 1 in Python
Probieren Sie Cython in kürzester Zeit aus
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]