テキストからの N-gram 特徴抽出

重要

Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。

2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。

ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。

N-Gram 辞書機能を作成し、その機能を選択します

カテゴリ: Text Analytics

注意

適用対象: Machine Learning Studio (クラシック) のみ

類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。

モジュールの概要

この記事では、Machine Learning Studio (クラシック) の [テキストから N-Gram 特徴を抽出する] モジュールを使用して、テキストを特徴付けし、長いテキスト文字列から最も重要な情報のみを抽出する方法について説明します。

モジュールは、入力として指定したフリー テキストの列から n-gram のディクショナリを作成することで機能します。 このモジュールでは、n-gram リストにさまざまな情報メトリックを適用して、データの次元を減らし、最も多くの情報値を持つ n-gram を特定します。

n-gram のボキャブラリを既に作成している場合は、選択した重み付けアルゴリズムを使用して、その統計を更新するか、新しい用語でマージすることができます。

このモジュールでは n-gram からのフィーチャー化がサポートされています。スコアリング時にも使用できます。

テキストから N-Gram 特徴を抽出する方法を構成する方法

これらのモジュールでは、n-gram ディクショナリを作成、更新、または適用するための次のシナリオがサポートされています。

  • 空きテキスト列の列を使用して新しいモデルを開発し、入力データに基づいてテキスト特徴を抽出する必要があります。 手順を参照してください。

  • 既存のテキスト機能のセットを使用し、新しいテキスト入力を処理して重みを更新する必要があります。 手順を参照してください。

  • 予測モデルからスコアを生成し、スコアリング プロセスの一環として n-gram ディクショナリでテキスト入力を生成して使用する必要があります。 手順を参照してください。

サンプルの実験を 参照用に 使用できます。

