こんにちは、CTO室基盤課の岡崎雅則です!
本記事では、社内で実施した AI 活用事例の一環として、「セマンティック検索を活用した自主調査アンケートの検索」についてご紹介します。
はじめに
これまでの自主調査※アンケートの検索方法は、単純なキーワード検索が主流でした。
しかし、曖昧な言葉や表現のゆれがあると、目的のデータを見つけるのが難しいという課題がありました。
そこで今回、この課題を解決すべくセマンティック検索※を導入し、自然言語での精度向上に挑戦しました。
とはいえ、ただセマンティック検索しただけでは検索結果にノイズが多かったため、このあたりを解決するために再度LLMを使ってひと工夫してみました!
※自主調査
クライアントの依頼を受けないで調査会社が自主的に行う調査のこと。
当社では通常、クライアントからの依頼で調査をおこないますが、社内発で実施する調査を「自主調査」と呼んでいます。
※セマンティック検索
検索クエリや文書の意味を理解し、より関連性の高い結果を返す検索技術のこと。
キーワードによる検索とは異なり、あいまいな表現でも意味や文脈に基づくマッチングが可能になります。
参照:「ソフトバンクーAI用語集」
第0弾: 事前準備
まずは、これまで弊社で実施した自主調査のアンケートの各設問、選択仕事の回答数、出現率をあらかじめDBに格納しておきます。
第1弾: 設問+選択肢のベクトル化による検索
最初のアプローチは、アンケートの設問と選択肢をベクトル化し、検索しやすくすることでした。
手法
1.アンケートデータの設問と選択肢をOpenAI Embedhing モデルを使ってベクトル化
2.BigQuery に保存
3.検索時に、BigQueryのVECTOR_SEARCH関数を使用して近傍検索を実施

4.ベクトル検索結果をもとにDBから出現率を検索して画面に表示する

この方法により、意味的に近いデータを取得できるようになりました。
ただし、ただ上記の方法で検索しただけでは、意図と違う結果が検索されてしまうこともあり、それがノイズとなって検索体験が損なわれる結果となってしまいました。
第2弾: さらにLLM による検索結果の絞り込み
ベクトル検索を実施した結果、関連データの取得は向上しましたが、まだノイズが多いという課題がありました。そこで、検索結果をLLM(大規模言語モデル)を用いて絞り込むアプローチを試みました。
手法
1.ベクトル検索の結果と、検索時に入力された文言をプロンプトに挿入し、
意図に沿う結果だけにフィルターしてもらう
2.さらに、DB検索に使用できる形に出力を整形するようにプロンプトで指示を追加
3.上記結果をもとにDBから出現率を検索し画面に表示する

ポイント
1.ベクトル検索結果をCSVにして、プロンプトに加える
2.絞り込み結果を使って付随情報をDB検索したかったので、出力フォーマットを指定
結果
・ノイズがなくなり、必要なデータのみが取得可能になった
・出力フォーマットを統一することで、DB 検索も安定した
・「意味的にデータを絞り込める」という点に新鮮さを感じられた
まとめ
この取り組みにより、セマンティック検索と LLM を組み合わせることで、アンケートデータの検索精度を大幅に向上させることができました!特に、曖昧な検索でも適切な結果を取得できる点は大きなメリットです。
また、自主調査アンケートを通じて、社内のデータ活用の幅が広がる可能性も見えてきました。今後は、さらなる最適化や他のデータセットへの応用を検討していきます。
この AI 活用事例にご興味のある方は、ぜひご意見をお聞かせください!