microsoftml.featurize_text: Converte colunas de texto em funcionalidades numéricas

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 sobre 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 formas de o fazer:

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

  • 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, suportar a redução de dimensionalidade e tornar a pesquisa dos pesos das características mais rápida.

A transformação de texto é aplicada às colunas de entrada de texto. Oferece deteção de linguagem, tokenização, remoção de palavras-chave, normalização de texto e geração de funcionalidades. Suporta as seguintes línguas por defeito: inglês, francês, alemão, neerlandê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). A incorporação de ngramas num espaço vetorial permite comparar o seu conteúdo de forma 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 do documento - Uma razão (o logaritmo da frequência relativa inversa das ranhuras) que mede a informação que uma ranhura fornece ao determinar quão comum ou rara é em todo o texto.

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

Arguments

Cols

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

linguagem

Especifica a linguagem usada no conjunto de dados. Os seguintes valores são suportados:

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

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

Especifica o removedor de stopwords a usar. Existem três opções suportadas:

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

  • predefined: É utilizada uma lista pré-compilada específica de palavras de parada que inclui as palavras mais comuns do Microsoft Office.

  • custom: Uma lista definida pelo utilizador de palavras terminais. Aceita a seguinte opção: stopword.

O valor predefinido é None.

caso

Caso de texto usando as regras da cultura invariante. Assume os seguintes valores:

  • "Lower"

  • "Upper"

  • "None"

O valor predefinido é "Lower".

keep_diacritics

False remover marcas diacríticas; True para manter marcas diacríticas. O valor predefinido é False.

keep_punctuations

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

keep_numbers

False remover números; True para reter números. O valor predefinido é True.

dictionary

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

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

  • dropUnknowns: Largar itens.

  • sort: Especifica como ordenar itens quando vetorizados. São suportadas duas ordenações:

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

O valor predefinido é None. Note-se que a lista de palavras-chave tem precedência sobre a lista de dicionários, pois as palavras de encerramento são removidas antes de os termos do dicionário serem incluídos.

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 funcionalidades baseada em hash (equivalente ao WordHashBag). Aceita as seguintes opções: hash_bits, seed, ordered e invert_hash.

O valor predefinido é n_gram.

char_feature_extractor

Especifica os argumentos de extração da característica 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 funcionalidades baseada em hash (equivalente ao WordHashBag). Aceita as seguintes opções: hash_bits, seed, ordered e invert_hash.

O valor predefinido é None.

vector_normalizer

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

  • "None"

  • "L2"

  • "L1"

  • "LInf"

O valor predefinido é "L2".

Kargs

Argumentos adicionais enviados ao motor de computação.

Devoluções

Um objeto que define a transformação.

Example

'''
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 finais