機械翻訳について

3.2.4 モデルのデプロイ

次に、OML4Rモデルをデプロイし、そのインサイトを活用するためのいくつかのアプローチを示します:

R APIを使用した予測:

これは最も簡単なメソッドであり、迅速な分析やプロトタイピングに最適です。 R環境内の適合モデルを直接使用して、新しいデータの予測を行うことができます。

pred <- predict(km.mod.ere, CUST_DF_CLEAN, supplemental.cols = "CUST_ID")
 
print(pred)  # View predictions for new data

異なるデータベースにモデルをデプロイします:

異なるデータベース内の本番デプロイメントでは、組込み機能を利用します:

  • エクスポート: DBMS_DATA_MINING.EXPORT_SERMODELを使用して、トレーニング済モデル(CUST_CLUSTER_MODEL_ERE)をデータベース1のBLOBオブジェクトにエクスポートします。
  • 転送: BLOBオブジェクト(BFileなど)をDatabase 2に移動します。
  • インポート: 転送されたBLOBオブジェクトからモデルをインポートするには、データベース2のDBMS_DATA_MINING.IMPORT_SERMODELを使用します。

RおよびSQLおよびADB RESTでのユーザー定義R関数の実行:

新しいデータによる定期的なモデル更新の場合は、ユーザー定義のR関数を作成します:

  • モデル設定(クラスタ数、距離メトリックなど)を定義します。
  • CUST_CLUSTER_MODEL_EREという名前の既存のモデルを削除します(オプション)。
  • ore.odmKMeansを使用してモデルをトレーニングします。
  • オプションで、新しいデータの予測を生成して表示します。

Oracleのスケジューリング機能を使用して、このスクリプトを定期的に実行するようにスケジュールします。

例3-1 スクリプト・リポジトリでのR関数の定義およびRからの実行

#suppress warnings#
options(warn=-1)
 
build.km.1 <- function(){
    settings = list('KMNS_ITERATIONS'='10',
           'KMNS_DISTANCE'='KMNS_EUCLIDEAN',
           'KMNS_NUM_BINS'='10',
           'KMNS_DETAILS'='KMNS_DETAILS_ALL',
           'PREP_AUTO'='ON',
           'MODEL_NAME'='CUST_CLUSTER_MODEL_ERE')
            
    ore.exec(paste("BEGIN DBMS_DATA_MINING.DROP_MODEL('CUST_CLUSTER_MODEL_ERE'); EXCEPTION WHEN OTHERS THEN NULL; END;", sep=""))
     
    km.mod.ere <- ore.odmKMeans(~ . -CUST_ID, CUST_DF_CLEAN, num.centers=3, odm.settings=settings)
 
    # Show predictions
    pred <- predict(km.mod.ere, CUST_DF_CLEAN, supplemental.cols="CUST_ID")
    pred
}
 
ore.doEval(FUN = build.km.1)

出力が次のように表示されます。


この図は、スクリプト・リポジトリでR関数を定義してRから実行した場合の出力を示しています。

例3-2 SQLからのユーザー定義Rスクリプトの実行

--set the access token
exec rqSetAuthToken('<access token>');
 
--run user-defined R script from SQL
SELECT *
  FROM table(
    rqEval2(
         NULL,
        '{"CUST_ID": "NUMBER", "probability_of_cluster_3": "BINARY_DOUBLE", "probability_of_cluster_4": "BINARY_DOUBLE",
          "probability_of_cluster_5": "BINARY_DOUBLE", "CLUSTER_ID": "NUMBER"}',
        'build.km.1'));

SQL出力は次のようになります:


この図は、SQL出力を示しています。

例3-3 CURLコマンドを使用してADB RESTからRスクリプトを実行します:

curl -i -X POST --header "Authorization: Bearer ${token}" \
--header 'Content-Type: application/json' --header 'Accept: application/json' \
-d '{}' \
"<oml-cloud-service-location-url>/oml/api/r-scripts/v1/do-eval/build.km.1"

RESTレスポンスは次のように表示されます:

{

    "result": [

        {

            "probability_of_cluster_5": 0.3084,

            "CUST_ID": 100100,

            "probability_of_cluster_4": 0.4691,

            "'2'": 0.2224,

            "CLUSTER_ID": 4

        },

        {

            "probability_of_cluster_5": 0.1115,

            "CUST_ID": 100200,

            "probability_of_cluster_4": 0.2713,

            "'2'": 0.6172,

            "CLUSTER_ID": 2

        },

        ……

        {

            "probability_of_cluster_5": 0.3974,

            "CUST_ID": 104498,

            "probability_of_cluster_4": 0.4256,

            "'2'": 0.177,

            "CLUSTER_ID": 4

        },

        {

            "probability_of_cluster_5": 0.273,

            "CUST_ID": 104499,

            "probability_of_cluster_4": 0.4102,

            "'2'": 0.3168,

            "CLUSTER_ID": 4

        }

    ]

}

