Latent Dirichlet Allocation
重要
Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。
2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。
- ML Studio (クラシック) から Azure Machine Learning への機械学習プロジェクトの移動に関する情報を参照してください。
- Azure Machine Learning についての詳細を参照してください。
ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。
Vowpal Wabbit ライブラリを使用して VW LDA を実行します。
カテゴリ: Text Analytics
注意
適用対象: Machine Learning Studio (クラシック)のみ
類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。
モジュールの概要
この記事では、Machine Learning Studio (クラシック) の "潜在ディリクレ等式割り当て" モジュールを使用して、他の未分類のテキストを複数のカテゴリにグループ化する方法について説明します。 LDA (ディリクレ等式 Allocation Allocation) は、類似したテキストを検索するために自然言語処理 (NLP) でよく使用されます。 もう 1 つの一般的な用語は "トピック モデリング" です。
このモジュールは、テキストの列を受け取り、次の出力を生成します。
ソース テキストと、各カテゴリのスコア
各カテゴリの抽出された用語と係数を含む機能マトリックス
保存し、入力として使用される新しいテキストに再適用することができる変換
このモジュールは Vowpal Wabbit ライブラリを使用するため、非常に高速です。 Vowpal wabbit の詳細については、チュートリアルとアルゴリズムの説明が含まれているGitHub リポジトリを参照してください。
潜在ディリクレ等式の割り当てについての詳細 (LDA)
一般に、LDA は、se ごとに分類する方法ではありませんが、公開アプローチを使用します。 これは、既知のクラスラベルを指定してからパターンを推論する必要がないことを意味します。 代わりに、アルゴリズムによって、トピックのグループを識別するために使用される確率論的モデルが生成されます。 確率論的モデルを使用して、既存のトレーニングケースを分類したり、モデルに入力として指定した新しいケースを分類したりすることができます。
このようにすると、テキストとカテゴリ間のリレーションシップについての強い仮説を避け、数学的にモデル化されたトピックへの単語の分布のみを使用するため、このモデルを使用することをお勧めします。
この理論については、PDF のダウンロードとして入手できます。 ディリクレ等式 Allocation: Blei、Ng、およびヨルダン
このモジュールの実装は、 Vowpal Wabbit ライブラリ (バージョン 8) の LDA に基づいています。
詳しくは、「テクニカル ノート」セクションをご覧ください。
Latent Dirichlet Allocation を構成する方法
このモジュールには、未加工または前処理済みのテキスト列を含むデータセットが必要です。
潜在ディリクレ等式 Allocationモジュールを実験に追加します。
モジュールの入力として、1 つまたは複数のテキスト列を含むデータセットを指定します。
[ 対象になる列] で、分析するテキストを含む1つまたは複数の列を選択します。
複数の列を選択できますが、文字列データ型である必要があります。
一般に、LDA はテキストから大きな特徴マトリックスを作成するため、通常は1つのテキスト列を分析します。
[ モデル化するトピックの数] に、入力テキストから派生するカテゴリまたはトピックの数を示す 1 ~ 1000 の整数を入力します。
既定では、5 つのトピックが作成されます。
[N-grams]\(N-gram\) では、ハッシュ中に生成される N グラムの最大長を指定します。
既定値は 2 で、バイグラムとユニグラムの両方が生成されることを意味します。
出力値を確率に変換するには、[ ノーマライズ ] オプションを選択します。 したがって、変換された値を整数として表すのではなく、出力と特徴データセットの値は次のように変換されます。
データセット内の値は、
P(topic|document)
の確率として表されます。特徴トピック マトリックス内の値は、
P(word|topic)
の確率として表されます。
[オプション]、[ すべてのオプションを表示] の順に選択し、追加の高度なパラメーターを表示して設定する場合は [TRUE] に設定します。
これらのパラメーターは、LDA の Vowpal Wabbit 実装に固有のものです。 Vowpal Wabbit online の LDA に関する優れたチュートリアルと、公式の Vowpal Wabbit Wikiがあります。
このサンプルは、バージョン8の例と、Azure ML での VW の使用例を参照してください。
[Rho parameter]\(Rho パラメーター\) 。 トピック分布の低密度の事前確率を指定します。 VW の
lda_rho
パラメーターに対応します。 単語の分布がフラットであると予想される場合は、値1を使用します。つまり、すべての単語が想定される可能性があると見なされます。 ほとんどの単語が少ないとして表示される場合は、それをかなり小さい値に設定します。[Alpha parameter]\(アルファ パラメーター\) 。 ドキュメントごとのトピックの重みの低密度の事前確率を指定します。 VW の
lda_alpha
パラメーターに対応します。[Estimated number of documents]\(推定ドキュメント数\) 。 処理されるドキュメントの数 (行数) を表す数値を入力します。 これにより、モジュールは十分なサイズのハッシュテーブルを割り当てることができます。 Vowpal Wabbit のパラメーターに
lda_D
対応します。[Size of the batch]\(バッチのサイズ\) 。 Vowpal Wabbit に送信される各テキストのバッチに含める行数を入力します。 Vowpal Wabbit のパラメーターに
batch_sz
対応します。[Initial value of iteration used in learning update schedule]\(学習更新スケジュールで使用される反復の初期値\) 。 学習速度の開始値を指定します。 Vowpal Wabbit のパラメーターに
initial_t
対応します。[Power applied to the iteration during updates]\(更新中に反復に適用する指数\) 。 オンライン更新中のイテレーション数に適用される電力のレベルを示します。 Vowpal Wabbit のパラメーターに
power_t
対応します。[Number of passes over the data]\(データのパス数\) 。 アルゴリズムがデータを循環する回数を指定します。 Vowpal Wabbit のパラメーターに
epoch_size
対応します。
テキストを分類する前に、最初のパスに n グラムのリストを作成する場合は、[LDA の前に ngrams のビルド辞書 または Ngrams のビルドディクショナリ] オプションを選択します。
初期辞書を事前に作成した場合は、後でモデルを確認するときに辞書を使用できます。 数値インデックスではなくテキストに結果をマップできるようにすると、一般に解釈が容易になります。 ただし、ディクショナリの保存には長い時間がかかり、追加のストレージが使用されます。
Ngram ディクショナリの最大サイズについては、n グラム辞書に作成できる行の合計数を入力します。
このオプションは、辞書のサイズを制御する場合に便利です。 ただし、入力の ngrams の数がこのサイズを超えると、競合が発生する可能性があります。
実験を実行します。 LDA モジュールではベイズの定理を使用して、個々の単語に関連付けられている可能性のあるトピックが判別されます。 単語は、トピックやグループに排他的に関連付けられていません。代わりに、各 n グラムには、検出されたすべてのクラスに関連付けられている確率が学習されます。
結果
モジュールには次の 2 つの出力があります。
変換されたデータセット: 各カテゴリの各テキスト例のスコアと共に、入力テキストと、指定された数のカテゴリが含まれています。
機能トピックマトリックス: 左端の列には抽出されたテキスト機能が含まれており、そのカテゴリの特徴のスコアを含むカテゴリごとに列があります。
詳細については、「 LDA results の例」を参照してください。
LDA 変換
このモジュールは、 ITransform インターフェイスとして LDA をデータセットに適用する変換も出力します。
この変換を保存し、他のデータセットに再利用することができます。 これは、大規模なコーパスでトレーニングを行い、係数またはカテゴリを再利用する必要がある場合に役立ちます。
LDA のモデルまたは結果の改良
通常は、すべてのニーズを満たす単一の LDA モデルを作成することはできません。また、1つのタスク用に設計されたモデルでも、精度向上のために多くのイテレーションが必要になる場合があります。 モデルを改善するために、次のすべての方法を試してみることをお勧めします。
- モデルのパラメーターを変更する
- 視覚化を使用して結果を理解する
- 生成されたトピックが役に立つかどうかを確認するために、分野の専門家のフィードバックを取得します。
定性的メジャーは、結果の評価にも役立ちます。 トピックのモデリングの結果を評価するには、次の点を考慮します。
- 精度-類似する項目は実際には似ていますか。
- 多様性-モデルは、ビジネス上の問題に必要な場合に類似する項目を区別できますか。
- スケーラビリティ-幅広いテキストカテゴリまたは狭いターゲットドメインでのみ動作しますか。
LDA に基づくモデルの精度は、自然言語処理を使用して、テキストのクリーンアップ、要約、単純化、または分類を行うことによって改善されることがよくあります。 たとえば、Machine Learning でサポートされている次の手法では、分類の精度が向上します。
ストップ ワードの削除
大文字と小文字の正規化
レンマ化またはステミング
名前付きエンティティの認識
詳細については、「テキストと名前付きエンティティの認識の前処理」を参照してください。
Studio (クラシック) では、r または Python ライブラリを使用してテキスト処理を行うこともできます。 r スクリプトの実行、 python スクリプトの実行
例
テキスト分析の例については、 Azure AI Galleryの次の実験を参照してください。
- Python スクリプトの実行: python で自然言語の処理を使用してテキストをクリーンアップおよび変換します。
顧客レビューのテキストに基づく詳細と例については、「 LDA の結果について」を参照してください。
LDA の結果の例
次の例では、ディリクレ等式アロケーションモジュールがどのように動作するかを説明するために、既定の設定を使用して LDA を、Machine Learning Studio (クラシック) に用意されている Book Review データセットに適用します。
ソース データセット
データセットには、評価列と、ユーザーによって指定された完全なコメントテキストが含まれています。
代表的な例のほんの一部を次の表に示します。
text |
---|
この書籍には、優れたポイントがあります。 何かがあれば、上司から必要な言葉を入力するのに役立ちます... |
この書籍はまだ完了していません。 電源管理不可で問題が発生しているため、友人にお勧めします... |
正しく記述されていませんが、この本を読んでみましたが、turgid が見つかりましたが、フラストレーションを落としています。 ... |
私は、何年も前に通過した友人からの犬用のコピーを借りているので、この本を手にすることはできませんでした。これは、短期間の cult お気に入りになっています。 |
この本のプロットは興味深いものであり、良い本です。 残念ながら、そうではありませんでした。 私にとっての主な問題は、 |
処理中に、指定したパラメーターに基づいて、 ディリクレ等式 Allocation モジュールによってテキストがクリーンアップおよび分析されます。 たとえば、テキストを自動的にトークン化したり、句読点を削除したりすることができます。また、同時に各トピックのテキスト機能が検索されます。
LDA 変換されたデータセット
次の表は、書籍のレビューのサンプルに基づいて 変換 されたデータセットを示しています。 出力には、入力テキストと、指定された数のカテゴリが、各カテゴリのスコアと共に含まれています。
ムービー名 | トピック1 | トピック2 | トピック3 | トピック4 | トピック5 |
---|---|---|---|---|---|
この本には優れたポイントがあります | 0.001652892 | 0.001652892 | 0.001652892 | 0.001652892 | 0.9933884 |
友人にお勧めします | 0.00198019 | 0.001980198 | 0.9920791 | 0.001980198 | 0.001980198 |
この本をお読みになりました | 0.002469135 | 0.002469135 | 0.9901233 | 0.002469135 | 0.002469135 |
友人から借用する | 0.9901232 | 0.002469135 | 0.002469135 | 0.002469135 | 0.002469135 |
この本のプロットは興味深いものでした | 0.001652892 | 0.001652892 | 0.9933884 | 0.001652892 | 0.001652892 |
この例では、 モデル化するトピック数に対して既定値の5を使用しています。 そのため、LDA モジュールは5つのカテゴリを作成します。これは、元の5スケール評価システムにほぼ対応していると想定できます。
また、このモジュールはトピックを表す5つのカテゴリのそれぞれについて、各エントリにスコアを割り当てます。 スコアは、行が特定のカテゴリに割り当てられる確率を示します。
機能トピックマトリックス
モジュールの2番目の出力は、 機能トピックマトリックスです。 これは表形式のデータセットであり、 特徴付け text、、列の 特徴、および各カテゴリのスコアが含まれています。残りの列の トピック 1では、トピック 2...トピック Nスコアは係数を表します。
機能 | トピック1 | トピック2 | トピック3 | トピック4 | トピック5 |
---|---|---|---|---|---|
面白いね | 0.0240282071983144 | 0.0354678954779375 | 0.363051866576914 | 0.0276637824315893 | 0.660663576149515 |
was | 0.0171478729532397 | 0.0823969031108669 | 0.00452966877950789 | 0.0408714510319233 | 0.025077322689733 |
from | 0.0148224220349217 | 0.0505086981492109 | 0.00434423322461094 | 0.0273389126293824 | 0.0171484355106826 |
プロット | 0.0227415889348212 | 0.0408709456489325 | 0.182791041345191 | 0.086937090812819 | 1 0.0169680136708971 |
読み取り | 0.0227415889348212 | 0.0408709456489325 | 0.182791041345191 | 0.0869370908128191 | 0.0169680136708971 |
試みた | 0.0269724979147211 | 0.039026263551767 | 0.00443749106785087 | 0.0628829816088284 | 0.0235340728818033 |
自分 | 0.0262656945140134 | 0.0366941302751921 | 0.00656837975179138 | 0.0329214576160066 | 0.0214121851106808 |
to | 0.0141026103224462 | 0.043359976919215 | 0.00388640531859447 | 0.0305925953440055 | 0.0228993750526364 |
it | 0.0264490547105951 | 0.0356674440311847 | 0.00541759897864314 | 0.0314539386250293 | 0.0140606468587681 |
friend | 0.0135971322960941 | 0.0346118171467234 | 0.00434999437350706 | 0.0666507321888536 | 0.018156863779311 |
ポイント | 0.0227415889348212 | 0.0396233855719081 | 0.00404663601474112 | 0.0381156510019025 | 0.0337788009496797 |
良い | 0.651813073836783 | 0.0598646397444108 | 0.00446809691985617 | 0.0358975694646062 | 0.0138989124411206 |
.its | 0.0185385588647078 | 0.144253986783184 | 0.00408876416453866 | 0.0583049240441475 | 0.015442805566858 |
of | 0.0171416780245647 | 0.0559361180418586 | 0.0100633904544953 | 0.087093930106723 | 0.0182573833869842 |
借りた | 0.0171416780245647 | 0.0559361180418586 | 0.0100633904544953 | 0.087093930106723 | 0.0182573833869842 |
has | 0.0171416780245647 | 0.0559361180418586 | 0.0100633904544953 | 0.087093930106723 | 0.0182573833869842 |
book | 0.0143157047920681 | 0.069145948535052 | 0.184036340170983 | 0.0548757337823903 | 0.0156837976985903 |
推奨 | 0.0161486848419689 | 0.0399143326399534 | 0.00550113530229642 | 0.028637149142764 | 0.0147675139039372 |
this | 0.0161486848419689 | 0.0399143326399534 | 0.00550113530229642 | 0.028637149142764 | 0.0147675139039372 |
テクニカル ノート
このセクションには、実装の詳細、ヒント、よく寄せられる質問への回答が含まれています。
実装の詳細
既定では、変換されたデータセットと機能トピックマトリックスの出力の分布は確率として正規化されます。
変換されたデータセットは、あるドキュメントでのトピックの条件付き確率として正規化されます。 この場合、各行の合計は 1 になります。
特徴トピック マトリックスは、あるトピックでの単語の条件付き確率として正規化されます。 この場合、各列の合計は 1 になります。
ヒント
場合によっては、モジュールが空のトピックを返すことがあります。これは、ほとんどの場合、アルゴリズムの擬似ランダム初期化が原因です。 このような場合は、N グラム辞書の最大サイズや、特徴ハッシュに使用するビット数など、関連するパラメーターの変更を試すことができます。
LDA とトピック モデリング
ディリクレ等式 Allocation (LDA) は、 コンテンツベースのトピックモデリングによく使用されます。これは基本的に、未分類のテキストからの学習カテゴリを意味します。 コンテンツベースのトピック モデリングでは、トピックは単語に対する分布です。
たとえば、多くの製品を含む顧客レビューのコーパスを提供しているとします。 多くの顧客が長期間にわたって送信したレビューのテキストには、多くの用語が含まれていますが、その中には複数のトピックで使用されるものがあります。
LDA プロセスによって識別される トピック は、個々の製品 a のレビューを表している場合もあれば、製品レビューのグループを表している場合もあります。 LDA では、トピック自体は、一連の単語についての、時間の経過に伴う確率分布にすぎません。
用語は、1つの製品に限定されることはほとんどありませんが、他の製品を参照することも、すべてに適用される一般的な用語 ("すばらしい"、"非常に高い") にすることもできます。 その他の用語は、ノイズ ワードの可能性があります。 ただし、LDA メソッドでは、領域内のすべての単語をキャプチャするためのポートが用意されていないことを理解しておくことが重要です。また、併置の確率とは別に、単語がどのように関連しているかを理解することも重要です。 ターゲットドメインで使用されていた単語だけをグループ化できます。
用語のインデックスが計算された後、距離ベースの類似性メジャーを使用してテキストの個々の行が比較され、2つのテキストが相互に似ているかどうかが判断されます。 たとえば、製品には厳密に相関する複数の名前があることがわかることがあります。 または、非常に否定的な語句が特定の製品に関連付けられていることがわかる場合もあります。 類似性メジャーは、関連する用語の識別と、推奨事項の作成の両方に使用できます。
想定される入力
名前 | 型 | 説明 |
---|---|---|
データセット | データ テーブル | 入力データセット |
モジュールのパラメーター
名前 | 種類 | Range | 省略可能 | Default | 説明 |
---|---|---|---|---|---|
Number of hash bits (ハッシュ ビットの数) | Integer | [1;31] | [すべての オプションを表示 ] チェックボックスがオフになっ て いる場合に適用されます | 12 | 特徴ハッシュに使用するビット数 |
Target column(s) (ターゲット列) | 列の選択 | 必須 | StringFeature | ターゲット列の名前またはインデックス | |
Number of topics to model (モデル化するトピックの数) | Integer | [1;1000] | 必須 | 5 | N 個のトピックに対してドキュメントの分布をモデル化する |
N-grams (N-gram) | Integer | [1;10] | 必須 | 2 | ハッシュ中に生成された N グラムの順序 |
Normalize (正規化) | Boolean | 必須 | true | 出力を確率に正規化します。 変換されたデータセットは P(topic|document)、特徴トピック マトリックスは P(word|topic) になります。 | |
Show all options (すべてのオプションを表示) | Boolean | True または False | 必須 | False | Vowpal Wabbit online LDA に固有の追加パラメーターを示します。 |
Rho parameter (Rho パラメーター) | Float | [0.00001;1.0] | [すべての オプションを表示 ] チェックボックスをオンにしたときに適用されます | 0.01 | Rho parameter (Rho パラメーター) |
Alpha parameter (アルファ パラメーター) | Float | [0.00001;1.0] | [すべての オプションを表示 ] チェックボックスをオンにしたときに適用されます | 0.01 | Alpha parameter (アルファ パラメーター) |
Estimated number of documents (推定ドキュメント数) | Integer | [1;int.MaxValue] | [すべての オプションを表示 ] チェックボックスをオンにしたときに適用されます | 1000 | ドキュメントの推定数 (lda_D パラメーターに対応します) |
Size of the batch (バッチのサイズ) | Integer | [1;1024] | [すべての オプションを表示 ] チェックボックスをオンにしたときに適用されます | 32 | Size of the batch (バッチのサイズ) |
Initial value of iteration used in learning rate update schedule (学習速度更新スケジュールで使用される反復の初期値) | Integer | [0;int.MaxValue] | [すべてのオプションを表示 ] チェック ボックスがオン の場合に適用されます | 0 | 学習率の更新スケジュールで使用されるイテレーション数の初期値 (initial_tに対応します) |
Power applied to the iteration during updates (更新中に反復に適用する指数) | Float | [0.0;1.0] | [すべてのオプションを表示 ] チェック ボックスがオン の場合に適用されます | 0.5 | オンライン更新中に反復回数に適用される電力 (power_tに対応) |
トレーニングの反復数 | Integer | [1;1024] | [すべてのオプションを表示 ] チェック ボックスがオン の場合に適用されます | 25 | トレーニングの反復数 |
Build dictionary of ngrams (ngram の辞書を作成する) | Boolean | True または False | [すべてのオプションを表示] チェック ボックスがオンではない場合に適用されます | True | LDA を計算する前に ngram の辞書を構築します。 モデルの検査と解釈に役立ちます |
機能ハッシュに使用するビット数 | Integer | [1;31] | オプション [ Build dictionary of ngrams]/(ngram のビルド ディクショナリ)が False の場合に 適用されます | 12 | 機能ハッシュ中に使用するビット数 |
Maximum size of ngram dictionary (ngram 辞書の最大サイズ) | Integer | [1;int.MaxValue] | [Build dictionary of ngrams]\(ngram の辞書を作成する\) オプションが True の場合に適用されます | 20000 | ngram 辞書の最大サイズ。 入力内のトークンの数がこのサイズを超えると、競合が発生する可能性があります |
Build dictionary of ngrams prior to LDA (LDA の前に ngram の辞書を作成する) | Boolean | True または False | [すべてのオプションを表示 ] チェック ボックスがオン の場合に適用されます | True | LDA の前に ngram の辞書を作成します。 モデルの検査と解釈に役立ちます |
Maximum number of ngrams in dictionary (辞書内の ngram の最大数) | Integer | [1;int.MaxValue] | [Build dictionary of ngrams]/(ngram の辞書を構築する) オプションが [True] で、[すべてのオプションを表示] チェック ボックスがオンの場合に適用されます | 20000 | 辞書の最大サイズ。 入力内のトークンの数がこのサイズを超えると、競合が発生する可能性があります |
出力
名前 | 型 | 説明 |
---|---|---|
変換されたデータセット | データ テーブル | 出力データセット |
機能トピックマトリックス | データ テーブル | LDA によって生成される機能トピック マトリックス |
LDA 変換 | ITransform インターフェイス | データセットに LDA を適用する変換 |
例外
例外 | 説明 |
---|---|
エラー 0002 | データ セットで指定した列のうち 1 つまたは複数が見つからない場合、例外が発生します。 |
エラー 0003 | 1 つまたは複数の入力が null または空の場合、例外が発生します。 |
エラー 0004 | パラメーターが特定の値以下の場合、例外が発生します。 |
エラー 0017 | 指定した 1 つ以上の列の型が現在のモジュールでサポートされていない場合に、例外が発生します。 |
Studio (クラシック) モジュールに固有のエラーの一覧については、「エラー コードMachine Learning参照してください。
API の例外の一覧については、「エラー コードMachine Learning REST API参照してください。
こちらもご覧ください
Text Analytics
特徴ハッシュ
名前付きエンティティの認識
Vowpal Wabbit 7-4 モデルのスコアリング
Vowpal Wabbit 7-4 モデルのトレーニング
Vowpal Wabbit 8 モデルのトレーニング