microsoftml.featurize_text: Преобразование текстовых столбцов в числовые признаки

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

Текстовые преобразования, которые можно выполнить на данных до обучения модели.

Сведения

Преобразование даёт featurize_text сумку подсчётов последовательных слов, называемых n-граммами, из данного корпуса текста. Есть два способа:

  • создать словарь n-грамм и использовать ID в словаре как индекс в пакете;

  • Хешите каждый n-грамм и используйте хеш-значение в качестве индекса в мешке.

Цель хеширования — преобразовать текстовые документы переменной длины в числовые векторы признаков равной длины, поддерживать уменьшение размерности и ускорять поиск весов признаков.

Преобразование текста применяется к вводным столбцам текста. Он предлагает обнаружение языка, токенизацию, удаление стопвордов, нормализацию текста и генерацию признаков. По умолчанию поддерживаются следующие языки: английский, французский, немецкий, голландский, итальянский, испанский и японский.

n-граммы представлены как векторы счёта, при этом слоты соответствуют либо n-граммам (созданным с помощью n_gram), либо их хешам (созданным с помощью n_gram_hash). Вложение ngram в векторное пространство позволяет эффективно сравнивать их содержимое Значения слотов в векторе можно взвесить по следующим факторам:

  • частота термина — количество появления слота в тексте

  • Обратная частота документа — отношение (логарифм обратной относительной частоты слота), которое измеряет информацию, предоставляемую слотом, определяя, насколько она распространена или редка во всём тексте.

  • частота термина — обратная частота документа — частота произведения термина и обратная частота документа.

Arguments

cols

Строка символов или список имён переменных для трансформации. Если dict, ключи представляют имена новых переменных, которые нужно создать.

язык

Указывает язык, используемый в наборе данных. Поддерживаются следующие значения:

  • "AutoDetect": для автоматического распознавания языка.

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

Указывает удалитель стопвордов для использования. Поддерживаются три варианта:

  • Нет: Средство для удаления стопвордов не применяется.

  • predefined: Используется заранее скомпилированный языково-специфический список стоп-слов, включающий наиболее распространённые слова из Microsoft Office.

  • custom: Пользовательский список стопвордов. Он принимает следующий вариант: stopword.

Значение по умолчанию — None.

корпус

Текстовое оформление с использованием правил инвариантной культуры. Принимает следующие значения:

  • "Lower"

  • "Upper"

  • "None"

Значение по умолчанию — "Lower".

keep_diacritics

False для удаления диакритических знаков; True сохранять диакритические знаки. Значение по умолчанию — False.

keep_punctuations

False для удаления знаков препинания; True чтобы сохранить пунктуацию. Значение по умолчанию — True.

keep_numbers

False для удаления чисел; True чтобы сохранить численность. Значение по умолчанию — True.

dictionary

Словарь допустимых терминов, принимающий следующие варианты:

  • term: Необязательный вектор символов терминов или категорий.

  • dropUnknowns: Сбрасывайте предметы.

  • sort: Указывает, как упорядочивать элементы при векторизации. Поддерживаются два порядка:

    • "occurrence": предметы появляются в порядке встречи.
    • "value": элементы отсортированы по их стандартному сравнению. Например, сортировка текста будет чувствительна к регистру (например, 'A', затем 'Z', затем 'a').

Значение по умолчанию — None. Обратите внимание, что список стопвордов имеет приоритет над словарным списком разрешений, так как стоп-слова удаляются до того, как словарные термины попадают в список разрешений.

word_feature_extractor

Задаёт аргументы извлечения признаков слова. Существует два различных механизма извлечения признаков:

  • n_gram(): Извлечение признаков на основе подсчёта (эквивалент WordBag). Он принимает следующие варианты: max_num_terms и weighting.

  • n_gram_hash(): Извлечение признаков на основе хеширования (эквивалент WordHashBag). Он принимает следующие варианты: hash_bits, seed, ordered и invert_hash.

Значение по умолчанию — n_gram.

char_feature_extractor

Задаёт аргументы extraction feature char. Существует два различных механизма извлечения признаков:

  • n_gram(): Извлечение признаков на основе подсчёта (эквивалент WordBag). Он принимает следующие варианты: max_num_terms и weighting.

  • n_gram_hash(): Извлечение признаков на основе хеширования (эквивалент WordHashBag). Он принимает следующие варианты: hash_bits, seed, ordered и invert_hash.

Значение по умолчанию — None.

vector_normalizer

Нормализуйте векторы (строки) по отдельности, перемасштабируя их до единичной нормы. Принимает одно из следующих значений:

  • "None"

  • "L2"

  • "L1"

  • "LInf"

Значение по умолчанию — "L2".

карги

Дополнительные аргументы, отправленные в подсистему вычислений.

Returns

Объект, определяющий преобразование.

Пример

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

Выходные данные:

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-граммовые экстракторы

Удаление стопвордов