Поделиться через


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

Использование

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)

Описание

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

Сведения

Преобразование featurize_text формирует набор счетчиков последовательных слов, называемых N-граммами, из заданной совокупности текста. Это можно сделать двумя способами:

  • создать словарь N-грамм и использовать идентификатор в словаре в качестве индекса в контейнере;

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

Хэширование предназначено для преобразования текстовых документов переменной длины в векторы числовых признаков равной длины с целью сокращения размерности и ускорения поиска весовых коэффициентов признаков.

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

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

  • частота термина — число вхождений слота в тексте;

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

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

Аргументы

cols

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

Язык

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

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

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

Задает используемый модуль удаления стоп-слов. Поддерживаются три значения параметра.

  • None: модуль удаления стоп-слов не используется.

  • predefined: используется предварительно скомпилированный стоп-слов для конкретного языка, содержащий наиболее распространенные слова из Microsoft Office.

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

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

case

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

  • "Lower"

  • "Upper"

  • "None"

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

keep_diacritics

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

keep_punctuations

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

keep_numbers

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

словарь

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

  • 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

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

  • 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".

kargs

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

Возвращаемое значение

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

См. также

n_gram, n_gram_hash, n_gram, n_gram_hash, get_sentiment.

Пример

'''
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-грамм

Модули удаления стоп-слов