microsoftml.featurize_text: konvertiert Textspalten in numerische Features

Verwendung

microsoftml.featurize_text(cols: [str, dict, list], language: ['AutoDetect',
    'English', 'French', 'German', 'Dutch', 'Italian', 'Spanish',
    'Japanese'] = 'English', stopwords_remover=None, case: ['Lower',
    'Upper', 'None'] = 'Lower', keep_diacritics: bool = False,
    keep_punctuations: bool = True, keep_numbers: bool = True,
    dictionary: dict = None, word_feature_extractor={'Name': 'NGram',
    'Settings': {'Weighting': 'Tf', 'MaxNumTerms': [10000000],
    'NgramLength': 1, 'AllLengths': True, 'SkipLength': 0}},
    char_feature_extractor=None, vector_normalizer: ['None', 'L1', 'L2',
    'LInf'] = 'L2', **kargs)

BESCHREIBUNG

In diesem Artikel lernen Sie Texttransformationen kennen, die für Daten durchgeführt werden können, bevor ein Modell trainiert wird.

Details

featurize_text erstellt aus einem angegebenen Textkorpus einen Behälter mit der Anzahl von Sequenzen aus aufeinander folgenden Wörtern (sogenannten N-Grammen). Dazu stehen zwei Möglichkeiten zur Verfügung:

  • Erstellen eines Wörterbuchs für N-Gramme und Verwenden der ID im Wörterbuch als Index im Behälter

  • Versehen jedes N-Gramms mit einem Hash und Verwenden des Hashwerts als Index im Behälter

Das Hashing dient der Konvertierung von Textdokumenten mit variabler Länge in numerische Featurevektoren gleicher Länge, um die Dimensionalität zu reduzieren und die Suche nach Featuregewichtungen zu beschleunigen.

Die Texttransformation wird auf Texteingabespalten angewendet. Enthält Spracherkennung, Tokenisierung, das Entfernen von Stoppwörtern, Textnormalisierung und Featuregenerierung. Standardmäßig werden die folgenden Sprachen unterstützt: Englisch, Französisch, Deutsch, Niederländisch, Italienisch, Spanisch und Japanisch.

Die N-Gramme werden als Zählvektoren dargestellt. Die Vektorslots entsprechen dabei entweder den N-Grammen (mithilfe von n_gram erstellt) oder den dazugehörigen Hashwerten (mithilfe von n_gram_hash erstellt). Das Einbetten von N-Grammen in einen Vektorraum ermöglicht es, dass die Inhalte effizient miteinander verglichen werden können. Die Slotwerte im Vektor können nach den folgenden Faktoren gewichtet werden:

  • Begriffshäufigkeit: Hierbei handelt es sich um Anzahl des Auftretens des Slots im Text.

  • Inverse Häufigkeit im Dokument: Hierbei handelt es sich um ein Verhältnis (der Logarithmus der inversen relativen Slothäufigkeit), das die Informationen misst, die von einem Slot bereitgestellt werden, indem ermittelt wird, wie häufig oder selten er im gesamten Text auftaucht.

  • Frequenzinverse Häufigkeit des Begriffs im Dokument: Hierbei handelt es sich um die Häufigkeit von Produktbegriffen und die inverse Häufigkeit im Dokument.

Argumente

cols

Eine Zeichenfolge oder Liste mit den zu transformierenden Variablennamen. Wenn dict gilt, stellen die Schlüssel die Namen der neu zu erstellenden Variablen dar.

language

Mit diesem Argument wird die im Dataset verwendete Sprache angegeben. Die folgenden Werte werden unterstützt:

  • "AutoDetect": Automatische Sprachenerkennung

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

Mit diesem Argument wird angegeben, wie Stoppwörter entfernt werden. Es werden drei Optionen unterstützt:

  • None: Stoppwörter werden nicht entfernt.

  • predefined: Eine vorkompilierte sprachspezifische Liste an Stoppwörtern wird verwendet, die die häufigsten Wörter aus Microsoft Office enthält.

  • custom: Hierbei handelt es sich um eine benutzerdefinierte Liste an Stoppwörtern. Sie akzeptiert die folgende Option: stopword.

Der Standardwert ist None.

case

Bei diesem Argument geht es um die Groß-/Kleinschreibung entsprechend der Regeln der invarianten Kultur. Hierbei sind die folgenden Werte möglich:

  • "Lower"

  • "Upper"

  • "None"

Der Standardwert ist "Lower".

keep_diacritics

Bei False werden diakritische Zeichen entfernt, bei True werden diakritische Zeichen beibehalten. Der Standardwert ist False.

keep_punctuations

Bei False wird Interpunktion entfernt, bei True wird sie beibehalten. Der Standardwert ist True.

keep_numbers

Bei False werden Zahlen entfernt, bei True werden Zahlen beibehalten. Der Standardwert ist True.

dictionary

