「電気代」で探して
「再エネの買取制度」が出る検索を、月額ゼロで
社内の文書検索やFAQ検索に「AIの検索を入れたい」というご相談をよくいただきます。そのとき必ず出る質問が「毎月いくらかかるのか」です。この記事では、外部のAIサービスに1円も払わずに動いている意味検索を、自社サービスの実例で紹介します。
コミュロビとは
コミュロビは、Posiiが開発・運営している、市民のためのロビー活動プラットフォームです。「一人の声は無視される。一万の声は、無視できない。」を掲げ、声を集める → 資金を集める → 議員に届ける、までを1つのサイトで行えるようにしています。
- コミュニティとイシュー(議題):賛成・反対・提案・質問の立場を選んで投稿する議論の場
- キャンペーン:賛同を集め、マイルストーンと活動報告を公開する
- 議員に届ける:テンプレート付きのメッセージ送信と、提出後の結果の公開
- 生活の言葉から入る入口:政治の言葉ではなく「暮らしの困りごと」のタグから議題にたどり着ける
課題:言葉が一致しないと、見つからない
最初のイシュー検索は、入力した文字を含むものを探す、ごく普通の検索でした。これだと「電気代」で検索しても、再生可能エネルギーの固定価格買取制度(FIT)の見直しについての議題は出てきません。電気代に直結する話なのに、その文字が書かれていないからです。
暮らしの困りごとから政策にたどり着いてほしいサービスなので、言葉ではなく意味で探せる検索が必要でした。
1つ目の方式は、一語の検索に弱くて不採用
最初に試したのは、軽くて速い種類の埋め込みモデル(文章を数値のベクトルに変える仕組み)です。ところが「子供」のような一語で検索すると、関係のある議題との近さを表す点数が0.043しか出ず、使いものになりませんでした。
そこで、文脈を読むタイプの多言語モデル(intfloat/multilingual-e5-small)に切り替えました。自社のサーバーの中で動くので、外部のAIサービスのAPIキーも利用料も要りません。
もう1つ効いたのが、検索対象に何を入れるかです。議題のタイトルと概要だけでなく、カテゴリ名とコミュニティ名も一緒に数値化したところ、「子供」のような短い検索でも、関係のある議題とそうでないものがはっきり分かれるようになりました。
「何点以上なら当たり」が決められない問題
このモデルには癖があり、まったく関係のない文章どうしでも、近さの点数が0.76前後になります。「0.8以上なら当たり」のような決め打ちの基準では、当たりと外れを分けられません。
そこで、点数の高い順に並べて、隣どうしの差が急に開いたところ(崖)で切る方式にしました。差が0.010以上開いたところで切り、さらに0.78という下限を保険として置いています。あわせて、文字がそのまま一致したものは常に意味で一致したものより上に並べます。
確認した結果は次のとおりです。
- 「子供」「子ども」「保育」→ 保育士の処遇改善の議題
- 「電気代」→ 再エネの固定価格買取制度の見直し
- 「バス」→ 地方の公共交通の議題
- 「年金」→ 該当なし(関係のない議題を無理に出さない)
安いサーバーで動かすために、モデルを軽くする
ここからが本番の難所でした。AIのモデルを動かす標準的なライブラリをそのまま入れると、ライブラリだけで755MB、1つの処理あたりのメモリが902MBになります。コミュロビが動いている共有型のサーバーでは現実的ではありません。
そこで、モデルを軽い形式(ONNX)に書き出し、数値の精度を落として(int8に量子化して)小さくしました。実測の結果です。
- ライブラリ:755MB → 60MB
- モデルの読み込み:12.2秒 → 0.73秒
- 検索1回あたりの計算:13.9ミリ秒 → 2.3ミリ秒
- 最大メモリ:902MB → 468MB
- 精度:軽くする前との一致度(コサイン類似度)は0.989〜0.990。実際の議題で比べた7つの検索のうち6つで、最終的な検索結果が同じ
意味検索は「高いGPUサーバーか、従量課金のAPIが必要」と思われがちです。検索対象が数千〜数万件程度なら、小さなモデルを軽くして、普通のサーバーで動かす選択肢があります。
止まらないための工夫
- モデルが読み込めなかったら、普通の検索に自動で戻る。検索そのものが使えなくなることはありません。
- 変わっていない議題は計算し直さない。本文とモデル名から作った識別子を保存しておき、どちらも同じなら再計算を省きます。モデルを入れ替えたときは自動で全件作り直されます。
- テストで全ページを押さえる。単体テスト113件と、実際のブラウザを自動操作するテストを組み合わせ、全75のURLがどちらかのテストで確認される状態にしています。
いまの状態(正直に)
コミュロビは公開中ですが、まだ立ち上げの段階で、利用者やキャンペーンの実績はこれからです。意味検索の精度も、確かめたのは少ない件数の議題です。議題が増えたら、崖で切る基準(0.010と0.78)は実データで測り直す前提で作っています。
社内検索・FAQ検索にAIを入れたい方へ:先に決めること
- 探したい件数:数千件なのか、数百万件なのか。件数で、自前で動かすか外部サービスを使うかが決まります
- 月額の上限:外部APIの従量課金を許容するか、固定費だけで収めたいか
- 外に出せないデータか:社外のAIサービスに文書を送ってよいか。送れないなら、自社サーバー内で完結させる必要があります
- 「該当なし」を返してよいか:無理に何か出すより、出さないほうが信頼される場面は多いです
AIの検索は、高いモデルを買うことより、何を数値化してどこで切るかで決まります。
社内文書検索・FAQ検索・意味検索の導入をご検討中の方へ
Posii株式会社は、コミュロビのような意味検索や社内RAG(社内文書を読ませたAI)を、設計から運用まで自社で作っています。「外部のAIに文書を出せない」「月額を固定にしたい」といった条件からご相談いただけます。