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-gram)。 可以通过两种方法实现此目的:

  • 生成一个 n-gram 字典,并将字典中的 ID 作为包中的索引;

  • 对每个 n-gram 进行哈希处理并使用哈希值作为包中的索引。

哈希算法的目的是将可变长度文本文档转换为相等长度数字特征向量,以支持维数缩减,并使特征权重更快的查找。

文本转换应用于文本输入列。 它提供了语言检测、词汇切分、非索引字删除、文本规范化和功能生成功能。 它默认支持以下语言:英语、法语、德语、荷兰语、意大利语、西班牙语和日语。

n-gram 表示为计数向量,向量槽对应于 n-gram(使用 n_gram 创建)或其哈希(使用 n_gram_hash 创建)。 在向量空间中嵌入 n-gram 可以高效地比较其内容。 向量中的槽值可以通过以下因素加权:

  • 词频 - 文本中槽的出现次数

  • 逆文档频率 - 一个比率(逆相对槽频率的对数),通过确定槽在整个文本中的出现频率高低程度来衡量槽提供的信息。

  • 词频-逆文档频率 - 词频和逆文档频率的乘积。

参数

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_termsweighting

  • n_gram_hash():基于哈希的特征提取(等效于 WordHashBag)。 它接受以下选项:hash_bitsseedorderedinvert_hash

默认值是 n_gram

char_feature_extractor

指定字符特征提取参数。 特征提取机制有两种:

  • n_gram():基于计数的特征提取(等效于 WordBag)。 它接受以下选项:max_num_termsweighting

  • n_gram_hash():基于哈希的特征提取(等效于 WordHashBag)。 它接受以下选项:hash_bitsseedorderedinvert_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-gram 提取器

非索引字删除器