コンテンツに移動
データベース

Cloud SQL for MySQL の類似検索により生成 AI アプリケーションを構築

2024年3月22日
Google Cloud Japan Team

※この投稿は米国時間 2024 年 3 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。

生成 AI によってさまざまな業界のアプリケーション開発に変革が起きており、開発者たちは、これまで不可能だったまったく新しいユーザー エクスペリエンスを構築しています。すでに Linear のようなお客様が、Google Cloud のデータベースを使用して AI 搭載の新しいアプリケーションを構築しています。先日 Google は、Cloud SQL for MySQL を使用し、任意の大規模言語モデル(LLM)で生成されたベクトル エンベディングをインデックス処理して検索することで、類似検索を実行できるようになったことを発表しました。Cloud SQL で、すでに使用しているのと同じ Cloud SQL for MySQL インスタンスにベクトルを保存し、厳密最近傍(KNN)検索または近似最近傍(ANN)検索を使用してベクトルストアに対して検索を行えます。

Cloud SQL for MySQL のベクトル検索は、Google のオープンソース ScaNN ライブラリに基づいて構築されており、複数の ANN インデックス タイプ(Tree-AH、Tree-SQ、自動チューニング付きブルート フォース)をサポートしています。Cloud SQL は、コサイン、L2、dot_product などの複数の距離測定をサポートしています。ベクトルストアと運用データを組み合わせることで、リアルタイム データで強化されたベクトル検索を活用し、より有意義で関連性の高いエクスペリエンスを実現できます。現在プレビュー中であるこの機能の使用方法を詳しく見ていきましょう。アクセスをリクエストするには、こちらのプレビュー フォームをご利用ください。

好みの電子書籍を選べるように利用者をサポートする、図書館システムの新しいウェブサイトを構築しているとします。ユーザーが好きな電子書籍名を伝えると、ウェブサイトはそのユーザーが気に入りそうな他のタイトルを探し出すようにします。あなたはウェブサイトのバックエンドを Cloud SQL for MySQL の新しい Enterprise Plus エディションにアップグレードしたばかりです。図書館は 24 時間いつでもサービスを利用する大都市の利用者を対象としているため、Enterprise Plus エディションの 99.99% の SLA による高可用性と最大 3 倍の読み取りスループットを確実に活用したいと考えていました。

このプロセスは、cloudsql_vector という新しい MySQL フラグを有効にすることから始まります。類似検索を使用するには、データをエンべディング(ベクトル)に変換し、そのベクトルをカタログ テーブルに保存する必要があります。次のセクションでは、以下の手順をわかりやすくご説明します。

  1. エンべディングの取得
  2. エンべディングの保存とインデックス処理
  3. 類似検索の実行

カタログ テーブルは library_catalog という名前で、書籍名、説明、利用可能な部数などの詳細が含まれているとします。図書館のカタログを更新して、現在利用可能なすべてのアイテムのベクトル エンベディングを含めたいと考えています。これらのベクトルを保存するための新しい列を追加できます。ベクトルデータ型の列を item_embedding と呼ぶことにしましょう。これを行うには、次のようにテーブルを更新します。

読み込んでいます...

次に、現在カタログにある各アイテムのベクトル エンべディングを生成します。これにはお好きな LLM を使用してください。たとえば、Vertex AI の事前トレーニング済みテキスト エンベディング モデルを使用して、カタログ内のアイテム説明に基づいてエンベディングを作成できます。以下の例では、textembedding-gecko@001 モデルを使用しています。

読み込んでいます...

次に、そのアイテムの行を更新して、新しいベクトル エンべディングを保存します。

読み込んでいます...

カタログ内のすべてのアイテムを更新したら、カタログにインデックスを追加して、カタログ内のアイテムに対して類似検索を簡単に実行できるようにします。次の 3 つのインデックス タイプをサポートしています。

  • Tree-SQ: デフォルトのアルゴリズム。必要なメモリが少なく、再起動時の永続性をサポートしているため、運用上のトイルを最小限に抑えることが可能です。また、Tree-AH と比較して圧縮が少ないため再現率がわずかに優れていますが、コンピューティング費用が若干高くなっています。
  • Tree-AH: わずかな運用上のオーバーヘッドと追加のメモリ費用が発生しますが、速度とコンピューティング効率を優先するアプリケーションに最適です。
  • Brute-Force: 速度が落ちますが、正確な距離測定が必要な場合に適しています。

また、インデックスを追加せずにベクトルに対してブルート フォース検索を実行し、最も近い最近傍(KNN)を取得することもできます。デフォルトでは、Tree-SQ インデックスを作成します。

読み込んでいます...

これで、利用者が図書館のウェブサイトにアクセスすると、現在貸し出し可能なアイテムのフィルタとともに、お気に入りの本に似た本の候補が表示されます。たとえば、このウェブサイトで次のクエリを実行して、利用者の好きな本に似たタイトルを取得できます。

読み込んでいます...

カタログ内のアイテムのうち最も近いものを正確に取得したい場合は、代わりに次のように検索します。

読み込んでいます...

これまでの説明は序の口にすぎません。以下の動画で実際に動作している様子をご覧ください。この例に倣うこともできますし、小売、医療、金融業界などの業界に合わせてカスタマイズすることも可能です。プレビュー版の試用にご興味がある場合は、こちらのフォームにご記入ください。Google からご連絡させていただきます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/hqdefault_DieQmKf.max-500x500.jpg

-エンジニアリング マネージャー Alex Joseph

-シニア プロダクト マネージャー Isabella Lubin

投稿先