SQL統合の永続表:

永続データ構造を作成するには、2つの異なる方法があります: 最新のデータにアクセスするための動的ビュー(CUST_DF_VIEW)、およびデータのスナップショットを取得するためのマテリアライズド表(CUST_DF_CLEAN)です。

例3-4 動的ビューを使用した永続データ構造の作成

  • 次のコードを使用してビューを作成
    ore.drop(view="CUST_DF_VIEW")
    ore.create(CUST_DF,view="CUST_DF_VIEW")
  • 次のSQL問合せを使用して、KM_PRED_VIEWという名前のビューを作成します。 このビューは、既存のビューCUST_DF_VIEWに基づいてデータを動的にスコアリングします。
    CREATE OR REPLACE VIEW KM_PRED_VIEW AS
      SELECT CUST_ID, CLUSTER_ID(CUST_CLUSTER_MODEL_ERE USING *) AS CLUSTER_ID, round (CLUSTER_PROBABILITY (CUST_CLUSTER_MODEL_ERE USING *),3) AS PROB
      FROM CUST_DF_VIEW;
  • 次のコードを使用して、動的スコアリング・ビュー'KM_PRED_VIEW'の最初の20行を表示
    select * from KM_PRED_VIEW
    where rownum < 21;

    出力が次のように表示されます。


    このイメージは、動的スコアリング・ビュー'KM_PRED_VIEW'の最初の20行を示しています

例3-5 マテリアライズド表を使用した永続データ構造の作成

  • 次のコードを使用して、CUST_DF_CLEANという名前の表を作成し、クリーン・データをデータベースに格納します。
    ore.drop(table="CUST_DF_CLEAN")
    ore.create(CUST_DF_CLEAN,table="CUST_DF_CLEAN")
  • 次のコードを使用して、KM_SCORE_TABLEという名前の表を作成します。この表には、CUST_DF_CLEAN表のデータに基づいてスコアリング結果の静的スナップショットが格納されます。
    DROP TABLE KM_SCORE_TABLE;
     
    CREATE TABLE KM_SCORE_TABLE AS
      SELECT CUST_ID,
             CLUSTER_ID(CUST_CLUSTER_MODEL_ERE USING *) AS CLUSTER_ID,
             round(CLUSTER_PROBABILITY (CUST_CLUSTER_MODEL_ERE USING *),3) AS PROB
      FROM CUST_DF_CLEAN;
  • スコアリング・スナップショット表の最初の10行を表示するには、次のコードを使用します。
    select * from KM_SCORE_TABLE where rownum <= 10;

    出力が次のように表示されます。


    この図は、スコアリング・スナップショット表の最初の10行を示しています。

  • スコアリングにSQLインタフェースを使用し、OMLノートブックを使用して結果をビジュアル化します。

    次のコードを使用して、表を問い合せ、予測にCLUSTER_SET関数を適用し、XML解析を使用してモデル出力から詳細を抽出します。

    SELECT CUST_ID,
           CLUSTER_ID,
           ROUND(PROB*100,0) PROB_PCT,
           RTRIM(TRIM(SUBSTR(OUTPRED."Attribute1",17,100)),'rank="1"/>') FIRST_ATTRIBUTE,
           RTRIM(TRIM(SUBSTR(OUTPRED."Attribute2",17,100)),'rank="2"/>') SECOND_ATTRIBUTE,
           RTRIM(TRIM(SUBSTR(OUTPRED."Attribute3",17,100)),'rank="3"/>') THIRD_ATTRIBUTE
    FROM (SELECT CUST_ID, S.CLUSTER_ID, PROBABILITY PROB,
                 CLUSTER_DETAILS(KM_CLUSTERING_MODEL USING T.*) DETAIL
          FROM (SELECT V.*, CLUSTER_SET(KM_CLUSTERING_MODEL, NULL, 0.2 USING *) PSET
                FROM CUST_DF_KM V
                WHERE cust_id = ${CUST_ID ='101362','101362'|'102087'| '100456'}) T,
                      TABLE(T.PSET) S
                ORDER BY 2 DESC) OUT,
                XMLTABLE('/Details'
                          PASSING OUT.DETAIL
                          COLUMNS
                          "Attribute1" XMLType PATH 'Attribute[1]',
                          "Attribute2" XMLType PATH 'Attribute[2]',
                          "Attribute3" XMLType PATH 'Attribute[3]') OUTPRED

    出力が次のように表示されます。


    この図は、XML解析を使用したモデル出力の予測を示しています。