テキスト列から新しい n-gram ディクショナリを作成する

  1. [ テキストから N-Gram 特徴を 抽出する] モジュールを実験に追加し、処理するテキストを含むデータセットを接続します。

  2. [ テキスト列] で、抽出する テキストを含 む文字列型の列を選択します。

    既定では、モジュールによってすべての文字列列が選択されます。 ただし、結果は詳細なので、一度に 1 つの列を処理する必要がある場合があります。

  3. キャブラリ モードの場合は、[ 作成] を選択して、n-gram 特徴の新しい一覧を作成中かどうかを示します。

    n-gram 機能の既存のセットを更新する方法については、このセクションを 参照してください

  4. N-Grams サイズの場合は、抽出して格納する n-gram の最大サイズを示す数値を入力します。

    たとえば、「」と入力すると 3、unigram、bigram、および trigram が作成されます。

  5. [ K スキップ サイズ] には、n-gram のバリアントを識別するときに異なる最大文字数を入力します。 k の値が 0 に設定されている場合、n-gram は一意の連続する文字シーケンスからのみ作成できます。

    たとえば、ディクショナリに"computer" という unigram が含まれているとします。 k 0 は、"computer" が唯一の有効なユニグラムを意味します。 k の値を 1 に増やすと、1 つの文字をスキップして、より類似したシーケンスを見つけることができます。 k 値が 1 のスキップグラムは、0 k のユニグラムとは 1 文字なります。 したがって、スキップグラムの "conputer" と "compuuter" は、どちらも "computer" と同じディクショナリ エントリの一部と見なされます。 k 値 2 に設定すると、さらに異なる単語と一致します。

    テキスト分析でスキップグラムを使用する方法の詳細については、この論文「教師あり字句正規化の候補の生成と特徴エンジニアリング」を参照してください

  6. オプション Weighting 関数は、ボキャブラリをマージまたは更新する場合にのみ必要です。 2 つのボキャブラリの用語とそのスコアを互いに重み付けする方法を指定します。

  7. [ 最小単語の長さ] に、分析できる文字列の最小単語長を入力します。

    たとえば、単語の最小長が 3 (既定値) に設定され、1 つの入力に 1 つの単語が含み、もう 1 つは "nice place" のような短いテキストがあったとします。 どちらの行も無視されます。

  8. [最大単語長] に、n-gram 内の任意の 1 つの単語で使用できる最大文字数を入力します。

    既定では、単語またはトークンごとに最大 25 文字を使用できます。 削除される単語よりも長い単語は、実際の字句項目ではなく任意の文字のシーケンスである可能性があるという前提で、削除されます。

  9. [ 最小 n-gram ドキュメントの絶対頻度] に、n-gram ディクショナリに含める 1 つの単語またはトークンに必要な最小出現回数を示す数値を入力します。

    たとえば、既定値の 5 を使用する場合、n-gram ディクショナリに含めるには、コーパスに n-gram または skip-gram が少なくとも 5 回出現する必要があります。

  10. [ 最大 n-gram ドキュメント比率] に、コーパス全体の行数に対する特定の n-gram を含む行数という比率を表す数値を入力します。

    たとえば、比率が 1 の場合は、特定の N-gram がすべての行に存在する場合でも、その N-gram を N-gram 辞書に追加できます。 通常は、すべての行に出現する単語はノイズ ワードと見なされて削除されます。 ドメインに依存するノイズ ワードを除外するには、この比率を小さくしてみてください。

    重要

    特定の単語の発生率は一様ではなく、ドキュメントごとに異なります。 たとえば、特定の製品に関する顧客のコメントを分析している場合、製品名の出現頻度は非常に高く、ノイズ ワードに近くなる可能性がありますが、他のコンテキストでは重要な用語になります。

  11. n-gram ボキャブラリに含まれる単語を含む行 ("ボキャブラリ外" (OOV) と呼ばれる) を含む行のインジケーターを生成する場合は、 [ボキャブラリ外の行を検出する] オプションを選択します。

    すべての辞書は有限です。したがって、テキスト コーパスには、辞書または n-gram 辞書に含まれる単語が含まれるのはほぼ保証されます。 ただし、このような単語は、語彙内 (IV) の単語と比較してエラー率が高くなるなど、言語モデルにさまざまな影響を与える可能性があります。 ドメインによっては、これらの OOV ワードが重要なコンテンツ ワードを表している可能性があります。

    これらの単語を含む行を識別することで、これらの用語の効果を補正するか、用語と関連する行を個別に処理できます。

  12. オプション Mark begin-of-sentence を選択して、n-gram 辞書で文の先頭を示す特殊文字シーケンスを追加します。 テキスト分析では、文を始める n-gram の前に特殊文字を付けるのが一般的であり、言い合いの境界を分析する場合に役立ちます。

    Azure ML Studio (クラシック) では、シンボル が挿入されます|||。 カスタム文字を指定することはできません。

  13. 特徴ベクトルを 正規化する場合は、 [n-gram 特徴ベクトルを正規化する] オプションを選択します。 これを行う場合、各 n-gram 特徴ベクトルは L2 標準で分割されます。

    正規化は既定で使用されます。

  14. テキスト 特徴ベクトルのサイズを管理 するための追加オプションを有効にする場合は、[ フィルターベースの特徴選択を使用する ] を [True ] に設定します。

    • 機能の選択は、n グラムの次元を減らすのに役立ちます。
    • フィルター選択を適用しない場合は、可能なすべての n-gram が作成され、ディクショナリを長くし、場合によっては多くのまれな用語を含む代わりのカバレッジが増加します。
    • 小さなコーパスでは、機能の選択を使用すると、作成される用語の数を大幅に減らします。
    • 詳細については、「フィルター ベースの 機能の選択」を参照してください

    機能の選択を使用している場合は、[特徴スコアリング方法] ドロップダウン リストから メソッド を選択する必要があります。

    • ピアソン相関: ラベル列の値とテキスト ベクターに基づいてピアソンの相関関係を計算します。
    • MutualInformation: ラベル列の値とテキスト ベクターに基づいて、相互情報スコアを計算します。
    • KendallCorrelation: ラベル列の値とテキスト ベクターに基づいて、Kendall の相関関係を計算します。
    • スピアマンCorrelation: ラベル列の値とテキスト ベクターに基づいて、スピアマンの相関関係を計算します。
    • ChiSquared: 2 乗法を使用して、ラベル列の値とテキスト ベクターの相関関係を計算します。
    • [求水スコア]: ラベル列の値とテキスト ベクターに対して、釣りスコアを計算します。
    • カウントベースの特徴選択: 値の数に基づいて新しい特徴を作成します。 このメソッドでは、ラベル列は必要ありません。

    選択する方法に応じて、次のいずれかのオプションを設定します。

    • [必要な特徴の数]: カウントベースの特徴選択以外の特徴選択方法を使用する場合に必要です。

      機能選択のプロセスでは、すべての n-gram が特徴スコアを取得し、n-gram はスコアでランク付けされます。 ここで設定した値によって、最もランクの高い特徴の数が出力されます。 特徴スコアが低い N グラムは破棄されます。

    • 0 以外の要素の最小数: カウントベースの特徴選択を使用する場合は必須です。

      潜在的な特徴のカウントを表すのに必要なインスタンスの総数を表す数値を入力します。

  15. 実験を実行します。

    結果 とその形式の 説明については、このセクションを参照してください。

