6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Autonomous Database:SELECT AI for Synthetic Data Generationで日本語のテストデータを自動生成を試してみた

Last updated at Posted at 2024-10-07

はじめに

Autonomous Databaseに「SELECT AI for Synthetic Data Generation」という、AIを使用してテストデータを自動生成する機能が追加されました。
そこで今回は、「SELECT AI for Synthetic Data Generation」を使用して、日本語のテストデータを生成できるかを検証してみました。

1. 事前準備

テストデータ生成の対象となる表を作成します。
今回は、director、movie、actor、movie_actorの4つの表を作成しました。

SQL> CREATE TABLE director (
  2  	 director_id	 NUMBER PRIMARY KEY,
  3  	 name		 VARCHAR2(100)
  4  );

表が作成されました。

SQL> CREATE TABLE movie (
  2  	 movie_id	 NUMBER PRIMARY KEY,
  3  	 title		 VARCHAR2(100),
  4  	 release_date	 DATE,
  5  	 genre		 VARCHAR2(50),
  6  	 director_id	 NUMBER,
  7  	 FOREIGN KEY (director_id) REFERENCES director(director_id)
  8  );

表が作成されました。

SQL> CREATE TABLE actor (
  2  	 actor_id	 NUMBER PRIMARY KEY,
  3  	 name		 VARCHAR2(100)
  4  );

表が作成されました。

SQL> CREATE TABLE movie_actor (
  2  	 movie_actor_id  NUMBER PRIMARY KEY,
  3  	 movie_id	 NUMBER,
  4  	 actor_id	 NUMBER,
  5  	 FOREIGN KEY (movie_id) REFERENCES movie(movie_id),
  6  	 FOREIGN KEY (actor_id) REFERENCES actor(actor_id)
  7  );

表が作成されました。

SQL> 

日本語のデータを生成したい列にコメントを設定します。

SQL> COMMENT ON COLUMN movie.title IS 'Movie title in Japanese';

コメントが作成されました。

SQL> COMMENT ON COLUMN movie.genre IS 'Movie genre in Japanese';

コメントが作成されました。

SQL> COMMENT ON COLUMN actor.name IS 'Actor name in Japanese';

コメントが作成されました。

SQL> COMMENT ON COLUMN director.name IS 'Director name in Japanese';

コメントが作成されました。

SQL> 

2. AIプロファイルの作成

AIプロバイダとして「OCI Generative AI Service」(oci)、使用するモデルとして「Cohere Command R+」(cohere.command-r-plus)を指定して、AIプロファイルを作成します。
今回は、Autonomous DatabaseからOCI Generative AI Serviceへのアクセスにリソース・プリンシパルを使用しました。
リソース・プリンシパルを有効化する手順は、こちらのマニュアルに記載があります。

SQL> BEGIN
  2    DBMS_CLOUD_AI.CREATE_PROFILE(
  3  	 profile_name =>'OCI_GENAI',
  4  	 attributes   =>'{"provider":        "oci",
  5                       "model":           "cohere.command-r-plus",
  6  			          "credential_name": "OCI$RESOURCE_PRINCIPAL",
  7  			          "comments":	     "TRUE"
  8  			 }'
  9    );
 10  END;
 11  /

PL/SQLプロシージャが正常に完了しました。

SQL>

3. テストデータの生成

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATAプロシージャを実行して、テストデータを生成します。
使用するAIプロファイルとして先ほど作成した「OCI_GENAI」、データを生成する対象の表として先ほど作成したmovie、director、actor、movie_actorを指定します。

SQL> BEGIN
  2  	 DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  3  	     profile_name => 'OCI_GENAI',
  4  	     object_list => '[
  5  			      {"owner":"ADMIN", "name":"director","record_count":5},
  6  			      {"owner":"ADMIN", "name":"movie_actor","record_count":20, "user_prompt":"Each movie has several actors"},
  7  			      {"owner":"ADMIN", "name":"actor","record_count":10},
  8  			      {"owner":"ADMIN", "name":"movie","record_count":5, "user_prompt":"all movies released in 2022"}
  9  			     ]'
 10  	 );
 11  END;
 12  /

PL/SQLプロシージャが正常に完了しました。

SQL> 

生成された各表のデータを確認してみます。

SQL> SELECT * FROM movie;

  MOVIE_ID TITLE							                            RELEASE_ GENRE		      DIRECTOR_ID
---------- ------------------------------------------------------------ -------- -------------------- -----------
         1 The Matrix Resurrections					                    22-12-22 Sci-Fi 			4
         2 Spider-Man: No Way Home					                    22-12-17 Action 			2
         3 Top Gun: Maverick						                    22-05-27 Action 			3
         4 The Batman							                        22-03-04 Superhero			5
         5 Everything Everywhere All at Once				            22-03-14 Sci-Fi 			1

