特徴ハッシュ コンポーネント リファレンス

この記事では Azure Machine Learning デザイナーに含まれるコンポーネントについて説明します。

特徴ハッシュ コンポーネントを使用して、英語テキストのストリームを整数の特徴セットに変換します。 その後、このハッシュされた特徴セットを機械学習アルゴリズムに渡して、テキスト分析モデルをトレーニングすることができます。

このコンポーネントで提供される特徴ハッシュ機能は、NimbusML フレームワークに基づいています。 詳細については、「NgramHash クラス」を参照してください。

特徴ハッシュとは

特徴ハッシュは、一意のトークンを整数に変換することによって機能します。 これは、入力として提供された正確な文字列に対して作用し、言語分析や前処理は行いません。

たとえば、後にセンチメント スコアが付いた、次のような一連の単純な文を取り上げます。 このテキストを使用してモデルを作成するとします。

ユーザー テキスト センチメント
I loved this book 3
I hated this book 1
This book was great 3
I love books 2

内部で、特徴ハッシュ コンポーネントによって N-grams の辞書が作成されます。 たとえば、このデータセットの bigram の一覧表は次のようになります。

用語 (bigram) 頻度
This book 3
I loved 1
I hated 1
I loved 1

N-gram のサイズは、N-gram プロパティを使用して制御できます。 bigram を選択した場合、unigram も計算されます。 辞書には、次のような単一の用語も含まれます。

用語 (unigram) 頻度
book 3
I 3
books 1
was 1

辞書が構築されると、特徴ハッシュ コンポーネントによって辞書の用語がハッシュ値に変換されます。 次に、各ケースで特徴が使用されたかどうかが計算されます。 テキスト データの各行に対して、コンポーネントは、ハッシュした特徴ごとに 1 列ずつ、一連の列を出力します。

たとえば、ハッシュ後、特徴列は次のようになります。

Rating ハッシュする特徴 1 ハッシュする特徴 2 ハッシュする特徴 3
4 1 1 0
5 0 0 0
  • 列の値が 0 の場合、行にはハッシュされた特徴は含まれていませんでした。
  • 値が 1 の場合、行にはその特徴が含まれていました。

特徴ハッシュを使用すると、可変長のテキスト ドキュメントを等長の数値特徴ベクトルとして表して、次元削減を実現できます。 テキスト列をそのままトレーニングに使用しようとした場合は、さまざまな異なる値を持つカテゴリ特徴列として扱われます。

数値の出力により、分類、クラスタリング、情報取得などの一般的な機械学習の手段を使用することも可能になります。 参照操作では、文字列の比較ではなく整数のハッシュを使用できるため、特徴の重みの取得もはるかに高速になります。

特徴ハッシュ コンポーネントを構成する

  1. 特徴ハッシュ コンポーネントをデザイナーのパイプラインに追加します。

  2. 分析するテキストが含まれているデータセットを接続します。

    ヒント

    特徴ハッシュではステミングや切り捨てなどの字句操作は行われないため、特徴ハッシュを適用する前にテキストの前処理を実行すると、より良い結果が得られる場合があります。

  3. [Target columns]\(ターゲット列\) を、ハッシュした特徴に変換するテキスト列に設定します。 次の点に留意します。

    • 列は文字列データ型である必要があります。

    • 複数のテキスト列を選択すると、特徴の次元に大きな影響を与える可能性があります。 たとえば、10 ビット ハッシュの列数は、1 列の 1,024 個から、2 列の 2,048 個になります。

  4. [Hashing bitsize]\(ハッシュのビットサイズ\) を使用して、ハッシュ テーブルを作成するときに使用するビット数を指定します。

    既定のビット サイズは 10 です。 多くの問題に対して、この値が適切です。 トレーニング テキストの N-gram ボキャブラリのサイズによっては、衝突を避けるためにより多くの領域が必要になる場合があります。

  5. [N-grams]\(N-gram\) には、トレーニング辞書に追加する N-gram の最大長を定義する数値を入力します。 N-gram は、一意の単位として扱われる、n 個の単語のシーケンスです。

    たとえば、3 を入力すると、unigram、bigram、trigram が作成されます。

  6. パイプラインを送信します。

結果

処理が完了すると、コンポーネントによって変換後のデータセットが出力されます。元のテキスト列が複数の列に変換されます。 各列はテキスト内の特徴を表します。 辞書の有意性によっては、結果として得られるデータセットが大きくなる可能性があります。

列名 1 列の種類 2
ユーザー テキスト 元のデータ列
センチメント 元のデータ列
ユーザー テキスト - ハッシュする特徴 1 ハッシュされた特徴列
ユーザー テキスト - ハッシュする特徴 2 ハッシュされた特徴列
ユーザー テキスト - ハッシュする特徴 n ハッシュされた特徴列
ユーザー テキスト - ハッシュする特徴 1024 ハッシュされた特徴列

変換されたデータセットを作成したら、モデルのトレーニング コンポーネントへの入力として使用できます。

ベスト プラクティス

以下のベスト プラクティスは、特徴ハッシュ コンポーネントを最大限に活用するのに役立ちます。

  • 特徴ハッシュを使用する前にテキスト前処理コンポーネントを追加して、入力テキストを事前処理します。

  • 特徴ハッシュ コンポーネントの後に列の選択コンポーネントを追加して、出力データ セットからテキスト列を削除します。 ハッシュする特徴が生成された後は、テキスト列は必要ありません。

  • 結果を単純化して精度を向上させるために、次のテキスト前処理オプションを使用することを検討してください。

    • 単語区切り
    • ストップ ワードの削除
    • 大文字と小文字の正規化
    • 句読点と特殊文字の削除
    • 語幹検索

ソリューションに適用される最適な前処理方法のセットは、ドメイン、ボキャブラリ、およびビジネス ニーズによって異なります。 お使いのデータを使用してパイプラインを作成し、どのテキスト処理方法が最も効果的かを確認します。

次のステップ

Azure Machine Learning で使用できる一連のコンポーネントをご覧ください。