ソーシャルな日本語入力補完機能
2009年12月3日、グーグルは突如(以前からうわさはあったものの) 「Google日本語入力」の公開を行った。 もともと持っている既存辞書に加え、 インターネット上で収集されたワードを元にした入力補完機能、すなわち、 いくつかのコードを打ち込むとその後想定されるワードが候補として提示される仕組みを備えている。 インターネット上の情報をもとにしているということから、 いわゆる2ch用語などのネットでしか用いられないワードも候補として提示される。 これらの興味深い事例については、さまざまな 使用レポート が出ているので、そちらを参照されたい。
「Google日本語入力」に見られるような補完機能は、 誰かが責任をもって編集した辞書ということではなく、 「みんなが使っている言葉」に基づく入力補完機能である。 このようなソーシャルな辞書に基づく入力変換自体は新しいものではなく、 例えば、Social IME という試みもある。ただし、こちらはインターネットをすべて対象とするのではなく、 Wikipedia のように、質の高い辞書をみんなで構築していこうというアプローチである。
さらに、国内で伝統的に人気のある Just System のATOKでは、 (主に携帯電話向けに開発された)予測変換機能として、 ATOKの持つ独自辞書に加え、 ユーザが過去に入力した変換事例から学習する仕組みになっている。 不特定多数の参加者の知識をソーシャルに利用するのではなく、 あくまで、Just System のもつ言語リソースに基づき、高品質の辞書構築を目指すものである。
さて、一般に入力補完機能は主に、以下の3つの方法による。
- 既存の辞書や事前知識に基づくもの
専門家による品質の高い辞書に基づくアプローチである。ATOKなどの辞書はこれに相当する。 - ソーシャルな知識に基づくもの
みんなが入力しているものやみんながやっていることに基づくアプローチ。 信頼性に欠ける面があるが、タイムリーなキーワードを含んでおり、メンテナンスコストも低い。 - 過去の入力履歴に基づくもの
ユーザの過去の入力履歴を学習することで、補完候補を提示するもの。
これらのいずれがよいかは一概にいうことはできない。 ユーザの利用局面や目的、さらにはユーザ自身の好みの問題もあるだろう。
入力補完機能を支える基本技術
さて、以上のような入力補完機能は、 日本語入力に限らず、いろいろなものがある。
たとえば、UNIX のshellでは、bashやzshをはじめとして、 コマンドやファイル名の補完機能が備わっている。一度慣れてしまえば、 補完機能なしでは作業効率に重大な支障を及ぼすであろう。 Windowsでも WindowsXP以降のコマンドプロンプトはデフォールトで補完機能が有効になっている。
また、Eclipseなどの統合開発環境では、 コードを編集する際にクラス名やオブジェクトのメソッド、変数名などの補完機能が充実しており、 筆者はほとんど使った経験がないが、これもおそらく使い慣れて人には手放せないものになっているであろう。 多くの電子メールソフトでは、メール作成時に送信先の電子メールアドレスを補完してくれるため、すべてを打ち込む必要はない。 (ただし、この場合は誤って補完してしまった例も多いようである)
このように、自動補完は、ユーザの入力状況をもとに、 膨大な候補の中から次に入力するであろうと想定されるものを提示する技術であるが、 一般に、これらの候補は膨大なものに成りうる。 たとえば、google の検索語で、「日本語」といれてみると、 「フォント フリー」での補完結果が3,760,000件、 「文法」が 2,040,000件、「辞書」が 21,400,000件と表示される。 これにより、他の人が「日本語」というワードとどのようなワードを組み合わせて検索を行っているかが一目瞭然なわけだが、 むろん、数百万件にのぼる検索結果候補を都度データベースから計算しているわけではない (事実、実際の検索結果数とも微妙に異なっている)。
このような補完機能は、多くは、trie木またはそれに類するデータ構造に基づき実装されているのが通例である。 trieというのは単語を辞書のなかから見つけ出すときに人が通常行っている方法をベースにしたもので、 たとえば、algebra と algorithm であれば、a-l-g というサブツリーが共有化されているため、ユーザがalg とうった段階で、 a-l-g の下位に属するワードのみを検索していけばよい。 trie 木は、言語処理などにおいて、順序付けられたデータ構造の効率的な表現形式として古くから知られているものであるが、 データが大規模になればなるほどその効力を発揮する。 昨今、言語処理がインターネットをはじめとした膨大なリソースを対象とするようになるにつれ、 こうした古典的な技術が脚光を浴びつつあるのだ。
大規模データの補完機能の今後
大規模なデータの補完機能は、日本語入力のみならずいろいろなものに応用ができそうである。 たとえば、業務の流れにおいて、どのような経緯で業務を進めてきたかにしたがって、 次に必要な業務プロセスを提示する仕組み(タスクの補完)なども考えられるであろう。 ソフトウェア開発プロセスにおいては、統合開発環境と連携する形での タスク補完の考え方 も取り込まれるようになってきている。 こうした補完機能においても、入力補完同様、事前知識に基づくもののほかに、 ソーシャルなもの(つまりほかの人の過去の経験)を取り組むといったことも、 成功事例や失敗事例の共有といった観点からも重要である。
ところで、入力補完機能は大変便利なものではあるが、反面、 提示された候補に(よく考えず)そのまま乗っかってしまうという面もある。 入力補完でも、もしみんなが誤変換をしてしまっているのであれば、 ソーシャルな辞書ではそのまま誤った変換が提示されてしまうこともあるだろう。 このへんの危険性は、リコメンデーションの危険性ときわめて類似している (みんなが買ったものを買ってしまう)。 便利なものであればこそ、その限界をよく知ることも必要であろう。