Helpfeel
(2019/8/13)
https://gyazo.com/05ddaef205470d84377ae4e8dec8728b
ヘルプシステムはあらゆるパソコンOSやアプリに実装されているし、FAQサービスは世の中に沢山あるが、そういうものを便利に使ってる人は少ないと思われる。2018年3月にTwitterでアンケートをとった結果は以下のようなものであった。
https://twitter.com/masui/status/976979735493328897 https://gyazo.com/efc1f5968418a0cc86e5da62a34d1567
私自身パソコンのヘルプは全然使っていないし、この結果は予想通りだったわけだが、何故こんなにヘルプシステムは人気が無いのだろうか?
ヘルプシステムが使われない理由は単純で、検索しても 必要な情報が出てこないから であろう。普通のテキスト検索を使う場合、ヘルプテキストに検索単語が含まれていない場合は検索に失敗する。たとえば「時刻をセットする」というヘルプエントリに対して「時計をあわせるには?」で検索してもヒットしない。こういう問題は「語彙問題」と呼ばれており、30年以上前からGeorge Furnasの論文などで指摘されているが、現在でも解決していないのだろう。 語彙問題を解決する方法はいろいろ考えられる。時刻も時計も似たようなものだと考えてシソーラスを使った検索することもできるだろうし、実際のクエリデータを解析処理して対策することもできるだろう。最近は膨大な検索履歴データをもとに機械学習を行なってチャットボットベースのヘルプシステムを提供しようとしている会社も多いようである。 AIベースのヘルプシステムと言うと聞こえが良いが、実際にチャットボットは有用なものだろうか? 「時計をあわせたいんだけど?」という発話を認識して適切なヘルプエントリを返すのは確かに凄い技術だろうが、膨大なデータが存在するシステムでしか使えないし、ユーザは正確に質問文を発話しなければならないという面倒さもある。「とけ..」とか言っただけで、時刻をセットする方法がわかる方が嬉しいのではないだろうか? Helpfeelでは、語彙問題を解決するために「ユーザが質問しそうな文をあらかじめすべて用意しておく」という手法を採用している。「時刻をセットする」「時計をあわせる」「時間を設定する」などといった様々な表現を最初から用意しておけば、ユーザの質問にマッチするものがみつかる可能性が高いからである。本当にあらゆる表現を用意することはもちろん不可能だろうが、大抵のクエリにマッチする表現を用意しておくことは可能である。たとえば
(時間|時刻|時計)を(セットする|あわせる|設定する)
のような正規表現にマッチする文字列をすべて用意しておけば、「時刻をあわせる」でも「時計を設定する」でも検索に成功することになる。上の場合、時間をセットする, 時間をあわせる...時計を設定するの9個を用意しておく。「時計を設定する」で検索してもヒットするというわけである。正規表現でテキストをパタンマッチ検索するのは普通であるが、あらかじめ展開しておいたデータを普通にテキスト検索するという方法が面白いところである。 ある正規表現にマッチする文字列をすべて生成することは難しくない。私が作成したre_expand というRubyライブラリ(gem)を使えば簡単である。 code:expand.rb
require 're_expand'
s = '(時間|時刻|時計)を(セットする|あわせる|設定する)'
puts s.expand
を実行すると以下のような結果が得られる。
code:expand.txt
時間をセットする
時間をあわせる
時間を設定する
時刻をセットする
時刻をあわせる
時刻を設定する
時計をセットする
時計をあわせる
時計を設定する
Helpfeelは、このように正規表現を展開したテキストに対して高速な曖昧検索を行なうことによって柔軟なヘルプ検索を実現するシステムである。ただのテキスト検索なので部分的なキーワードでも検索に成功する。たとえば刻と入力するだけでもエントリがみつかる。チャットボットではそういうわけにいかない。 というわけで、最近Nota社ではHelpfeelを大々的に売り出そうとしている。以下の動画は2019/7に開催されたIVS LaunchpadというイベントでHelpfeelをNota社長がプレゼンしているところである。 https://www.youtube.com/watch?v=HqtIXi6Ot_M