PREDICT を使用した機械学習モデルのスコア付けScore machine learning models with PREDICT

Synapse SQL には、使い慣れた T-SQL 言語を使用して機械学習モデルをスコア付けする機能が用意されています。Synapse SQL provides you the capability to score machine learning models using the familiar T-SQL language. T-SQL PREDICT を使用すると、履歴データでトレーニングされた既存の機械学習モデルを、ご自分のデータ ウェアハウスのセキュリティで保護された境界内に持ち込んでスコア付けすることができます。With T-SQL PREDICT, you can bring your existing machine learning models trained with historical data and score them within the secure boundaries of your data warehouse. PREDICT 関数によって、入力として ONNX (Open Neural Network Exchange) モデルとデータが受け取られます。PREDICT function takes an ONNX (Open Neural Network Exchange) model and data as inputs. この機能により、重要なデータをスコアリングのためにデータ ウェアハウスの外部に移動する手順が不要になります。This feature eliminates the step of moving valuable data outside the data warehouse for scoring. これは、データ プロフェッショナルが使い慣れた T-SQL インターフェイスを使用して機械学習モデルを簡単にデプロイできるようにするだけでなく、タスクに適切なフレームワークを使用してデータ サイエンティストとシームレスに共同作業できるようにすることを目的としています。It aims to empower data professionals to easily deploy machine learning models with the familiar T-SQL interface as well as collaborate seamlessly with data scientists working with the right framework for their task.

注意

現在、この機能は SQL オンデマンドではサポートされていません。This functionality is currently not supported in SQL on-demand.

この機能には、モデルが Synapse SQL の外部でトレーニングされている必要があります。The functionality requires that the model is trained outside of Synapse SQL. モデルを構築したら、それをデータ ウェアハウスに読み込んで、T-SQL PREDICT 構文でスコア付けし、データから分析情報を得ます。After building the model, load it into the data warehouse and score it with the T-SQL Predict syntax to get insights from the data.

predictoverview

モデルのトレーニングTraining the Model

Synapse SQL では、事前トレーニング済みのモデルが想定されています。Synapse SQL expects a pre-trained model. Synapse SQL で予測を実行するために使用される機械学習モデルをトレーニングするときは、次の点に留意してください。Keep the following factors in mind when training a machine learning model that is used for performing predictions in Synapse SQL.

  • Synapse SQL でサポートされているのは ONNX 形式のモデルのみです。Synapse SQL only supports ONNX format models. ONNX は、さまざまなフレームワーク間でモデルを交換して相互運用性を実現できるオープンソース モデル形式です。ONNX is an open-source model format that allows you to exchange models between various frameworks to enable interoperability. 既存のモデルを ONNX 形式に変換するには、それをネイティブにサポートしているフレームワークか、変換パッケージを利用できるフレームワークを使用します。You can convert your existing models to ONNX format using frameworks that either support it natively or have converting packages available. たとえば、sklearn-onnx パッケージでは、scikit-learn モデルが ONNX に変換されます。For example, sklearn-onnx package convert scikit-learn models to ONNX. ONNX GitHub リポジトリによって、サポートされているフレームワークと例のリストが提供されます。ONNX GitHub repository provides a list of supported frameworks and examples.

    トレーニングに自動 ML を使用している場合は、enable_onnx_compatible_models パラメーターが TRUE に設定されていることを確認し、ONNX 形式モデルを生成します。If you are using Automated ML for training, make sure to set the enable_onnx_compatible_models parameter to TRUE to produce an ONNX format model. 自動機械学習ノートブックには、AutoML を使用して ONNX 形式の機械学習モデルを作成する方法の例が示されています。Automated Machine Learning Notebook shows an example of how to use AutoML to create a machine learning model of ONNX format.

  • 入力データに対しては、次のデータ型がサポートされています。The following data types are supported for the input data:

    • int、bigint、real、floatint, bigint, real, float
    • char、varchar、nvarcharchar, varchar, nvarchar
  • スコアリング データは、トレーニング データと同じ形式である必要があります。The scoring data needs to be in the same format as the training data. 多次元配列などの複合データ型は、PREDICT ではサポートされていません。Complex data types such as multi-dimensional arrays are not supported by PREDICT. そのため、トレーニングでは、すべての入力を含む単一の配列を渡すのではなく、モデルの各入力がスコアリング テーブルの 1 つの列に対応していることを確認してください。So, for training make sure that each input of the model corresponds to a single column of the scoring table instead of passing a single array containing all inputs.

  • モデル入力の名前とデータ型が、新しい予測データの列名とデータ型と一致していることを確認します。Make sure that the names and data types of the model inputs match the column names and data types of the new prediction data. オンラインで入手できるさまざまなオープンソース ツールを使用して ONNX モデルを視覚化すると、デバッグにさらに役立ちます。Visualizing an ONNX model using various open-source tools available online can further help with debugging.