5行が選択されました。

SQL> SELECT * FROM director;

DIRECTOR_ID NAME
----------- --------------------
          1 John Smith
          2 Mary Jones
          3 Robert Johnson
          4 Sarah Davis
          5 David Miller

5行が選択されました。

SQL> SELECT * FROM actor;

  ACTOR_ID NAME
---------- --------------------
         1 John Smith
         2 Emily Brown
         3 Michael Jones
         4 Sarah Davis
         5 David Miller
         6 Rachel Wilson
         7 Robert Johnson
         8 Laura Anderson
         9 William Thompson
        10 Elizabeth Moore

10行が選択されました。

SQL> SELECT * FROM movie_actor;

MOVIE_ACTOR_ID	 MOVIE_ID   ACTOR_ID
-------------- ---------- ----------
             1		    2	       9
             2		    2	       2
             3		    2	      10
             4		    1	       3
             5		    1	       1
             6		    1	       5
             7		    1	       8
             8		    5	       6
             9		    5	       4
            10		    5	       7
            11		    3	       9
            12		    3	       2
            13		    3	      10
            14		    4	       3
            15		    4	       1
            16		    4	       5
            17		    2	       8
            18		    2	       6
            19		    3	       4
            20		    3	       7

20行が選択されました。

SQL>

映画のタイトルや監督名、俳優名が英語になっていることがわかります。

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATAプロシージャを実行する際のパラメータとして、表や列のコメントを有効化する設定をして再度実行してみます。

まずは、既存の表データを削除します。

SQL> TRUNCATE TABLE movie_actor;

表が切り捨てられました。

SQL> TRUNCATE TABLE actor;

表が切り捨てられました。

SQL> TRUNCATE TABLE movie;

表が切り捨てられました。

SQL> TRUNCATE TABLE director;

表が切り捨てられました。

SQL> 

paramsに{"comments":"TRUE"}を指定して、コメントを有効にしてテストデータを生成してみます。

SQL> BEGIN
  2  	 DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  3  	     profile_name => 'OCI_GENAI',
  4  	     object_list => '[
  5  			      {"owner":"ADMIN", "name":"director","record_count":5},
  6  			      {"owner":"ADMIN", "name":"movie_actor","record_count":20, "user_prompt":"Each movie has several actors"},
  7  			      {"owner":"ADMIN", "name":"actor","record_count":10},
  8  			      {"owner":"ADMIN", "name":"movie","record_count":5, "user_prompt":"all movies released in 2022"}
  9  			     ]',
 10  	     params => '{"comments":"TRUE"}'
 11  	 );
 12  END;
 13  /

PL/SQLプロシージャが正常に完了しました。

SQL>

生成された各表のデータを確認してみます。

SQL> SELECT * FROM movie;

  MOVIE_ID TITLE							                            RELEASE_ GENRE		          DIRECTOR_ID
---------- ------------------------------------------------------------ -------- -------------------- -----------
         1 『アバター』続編                                                22-12-22 SF                             1
         2 ブローシャー・ドラマ                                             22-03-19 ドラマ                          4
         3 ホラー・マスタークラス                                           22-10-31 ホラー                          5
         4 アクション・レジェンド                                           22-07-04 アクション                       2
         5 ロマンス・イン・パラダイス                                        22-02-14 ロマンス                        3

5行が選択されました。

SQL> SELECT * FROM director;

DIRECTOR_ID NAME
----------- --------------------
          1 佐藤 一郎
          2 鈴木 花子
          3 高橋 太郎
          4 山本 伊織
          5 渡辺 隼人

5行が選択されました。

SQL> SELECT * FROM actor;

  ACTOR_ID NAME
---------- --------------------
         1 伊藤 健太郎
         2 佐藤 健
         3 綾瀬 はるか
         4 長澤 まさみ
         5 菅田 将暉
         6 広瀬 すず
         7 木村 拓哉
         8 新垣 結衣
         9 竹内 涼真
        10 有村 架純

10行が選択されました。

SQL> SELECT * FROM movie_actor;

MOVIE_ACTOR_ID	 MOVIE_ID   ACTOR_ID
-------------- ---------- ----------
	     1		        2	      10
	     2		        5    	   8
	     3		        3	       7
	     4		        1	       5
	     5		        4	       6
	     6		        2	       3
	     7		        5	       9
	     8		        3	       4
	     9		        1	       1
	    10		        4	       2
	    11		        2	      10
	    12		        5	       8
	    13		        3	       7
	    14		        1	       5
	    15		        4	       6
	    16		        2	       3
	    17		        5	       9
	    18		        3	       4
	    19		        1	      10
	    20		        4	       8

20行が選択されました。

SQL> 

映画のタイトルや監督名、俳優名のデータが日本語で生成されたことが確認できました。

参考情報

Synthetic Data Generation

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?