Hierbei handelt es sich um ein Wörterbuch mit Begriffen auf der Positivliste. Die folgenden Optionen werden akzeptiert:

  • term: Hierbei handelt es sich um einen optionalen Zeichenvektor für Begriffe oder Kategorien.

  • dropUnknowns: Hiermit werden Elemente verworfen.

  • sort: Hiermit wird angegeben, wie Elemente beim Vektorisieren angeordnet werden sollen. Zwei Anordnungen werden unterstützt:

    • "occurrence": Elemente werden in ihrer ursprünglichen Reihenfolge angeordnet.
    • "value": Elemente werden entsprechend des Standardvergleichs angeordnet. Die Textsortierung erfolgt beispielsweise unter Berücksichtigung der Groß-/Kleinschreibung (z. B. „A“, dann „Z“, dann „a“).

Der Standardwert ist None. Beachten Sie, dass die Stoppwörterliste Vorrang vor der Positivliste des Wörterbuchs hat, da Stoppwörter entfernt werden, bevor Begriffe des Wörterbuchs auf die Positivliste gesetzt werden.

word_feature_extractor

Hiermit werden die Argumente für die Featureextraktion auf Wortebene angegeben. Es gibt zwei verschiedene Methoden für die Featureextraktion:

  • n_gram(): Dies ist die anzahlbasierte Featureextraktion (entspricht WordBag). Hierbei werden die folgenden Optionen akzeptiert: max_num_terms und weighting.

  • n_gram_hash(): Dies ist die hashbasierte Featureextraktion (entspricht WordHashBag). Die folgenden Optionen werden akzeptiert: hash_bits, seed, ordered und invert_hash.

Der Standardwert ist n_gram.

char_feature_extractor

Hiermit werden die Argumente für die char-Featureextraktion angegeben. Es gibt zwei verschiedene Methoden für die Featureextraktion:

  • n_gram(): Dies ist die anzahlbasierte Featureextraktion (entspricht WordBag). Hierbei werden die folgenden Optionen akzeptiert: max_num_terms und weighting.

  • n_gram_hash(): Dies ist die hashbasierte Featureextraktion (entspricht WordHashBag). Die folgenden Optionen werden akzeptiert: hash_bits, seed, ordered und invert_hash.

Der Standardwert ist None.

vector_normalizer

Hiermit werden die Vektoren (Zeilen) einzeln normalisiert, indem sie auf die Einheitsnorm skaliert werden. Einer der folgenden Werte ist möglich:

  • "None"

  • "L2"

  • "L1"

  • "LInf"

Der Standardwert ist "L2".

kargs

Zusätzliche Argumente, die an die Compute-Engine gesendet werden.

Gibt zurück

Ein Objekt, das die Transformation definiert.

Siehe auch

n_gram, n_gram_hash, n_gram, n_gram_hash, get_sentiment.

Beispiel

'''
Example with featurize_text and rx_logistic_regression.
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, featurize_text, rx_predict
from microsoftml.entrypoints._stopwordsremover_predefined import predefined


train_reviews = pandas.DataFrame(data=dict(
    review=[
        "This is great", "I hate it", "Love it", "Do not like it", "Really like it",
        "I hate it", "I like it a lot", "I kind of hate it", "I do like it",
        "I really hate it", "It is very good", "I hate it a bunch", "I love it a bunch",
        "I hate it", "I like it very much", "I hate it very much.",
        "I really do love it", "I really do hate it", "Love it!", "Hate it!",
        "I love it", "I hate it", "I love it", "I hate it", "I love it"],
    like=[True, False, True, False, True, False, True, False, True, False,
        True, False, True, False, True, False, True, False, True, False, True,
        False, True, False, True]))
        
test_reviews = pandas.DataFrame(data=dict(
    review=[
        "This is great", "I hate it", "Love it", "Really like it", "I hate it",
        "I like it a lot", "I love it", "I do like it", "I really hate it", "I love it"]))

out_model = rx_logistic_regression("like ~ review_tran",
                    data=train_reviews,
                    ml_transforms=[
                        featurize_text(cols=dict(review_tran="review"),
                            stopwords_remover=predefined(),
                            keep_punctuations=False)])
                            
# Use the model to score.
score_df = rx_predict(out_model, data=test_reviews, extra_vars_to_write=["review"])
print(score_df.head())

Ausgabe:

Beginning processing data.
Rows Read: 25, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 25, Read Time: 0, Transform Time: 0
Beginning processing data.
Not adding a normalizer.
Beginning processing data.
Rows Read: 25, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 25, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Warning: Too few instances to use 4 threads, decreasing to 1 thread(s)
Beginning optimization
num vars: 11
improvement criterion: Mean Improvement
L1 regularization selected 3 of 11 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.3725934
Elapsed time: 00:00:00.0131199
Beginning processing data.
Rows Read: 10, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0635453
Finished writing 10 rows.
Writing completed.
           review PredictedLabel     Score  Probability
0   This is great           True  0.443986     0.609208
1       I hate it          False -0.668449     0.338844
2         Love it           True  0.994339     0.729944
3  Really like it           True  0.443986     0.609208
4       I hate it          False -0.668449     0.338844

N-Gramm-Extraktoren

Remover für Stoppwörter