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 と呼ばれる連続した単語のシーケンスの数のバッグを生成します。 これを実行できる方法は次の 2 つです。

  • N-gram の辞書を作成し、その ID をバッグのインデックスとして使用する。

  • 各 N-gram をハッシュし、バッグのインデックスとしてハッシュ値を使用する。

ハッシュの目的は、可変長のテキスト文書を等しい長さの数値特徴ベクトルに変換すること、次元削減をサポートすること、および特徴の重みをよりすばやく参照できるようにすることです。

テキスト変換はテキスト入力列に適用されます。 言語検出、トークン化、ストップワードの削除、テキストの正規化、特徴生成が提供されます。 既定では、英語、フランス語、ドイツ語、オランダ語、イタリア語、スペイン語、日本語の各言語がサポートされています。

N-gram はカウント ベクトルとして表されます。このベクトル スロットは、N-gram (n_gram を使用して作成) またはハッシュ (n_gram_hash を使用して作成) のいずれかに対応しています。 ベクトル空間に ngram を埋め込むと、効率的にそれらのコンテンツを比較できます。 ベクトルのスロット値は、次の係数で重み付けできます。

  • term frequency - テキスト内のスロットの出現回数

  • inverse document frequency - テキスト全体に共通するかどうかを判断することで、スロットによって提供される情報を測定する比率 (逆の相対スロット頻度の対数)。

  • term frequency-inverse document frequency - 用語の出現頻度と逆文書頻度の積。

引数

cols

変換する文字列または変数名のリスト。 dict の場合、キーは作成される新しい変数名を表します。

language

データ セットで使用される言語を指定します。 サポートされている値を次に示します。

  • "AutoDetect": 自動言語検出用。

  • "English"

  • "French"

  • "German"

  • "Dutch"

  • "Italian"

  • "Spanish"

  • "Japanese"

stopwords_remover

使用するストップワード リムーバーを指定します。 次の 3 つのオプションがサポートされています。

  • 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: ベクトル化時に項目を並べ替える方法を指定します。 次の 2 つの順序がサポートされています。

    • "occurrence": 項目は発生した順序で表示されます。
    • "value": 項目は、既定の比較に従って並べ替えられます。 たとえば、テキストの並べ替えでは大文字と小文字が区別されます (たとえば、'A'、'Z'、'a' の順になります)。

既定値は None です。 ストップワード リストは辞書の許可リストよりも優先されることに注意してください。これは、ストップワードが削除されてから辞書の用語が許可リストに含まれるためです。

word_feature_extractor

単語の特徴抽出引数を指定します。 特徴抽出メカニズムには、次の 2 つがあります。

  • n_gram(): カウントに基づく特徴抽出 (WordBag と同等)。 max_num_terms および weighting オプションを受け入れます。

  • n_gram_hash(): ハッシュベースの特徴抽出 (WordHashBag と同等)。 hash_bitsseedordered および invert_hash オプションを受け入れます。

既定値は n_gram です。

char_feature_extractor

char の特徴抽出引数を指定します。 特徴抽出メカニズムには、次の 2 つがあります。

  • n_gram(): カウントに基づく特徴抽出 (WordBag と同等)。 max_num_terms および weighting オプションを受け入れます。

  • n_gram_hash(): ハッシュベースの特徴抽出 (WordHashBag と同等)。 hash_bitsseedordered および invert_hash オプションを受け入れます。

既定値は None です。

vector_normalizer

ベクトル (行) を単位 norm に再スケーリングすることで、個別に正規化します。 次のいずれかの値を取ります。

  • "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 エクストラクター

ストップワード リムーバー