モデルを読み込むLoading the model

モデルは、16 進数の文字列として Synapse SQL ユーザー テーブルに格納されます。The model is stored in a Synapse SQL user table as a hexadecimal string. モデルを識別するために、ID や説明などの追加の列をモデル テーブルに追加することができます。Additional columns such as ID and description may be added in the model table to identify the model. モデル列のデータ型として varbinary(max) を使用します。Use varbinary(max) as the data type of the model column. モデルの格納に使用できるテーブルのコード例を次に示します。Here is a code example for a table that can be used for storing models:

-- Sample table schema for storing a model and related data
CREATE TABLE [dbo].[Models]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Model] [varbinary](max) NULL,
    [Description] [varchar](200) NULL
)
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    HEAP
)
GO

モデルが 16 進数の文字列に変換され、テーブル定義が指定されたら、COPY コマンドまたは Polybase を使用して、モデルを Synapse SQL テーブルに読み込みます。Once the model is converted to a hexadecimal string and the table definition specified, use the COPY command or Polybase to load the model in the Synapse SQL table. 次のコード サンプルでは、Copy コマンドを使用してモデルを読み込みます。The following code sample uses the Copy command to load the model.

-- Copy command to load hexadecimal string of the model from Azure Data Lake storage location
COPY INTO [Models] (Model)
FROM '<enter your storage location>'
WITH (
    FILE_TYPE = 'CSV',
    CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<enter your storage key here>')
)

モデルのスコアリングScoring the model

モデルとデータがデータ ウェアハウスに読み込まれたら、T-SQL PREDICT 関数を使用してモデルをスコア付けします。Once the model and data are loaded in the data warehouse, use the T-SQL PREDICT function to score the model. 新しい入力データが、モデルの構築に使用したトレーニング データと同じ形式であることを確認します。Make sure that the new input data is in the same format as the training data used for building the model. T-SQL PREDICT によって、モデルと新しいスコアリング入力データの 2 つの入力が受け取られ、出力用の新しい列が生成されます。モデルは、変数、リテラル、またはスカラー sub_query として指定できます。T-SQL PREDICT takes two inputs: model and new scoring input data, and generates new columns for the output.The model can be specified as a variable, a literal or a scalar sub_query. WITH common_table_expression を使用して、データ パラメーターの名前付き結果セットを指定します。Use WITH common_table_expression to specify a named result set for the data parameter.

次の例は、予測関数を使用したサンプル クエリを示しています。The example below shows a sample query using prediction function. 予測結果を含む Score という名前の追加の列と、データ型 float が作成されます。An additional column with name Score and data type float is created containing the prediction results. すべての入力データ列と出力予測列が、SELECT ステートメントで表示できるようになります。All the input data columns as well as output prediction columns are available to display with the select statement. 詳細については、「PREDICT (Transact-SQL)」を参照してください。For more details, see PREDICT (Transact-SQL).

-- Query for ML predictions
SELECT d.*, p.Score
FROM PREDICT(MODEL = (SELECT Model FROM Models WHERE Id = 1),
DATA = dbo.mytable AS d) WITH (Score float) AS p;

次のステップNext steps

PREDICT 関数の詳細については、「PREDICT (Transact-SQL)」を参照してください。To learn more about the PREDICT function, see PREDICT (Transact-SQL).