レコメンデーションモデルやランキングモデルを構築する際、トレーニングデータは多くの場合、トライアドテーブル (行、列、値) として保存されます (例:ユーザー ID、アイテム ID、クリック数)。ビジュアルモデリングの **行、列、値を KV ペアに変換** コンポーネントは、このフォーマットをスパースなキーと値のテーブル (行, [col_id:value]) と、列名を整数 ID にマッピングする対応するインデックステーブルに変換します。これは、ベクターインデックス付き入力を想定するモデルにスパース特徴量データを供給するための標準的な前処理ステップです。
仕組み
このコンポーネントは、行識別子、列名、数値を表す列を持つトライアドテーブルを入力として受け取り、次の処理を実行します。
各個別列名に一意の整数 ID (
col_id) を割り当て、そのマッピングをインデックステーブルに記録します。行識別子で行をグループ化し、すべての
col_id:valueペアを単一のキーと値の文字列に連結します。
入力データの型の要件
入力トライアドテーブルは、次の 2 つの列の型のパターンのいずれかに従う必要があります。
| パターン | 列の型 | 値列の型 |
|---|---|---|
XXD | 行:任意、列:任意 | DOUBLE |
XXL | 行:任意、列:任意 | BIGINT |
出力されるキーと値のテーブルでは、行と値の列は元のデータの型を保持します。インデックステーブルの col_id 列は常に BIGINT です。
例
入力トライアドテーブル:
| id | word | count |
|---|---|---|
| 01 | a | 10 |
| 01 | b | 20 |
| 01 | c | 30 |
コンポーネントは 2 つの出力テーブルを生成します。
キーと値のテーブル — 各行の列値は、単一の col_id:value 文字列に折りたたまれます。
| id | key_value |
|---|---|
| 01 | 1:10;2:20;3:30 |
インデックステーブル — 元の各列名を、割り当てられた整数 ID にマッピングします。
| key | key_id |
|---|---|
| a | 1 |
| b | 2 |
| c | 3 |
キーとその値の間のデリミタ、およびキーと値のペア間のデリミタは、どちらもカスタマイズ可能です。
コンポーネントの設定
オプション 1:パイプラインキャンバスでの設定
ビジュアルモデリングのパイプラインキャンバスで、コンポーネントをクリックして設定パネルを開きます。次の表にパラメーターを示します。
[フィールド設定] タブ
| パラメーター | 必須 | 説明 | デフォルト値 |
|---|---|---|---|
| [KV 変換中に保持される列] | はい | 変換後も変更されない列 (行識別子)。 | — |
| 出力キー | はい | その値がキーと値のテーブルでキーになる列。 | — |
| [出力値] | はい | その値がキーと値のテーブルで値になる列。 | — |
| [入力インデックステーブルのキー列] | いいえ | 既存のインデックステーブルのキー列。インデックステーブルを指定する場合に必須です。 | — |
| [入力インデックステーブルのキーのインデックス ID 列] | いいえ | 既存のインデックステーブルのインデックス ID 列。インデックステーブルを指定する場合に必須です。 | — |
| [KV デリミタ] | いいえ | キーとその値の間のデリミタ。 | : (コロン) |
| KVペア デリミタ | いいえ | キーと値のペア間のデリミタ。 | , (カンマ) |
[チューニング] タブ
| パラメーター | 必須 | 説明 | デフォルト値 |
|---|---|---|---|
| インスタンスの総数 | いいえ | コンピューティングインスタンスの数です。正の整数である必要があります。 | 入力データに基づいて自動計算されます |
| メモリサイズ (MB) | いいえ | 総メモリ容量です。正の整数である必要があります。 | 入力データに基づいて自動計算されます |
オプション 2:PAI コマンドの使用
「SQL スクリプト」コンポーネントで PAI コマンドを使用してコンポーネントを実行します。
PAI -name triple_to_kv
-project algo_public
-DinputTableName=test_data
-DoutputTableName=test_kv_out
-DindexOutputTableName=test_index_out
-DidColName=id
-DkeyColName=word
-DvalueColName=count
-DinputTablePartitions=ds=test1
-DindexInputTableName=test_index_input
-DindexInputKeyColName=word
-DindexInputKeyIdColName=word_id
-DkvDelimiter=:
-DpairDelimiter=;
-Dlifecycle=3パラメーター
| パラメーター | 必須 | 説明 | デフォルト値 |
|---|---|---|---|
inputTableName | はい | 入力トライアドテーブルの名前。 | — |
idColName | はい | 行識別子列。出力では変更されません。 | — |
keyColName | はい | その値がキーになる列。 | — |
valueColName | はい | その値が値になる列。 | — |
outputTableName | はい | 出力キーと値のテーブルの名前。 | — |
indexOutputTableName | はい | 出力インデックステーブルの名前。 | — |
indexInputTableName | いいえ | 使用する既存のインデックステーブル。データが含まれている必要があります。 | — |
indexInputKeyColName | いいえ | 既存のインデックステーブルのキー列。indexInputTableName が設定されている場合に必須です。 | — |
indexInputKeyIdColName | いいえ | 既存のインデックステーブルのインデックス ID 列。indexInputTableName が設定されている場合に必須です。 | — |
inputTablePartitions | いいえ | 入力テーブルのパーティション。パーティション名は 1 つだけサポートされます。 | — |
kvDelimiter | いいえ | キーとその値の間のデリミタ。 | : (コロン) |
pairDelimiter | いいえ | キーと値のペア間のデリミタ。 | , (カンマ) |
lifecycle | いいえ | 出力テーブルのライフサイクル。 | — |
coreNum | いいえ | コンピューティングインスタンスの数。正の整数である必要があります。 | 入力データから自動計算 |
memSizePerCore | いいえ | 合計メモリ。正の整数である必要があります。 | 入力データから自動計算 |
例
次の例では、2 人のユーザーのインタラクションレコードを含むトライアドテーブルを、キーと値のテーブルとインデックステーブルに変換します。
ステップ 1:入力テーブルの作成 (triple2kv_test_input)
drop table if exists triple2kv_test_input;
create table triple2kv_test_input as
select * from (
select '01' as id, 'a' as word, 10 as count
union all select '01' as id, 'b' as word, 20 as count
union all select '01' as id, 'c' as word, 30 as count
union all select '02' as id, 'a' as word, 100 as count
union all select '02' as id, 'd' as word, 200 as count
union all select '02' as id, 'e' as word, 300 as count
) tmp;ステップ 2:PAI コマンドの実行
PAI -name triple_to_kv
-project algo_public
-DinputTableName=triple2kv_test_input
-DoutputTableName=triple2kv_test_input_out
-DindexOutputTableName=triple2kv_test_input_index_out
-DidColName=id
-DkeyColName=word
-DvalueColName=count
-Dlifecycle=1;出力
列名 a、b、c、d、e には ID 1~5 が割り当てられます。キーと値のテーブル (triple2kv_test_input_out) は、各ユーザーのインタラクションを単一の文字列に折りたたみます。
+----+-------------------+
| id | key_value |
+----+-------------------+
| 01 | 1:10;2:20;3:30 |
| 02 | 1:100;4:200;5:300 |
+----+-------------------+インデックステーブル (triple2kv_test_input_index_out) は、列名と ID のマッピングを記録します。
+-----+--------+
| key | key_id |
+-----+--------+
| a | 1 |
| b | 2 |
| c | 3 |
| d | 4 |
| e | 5 |
+-----+--------+