Slide 1

Slide 1 text

― GPUもクラウドも不要 ― ベクトル化を使った 意味検索を、 簡単に アプリケーションに搭載できる 時代になっていた件。 Tech RAMEN 2024 Conference 7/26-27 旭川市大雪クリスタルホール

Slide 2

Slide 2 text

Agenda search ベクトル検索とは アプリケーションへの組み込み まとめ .NET プラットフォームを例に 1 2 3 語句の一致ではなく、”意味” で検索

Slide 3

Slide 3 text

ベクトル検索とは What’s vector search?

Slide 4

Slide 4 text

ベクトル検索とは What’s vector search? ▪ 検索対象のテキスト群の中から、検索語句と “意味” が近いテキストを探し出す技法 ▪ 字句の一致に依らないため、検索語句と字句 が一致しなくても、意味が近いテキ ストが検索にヒットする Vector Search ※ベクトル化・ベクトル検索はテキストデータだけでなく画像などに対しても適用される技術ですが、ここではテキスト検索に対象を絞ってお話します。

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

アプリケーションへの組み込み Integration to applications

Slide 10

Slide 10 text

アプリに意味検索を内蔵できてしまう! You can integrate semantic search to your apps! CPU だけで動作 GPU 不要 クラウドサービス不要 専用データベース不要 外部プロセス不要 .NET の場合 C# や VB、F# など .NET search アプリケーション内のみで、 ベクトル検索の実装と実行が完結! NuGet パッケージ を参照 “SmartComponents.Loc alEmbeddings” 2024.3.12 初版公開

Slide 11

Slide 11 text

具体的な実装手順 Instruction steps to do it 1 SmartComponents.LocalEmbeddings NuGet パッケージを参照します 2 すると LocalEmbedder というクラスが使えるようになります 3 LocalEmbedder クラスの Embed メソッドに文字列を渡すと、その文字列の 意味に基づくベクトルである Embedding オブジェクトが返されます 4 こうして生成したベクトル同士について、Similarity メソッドを 呼び出すと、”意味の近さ” が 0.0~1.0 の数値で返されます

Slide 12

Slide 12 text

実際のコード (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);

Slide 13

Slide 13 text

Demonstration Live Coding

Slide 14

Slide 14 text

EmbeddingI1 EmbeddingI8 EmbeddingF32 ベクトルのサイズ Size of vector element ▪ SmartComponents.LocalEmb eddings には 3 種類のベクトル型 が用意されている ▪ たった 1 ビットの EmbeddingI1 で も、けっこう良い感じで動作する! 384次元の単精度浮動小数点 1,536 バイト 384次元の1バイト整数+単精度浮動小数点 388 バイト 384次元の1ビット 48 バイト

Slide 15

Slide 15 text

カスタマイズ Customize ▪ 機械学習モデルは既定で bge-micro-v2 が使われる – NuGet パッケージ参照によるビルドスクリプトによって、自動でインター ネット上 (Hugging Face) からダウンロードされる – ONNX (Open Neural Network Exchange) フォーマット – ファイルサイズ 17 MB 弱 – オプション構成で他のモデルを使用可能

Slide 16

Slide 16 text

実際の事例 Example Awesome Blazor Browser v2 – .NET 8 Blazor Server アプリケーション – https://awesome-blazor-browser.azurewebsites.net/ – “Deep Learning” とかで検索すると、”Deep” も “Learn” も含 まれていなくても、関係しそうな項目がヒットする

Slide 17

Slide 17 text

応用のアイディア Ideas ▪ ちょっとしたところにでもカジュアルに 意味検索を使用できる – 例) コンボボックスやサジェストボックスの選択肢候補の 絞り込み – 外部ネットワーク接続がなくても機能する ▪ アイディア次第で Game Changer になり得る? Any Ideas?

Slide 18

Slide 18 text

課題 Issues この方法で日本語のテキスト をベクトル化できていない – NICT BERT など、日本語をベクトル化 できるモデルは各種ある – しかしモデルサイズが大きすぎたり GPU 必須だったり ONNX 形式で配付 されていなかったり – 結局、まだ試せていない Awesome Blazor Browser では、 検索語句と字句が一致するアイテム が、ヒットしないことがあった – 新しい固有名詞 (“MAUI” とか) に弱い印象 – 字句の一致による検索結果と併用すべきかも

Slide 19

Slide 19 text

まとめ Conclusion

Slide 20

Slide 20 text

▪ 公開されているライブラリのお陰で、ベクトル検索 をアプリケーション内に実装するのは、驚くほど簡 単になっていた – 大規模なテキストを対象にする場合は、さすがに外部サービスを 利用したほうがよいのかも (Oracle 23ai の AI vector Search とか?) – とはいえ、SmartComponents.LocalEmbeddings でも、外部 に Redis を使うことで、より大規模な意味検索を実装可能 ▪ よりカジュアルに、意味検索をアプリ ケーションに搭載できる時代になっていた – 今回は .NET プラットフォームの話でしたが、きっと他の言語やプ ラットフォームでも同様なライブラリがあるのでしょう、と想像し ている Conclusion まとめ

Slide 21

Slide 21 text

Thank you! ありがとうございました! Learn, Practice, Share.