合成データ生成
ランダム・ジェネレータ、アルゴリズム、統計モデルおよび大規模言語モデル(LLM)を使用して合成データを生成し、ソリューションを効果的に開発およびテストするための実際のデータをシミュレートします。
合成データは、特に実際のデータが存在しないか、使用が許可されていない場合に、ソリューションを開発およびテストする際の強力なツールです。合成、または人工的に生成されたデータは、実データの多くの特性を持つことができます。合成データは通常、ランダム・ジェネレータ、アルゴリズムまたは統計モデルを使用して作成され、実際のデータの特性と分布をシミュレートします。ただし、これは複雑で、さまざまな高度な機能を備えたツールを作成したり、ツールに依存したりすることがあります。大規模言語モデル(LLM)の可用性により、自然言語で表現される特性を考慮した、より関連性の高いスキーマ固有のデータが生成される場合があります。
合成データ生成の利点
合成データ生成により、元の表の機密データを使用せずに、データベース・メタデータ・クローンの移入、開発、テストおよび機械学習プロジェクトのサポートが可能になります。
合成データ生成には、次の利点があります。
-
メタデータ・クローンへの合成データの移入: メタデータ・クローンは、実際のデータを含めずにデータベースまたはスキーマの構造をレプリケートします。Select AIを使用すると、合成データ生成でこれらのクローンを移入し、機密データを保護しながら、開発、テストおよびテンプレートの作成が可能になります。このアプローチは、パフォーマンスおよびスケーラビリティのテストをサポートします。
-
新規プロジェクトの開始: 新規プロジェクトを開始するときに、実績データを使用できない場合があります。合成データは、概念を実証し、プロジェクト提案のサポートを得るのに役立つ現実的なサンプルを提供します。
-
ユーザー・エクスペリエンスの検証: 合成データは、設計の欠陥、パフォーマンスおよびスケーラビリティの問題を発見するための多様なデータ・セットを提供することで、ユーザー・インタフェースのテストに役立ちます。
-
AIおよび機械学習プロジェクトのサポート: 合成データは、実際のデータが使用できないか制限されている場合に、AIおよび機械学習モデルのトレーニングに役立ちます。LLMは、モデルのトレーニングとスコアリングを容易にするために、特定のパターンでデータを生成できます。
合成データの生成
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATAファンクションでは、Select AIアクションを使用して合成データを生成し、データを問い合せます。
さらに学習するには、GENERATE_DATAETIC_DATAファンクションおよび例: 合成データの生成を参照してください。
合成データ生成のモニターおよびトラブルシューティング
多数のテーブルで大量のデータを生成する場合、Select AIは合成データ生成タスクを小さなチャンクに分割し、タスクを並行して実行します。各チャンクのステータスは、SYNTHETIC_DATA$*`<operation_id>`*_STATUS表で追跡されます。
合成データ生成操作は、表DBA_LOAD_OPERATIONSおよびUSER_LOAD_OPERATIONSに記録されます。これらの表を使用して、DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA操作を監視します。詳細は、DBMS_CLOUDロード操作の追跡を参照してください。
特定のセッションで合成データ生成を実行した後、次を使用してUSER_LOAD_OPERATIONから最新の<operation_id>を取得できます:
SELECT max(id) FROM user_load_operations;別のセッションで実行されている合成データ操作を表示するには、DBA_LOAD_OPERATIONSビューを使用します。
合成データ生成のステータスの表示
合成データ生成操作のステータス表には、各表の進行状況および対応するチャンクが表示されます。USER_LOAD_OPERATIONSまたはDBA_LOAD_OPERATIONSのSTATUS_TABLE列には、ステータス表名が表示されます。表名はSYNTHETIC_DATA$*`<operation_id>`*_STATUSで、次の列があります。
| 名前 | データ型 | 摘要 |
|---|---|---|
ID |
NUMBER |
レコードの一意のID。 |
NAME |
VARCHAR2 |
表の修飾名("ADB_USER"."EMPLOYEES"など) |
BYTES |
NUMBER |
このデータ生成タスクに必要なレコード数 |
ROWS_LOADED |
NUMBER |
生成された実際のレコード数。 |
CHECKSUM |
VARCHAR2 |
このデータ生成タスク中の主キーの開始値。 |
LAST_MODIFIED |
TIMESTAMP WITH TIME ZONE |
レコードが最後に変更された日時を示すタイムスタンプ。 |
STATUS |
VARCHAR2 |
データ生成タスクのステータス。有効な値は次のとおりです。
|
ERROR_CODE |
NUMBER |
データ生成タスクが失敗した場合のエラー・コード。 |
ERROR_MESSAGE |
VARCHAR2 |
タスクが失敗した場合に提供されるエラー・メッセージ。 |
END_TIME |
TIMESTAMP WITH TIME ZONE |
データ生成タスクの終了を示すタイムスタンプ。 |
例: 各表に対して生成されるレコード数の確認
各テーブルに対して生成されたレコード数を確認するには、次を発行します。
SELECT name, SUM(rows_loaded) FROM synthetic_data$<operation_id>_status group by name;ROWS_LOADEDを問い合せて各チャンクにロードされる行数を確認し、表ごとにSUM(ROWS_LOADED)を問い合せます。
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_list => '[{"owner": "ADB_USER", "name": "DIRECTOR","record_count":150},
{"owner": "ADB_USER", "name": "MOVIE_ACTOR","record_count":300},
{"owner": "ADB_USER", "name": "CLASSES", "user_prompt":"all in fall semester","record_count":5},
{"owner": "ADB_USER", "name": "ACTOR","record_count":220},
{"owner": "ADB_USER", "name": "MOVIE","record_count":50}]'
);
END;
/
-- Check loaded rows for each chunk
SQL> SELECT name, rows_loaded FROM synthetic_data$141_status order by name;
NAME ROWS_LOADED
------------------------------------------
"ADB_USER"."ACTOR" 188
"ADB_USER"."ACTOR" 32
"ADB_USER"."CLASSES" 5
"ADB_USER"."DIRECTOR" 150
"ADB_USER"."MOVIE" 50
"ADB_USER"."MOVIE_ACTOR" 38
"ADB_USER"."MOVIE_ACTOR" 114
"ADB_USER"."MOVIE_ACTOR" 148
-- Check loaded rows for each table
SQL> SELECT name, SUM(rows_loaded) FROM synthetic_data$141_status group by name;
NAME SUM(ROWS_LOADED)
------------------------------------------
"ADB_USER"."DIRECTOR" 150
"ADB_USER"."MOVIE_ACTOR" 300
"ADB_USER"."CLASSES" 5
"ADB_USER"."ACTOR" 220
"ADB_USER"."MOVIE" 50