データベース (データストア) 内で AI に関連する機能の利用が様々なデータベース時で実施することができるようになっています。
私が確認した範囲でのデータベース (またデータベースに関連するサービス) になりますが、どのように AI の機能を利用することができるのかをまとめておきたいと思います。
Contents
SQL Server / Azure SQL
Machine Learning (ML) Services
対象: SQL Server 2017 以降 / Azure SQL Managed Instance (2016 は R のみ実行可能)
Machine Learning Services という機能が提供されています。
当初の実装としては、sp_execute_external_script を使用してデータベース内で Python または R のスクリプトを実行するというものになっていました。
SQL Server 2019 以降 (Azure SQL は使用不可) であれば SQL Server 言語拡張 として Java / C# (または言語拡張のフレームワークに即して実装した他の言語) を実行することも可能となりました。
ML Services で提供されている機能となっていますが、T-SQL 以外の言語を DB 上で動作させ、データに一番近い場所で処理を実施するというのが基本的な活用方法となるのではないでしょうか。
類似の機能として、SQL CLR がありますが、 SQL Server 言語拡張機能と SQL CLR を比較する で機能の比較が行われています。
PREDICT 関数
対象: SQL Server 2017 以降 / Azure SQL Database / Azure SQL Managed Instance / Azure Synapse Analytics
SQL Server 2017 以降は PREDICT 関数 が追加され、事前に構築された機械学習モデルを使用して値の予測 / スコアリングを行うことができます。この機能は ネイティブスコアリング と呼ばれています。
ML Services は機能として明示的にインストールをしないと使用することができませんが、PREDICT 関数は SQL Server にネイティブに統合されているため、機能を使用しなくても使用することができます。(モデルのサイズは 100MB / 予測値と返せるのは単一値となります)
使用可能なモデルの形式については サポートされているモデル に記載されていますが、環境によって異なります。
RevoScale モデル (RevoScaleR / revoscalepy でトレーニングしたモデル) と、ONNX モデルの 2 種類のモデルを使用することができ、事項環境によってどちらのモデルが使用できるか異なります。
ONNX モデルのサポートについては、最初にサポートされたのが Azure SQL Edge となるため、モデルの作成方法の基本的な流れについては、次のドキュメントから確認することができます。
現状、SQL Server は RevoScale モデルしか使用することができませんが、ONNX モデルのほうが一般的かと思いますので、今後のバージョンで SQL Server でも ONNX モデルがサポートされると嬉しいですね。
sp_invoke_external_rest_endpoint
対象: Azure SQL Database / Azure SQL Managed Instance (Private Preview)
機械学習の機能というわけではありませんが、機能として実装されていないものを外部サービスで補強するものとして、sp_invoke_external_rest_endpoint があります。
これは、Azure のサービスの REST エンドポイントへのアクセスを行うことがストアドプロシージャとなり、Azure OpenAI (AOAI) のエンドポイントに対してもアクセスができます。
活用方法については、次のドキュメントで解説が行われています。
- Azure SQL Database を使用したインテリジェント アプリケーション
- Vector Similarity Search with Azure SQL database and OpenAI
- Unleashing the Potential of Generative AI in Azure SQL Database
SQL Database 単体では埋め込み (Embedding) に必要となるデータのベクター化を実施することができませんが、Azure OpenAI の REST エンドポイント経由で API を使用することで、データのベクターの生成を行うことができます。
VECTOR_DISTANCE 関数
対象: Azure SQL Database (Private Previw)
ベクター化された値の類似性を確認するには距離を測定する必要がありますが、ベクター値の距離を測定するための関数として VECTOR_DISTANCE 関数を使用することができます。
現状、Private Preview 中であり、関数の詳細のドキュメントについては公開されていないのですが、次の記事から基本動作を確認することができます。
距離の測定方法としては cosine / euclidean / dot の 3 種類で測定することができます。
sp_invoke_external_rest_endpoint を使用してデータのベクター化を行い、VECTOR_DISTANCE を使用してデータの類似性を確認するというのが基本的なユースケースになるのではないでしょうか。
Azure Database for PostgreSQL Flexible Server
pgvector 拡張機能
ベクトル類性検索として pgvector を使用することができます。
利用できる機能としては次のような内容となるのでしょうか。
- vector データ型
- ベクトル演算子
- ベクトル関数
azure_ai 拡張機能
「azure_ai 拡張機能」を使用することで、Azure AI サービス (Azure OpenAI / Azure Cognitive Services / Azure Machine Learning) を呼び出すことができます。
前述の pgvector はベクトル化を行うことはできませんが、Azure AI 拡張機能を使用して、AOAI を呼び出すことで、ベクトル化を行うことができます。(AI の機能の中でもベクトル化だけであれば azure_local_ai 拡張機能でも実現できるようです)
azure_local_ai 拡張機能
azure_ai 拡張機能は Azure AI サービスを呼び出すことで AI の機能を使用することになりますが、azure_local_ai は外部サービスと通信をすることなく、データベース内で AI に関連する機能を使用する方法となります。
multilingual-e5-small がインスタンス内にデプロイされ、そのモデルを azure_local_ai 経由で使用することでデータベース内でのAI 利用を実現する機能となるようです。
Azure Cosmos DB
ベクトルデータベース
Cosmos DB でもベクトルデータベースの機能を使用することができ NoSQL API / MongoDB API / PostgreSQL の利用形態で埋め込みに関しての機能を使用することができます。
- ベクトル データベース
- Azure Cosmos DB for NoSQL におけるベクトル検索 (プレビュー)
- Azure Cosmos DB for MongoDB 仮想コアのベクトル ストア
- Azure Cosmos DB for PostgreSQL で pgvector を有効にして使用する方法
NoSQL API について確認をしているのですが、NoSQL では、基本的な構成要素としては次のような内容となるのではないでしょうか。
- ベクターストア
- ベクトルインデックス
- ベクトル検索
通常のベクトル量子化の他に、DiskANN を使用することができるのがデータをベクター化する際の特徴となりそうですね。
しばやん先生の Azure Cosmos DB for NoSQL でサポートされた Vector Search (Preview) を試した で詳しく解説をされていますので、後で熟読させていただきたいと思います。
Microsoft Fabric
Fabric の AI サービス
Fabric でも AI サービスを使用することができます。
AI サービスの利用方法としては、次の 2 種類があり、Fabric 内に含まれている AI モデルを使用する方法と、個別に展開した Azure サービスを利用する方法があります。
Spark 系の機能から、AI サービスを呼び出すことになることになるかと思いますが、AOAI で使用されているモデル / 機能を使用することで、Fabric で保持しているデータを使用して AI によるデータ活用を行うことが可能となります。
Google Cloud Spanner
Spanner でも AI 関連の機能を利用することができるようですね。
Spanner Vertex AI インテグレーション / ベクトル検索が特徴的な機能となるのでしょうか。
チュートリアルでは「textembedding-gecko」のモデルを DB 内に登録してベクトル化を行っており、ベクトル化についても Google Cloud で完結した形で実施できるようですね。
Oracle Database 23ai
Oracle Database 23ai では AI Vector Search が追加されています。
どのような機能なのかの確認については次の記事が参考になりました。
- Oracle Database 23ai FreeとAPEXでRAGを使った生成AIアプリをローコード開発してみた (事前準備編)
- [Oracle Cloud]インポートしたONNXフォーマットモデルでOracle Database 23ai表データをEmbeddingしてみた。(2024/05/06)
- Embedding Machine Learning Models in the Oracle Database: Create an ONNX model
- Embedding Machine Learning Models in the Oracle Database: Create an ONNX model
公式のドキュメントとしては次のようなドキュメントを確認しておくとよさそうでした。
モデルについては ONNX のモデルを使用することになるようですね。
omlutils パッケージに事前トレーニング済みのモデルが含まれており、そのモデルを使用することもできるようです。