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

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)

Descrição

Transformações de texto que podem ser executadas nos dados antes de treinar um modelo.

Detalhes

A transformação featurize_text produz um recipiente de contagens de sequências de palavras consecutivas, chamadas n-gramas, de um determinado documento de texto. Há dois modos de executar isso:

  • Crie um dicionário de n-gramas e use a ID no dicionário como um índice no recipiente;

  • Use um hash em cada n-grama e o valor de hash como um índice no recipiente.

A finalidade de usar o hash é converter documentos de texto de tamanho variável em vetores de recurso numérico de igual tamanho para dar suporte à redução de dimensionalidade e agilizar a pesquisa de pesos de recurso.

A transformação de texto se aplica a colunas de entrada de texto. Oferece detecção de idioma, geração de tokens, remoção de palavras irrelevantes, normalização de texto e criação de recursos. Ela é compatível com estes 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 de vetor correspondentes a n-gramas (criados com o n_gram) ou aos respectivos hashes (criados com o n_gram_hash). Inserir n-gramas em um espaço de vetor permite que o respectivo conteúdo seja comparado de modo eficiente. Os valores de slot podem ser ponderados no vetor pelos seguintes fatores:

  • Frequência do termo – O número de ocorrências do slot no texto

  • Frequência inversa do documento – Uma taxa (logaritmo da frequência inversa relativa do slot) que mede as informações que um slot fornece ao determinar como ele é comum ou raro em todo o texto.

  • Frequência do documento de frequência inversa do temo – A frequência do termo do produto e a frequência inversa do documento.

Argumentos

cols

Uma cadeia de caracteres ou lista de nomes de variáveis a ser transformada. No caso de dict, as chaves representam os nomes das variáveis a serem criadas.

Linguagem

Especifica o idioma usado no conjunto de dados. Os seguintes valores têm suporte:

  • "AutoDetect": usado para executar a detecção automática de idioma.

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

Especifica o removedor de palavras irrelevantes a ser usado. Há três opções compatíveis:

  • Nenhum: nenhum removedor de palavras irrelevantes é usado.

  • predefined: uma lista pré-compilada de palavras irrelevantes específicas a um idioma é usada e inclui as palavras mais comuns do Microsoft Office.

  • custom: uma lista definida pelo usuário de palavras irrelevantes. Ela aceita esta opção: stopword.

O valor padrão é None.

case

Uso de maiúsculas/minúsculas no texto com regras de cultura invariável. Usa os seguintes valores:

  • "Lower"

  • "Upper"

  • "None"

O valor padrão é "Lower".

keep_diacritics

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

keep_punctuations

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

keep_numbers

False para remover os números e True para manter os números. O valor padrão é True.

dicionário

Um dicionário de termos incluídos na lista de permitidos que aceita as seguintes opções:

  • term: um vetor de caractere opcional de termos ou categorias.

  • dropUnknowns: remover itens.

  • sort: especifica como ordenar itens quando eles são vetorizados. Há dois tipos de ordenação compatíveis:

    • "occurrence": os itens são exibidos na ordem encontrada.
    • "value": os itens são classificados de acordo com a respectiva comparação padrão. Por exemplo, a classificação de texto vai diferenciar maiúsculas de minúsculas (por exemplo, "A", "Z" e "a").

O valor padrão é None. Observe que a lista de palavras irrelevantes tem precedência sobre a lista de permitidos do dicionário, pois as palavras irrelevantes são removidas antes que os termos do dicionário sejam incluídos na lista de permitidos.

word_feature_extractor

Especifica os argumentos de extração de recursos de palavras. Há dois mecanismos de extração de recursos:

  • n_gram(): extração de recursos baseada em contagem (equivalente ao WordBag). Ela aceita estas opções: max_num_terms e weighting.

  • n_gram_hash(): extração de recursos baseada em hash (equivalente ao WordHashBag). Ela aceita estas 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 recursos de caracteres. Há dois mecanismos de extração de recursos:

  • n_gram(): extração de recursos baseada em contagem (equivalente ao WordBag). Ela aceita estas opções: max_num_terms e weighting.

  • n_gram_hash(): extração de recursos baseada em hash (equivalente ao WordHashBag). Ela aceita estas opções: hash_bits, seed, ordered e invert_hash.

O valor padrão é None.

vector_normalizer

Normaliza vetores (linhas) de modo individual, redimensionando-os como norma de unidade. Usa um dos seguintes valores:

  • "None"

  • "L2"

  • "L1"

  • "LInf"

O valor padrão é "L2".

kargs

Argumentos adicionais enviados ao mecanismo de computação.

Retornos

Um objeto que define a transformação.

Confira também

n_gram, n_gram_hash, n_gram, n_gram_hash, get_sentiment.

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-gramas

Removedores de palavras irrelevantes