Compartir vía


microsoftml.featurize_text: convierte columnas de texto en características numéricas

Uso

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)

Descripción

Transformaciones de texto que se pueden realizar en los datos antes de entrenar un modelo.

Detalles

La transformación featurize_text genera una bolsa de recuentos de secuencias de palabras consecutivas, denominadas n-gramas, a partir de un corpus de texto determinado. Esto puede hacerse de dos formas:

  • crear un diccionario de n-gramas y usar el identificador en el diccionario como índice en la bolsa;

  • aplicar un algoritmo hash a cada n-grama y usar el valor hash como índice de la bolsa.

El propósito del código hash es convertir documentos de texto de longitud variable en vectores de características numéricos de igual longitud, para admitir la reducción de dimensionalidad y acelerar la búsqueda de pesos de características.

La transformación de texto se aplica a las columnas de entrada de texto. Ofrece detección de idioma, tokenización, eliminación de palabras irrelevantes, normalización de texto y generación de características. Admite los siguientes idiomas de forma predeterminada: inglés, francés, alemán, neerlandés, italiano, español y japonés.

Los n-gramas se representan como vectores de recuento, con ranuras de vector que corresponden a n-gramas (creados mediante n_gram) o a sus hashes (creados mediante n_gram_hash). La inserción de n-gramas en un espacio vectorial permite comparar su contenido de forma eficaz. Los valores de ranura del vector se pueden ponderar por los siguientes factores:

  • frecuencia de término: el número de apariciones de la ranura en el texto

  • frecuencia inversa del documento: una proporción (el logaritmo de la frecuencia inversa de ranura relativa) que mide la información que proporciona una ranura mediante la determinación de cuán común o poco frecuente es en todo el texto.

  • frecuencia de término-frecuencia de documento inverso: la frecuencia de término del producto y la frecuencia inversa del documento.

Argumentos

cols

Cadena de caracteres o lista de nombres de variables que se transformarán. Si es dict, las claves representan los nombres de las nuevas variables que se crearán.

language

Especifica el lenguaje utilizado en el conjunto de datos. Se admiten los valores siguientes:

  • "AutoDetect": para la detección automática de lenguaje.

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

Especifica el eliminador de palabras irrelevantes que se usará. Se admiten tres opciones:

  • None: no se usa ningún eliminador de palabras irrelevantes.

  • predefined: una lista precompilada de palabras irrelevantes específica del idioma que incluye las palabras más comunes de Microsoft Office.

  • custom: una lista de palabras irrelevantes definida por el usuario. Acepta la opción siguiente: stopword.

El valor predeterminado es None.

mayúsculas y minúsculas

Uso de mayúsculas y minúsculas del texto mediante las reglas de la referencia cultural invariable. Toma los siguientes valores:

  • "Lower"

  • "Upper"

  • "None"

El valor predeterminado es "Lower".

keep_diacritics

Falsepara quitar las marcas diacríticas, True para mantenerlas. El valor predeterminado es False.

keep_punctuations

False para quitar la puntuación, True para mantenerla. El valor predeterminado es True.

keep_numbers

False para quitar los números, True para mantenerlos. El valor predeterminado es True.

diccionario

Diccionario de términos permitidos que acepta las siguientes opciones:

  • term: vector de carácter opcional de términos o categorías.

  • dropUnknowns: anula elementos.

  • sort: especifica cómo ordenar los elementos cuando se vectorizan. Se admiten dos ordenes:

    • "occurrence": los elementos aparecen en el orden encontrado.
    • "value": los elementos se ordenan según su comparación predeterminada. Por ejemplo, la organización del texto distingue entre mayúsculas y minúsculas (por ejemplo, "a", luego "z" y después "a").

El valor predeterminado es None. Tenga en cuenta que la lista de palabras irrelevantes tiene prioridad sobre la lista de permitidos del diccionario, ya que estas se quitan antes de que se permitan los términos del diccionario.

word_feature_extractor

Especifica los argumentos de extracción de características de palabra. Hay dos mecanismos de extracción de características diferentes:

  • n_gram(): extracción de característica basada en recuento (equivalente a WordBag). Acepta las opciones siguientes: max_num_terms y weighting.

  • n_gram_hash(): extracción de característica basada en código hash (equivalente a WordHashBag). Acepta las opciones siguientes: hash_bits, seed, ordered y invert_hash.

El valor predeterminado es n_gram.

char_feature_extractor

Especifica los argumentos de extracción de características char. Hay dos mecanismos de extracción de características diferentes:

  • n_gram(): extracción de característica basada en recuento (equivalente a WordBag). Acepta las opciones siguientes: max_num_terms y weighting.

  • n_gram_hash(): extracción de característica basada en código hash (equivalente a WordHashBag). Acepta las opciones siguientes: hash_bits, seed, ordered y invert_hash.

El valor predeterminado es None.

vector_normalizer

Normaliza vectores (filas) de forma individual al cambiar la escala a la norma de la unidad. Toma uno de los valores siguientes:

  • "None"

  • "L2"

  • "L1"

  • "LInf"

El valor predeterminado es "L2".

kargs

Argumentos adicionales que se envían al motor de proceso.

Devoluciones

Objeto que define la transformación.

Vea también

n_gram, n_gram_hash, n_gram, n_gram_hash, get_sentiment.

Ejemplo

'''
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())

Salida:

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

Extractores de n-gramas

Eliminadores de palabras irrelevantes