セマンティック検索

今回、KandaSearchチームからもっともアピールしたいのがコミュニティ版でも利用できる**セマンティック検索**です。

セマンティック検索については、KandaSearchのウェブサイトの次のページでより詳しく説明しています。
・セマンティック検索とは
　[https://kandasearch.com/semantic](https://kandasearch.com/semantic)
・ドキュメント - セマンティック検索
　[https://kandasearch.com/doc/features/semantic](https://kandasearch.com/doc/features/semantic)

ここでは、ダイジェストでご紹介したいと思います。

## セマンティック検索って何？
セマンティック検索とは、単語はもちろん、話し言葉のような質問文を検索エンジンに投げると、その意味を理解して検索結果を返してくれる検索技術です。

例えば次のような例です。
・クエリ：「過去の経験から学ぶという意味の四字熟語は？」
　↓
　検索結果：「温故知新」

・クエリ：「電話をかける男性の画像」
　↓
　検索結果：電話をかける男性の写真やイラストを表示

・クエリ：「スマホ」
　↓
　検索結果：「...スマートフォン...」

1つ目の例については、これまでのキーワード検索技術では、温故知新の意味が書かれたドキュメント内に、クエリで指定したキーワードが入っていれば、検索結果に入るといった結果となるでしょう。
従来のキーワード検索では、前処理や類義語辞書、検索エンジンが持つあいまいさを処理する機能によってセマンティック検索の結果に近いものが出せるかもしれませんが、導入や維持のためにはかなりのコストが必要とされるはずです。実現のためのハードルはとても高く、また、表記ゆれに完全に対応するのは難しいのが現状です。

2つ目の例については、JPEGやPNGなどの画像データを対象にした場合、これまでのキーワード検索技術では検索は不可能です。画像とその説明をセットにしたテキストがある時に、その説明部分にクエリで指定した内容が入っていれば検索結果に表示されるでしょう。

3つ目の例はもっともシンプルな例です。これまでは、類義語辞書などを使ってヒットさせるようにする作業が必要でしたが、セマンティック検索ではそれらの作業は不要です。

## Apache Solrによるセマンティック検索
KandaSearchでは検索エンジンにApache Solrを使用しています。
そのApache Solrのバージョン9にて、 DenseVectorField フィールド型と、K近傍法（KNN）クエリーパーサーによる密ベクトルニューラル検索機能が追加されました。
Apache Solrではこれらを用いた検索方式を密ベクトル検索（Dense Vector Search）と呼んでいますが、これがセマンティック検索です。単にベクトル検索と呼ぶこともあります。
Apache Solrとベクトル計算されたドキュメントやクエリがあれば、すぐにセマンティック検索を行うことができます。

参考：Dense Vector Search :: Apache Solr Reference Guide
[https://solr.apache.org/guide/solr/9_0/query-guide/dense-vector-search.html](https://solr.apache.org/guide/solr/9_0/query-guide/dense-vector-search.html)

上記のページに、スキーマやコンフィグの説明やサンプル、ベクトルデータを使った検索手順が説明されていますので、是非ご覧になってください。

## ベクトル計算もできるの？
Apache Solrには、ドキュメントやクエリをベクトル値に変換する機能は搭載されていません。
ベクトル計算を行うためには、通常は外部のサービスを利用するか、自前でベクトル計算用のシステムを構築してベクトル計算を行います。
KandaSearchでは、Hugging faceに設定したKandaSearch用のモデルをエンドポイントとしてベクトル計算を行う「インデクシング用のEmbeddingsProcessorFactory」と「検索用のDenseVectorSearchComponent」のSolr用プラグインを標準でご提供しています。
少量のデータの追加や更新時のベクトル計算、検索時のクエリのベクトル計算であれば、他の外部のサービス等を利用することなくベクトル計算が可能で、シームレスにセマンティック検索を実行できます。
これらについては、後の投稿で詳しく説明したいと思います。

KandaSearchによるベクトル計算についての投稿を待ちきれない方は以下のページをご覧ください。
・ドキュメント - セマンティック検索
　[https://kandasearch.com/doc/features/semantic](https://kandasearch.com/doc/features/semantic)

## ChatGPTとKandaSearchのセマンティック検索との比較
セマンティック検索をベクトル検索ともいうという記述を行いましたが、「セマンティック検索ではベクトル検索を使っている」と表現することもできます。
ChatGPTのような生成AIでもベクトル検索技術を利用しています。

それでは、違いについてです。
まず、1つ目の違いは、生成機能の有無です。ChatGPTには生成機能があり、正解がない推論での生成が得意な一方、信頼できる知識を再現することができず、いわゆる「幻覚（hallucination）」を創出してしまう場合があります。ChatGPTの創出した結果が正しいかどうかを常に確認する必要があります。

2つ目の違いは知識の再現性です。上述したように、ChatGPTでは推論により生成するので幻覚を作り出してしまうことがあります。
一方、KandaSearchのセマンティック検索では、Apche Solrによりインデクシングされた、ユーザーが用意した**信頼できるドキュメント**（文章、画像、音楽、動画など）を検索対象としていますので、知識の再現性があります。

3つ目の違いはチャット機能の有無です。ChatGPTにはその名の通りチャットの機能があり、ChatGPTとの会話により、出力結果を自分が求めている内容に調整してゆくことができるのでとても便利ですが、検索には必須の機能ではありません。

生成AIチャットであるChatGPTではなくセマンティック検索エンジンを導入すべき場面をわかりやすく解説した動画を作成してYouTubeに公開しています。ぜひご覧ください。

[生成AIチャットとセマンティック検索エンジンを比較するのに擬人化してみたらわかりやすかった | AI Chat vs. Semantic Search Engines](https://www.youtube.com/watch?v=q_kPN6zImbY)
<iframe width="560" height="315" src="https://www.youtube.com/embed/q_kPN6zImbY?si=IOG9vkZR-6vvCOYy" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## セマンティック検索のデモ
KandaSearchチームでは、いろいろなシチュエーションでセマンティック検索を体験できるデモサイトをご提供しています。

### セマンティック検索デモサイト
- デモサイトトップ
[https://demo.rondhuit.com/](https://demo.rondhuit.com/)
- **ニュース記事検索**　https://demo.rondhuit.com/text-search
過去のニュース記事を自然なテキストで検索できます。コンテンツは日本語と英語で分かれています。適宜コンボボックスで切り替えて試してみてください。従来型のキーワード検索も可能ですので、セマンティックサーチとの違いを確認できます。
- **類似画像検索**　https://demo.rondhuit.com/image-search
スマホなどに保存されている写真やイラスト画像を元に、それと似た画像を検索できます。検索後は検索結果に表示された画像を元に次々に検索することもできます。
- **テキストによる画像検索**　https://demo.rondhuit.com/text-to-image
自然に書かれたテキストで画像を検索できます。たとえば、「車の上に猫がいる」「楽器を演奏する人たち」などと検索すると、それに近い内容が撮影された画像が検索できます。
- **慣用句検索**　https://demo.rondhuit.com/idioms-search
使いたい慣用句（四字熟語）をその意味から自然なテキストで検索できます。たとえば、「過去の経験から学ぶ」と検索すると「温故知新」が検索トップに表示されます。従来の辞書検索サービスでは得られない使い勝手を体験してください。従来型のキーワード検索も可能ですので、セマンティックサーチとの違いを確認できます。
- **小児科相談Q&A検索**　https://demo.rondhuit.com/pediatrics-search
小児科医院ウェブサイトのQ&Aコーナーを自然なテキストで検索できるようにしました。従来型のキーワード検索も可能ですので、セマンティックサーチとの違いを確認できます。
- **お好み車種検索**　https://demo.rondhuit.com/car-search
ネットに公開されている車のユーザーの声を集めて車種ごとに特徴をベクトル化しました。「家族で買い物に行くのにちょうどいい車」など、自由なテキストであなたに最適な車を見つけることができます。
- **Apache Solr のマニュアル検索**　https://demo.rondhuit.com/solr-manual
Apache Solr のマニュアルを検索できます。マニュアルは英語で書かれていますが、日本語版のデモでは多言語モデルを用いているため、「検索パラメータ」というような自然な日本語で英語のマニュアルを検索することが可能です。英語版のデモでは英語モデルを使っていますので、日本語版との性能の違いもご覧いただけます。
- **意匠・商標検索**　https://demo.rondhuit.com/patent-image-search
特許庁のダウンロードサイトから入手した約7万点（2023年7月頃）の意匠や商標のデータを検索対象にしたデモです。ご自身のデザインした企業ロゴ等が、既存のものと似ていないかどうかを、デザイン画像から直接検索できます。

### ベクトルサジェスター
- [https://kandasearch.com/contact](https://kandasearch.com/contact)
KandaSearchのお問い合わせページの「お問い合わせ内容」エリアに知りたいことを入力すると、KandaSearchの「よくある質問（FAQ）」コンテンツにセマンティック検索を行った結果がリアルタイムでサジェストされます。サジェスト機能とセマンティック検索を組みわせた実装例を体験できます。

## セマンティック検索のビジネスへの適用例
セマンティック検索を生かせる業務アプリケーションには、次のようなものがあります。

- **フォーラム検索、企業内検索、ナレッジマネジメント**
検索対象文書の専門性が高く、そのため文書が強い「意味（セマンティック）」を持つため、これらのシステムとセマンティック検索の親和性がとても高いと考えられます。さらに、データを個人が所有している、ファイルがばらばらに存在しているといった課題の解決を同時に行うことで、業務の効率化やコストダウンを図ることが可能です。
- **FAQ、マニュアル**
上記同様、検索対象文書の専門性が高く、そのため文書が強い「意味（セマンティック）」を持ちます。一方、検索者（製品ユーザーなど、社外の人間が想定される）は専門家ではない場合があるため、両者のボキャブラリー・ギャップが大きい可能性があります。そのため、キーワード検索では再現率が極端に低くなってしまう（検索漏れが多く発生する）ので、セマンティック検索が優位性を持ちます。
- **マルチモーダル検索**
画像to画像、テキストto画像、多言語間（日本語と英語間など）の検索を実現できます。意味で検索するため、クエリと検索対象文書が異なるオブジェクト種別でも問題なく検索が可能です。
- **探究学習や研究開発**
教育リソース（辞書・百科事典・教科書）や専門性の高い論文などをベクトル化＆インデクシングして、意味ベースの連想検索を実現すれば、学校や塾での探究学習や、企業・団体・大学での研究開発（R&D）での研究テーマを探す用途に適します。

セマンティック検索についてダイジェストでご紹介しました。