既存の n-gram ディクショナリまたはマージ ディクショナリを更新する

  1. [ テキストから N-Gram 特徴を 抽出する] モジュールを実験に追加し、処理するテキストを含むデータセットを [データセット] ポートに接続 します。

  2. [ テキスト列] で、フィーチャー化するテキストを含むテキスト列を選択します。 既定では、モジュールは string 型のすべての列を選択します。 最良の結果を得るためには、一度に 1 列ずつ処理します。

  3. 以前に生成した N-gram 辞書を含む保存済みデータセットを追加して、[Input vocabulary]\(入力ボキャブラリ\) ポートに接続します。 [テキストから N-Gram 特徴を抽出する] モジュールの上流インスタンスの Result ボキャブラリ出力を接続できます。

    ボキャブラリをマージまたは更新するには、入力ボキャブラリのスキーマが予想される形式と完全に一致している必要があります。 から列を削除したり、入力ボキャブラリに列を追加したりしない。

  4. キャブラリ モードの場合は、ドロップダウン リストから次のいずれかの更新オプションを選択します。

    • ReadOnly: 入力ボキャブラリの観点から入力コーパスを表します。 つまり、新しいテキスト データセット (左側の入力) からの用語頻度を計算するのではなく、入力ボキャブラリからの n-gram の重み付けは、同様に適用されます。

      ヒント

      このオプションは、テキスト分類器のスコアを付けるときに使用します。

    • 更新: 入力コーパスから新しい n-gram ボキャブラリを作成し、入力ボキャブラリとマージします。 つまり、入力ボキャブラリから作成されたボキャブラリに新しいエントリを追加したり、既存のエントリを更新することができます。

      ヒント

      受信データ バッチを使用したボキャブラリの増分更新には、このオプションを使用します。

    • マージ: 入力コーパスから新しい n-gram ボキャブラリを生成します。

      このオプションは、バックグラウンド ボキャブラリをモジュールへの入力として渡し、ストップ ワードの重みを減らす場合に便利です。 つまり、バックグラウンド ボキャブラリでドキュメントの頻度スコアが高い各エントリには、作成されたボキャブラリ内のドキュメントの逆の頻度スコアが割り当てられます。

      ヒント

      入力から作成されたボキャブラリに新しいエントリを追加しない場合に、既存のエントリのスコアのみを調整する場合は、このオプションを使用します。

  5. ボキャブラリ をマージまたは更新する場合は、 [重み付け関数の選択] オプションが必要です。 重み付け関数は、2 つのボキャブラリの DF スコアと IDF スコアを互いに重み付けする方法を指定します。

    • Binary Weight (バイナリ ウェイト) :抽出された N-gram にバイナリ プレゼンス値を割り当てます。 つまり、各 n-gram の値は、指定されたドキュメントに存在する場合は 1、それ以外の場合は 0 です。
    • TF 重み: 抽出された n-gram に用語頻度スコア (TF) を割り当てる。 各 N-gram の値は、指定されたドキュメント内の出現頻度です。
    • IDF の重み: 抽出された n-gram に逆ドキュメント頻度スコア (IDF) を割り当てる。 各 N-gram の値は、コーパス全体の出現頻度で割ったコーパス サイズのログです。 それです: IDF = log of corpus_size / document_frequency
    • TF-IDF Weight: 抽出された n-gram に用語 frequency/inverse document frequency score (TF/IDF) を割り当てる。 各 N-gram の値は、その TF スコアを IDF スコアで乗算したものです。
    • Graph重み: TextRank グラフのランク付けに基づいて、抽出された n-gram にスコアを割り当てる。 TextRank は、テキスト処理のためのグラフ ベースのランク付けモデルです。 Graphベースのランク付けアルゴリズムは、基本的にグローバルな情報に基づいて重要度を決定する方法です。 詳細については、「 TextRank: Rada Mihalcea と Paul Tarau によるテキストへの順序の取り込み」を参照してください。
  6. その他のすべてのオプションについては、前のセクションのプロパティの説明 を参照してください

  7. 実験を実行します。

    結果 とその形式の 説明については、このセクションを参照してください。

