❄️

Snowflake AI_EMBED 関数で実現するマルチモーダルベクトル検索

に公開

SNOWFLAKE WORLD TOUR TOKYO 2025

2025/9/11 - 12の2日間、Snowflake の国内最大のイベント『SNOWFLAKE WORLD TOUR TOKYO 2025』が開催されます!データ活用の最前線を是非体感しに来てください!私は『Snowflake Cortex AISQL を用いた高度な分析手法』というセッションで登壇させていただきます。AISQL の基本から応用までキャッチアップできますので是非ご登録いただければ嬉しいですー!(9/12の方がまだ空席がございます)

はじめに

Snowflake の新しい AI_EMBED 関数が Cortex AISQL に追加されました!従来の EMBED_TEXT_768 関数と EMBED_TEXT_1024 関数の後継として位置づけられていますが、最大の特徴は テキストと画像を同じ関数でベクトル化できる ことです。

従来の EMBED_TEXT 関数はテキストのベクトル化のみの対応で、画像のベクトル化は Snowpark Container Services などでマルチモーダル Embedding モデルをデプロイするなど別な手段を検討する必要がありました。その点 AI_EMBED なら SQL 一つでマルチモーダルなベクトル化を実現することができます。RAG やベクトル検索において、この統一されたアプローチはとても強力だと言えます。

Snowflake Cortex AISQL について

Snowflake Cortex AISQL は、SQL から直接 AI 機能を呼び出せる関数群です。例えば AI_COMPLETE 関数では、以下の通りテキストも画像も同じ関数で処理することができます。

-- テキストの処理
SELECT AI_COMPLETE('llama4-maverick', 'Snowflakeの特徴を教えてください');

-- 画像の処理
SELECT AI_COMPLETE('llama4-maverick', 'この画像について説明してください', TO_FILE('@image_stage', 'dog.jpeg'));

AI_COMPLETE関数の対象画像
AI_COMPLETE関数で処理する画像 (Google Gemini で生成)

-- テキストの処理結果
"Snowflakeは、クラウドベースのデータウェアハウスソリューションであり、以下のような特徴があります。 ..."
-- 画像の処理結果
この画像は、真っ白な毛並みと大きな目を持つ犬の顔をクローズアップした写真です。犬は口を開けており ...

この同一の関数でマルチモーダルな処理ができる点が、ベクトル化においても AI_EMBED 関数で実現されています。

従来のベクトル化手法の振り返り

AI_EMBED 関数を理解するために、まず従来のベクトル化手法について振り返ってみましょう。Snowflake では以前から以下のような Embedding 関数が提供されています:

  • EMBED_TEXT_768
  • EMBED_TEXT_1024

これらの詳細については、私の以前の記事「Snowflake のベクトル化は何を使えばいいのか? (Cortex LLM Embedding)」で詳しく説明しており、各モデルの日本語性能についても調査していますので是非ご覧ください。

繰り返しとなりますが、従来の手法では、テキストのベクトル化にはこれらの関数を使用し、画像のベクトル化が必要な場合は別のツールやサービスを利用する必要がありました。

AI_EMBED 関数の特徴

統一的なインターフェース

AI_EMBED 関数の最大の特徴は、テキストも画像も同じ関数で処理できることです。これにより以下のようなメリットがあります:

  • テキストや画像など、異なった種類のデータを処理するために複数の関数や手法を学ぶ必要がありません
  • 利用する Embedding モデルが異なる場合でも同一の関数で処理することが可能です
  • すべてのベクトル化処理が Snowflake 内で完結するため、データガバナンスの観点でも安全です
  • 従来の Embedding 関数と使い方がほぼ同じなので移行することも簡単です

利用できるモデル

AI_EMBED 関数では以下のモデルが利用可能です:

テキスト用モデル

  • snowflake-arctic-embed-l-v2.0
  • snowflake-arctic-embed-l-v2.0-8k
  • nv-embed-qa-4
  • multilingual-e5-large
  • voyage-multilingual-2

画像用モデル

  • voyage-multimodal-3

重要なのは、画像のベクトル化には voyage-multimodal-3 モデルのみが対応している点です。ちなみに手元で試してみたのですが、画像用モデルの voyage-multimodal-3 はテキストデータに対してもベクトル化することが可能でした。

モデルの特徴

各モデルの使い分けについて少し触れていきたいと思います:

  • snowflake-arctic-embed-l-v2.0-8k: 8,000トークンまでの長文に対応できるため、技術文書や長い記事の処理に最適です。対象のドキュメントによってはチャンク化などの前処理を省くことも期待できます
  • nv-embed-qa-4: 英語に特化したモデルで、日本語などのマルチリンガル対応していません
  • その他のモデル: マルチリンガル対応で、日本語も適切に処理できます

特に長文を扱う場合は snowflake-arctic-embed-l-v2.0-8k を、日本語を含むマルチリンガル環境では nv-embed-qa-4 以外のモデルを選択することが重要です。

ビジネス活用シーン

AI_EMBED 関数を活用できる代表的なビジネスシーンをご紹介します:

