24 ポイント 投稿者 GN⁺ 2024-04-18 | 1件のコメント | WhatsAppで共有

アプリ開発者のための埋め込み活用ガイド

  • ベクトル埋め込みは多様な入力に対する類似度測定に効果的なため、検索や推薦機能に適している。フランス語や日本語のような別の言語でもうまく機能する。
  • 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件のコメント

 
GN⁺ 2024-04-18
Hacker News の意見

Hacker News コメント要約

RAGモデルを活用した文書埋め込みと類似度検索の手軽さ

  • sentence-transformersfaiss ライブラリを使えば、文書埋め込みと類似度検索を簡単に実装できる
  • ニューヨーク・タイムズの推薦システムより優れた性能を示せれば、面白いプロジェクトになり得る
  • James Briggs の YouTube チャンネルで関連内容がわかりやすく説明されている

埋め込みの基本概念の理解

  • AI/ディープラーニングがなくても、単語に固有のインデックスを付与し、頻度に応じて値を累積する方式で埋め込みを作ることができる
  • コサイン類似度などを活用して類似度検索も可能
  • ディープラーニングベースの埋め込みは、こうした基本概念の上に単語/トークンのフィルタリング、同義語処理などの機能が追加されたもの

埋め込み生成プロセスに関する詳細説明の不足

  • 記事では埋め込みの生成過程について They're a bit of a black box とだけ述べており、詳しい説明はしていない
  • 自分で単語ベクトルを作ってみたり、Word2Vec などの手法を理解したりすることが役に立つ可能性がある

同音異義語処理の難しさ

  • 同音異義語のために、検索結果が意図しないものになる場合がある(例: "king" で検索すると ruler(定規)アイコンが出てくるなど)
  • 関連アイコンを見つけられる利点とともに、面白い挑戦課題にもなり得る

ベクターストアがなくても埋め込みは活用可能

  • 大容量データの本番環境ではレイテンシなどの理由でベクターストアが重要だが、トイプロジェクト程度なら Numpy などで簡単に実装できる
  • Numpy の @ 演算子を使い、正規化したクエリベクトルとレコード行列の内積を求める形で類似度を計算できる

ローカル環境で埋め込みロジックを実行する方法

  • OpenAI API に依存せず、ローカル環境やデータベース上で直接埋め込みを生成する方法への疑問が提起されている

技術文書作成における埋め込み活用の可能性

  • ChatGPT 登場以降、技術文書の執筆者の間で、セマンティック検索ツールとして活用できる可能性について活発な議論がある
  • 文書作成に必要なリサーチ段階で、効率向上に役立つ可能性がある

埋め込みの保存と活用方法

  • 埋め込みを生成して保存しておき、必要なときに読み込んで使うのが一般的
  • 単純なケースでは、埋め込みをそのまま配列などとして渡して使うこともできる
  • 埋め込みの保存が難しい部分だが、特殊なデータベースが必要というわけではなく、SQLite の BLOB などでも可能
  • 埋め込みが「期限切れ」になることはない

AI入門開発者向けの背景知識説明の不足

  • 記事では埋め込みやベクターデータベースなどの概念説明なしに、すぐ使い方へ進んでいる
  • AI に関心のあるアプリ開発者にとって良い出発点を探している人には、関連概念の紹介が必要だったように見える