Govbot(国・地方共通相談チャットボット)の代わりに生成AIでGovsearchを作ってみた
HiCustomerの小田です。2週間ほど前にリリースされたGovbotをご存知でしょうか?様々な意見が出ていて、取り組み自体は素晴らしいがUIが不便というものが多かったと思います。私自身ももっとこうしたら便利だなと思ったので、検索のアプローチで作り直してみました。名付けて Govsearch です。アプリケーションの概要は以下になります。
- Govsearch は、国や自治体の制度を調べることができる検索アプリケーションです。使用しているデータは、Govbotと同様の政府が作成したFAQになります。
- 質問を入力すると、FAQの中から最も近い思われる問いと回答をランキング順に表示します。質問が曖昧な場合は、適当に単語をいれると似ている問いをサジェストします。また、質問に対応する回答と検索結果の要約も生成してくれます。
- https://hicustomer-govsearch.hf.space/ で公開しています。ソースコードもGitHubにAGPLで公開しています。気軽にチェックしてみてください。
govsearchのweb版のイメージ
Govbotとはなにか
ChatGPTに総務省が公開している資料の要約をお願いしたところ以下の回答が返ってきました。
Govbotは、令和6年3月26日から提供されている、国と地方が共同で開発した相談チャットボットです。総務省とデジタル庁が連携し、各府省の協力のもと整備されました。主な機能として、質問を入力すると、AIがFAQの中から最も近い問いと回答を探し出し、会話型で表示します。回答が可能な質問は、住民からの問い合わせニーズが多い行政分野を中心に、国・地方ともに共通的に問われ、統一的に回答できる質問です。 具体的な利用例としては以下の二つがあります。
- 所得税の定額減税に関する問い合わせ
- 利用者は「チャットを始める」を選択し、「所得税の定額減税っていくら?」と入力します。AIは関連する問いを一覧で表示し、選択することで、所得税の定額減税額が表示されます。具体的には、本人(居住者に限る)30,000円、同一生計配偶者または扶養親族(いずれも居住者に限る)1人につき30,000円と回答します。
- 育児休業中の給料に関する問い合わせ
- 利用者は同じく「チャットを始める」を選択し、「育休中の給料について知りたい」と入力します。選択することで、育児休業中の給料や育児休業給付金の制度についての回答が表示されます。給付率は休業開始時賃金の67%(休業開始から180日以降は50%)であることなどが説明されます。
上記以外で私が認識している機能は以下の通りです。
- 16か国語に対応していること
- これはインクルーシブな観点から見ても素晴らしい取り組みだと感じています。また、これだけ多くの言語に対応するためのデータを作成するのは、相当な労力が必要だったと思います。最終的にはネイティブによるチェックも必須ですし。しかし、残念ながら英語版を試した限りでは、日本語版と比較してクオリティがいくぶん低いように感じました。
- FAQデータの公開
- 機能そのものとは異なりますが、非常に自由な利用規約のもとでFAQデータを公開してくれています。この高品質なデータのおかげで、Govsearchを簡単に作成することができました。
- 仕事の合間に少しずつ作業を進めていましたが、ロジック部分はほぼ1日で完成しました。データの前処理が不要だったため、作業がとても楽でした。データを公開してくれてありがとうございます!
- ただ、現在公開されているFAQデータは、私の知る限り日本語のみで、評価用データは公開されていません。nDCGなどを簡単に計算できるよう、アノテーション済みの評価データがあるとより良いと思います。ぜひ、より多くのデータの公開をお願いしたいです。データの整備と公開に9000万円を投じる価値はあると思います!
- 機能そのものとは異なりますが、非常に自由な利用規約のもとでFAQデータを公開してくれています。この高品質なデータのおかげで、Govsearchを簡単に作成することができました。
Govbotとの違い
単純な点ですが、GovsearchではGovbotに比べてクリック数やタイピング数を減らし、一度に多くの情報を参照できるようになりました。基本的に参照しているデータは同じですので、違いはインターフェイスにあります。
たとえば、「所得税の定額減税っていくら?」という質問に対するGovbotとGovsearchの回答を比較すると以下になります。。Govbotでは、入力が完了するまで情報を参照することができず、入力後にさらにクリックする必要があります。一方、Govsearchでは入力中に補完が表示され、回答とともに関連情報の要約も表示されます。
govbotで所得税の定額減税っていくら?と入力した場合
govsearchで所得税の定額減税っていくら?と入力した場合
次に、「ベビー」というキーワードでの検索結果をGovbotとGovsearchで比較してみます。Govbotでは情報を見つけることができませんが、Govsearchでは入力中に補完が表示され、「出生」や「赤ちゃん」など、単純なテキストマッチでは補完できない関連する質問が提示されます。これはセマンティック検索の力を感じさせますね。
govbotでベビーと入力した場合
govsearchでベビーと入力した場合
Govsearchの実装
Govsearchでは、生成AIを以下の2つの主要な用途で活用しています。
- 特徴量抽出器として
- 使用しているモデルは、multilingual-e5-smallをCPUで稼働させるために量子化したものです。このモデルを用いて、「ユーザが入力した質問」、「FAQの問い」、「FAQの回答」の特徴量を抽出し、それをランキングのために使用しています。
- 予測モデルとして
- 使用しているモデルは、OpenAIの
gpt-4-turbo-2024-04-09
です。プロンプトに「ユーザが入力した質問」とFAQを組み合わせ、回答と要約を生成しています。
- 使用しているモデルは、OpenAIの
今後の対応予定には以下が含まれます。
- Embedding Quantizationにあるように、バイナリ量子化とMRLを組み合わせることで、必要なメモリとストレージの容量を大幅に削減することができます。この2つを使用することで、HuggingFaceの無料プランでも適切に機能すると考えています。
- 特徴量抽出器としてJaColBERTを使用することを検討しています。Vespaは、embedderとしてColBERTに対応しているため、時間がある時にはすぐに導入したいと思っています。これにより、ユーザーの意図と回答の類似度が理想に近づく可能性があります。
- よく使われる質問をランキングの上位に表示するために、質問に依存しないスコアをランキングに組み込むことを考えています。ただし、現在使用しているコサイン類似度は線形ではないため、線形のスコアと組み合わせると扱いにくい問題が生じます[1]。VespaはXGBoostなどを組み込むことが可能ですが、評価体制が整っていない状況で導入すると混乱が生じる可能性があるため、慎重に検討しています。
- Helpfeelライクなサジェスト機能の導入も検討しています。Elasticsearchではマッピングを調整することで似たような機能をそれなりのクオリティで実現できますが、Vespaでは少し手間がかかるため他の方法を探っています。
まとめ
観点がバラバラですが、作ってみて感じた所感は以下になります。手を動かすと気付けることが多いのでいいですね。
- データが整備されていると本当にらく。政府はお金をかけてデータの整備と公開を進めてほしいです。同時にこれからの生成AIを使ったアプリケーション開発では、UIとデータの整備と評価に時間を1番とられていきそうだなというのをなんとなく感じました。
- 生成AIを特徴量抽出器として活用するのはほんとに便利です。特にHallucinationを考慮するしなくていいのが心理的にらくですね。これからは、生成と思われる問題を類似を使った問題に変換していきたいです。
- HuggingFaceのSpaceは本当に便利ですね。まず設定項目が異常に少ないです、Google CloudやAWSに慣れた身としてはほんとにありがたいです。さらにwebsocketとか結構面倒くさいことをやっているのにDockerfileを上げるだけでそのままなんの設定もなく動きます。アクセスがないときはsleepする機能がデフォルトでついているのも素晴らしい。
- RemixのSPFモードは便利ですね。今後バックエンドがPythonとかJavaとかRustとかのB2Bアプリケーションは、BFFを増やすのも面倒くさいのでRemix一択になってきそうな気がしています。
- 実用的なデータを使って実験するplaygroundができたことが地味に1番嬉しかったです。JaColBERTなどを試してすぐに公開できる環境が手に入ったので、今後色々捗りそうです。
ここからは宣伝ですが、生成AIのPoCや評価にお困りの方がいたら、こちらのLPから気軽にお問い合わせください。スピードが売りで私が3日で提案書を作成しお出しします。
Discussion