N-gram を使用するモデルのスコア付けまたは発行を行う

  1. テキストからの N-gram 特徴抽出モジュールをトレーニング データフローからスコアリング データフローにコピーします。

  2. [Result Vocabulary]\(結果のボキャブラリ\) 出力を、トレーニング データフローからスコアリング データフローの [Input Vocabulary]\(入力ボキャブラリ\) に接続します。

  3. スコアリング ワークフローで、テキストからの N-gram 特徴抽出モジュールを変更し、次の変更を行います。他はすべて同じままにします。

    • [Vocabulary mode]\(ボキャブラリ モード\) パラメーターを [ReadOnly] にします。

    • [フィルター ベースの機能 選択を使用する] オプションを に変更 します False

  4. 実験を発行するには、[Result Vocabulary]\(結果のボキャブラリ\) をデータセットとして保存します。

    次に、スコアリング グラフで、保存したデータセットをテキストからの N-gram 特徴抽出モジュールに接続します。

結果

テキスト からの N-Gram 特徴の抽出モジュールでは 、次の 2 種類の出力が作成されます。

  • 結果データセット: 抽出された n-gram と共に分析されたテキストの概要。 [テキスト列] オプションで 選択しなかった は、出力に渡されます。 分析するテキストの列ごとに、モジュールによって次の列が生成されます。

    • NgramsString: すべての一意の n-gram を含む文字列。
    • NumUniqueNgrams: 指定したプロパティを使用して抽出された n-gram の数。
    • n-gram 出現のスパース 行列: モジュールは、コーパスの合計で見つかった各 n-gram の列を生成し、各列にスコアを追加して、その行の n-gram の重みを示します。
  • Result vocabulary (結果のボキャブラリ) :ボキャブラリには、実際の N-gram 辞書と、分析の一部として生成される用語の頻度スコアが含まれています。 データセットを保存して、別の入力セットで再使用したり、後で更新したりすることもできます。 スコアを更新したり、モデリングとスコア付けのためにボキャブラリを再利用したりできます。

サンプルの結果

結果を使用する方法を説明するために、次の短い例では、Studio (クラシック) で使用できる Amazon Book Review データセットを使用します。 dataaset は、スコアが 4 または 5 のレビューのみを表示し、文字列の長さが 300 文字以下のレビューのみを表示するためにフィルター処理されました。

このデータセットから、92 語のみを含む短いレビューが選択されました。 ここで、作成者の名前は に置き換 Xxx え、書籍のタイトルは に置き換えました Yyy

"Xxx at his best ! Yyy is one of Xxx's best yet! I highly recommend this novel."

サンプル レビュー テキストの結果データセット

このサンプルでは、モジュールによって次の列が生成されます。

  • NumUniqueNgrams: この 92 単語レビューでは、既定の設定を使用して、サンプル レビューから 11 n-gram が抽出されました。

    n-gram の長さが 3 に増え、skip-gram 値が 1 に設定されている場合、15 n-gram が見つかりました。

    機能の選択が既定値に適用された場合、n-gram は抽出されません。

  • NgramsString:既定の設定では、次の n-gram が返されました: ["his"、"best"、"one"、"highly"、"recommend"、"this"、"novel"、"his_best"、"highly_recommend"、"recommend_this"、"this_novel"]

    n-gram の長さが 3 で、skip-gram 値が 1 の場合、 これらの n-gram が返されました: ["his","best","one","highly","recommend","this","novel","his_best highly_recommend","highly_recommend","recommend_this","this_novel","best_one","one_best","highly_this","highly_recommend_this"]

  • n-gram 出現のスパース 行列

    この特定のレビューの結果には、次の列が含まれていました。

    ReviewText。[管理] ReviewText。[and_highly] ReviewText。[高] ReviewText。[highly_recommend]
    0 0 0.301511 0.301511

    ヒント

    特定の列の表示で問題が発生した場合は、Select Columns in Dataset (データセット内の列の選択) モジュールを出力にアタッチし、検索関数を使用して列を名前でフィルター処理します。

サンプル レビュー テキストの結果ボキャブラリ

ボキャブラリには、実際の N-gram 辞書と、分析の一部として生成される用語の頻度スコアが含まれています。 データセットを保存して、別の入力セットで再使用したり、後で更新したりすることもできます。 DF スコアと IDF スコアは、他のオプションに関係なく生成されます。 ボキャブラリを組み合わせると、これらの格納された値が、選択した重み付け関数への入力として使用されます。

  • Id: 一意の n-gram ごとに生成された識別子。
  • Ngram: n-gram。 スペースやその他の単語の区切り文字は、アンダースコア文字に置き換えられます。
  • DF:元のコーパスの N-gram の用語頻度スコア。
  • IDF:元のコーパスの N-gram の逆ドキュメント頻度スコア。

