
拓海先生、最近部下から『ファジー検索を導入すべきだ』って言われてるんですが、正直言って何が新しくて我が社の業務に効くのかさっぱりでして。

素晴らしい着眼点ですね!大丈夫、田中専務。今回はGolay符号という古典的な符号理論を使って、速くて更新しやすい“FuzzyFind辞書”を作る研究を噛み砕きますよ。

Golay符号ですか。聞いたことはありませんが、我々が今やっているキーワード検索と何が違うんでしょうか。現場の帳票や伝票は誤字も多く、そこを拾ってほしいんですよ。

まず簡単に結論を三つで示します。1) 文字を固定長のビットに写像して近さを扱えるようにすること、2) Golay符号という誤り訂正の仕組みを応用して“近い字”を高速に見つけること、3) 辞書は線形時間で作れ、参照はほぼ定数時間でできる、です。

なるほど。で、その「文字をビットにする」とは要するにどういうことですか。要するに文字ごとの有無を0と1で表すということですか?

素晴らしい着眼点ですね!ほぼそのイメージで合っています。論文では英字23種を23ビットのベクトルに写像し、ある単語の文字の有無でビットを立てます。そのベクトル群の近さをハミング距離で評価するのです。身近な例で言えば、商品名の入力ミスがあっても「似たビット列」を拾って候補を出せるということですよ。

それは便利そうですね。ただ、現場に入れると検索が遅くなるのではと心配です。検索の速度とメモリの関係はどうなりますか。

良い質問ですね。ここでGolay符号変換ハッシュテーブルという構造を使うと、辞書の生成はデータ量に対して線形時間、検索はほぼ定数時間で済みます。メモリはビット表現+ハッシュテーブル分を使いますが、検索回数が多い業務では速度対コストの投資対効果は高くなりますよ。

更新は面倒ではないですか。我々は商品が増減するし、誤字のパターンも増える。現場の負担が増えるのは困ります。

安心してください。論文の主張は辞書の追加更新は新しいデータ量に対して線形時間だということです。つまり日々の新規品や用語を定期的に取り込む設計なら、運用負荷は管理可能です。自動化すれば現場の手はほとんど止まりませんよ。

これって要するに、誤字や表記ゆれがあっても業務で使える候補を高速に出してくれる仕組みを、安定して運用できる形で作るということですか?

その通りです!投資対効果の観点では、検索精度の向上と検索時間の短縮が現場の工数削減につながります。まずは小さな業務領域で試し、効果が出たら横展開するという段階的な導入が現実的です。

分かりました。まずは伝票の品名検索で試してみます。まとめると、文字をビットにして近さを測り、Golay符号で高速に候補を引き出せる辞書を作り、更新も運用化すれば我が社でも使えるということですね。

そのとおりです。大丈夫、一緒にやれば必ずできますよ。次は実装のロードマップを作りましょう。
