PMI コンポーネントは、ドキュメントコーパス内のすべての単語ペアにおける点ごとの相互情報量 (PMI) を計算し、共起頻度に基づいて 2 つの単語がどの程度強く関連しているかを定量化します。Machine Learning Designer のパイプラインでこのコンポーネントを使用して、意味のある単語の関連性を特定します。
PMI の仕組み
情報理論において、相互情報量 (MI) は、ある確率変数の情報を知ることで、別の確率変数の不確実性がどの程度減少するかを測定する指標です。PMI はこれを単語ペアに拡張し、ペアごとに単一の関連性スコアを生成します。
式: PMI(x,y) = ln(p(x,y) / (p(x) × p(y))) = ln(#(x,y) × D / (#x × #y))
ここで:
#(x,y)— 単語ペア (x, y) が共起する回数D— ペアの総数#x、#y— 各単語の出現回数
単語 x と y が同じウィンドウ内に同時に出現するたびに、コンポーネントは #x、#y、および #(x,y) の値を 1 ずつ増やします。
PMI スコアの解釈:
| PMI 値 | 意味 |
|---|---|
| 正の値 | 2 つの単語が偶然予測されるよりも頻繁に共起することを示します。意味のある関連性がある可能性が高いです。 |
| ゼロに近い値 | 強い関連性がないことを示します。 |
| ネガティブ | 2 つの単語が偶然予測されるよりも低い頻度で共起することを示します。 |
出現頻度によるフィルタリングを行わない場合、出現頻度の低い単語は非常に限られたコンテキストでしか出現しないため、人為的に高い PMI スコアが生成される可能性があります。minCount を設定して、信頼できる統計を算出するには出現頻度が低すぎる単語をフィルタリングしてください。アルゴリズムの背景情報については、「Pointwise mutual information」をご参照ください。
コンポーネントの設定
方法1:PAI コンソールでの設定
Machine Learning Designer のパイプラインページで、次のパラメーターを設定します。
| タブ | パラメーター | 説明 |
|---|---|---|
| フィールド設定 | スペースで区切られた単語を含むドキュメントの列 | 単語がスペースで区切られているドキュメントの列です。 |
| パラメーター設定 | 単語の最小出現頻度 | このしきい値を下回る出現回数の単語はフィルタリングされます。デフォルト値:5。出現頻度の低い単語が PMI スコアを水増ししている場合は、この値を大きくしてください。 |
| パラメーター設定 | ウィンドウサイズ | 現在の単語の右側にある、共起ウィンドウを形成する単語の数です。たとえば、ウィンドウサイズが 5 の場合、現在の単語はすぐ右にある 5 つの単語のそれぞれとペアになります。 |
| チューニング | コンピューティングコア数 | 計算に使用する CPU コアの数です。デフォルト値:システムによって決定されます。 |
| チューニング | コアあたりのメモリサイズ (単位: MB) | 各コアに割り当てられるメモリです。デフォルト値:システムによって決定されます。 |
方法2:PAI コマンドでの設定
SQL スクリプトコンポーネントまたは ODPS SQL ノードを使用して PAI コマンドを実行します。コマンド名は PointwiseMutualInformation です。
PAI -name PointwiseMutualInformation
-project algo_public
-DinputTableName=maple_test_pmi_basic_input
-DdocColName=doc
-DoutputTableName=maple_test_pmi_basic_output
-DminCount=0
-DwindowSize=2
-DcoreNum=1
-DmemSizePerCore=110;パラメーター
| パラメーター | 必須 | 説明 | デフォルト値 |
|---|---|---|---|
inputTableName | はい | 入力テーブル | — |
outputTableName | はい | 出力テーブル | — |
docColName | はい | 単語分割後のドキュメント列の名前。単語はスペースで区切る必要があります。 | — |
windowSize | いいえ | 現在の単語の右側にある、共起ウィンドウを形成する単語の数です。たとえば、値が 5 の場合は、現在の単語の右側に隣接する 5 つの単語を示します。 | 行内のすべての単語 |
minCount | いいえ | 単語の最小出現頻度です。これより出現回数が少ない単語はフィルタリングされます。出現頻度の低い単語によって信頼性の低い PMI スコアが生成されている場合は、この値を大きくしてください。 | 5 |
inputTablePartitions | いいえ | 入力テーブルから使用するパーティションを Partition_name=value のフォーマットで指定します。複数のパーティションを指定する場合は、name1=value1/name2=value2 のように指定します。複数のエントリはコンマで区切ります。 | すべてのパーティション |
lifecycle | いいえ | 出力テーブルのライフサイクル | — |
coreNum | いいえ | CPU コアの数です。有効な値:1~9999。 | システムによって決定されます |
memSizePerCore | いいえ | コアあたりのメモリ (MB 単位)。有効な値:1024~65536。 | システムによって決定されます |
例
この例では、入力テーブルの作成、PMI コマンドの実行、出力の確認という一連のワークフローを説明します。
入力
ODPS SQLノードを使用して、maple_test_pmi_basic_input という名前のテーブルを作成します。詳細については、「MaxCompute SQLタスクを開発する」をご参照ください。
CREATE TABLE maple_test_pmi_basic_input AS
SELECT * FROM (
SELECT "w1 w2 w3 w4 w5 w6 w7 w8 w8 w9" AS doc
UNION ALL SELECT "w1 w3 w5 w6 w9" AS doc
UNION ALL SELECT "w0" AS doc
UNION ALL SELECT "w0 w0" AS doc
UNION ALL SELECT "w9 w1 w9 w1 w9" AS doc
) tmp;結果のテーブルでは、各行に 1 つのドキュメントが含まれ、単語はスペースで区切られています。
| doc |
|---|
| w1 w2 w3 w4 w5 w6 w7 w8 w8 w9 |
| w1 w3 w5 w6 w9 |
| w0 |
| w0 w0 |
| w9 w1 w9 w1 w9 |
コマンドの実行
SQL スクリプトコンポーネントまたは ODPS SQL ノードを使用して、次のコマンドを実行します。
PAI -name PointwiseMutualInformation
-project algo_public
-DinputTableName=maple_test_pmi_basic_input
-DdocColName=doc
-DoutputTableName=maple_test_pmi_basic_output
-DminCount=0
-DwindowSize=2
-DcoreNum=1
-DmemSizePerCore=110;出力
出力テーブル maple_test_pmi_basic_output には、単語ペアごとに 1 行が含まれます。
| 列 | 説明 |
|---|---|
word1、word2 | 単語ペアです。 |
word1_count、word2_count | コーパス全体における各単語の総出現回数です。 |
co_occurrences_count | ウィンドウ内でペアが共起する回数です。 |
pmi | 共起率の自然対数です。正の値は、単語が偶然予測されるよりも頻繁に共起することを示します。負の値は偶然よりも少なく、ゼロは関連性がないことを示します。 |
maple_test_pmi_basic_output の出力例:
| word1 | word2 | word1_count | word2_count | co_occurrences_count | pmi |
|---|---|---|---|---|---|
| w0 | w0 | 2 | 2 | 1 | 2.0794415416798357 |
| w1 | w1 | 10 | 10 | 1 | -1.1394342831883648 |
| w1 | w2 | 10 | 3 | 1 | 0.06453852113757116 |
| w1 | w3 | 10 | 7 | 2 | -0.08961215868968704 |
| w1 | w5 | 10 | 8 | 1 | -0.916290731874155 |
| w1 | w9 | 10 | 12 | 4 | 0.06453852113757116 |
| w2 | w3 | 3 | 7 | 1 | 0.4212134650763035 |
| w2 | w4 | 3 | 4 | 1 | 0.9808292530117262 |
| w3 | w4 | 7 | 4 | 1 | 0.13353139262452257 |
| w3 | w5 | 7 | 8 | 2 | 0.13353139262452257 |
| w3 | w6 | 7 | 7 | 1 | -0.42608439531090014 |
| w4 | w5 | 4 | 8 | 1 | 0.0 |
| w4 | w6 | 4 | 7 | 1 | 0.13353139262452257 |
| w5 | w6 | 8 | 7 | 2 | 0.13353139262452257 |
| w5 | w7 | 8 | 4 | 1 | 0.0 |
| w5 | w9 | 8 | 12 | 1 | -1.0986122886681098 |
| w6 | w7 | 7 | 4 | 1 | 0.13353139262452257 |
| w6 | w8 | 7 | 7 | 1 | -0.42608439531090014 |
| w6 | w9 | 7 | 12 | 1 | -0.9650808960435872 |
| w7 | w8 | 4 | 7 | 2 | 0.8266785731844679 |
| w8 | w8 | 7 | 7 | 1 | -0.42608439531090014 |
| w8 | w9 | 7 | 12 | 2 | -0.2719337154836418 |
| w9 | w9 | 12 | 12 | 2 | -0.8109302162163288 |
次のステップ
Machine Learning Designer の概要 — パイプラインベースのワークフローについて説明します。
コンポーネントリファレンス:すべてのコンポーネントの概要 — 他のテキスト分析および特徴量エンジニアリングコンポーネントについて説明します。