Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ベクトル化を使った意味検索を、簡単にアプリケーションに搭載できる時代になっていた件。

 ベクトル化を使った意味検索を、簡単にアプリケーションに搭載できる時代になっていた件。

生成系AIの進歩と並んで、意味に基づく検索を行なうベクトル検索が、気がつくと身近になっていました。クラウドサービスや GPU などを一切使わず、メモリとCPU による計算資源のみで、且つ理論に対する深い知識なしに、ベクトル検索を気軽にアプリケーションに内蔵させることができるようになっていたのです。
本トークでは .NET プラットフォーム上でベクトル検索を実装する実際のコードも紹介、意味に基づく検索は、今やカジュアルに活用できる時代になっていた、という知識のアップデートを皆さんと共有します。

jsakamoto

July 27, 2024
Tweet

More Decks by jsakamoto

Other Decks in Technology

Transcript

  1. ベクトル検索とは What’s vector search? ▪ 検索対象のテキスト群の中から、検索語句と “意味” が近いテキストを探し出す技法 ▪ 字句の一致に依らないため、検索語句と字句

    が一致しなくても、意味が近いテキ ストが検索にヒットする Vector Search ※ベクトル化・ベクトル検索はテキストデータだけでなく画像などに対しても適用される技術ですが、ここではテキスト検索に対象を絞ってお話します。
  2. ベクトル検索の仕組み How does it work? ▪ テキストの ”意味” を、ベクトル =

    数値 の配列で表現 – 意味が近いテキスト同士は、そのベクトル同士の “距離” も近 くなるなるように、テキストをベクトルに変換する – どんなテキストがどんなベクトルに変換・表現されるかは、機 械学習モデルを用いて変換を行なう ▪ 検索語句のベクトルと、検索対象のテキスト群 の各ベクトルとの “距離” を計算 ▪ 距離が近いものは意味が似ている = 検索にヒット Vector Text “Dog” Vector Text “Cat” Distance
  3. search ベクトル検索について説明を試みる Try to explain how does it work いぬ

    くま うま ひつじ すずめ はと ひこうき ヘリコプター じどうしゃ じてんしゃ みかん りんご たまねぎ ピーマン しいたけ ねこ
  4. ベクトル検索について説明を試みる Try to explain how does it work いぬ くま

    うま ひつじ すずめ はと ひこうき ヘリコプター じどうしゃ じてんしゃ みかん りんご たまねぎ ピーマン しいたけ ねこ
  5. ベクトル検索について説明を試みる Try to explain how does it work いぬ くま

    うま ひつじ すずめ はと ひこうき ヘリコプター じどうしゃ じてんしゃ みかん りんご たまねぎ ピーマン しいたけ ねこ
  6. アプリに意味検索を内蔵できてしまう! You can integrate semantic search to your apps! CPU

    だけで動作 GPU 不要 クラウドサービス不要 専用データベース不要 外部プロセス不要 .NET の場合 C# や VB、F# など .NET search アプリケーション内のみで、 ベクトル検索の実装と実行が完結! NuGet パッケージ を参照 “SmartComponents.Loc alEmbeddings” 2024.3.12 初版公開
  7. 具体的な実装手順 Instruction steps to do it 1 SmartComponents.LocalEmbeddings NuGet パッケージを参照します

    2 すると LocalEmbedder というクラスが使えるようになります 3 LocalEmbedder クラスの Embed メソッドに文字列を渡すと、その文字列の 意味に基づくベクトルである Embedding オブジェクトが返されます 4 こうして生成したベクトル同士について、Similarity メソッドを 呼び出すと、”意味の近さ” が 0.0~1.0 の数値で返されます
  8. 実際のコード (C#) Actual source code search var embedder = new

    LocalEmbedder(); var embeddingA = embedder.Embed("What’s up?"); var embeddingB = embedder.Embed("How are you doing?"); var similarity = embeddingA.Similarity(embeddingB);
  9. EmbeddingI1 EmbeddingI8 EmbeddingF32 ベクトルのサイズ Size of vector element ▪ SmartComponents.LocalEmb

    eddings には 3 種類のベクトル型 が用意されている ▪ たった 1 ビットの EmbeddingI1 で も、けっこう良い感じで動作する! 384次元の単精度浮動小数点 1,536 バイト 384次元の1バイト整数+単精度浮動小数点 388 バイト 384次元の1ビット 48 バイト
  10. カスタマイズ Customize ▪ 機械学習モデルは既定で bge-micro-v2 が使われる – NuGet パッケージ参照によるビルドスクリプトによって、自動でインター ネット上

    (Hugging Face) からダウンロードされる – ONNX (Open Neural Network Exchange) フォーマット – ファイルサイズ 17 MB 弱 – オプション構成で他のモデルを使用可能
  11. 実際の事例 Example Awesome Blazor Browser v2 – .NET 8 Blazor

    Server アプリケーション – https://awesome-blazor-browser.azurewebsites.net/ – “Deep Learning” とかで検索すると、”Deep” も “Learn” も含 まれていなくても、関係しそうな項目がヒットする
  12. 課題 Issues この方法で日本語のテキスト をベクトル化できていない – NICT BERT など、日本語をベクトル化 できるモデルは各種ある –

    しかしモデルサイズが大きすぎたり GPU 必須だったり ONNX 形式で配付 されていなかったり – 結局、まだ試せていない Awesome Blazor Browser では、 検索語句と字句が一致するアイテム が、ヒットしないことがあった – 新しい固有名詞 (“MAUI” とか) に弱い印象 – 字句の一致による検索結果と併用すべきかも
  13. ▪ 公開されているライブラリのお陰で、ベクトル検索 をアプリケーション内に実装するのは、驚くほど簡 単になっていた – 大規模なテキストを対象にする場合は、さすがに外部サービスを 利用したほうがよいのかも (Oracle 23ai の

    AI vector Search とか?) – とはいえ、SmartComponents.LocalEmbeddings でも、外部 に Redis を使うことで、より大規模な意味検索を実装可能 ▪ よりカジュアルに、意味検索をアプリ ケーションに搭載できる時代になっていた – 今回は .NET プラットフォームの話でしたが、きっと他の言語やプ ラットフォームでも同様なライブラリがあるのでしょう、と想像し ている Conclusion まとめ