📘

AlloyDB AIで構築するリコメンドエンジン

に公開

システム構成

AlloyDB AIは、データベース内部からGoogle Cloudの Vertex AI を直接呼び出す仕組みを持っています。

  • データの保存: AlloyDB (PostgreSQL互換)
  • 埋め込み (Embedding) 生成: Vertex AI (text-multilingual-embedding-002)
  • 高速検索アルゴリズム: ScaNN (Google独自の近傍検索アルゴリズム)

環境セットアップ

  1. 拡張機能の有効化
-- ベクトル演算用
CREATE EXTENSION IF NOT EXISTS vector;
-- Google AI 連携用
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
-- 高速検索 ScaNN 用
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
  1. 自動ベクトル化テーブルの作成
CREATE TABLE movies (
    movie_id INT PRIMARY KEY,
    title TEXT,
    overview TEXT,
    -- あらすじを自動でベクトル化 (768次元)
    embedding vector(768) GENERATED ALWAYS AS (
        embedding('text-multilingual-embedding-002', overview)
    ) STORED
);
  1. exampleデータのinsert
INSERT INTO movies (movie_id, title, overview) VALUES 
(1, 'インターステラ', '地球の寿命が尽きかけ、人類は居住可能な惑星を求めて宇宙の深淵へと旅立つ...'),
(2, '千と千尋の神隠し', '10歳の少女が不思議な世界へ迷い込み、名前を奪われながらも懸命に生きる...'),
(3, '君の名は。', '東京に住む少年と田舎町の少女が、眠っている間に体が入れ替わる不思議な体験をする...');
  1. ベクトル検索とリコメンドの実行
SELECT title, overview, 
       1 - (embedding <=> embedding('text-multilingual-embedding-002', '宇宙へ行くような壮大な冒険物語')::vector) AS similarity
FROM movies
ORDER BY similarity DESC
LIMIT 3;

※ データ量が増大した場合に備え、Google独自の高速検索アルゴリズム ScaNN を適用します。

CREATE INDEX movies_scann_idx ON movies
USING alloydb_scann (embedding)
WITH (num_leaves = 100, distance_measure = 'cosine');

まとめ

AlloyDB AIを利用することで、インフラの複雑性を排除しながら、強力なベクトル検索機能をSQLだけで実装できました。特に、Vertex AIとのシームレスな連携とScaNNによる高速な検索は、エンタープライズレベルのリコメンドエンジン構築において非常に強力な選択肢となります。

Discussion