1. マルチモーダル検索システム
EC サイトにおいて、商品画像とテキスト説明の両方から類似商品を検索するシステムが構築できます。

2. コンテンツ管理システム
企業の CMS などにおいて、文書と図表を統一的に検索・分類できるシステムが実現できます。

3. カスタマーサポート
問い合わせ内容 (テキスト) と添付画像を統合的に分析し、適切な回答を提案するシステムを作ることができます。

4. RAG チャットボット
企業内で保持するテキストや画像に対して検索を行い、LLM の回答に企業ドメイン知識を組み込むことができます。

実際の使用例

テキストのベクトル化

基本的なテキストのベクトル化は以下のように実行できます:

-- テキストのベクトル化
SELECT AI_EMBED('snowflake-arctic-embed-l-v2.0-8k', 'Snowflake Summit 2025では新しい機能がたくさん発表されました');
-- テキストのベクトル化の結果
[0.001018,0.002565,-0.024353,0.004829, ...]

画像のベクトル化

画像データも同様にベクトル化できます:

-- 画像のベクトル化
SELECT AI_EMBED('voyage-multimodal-3', TO_FILE('@image_stage', 'dog.jpeg'));
-- 画像のベクトル化の結果
[-0.015381,0.008240,-0.012634,-0.024048, ...]

ベクトル類似度の計算

AI_EMBED 関数で生成されたベクトルは、コサイン類似度関数など Snowflake で用意されているベクトル類似度関数で比較できます。3つの基本パターンをご紹介します:

1. テキスト同士の類似度

-- テキスト同士の類似度計算
SELECT VECTOR_COSINE_SIMILARITY(
    AI_EMBED('snowflake-arctic-embed-l-v2.0', '今日はいい天気ですね'),
    AI_EMBED('snowflake-arctic-embed-l-v2.0', '本日は気候に恵まれた日です')
) as text_similarity;
-- テキスト同士の類似度計算の結果
0.8324767643

2. 画像同士の類似度

-- 画像同士の類似度計算
SELECT VECTOR_COSINE_SIMILARITY(
    AI_EMBED('voyage-multimodal-3', TO_FILE('@image_stage', 'cat.jpeg')),
    AI_EMBED('voyage-multimodal-3', TO_FILE('@image_stage', 'dog.jpeg'))
) as image_similarity;
-- 画像同士の類似度計算の結果
0.5069280956

3. テキストと画像の類似度

-- テキストと画像の類似度計算
SELECT VECTOR_COSINE_SIMILARITY(
    AI_EMBED('voyage-multimodal-3', '真っ白な毛並みと大きな目を持つ犬の顔のクローズアップ'),
    AI_EMBED('voyage-multimodal-3', TO_FILE('@image_stage', 'dog.jpeg'))
) as cross_modal_similarity;
-- テキストと画像の類似度計算の結果
0.6030817788

コサイン類似度は -1 から 1 の範囲で、1 に近いほど類似度が高いことを示します。

まとめ

AI_EMBED 関数は、Snowflake のベクトル化機能における重要なアップデートです。テキストと画像を同じ関数で処理できる統一性により、マルチモーダルな AI アプリケーションの開発がより簡単になりました。

従来の EMBED_TEXT_1024 関数などからの移行もしやすく、段階的に既存アプリケーションをアップグレードすることも可能です。

これからのデータワークロードでは、テキストと画像が混在するマルチモーダルなデータがさらに増加していくことが予想されます。AI_EMBED 関数を活用することで、そうした次世代のデータ活用基盤を効率的に構築できるのではないかと思います。

ぜひ皆さんも AI_EMBED 関数を使って、新しいビジネスの可能性を探ってみてください!

宣伝

SNOWFLAKE DISCOVER で登壇しました!

2025/4/24-25に開催されました Snowflake のエンジニア向け大規模ウェビナー『SNOWFLAKE DISCOVER』において『ゼロから始めるSnowflake:モダンなデータ&AIプラットフォームの構築』という一番最初のセッションで登壇しました。Snowflake の概要から最新状況まで可能な限り分かりやすく説明しておりますので是非キャッチアップにご活用いただければ嬉しいです!

以下リンクでご登録いただけるとオンデマンドですぐにご視聴いただくことが可能です。

生成AI Conf 様の Webinar で登壇しました!

『生成AI時代を支えるプラットフォーム』というテーマの Webinar で NVIDIA 様、古巣の AWS 様と共に Snowflake 社員としてデータ*AI をテーマに LTをしました!以下が動画アーカイブとなりますので是非ご視聴いただければ幸いです!

https://www.youtube.com/live/no9WYeLFNaI?si=2r0TVWLkv1F5d4Gs

X で Snowflake の What's new の配信してます

X で Snowflake の What's new の更新情報を配信しておりますので、是非お気軽にフォローしていただければ嬉しいです。

日本語版

Snowflake の What's New Bot (日本語版)
https://x.com/snow_new_jp

English Version

Snowflake What's New Bot (English Version)
https://x.com/snow_new_en

変更履歴

(20250717) 新規投稿
(20250726) モデルの使い分けについて補足を追加

Discussion