microsoftml.featurize_text: Converte colunas de texto em recursos numéricos

Usage

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)

Description

Transformações de texto que podem ser realizadas em dados antes de treinar um modelo.

Detalhes

A featurize_text transformada produz um saco de contagens de sequências de palavras consecutivas, chamadas n-gramas, a partir de um dado corpus de texto. Existem duas maneiras de fazer isso:

  • construir um dicionário de n-gramas e usar o ID no dicionário como índice na bolsa;

  • Faça o hash de cada n-grama e use o valor do hash como índice no saco.

O objetivo do hashing é converter documentos de texto de comprimento variável em vetores numéricos de características de comprimento igual, para suportar redução de dimensionalidade e tornar a busca pelos pesos de características mais rápida.

A transformação de texto é aplicada às colunas de entrada de texto. Ele oferece detecção de idiomas, tokenização, remoção de palavras de entrada, normalização de texto e geração de recursos. Ele suporta os seguintes idiomas por padrão: inglês, francês, alemão, holandês, italiano, espanhol e japonês.

Os n-gramas são representados como vetores de contagem, com slots vetoriais correspondentes a n-gramas (criados usando n_gram) ou aos seus hashes (criados usando n_gram_hash). Incorporar ngramas em um espaço vetorial permite que seus conteúdos sejam comparados de maneira eficiente. Os valores das ranhuras no vetor podem ser ponderados pelos seguintes fatores:

  • Frequência do termo - O número de ocorrências da fenda no texto

  • Frequência inversa de documentos - Uma razão (o logaritmo da frequência relativa inversa dos slots) que mede as informações que uma slot fornece determinando quão comum ou rara ela é em todo o texto.

  • termo frequência-inversa do documento frequência - o termo produto e o inverso do documento frequência.

Argumentos

Cols

Uma string de caracteres ou lista de nomes de variáveis para transformar. Se dict, as chaves representam os nomes das novas variáveis a serem criadas.

linguagem

Especifica a linguagem usada no conjunto de dados. Há suporte para os seguintes valores:

  • "AutoDetect": para detecção automática de linguagem.

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

Especifica o removedor de palavras de stop a ser usado. Existem três opções suportadas:

  • Nenhum: Não é usado removedor de palavras de stop.

  • predefined: Uma lista pré-compilada específica de palavras de parada é usada para cada idioma, que inclui as palavras mais comuns do Microsoft Office.

  • custom: Uma lista definida pelo usuário de palavras de parada. Aceita a seguinte opção: stopword.

O valor padrão é None.

caso

Uso de letras usando as regras da cultura invariante. Assume os seguintes valores:

  • "Lower"

  • "Upper"

  • "None"

O valor padrão é "Lower".

keep_diacritics

False remover marcas diacríticas; True para manter marcas diacríticas. O valor padrão é False.

keep_punctuations

False remover pontuação; True para manter a pontuação. O valor padrão é True.

keep_numbers

False remover números; True para reter números. O valor padrão é True.

dicionário

Um dicionário de termos permitidos que aceita as seguintes opções:

  • term: Um vetor de caracteres opcional de termos ou categorias.

  • dropUnknowns: Deixe os itens cair.

  • sort: Especifica como ordenar itens quando vetorizados. São suportados dois ordenamentos:

    • "occurrence": itens aparecem na ordem encontrada.
    • "value": os itens são ordenados de acordo com sua comparação padrão. Por exemplo, a ordenação de texto será sensível a maiúsculas (por exemplo, 'A' depois 'Z' e depois 'a').

O valor padrão é None. Note que a lista de palavras de registro tem precedência sobre a lista de dicionários, pois as palavras de encerramento são removidas antes que os termos do dicionário sejam listados.

word_feature_extractor

Especifica a palavra argumentos de extração de características. Existem dois mecanismos diferentes de extração de características:

  • n_gram(): Extração de características baseada em contagem (equivalente ao WordBag). Aceita as seguintes opções: max_num_terms e weighting.

  • n_gram_hash(): Extração de recursos baseada em hashing (equivalente ao WordHashBag). Aceita as seguintes opções: hash_bits, seed, ordered e invert_hash.

O valor padrão é n_gram.

char_feature_extractor

Especifica os argumentos de extração de características do personagem. Existem dois mecanismos diferentes de extração de características:

  • n_gram(): Extração de características baseada em contagem (equivalente ao WordBag). Aceita as seguintes opções: max_num_terms e weighting.

  • n_gram_hash(): Extração de recursos baseada em hashing (equivalente ao WordHashBag). Aceita as seguintes opções: hash_bits, seed, ordered e invert_hash.

O valor padrão é None.

vector_normalizer

Normalize vetores (linhas) individualmente, reescalando-os para a norma unitária. Assume um dos seguintes valores:

  • "None"

  • "L2"

  • "L1"

  • "LInf"

O valor padrão é "L2".

kargs

Argumentos adicionais enviados ao mecanismo de computação.

Returns

Um objeto que define a transformação.

Exemplo

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

Saída:

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

Extratores N-grams

Removedores de palavras de stop