このデータセットは手動で更新できます。ただし、エラーが発生する可能性がある場合は注意してください。 次に例を示します。

  • 入力ボキャブラリで同じキーを使用している重複行がモジュールによって検出されると、エラーが発生します。 ボキャブラリ内の 2 つの行に同じ単語が含まれていないことを確認してください。
  • ボキャブラリ データセットの入力スキーマは、列名と列の型を含め、完全に一致している必要があります。
  • ID 列と DF スコア列は、integer 型でなければなりません。
  • IDF 列は FLOAT (浮動小数点) 型である必要があります。

テクニカル ノート

n-gram の長さ、スキップグラムの数、特徴の選択を使用して、テキスト コーパスの次元と最適な特徴比を決定するために、さまざまな範囲の値を試してみすることをお勧めします。

n-gram と skip-gram の詳細については、次のリソースを参照してください。

想定される入力

名前 説明
データセット データ テーブル 入力データ
入力ボキャブラリ データ テーブル 入力ボキャブラリ

モジュールのパラメーター

名前 種類 Range 省略可能 Default 説明
ゼロ以外の要素の最小数 Integer >=1 次のメソッドを使用する場合にのみ適用されます。

カウント ベース
1 出力する特徴の数を指定します (CountBased メソッド用)
[テキスト列] 列の選択 必須 StringFeature テキスト列の名前または 1 からベースのインデックス
ボキャブラリ モード ボキャブラリ モード 作成

ReadOnly

更新

マージ
必須 作成 コーパスから n-gram ボキャブラリを作成する方法を指定する
N-Grams サイズ Integer >=1 必須 1 作成する n-gram の最大サイズを指定します
K-Skip サイズ Integer >=0 必須 0 k スキップ サイズを指定する
重み付け関数 重み付け関数 バイナリの重み

TF の重み

IDF の重み

TF-IDF の重み

Graph重み
必須 バイナリの重み 各 n-gram 値に適用する重み付け関数を選択する
単語の最小長 Integer >=1 必須 3 n-gram に含める単語の最小長を指定する
単語の最大長 Integer >=2 必須 25 n-gram に含める単語の最大長を指定する
n-gram ドキュメントの絶対頻度の最小値 Float >=1.0 必須 5.0 n-gram ドキュメントの絶対頻度の最小値
n-gram ドキュメントの最大比率 Float >=0.0001 必須 1.0 n-gram ドキュメントの最大比率
ボキャブラリ外の行を検出する Boolean 必須 true n-gram ボキャブラリ (OOV) に含されていない単語を含む行を検出する
文の始まりをマークする Boolean 必須 false n-gram に文始め記号を追加するかどうかを指定します
n-gram 特徴ベクトルを正規化する Boolean 必須 n-gram 特徴ベクトルを正規化します。 true の場合、n-gram 特徴ベクトルは L2 標準で分割されます。
フィルターベースの特徴選択を使用する True False 型 正しい

False
必須 フィルターベースの特徴選択を使用して次元を減らす
特徴スコア付けの方法 スコアリング方法 ピアソンの相関

相互情報量

ケンドールの相関関係

スピアマンの相関関係

カイ二乗

フィッシャー スコア

カウント ベース
[フィルターベースの特徴選択を使用する] オプションが [True ] の場合にのみ 適用されます フィッシャー スコア スコア付けに使用する方法を選択します
対象列 列の選択 次のいずれかの方法を使用する場合に適用されます。

ピアソンの相関

相互情報量

ケンドールの相関関係

スピアマンの相関関係

カイ二乗

フィッシャー スコア
対象列を指定します
目的の特徴の数 Integer >=1 次のいずれかの方法を使用する場合に適用されます。

ピアソンの相関

相互情報量

ケンドールの相関関係

スピアマンの相関関係

カイ二乗

フィッシャー スコア
1 結果に出力する特徴の数を指定します

出力

名前 説明
結果のデータセット データ テーブル 抽出された特徴
結果のボキャブラリ データ テーブル 結果のボキャブラリ

こちらもご覧ください

Text Analytics
A - Z モジュールのMachine Learning一覧