AIに興味のあるアプリ開発者のための良い出発点、Embeddings
(bawolf.substack.com)アプリ開発者のための埋め込み活用ガイド
- ベクトル埋め込みは多様な入力に対する類似度測定に効果的なため、検索や推薦機能に適している。フランス語や日本語のような別の言語でもうまく機能する。
- Pgvectorは埋め込みを保存してクエリできるPostgres拡張であり、新しいサービスを追加せずにSQLロジックと埋め込み演算を組み合わせられるため強力。
- LLMとは異なり、埋め込みの利用は一般的な決定論的コードに近い感覚がある。
アイコン検索および推薦プロジェクトの開発
- Pgvectorのセットアップ後、アイコンデータを埋め込みベクトルとしてエンコードする戦略を作成。
- OpenAIの
text-embedding-3-smallモデルを使用。 - Cosine similarityで検索語と各アイコン埋め込みの間の類似度を測定。
- 埋め込み検索にアイコンセットのフィルタリングなどのビジネスロジックを組み合わせる。
- 検索語に対するアイコンクリックデータを活用したランキングアルゴリズムの例を提示。
- 選択されたアイコンと類似したアイコンを推薦するために埋め込み比較を活用。
実装方針の要約
- ベクトルDBとしてpgvector/Postgresを選択。MongoDBなど他の選択肢もある。
- Typescriptで開発し、drizzle-ormを使用。ほかの言語やフレームワーク向けライブラリも豊富。
- アプリはNeonにホスティング。fly.io、SupabaseなどのマネージドDBホスティングサービスも活用可能。
- OpenAIの
text-embedding-3-small埋め込みモデルを使用。Huggingfaceリーダーボードで他のモデルも選べる。 - アイコン属性のうち検索関連性が高いものをkey-valueペアとして埋め込む。
- Cosine similarityを距離関数として使用。Pgvectorはl2 distance、inner productもサポート。
- 検索結果は上位50件に制限。距離範囲を使う場合は広めに取り、limitと併用するのが推奨。
GN⁺の意見
- ほとんどのプロジェクトでは、pgvectorのように既存DBへベクトル機能を追加する方式で十分そう。別個のベクトルDB導入は大規模サービスでこそ必要に見える。
- 埋め込み検索にビジネスロジックを自然に組み合わせられる点が大きな利点。SQLの強力さをそのまま活用できる。
- ランキングアルゴリズムにユーザーフィードバックデータを反映するアイデアが良い。検索精度を継続的に改善できそう。
- LLMに比べて埋め込みベースのサービスは動作が明確でデバッグもしやすく、実サービスへ適用しやすいように思える。
- さまざまなオープンソース埋め込みモデルが公開されているため、自前でモデル開発するのが難しい場合でも高品質な埋め込みを手軽に活用できる。
1件のコメント
Hacker News の意見
Hacker News コメント要約
RAGモデルを活用した文書埋め込みと類似度検索の手軽さ
sentence-transformersとfaissライブラリを使えば、文書埋め込みと類似度検索を簡単に実装できる埋め込みの基本概念の理解
埋め込み生成プロセスに関する詳細説明の不足
They're a bit of a black boxとだけ述べており、詳しい説明はしていない同音異義語処理の難しさ
ベクターストアがなくても埋め込みは活用可能
@演算子を使い、正規化したクエリベクトルとレコード行列の内積を求める形で類似度を計算できるローカル環境で埋め込みロジックを実行する方法
技術文書作成における埋め込み活用の可能性
埋め込みの保存と活用方法
AI入門開発者向けの背景知識説明の不足