| 
●成果1.ペンや音声で入力した情報をテキストとして一意に確定することなく、直接検索に用いるWeb検索システム
現在タブレットPCを使ってWeb検索をする場合を考えてみる(音声認識を利用する場合も同様のシナリオが描ける)。ユーザはテキスト入力パネルに文字を書き、文字認識を行う。認識間違いがあった場合は修正しなければならないことがわずらわしい。しかしそもそもWebのキーワード検索とは、キーワードに対してヒットすると「思われる」文章をランク付けして提示するものであり、そもそもそこに確率的あいまい性を含んでいるのである。あいまい性を含む検索に対して、わざわざテキストを修正し確定しなくてはならない作業は冗長である。なぜなら文字認識の過程においては複数の認識候補の文字が確率つきで出力されているはずであり、それらを用いればそれ相応の検索が行えるはずだからである。(図1を参照)
これらを踏まえて、確率的な重ね合わせで表現されたテキストの形式である「確率付きテキスト」を用いて(図2を参照。ある認識技術によって一通りの認識結果を出すのではなく、組み合わせ数が現実的な範囲内であいまい性を保持したままテキストを取り扱うことができる。)、通常のテキストや確率付テキストを検索するシステムを構築した。具体的には、確率付テキストフレームワーク「文金(ぶんきん)」および、文金を用いて開発したWeb、デスクトップ検索アプリケーションである。
図1 文金の基本コンセプト
図2 「アメリカ合衆国」と書いたとき生成される確率付テキストの例
・手書き文字の検索・編集のための確率付きテキストフレームワーク「文金(ぶんきん)」
確率付きテキストはConfusion Networkというグラフ構造で表現される。Confusion Networkを生成、検索、編集するための基礎ライブラリRMCP.dll、およびこれを用いて手書き文字情報から確率付テキストを生成し、Web検索およびデスクトップ検索を行うライブラリAmbientQuery.dllをC#.NETを用いて開発した。まず確率付きテキストの仕様とデータ表現について説明し、その後、確率付きテキストを扱うための関数群について説明する。
・確率付テキストの仕様(文字列形式):
確率付きテキストは、図2に示すようにある区画に対するテキストとその確率、および競合候補を接続したものである。区画の区切りを大括弧[
]で表し、小括弧( )内に確率を書き、競合候補テキストを接続することで確率つきテキストは表現できる。以下は、「あい」と手書きし確率付テキストを生成した場合の文字列形式表現例である。
confusionnet:[あ(0.8)お(0.2)][り(0.7)い(0.3)]
この例では、「あ」に対して文字認識エンジンが80%の確率、競合候補として「お」である確率も20%出力している。また「り」に対して70%、競合候補として「い」である可能性も30%と出力している。従来の文字認識ではこのような場合、最も確率が高い組み合わせである「あり」のみを出力していたために正しい認識結果である「あい」が失われてしまっていた。確率付きテキストでは、より多くの認識結果の可能性をコンパクトに表現することができ、このような正しい認識結果の喪失を軽減することが可能である。手書きされた生データ(画像もしくはストロークデータ)と確率付きテキストとを組にして扱うことで、人間には目で見て何が書いてあるか理解でき、計算機にとっても何が書いてあるかを確率的に広く取り扱うことが可能となる。
以下の図3に、「肉ラーメンたべたい」と書いた場合に出力された確率付きテキストの文字列形式表現例を示す(都合により、確率はすべて25%となっている)。
図3 「肉ラーメンたべたい」と書いた場合の確率付テキストの文字列形式表現例
・確率付テキストの仕様(XML形式):
Web上での確率付テキストの流通を考えた場合、上記の文字列形式表現よりもさらに構造化されたXML形式の表現が望まれる。そこで確率付テキストのXML形式表現も設計した。
1.
<confusionnet></confusionnet>で囲まれた部分が一つの確率付テキストを表す。nchunks属性は確率付テキストの区画の数、nmaxnodes属性は1区画の競合候補の最大数を表す。
2. <chunk></chunk>で囲まれた部分が一つの区画を表す。
3. <node></node>で囲まれた部分が一つの競合候補を表す。
4. <entry></entry>で囲まれた部分が一つの競合候補テキスト、続いて<score></score>で囲まれた部分がその競合候補の確率を表す。
以下に「台風」と書いた場合の確率付テキストのXML形式表現例を示す。
<confusionnet
nchunks="2" nmaxnodes="4">
<chunk>
<node><entry>台</entry><score>0.7</score></node>
<node><entry>舌</entry><score>0.2</score></node>
<node><entry>占</entry><score>0.1</score></node>
<node><entry>旨</entry><score>0.1</score></node>
</chunk>
<chunk>
<node><entry>風</entry><score>0.25</score></node>
<node><entry>聞</entry><score>0.25</score></node>
<node><entry>閤</entry><score>0.25</score></node>
<node><entry>関</entry><score>0.25</score></node>
</chunk>
</confusionnet>
・確率付テキストの仕様(Doublet
String形式):
現在良く用いられているGoogleなどのWeb検索エンジンは、テキストを形態素解析により単語単位に分解し管理している。そのため図3のような、1文字単位に記述された確率付きテキストはGoogleでは検索されない。一つの対策は、後述するように確率付きテキストからキーワードとなる単語を抽出して付与する方法である。もう一つの手段は、RAST(付録の章を参照)のようなN-gram式の検索エンジンを導入することである。N-gram式の検索エンジンは、文字列を単語単位ではなく、隣接文字の出現確率で管理する。その最小単位が隣接2文字の出現確率である。 そこで確率付きテキストを、可能な隣接2文字に分解することで、検索エンジンによる処理を可能としたものがDoublet
String形式である。例えば、先述した「台風」に対する確率付テキストをDoublet String形式で表現すると、以下のようになる:
台風
舌風 占風 旨風 台聞 舌聞 占聞 旨聞 台閤 舌閤 占閤 旨閤 台関 舌関 占関 旨関
将来的には確率付きテキストを直接管理する検索エンジンの開発が望まれるが、それまでの暫定策として現状の検索技術を応用できるDoublet
String形式は有効であると考えられる。
・Microsoft.Ink形式とQInk形式手書きデータの仕様:
Microsoft Tablet PC Platform SDKは、Microsoft Tablet PC APIという手書き文字を扱うための機能群を提供している。その中にはInkというクラスがあり、手書きされたデータを格納している。本プロジェクトではこのクラスを主に用いている。このInkクラスの提供するシリアライズ機能により、文字列化された手書きデータ文字列をMicrosoft。Ink形式と呼ぶことにする。
一方QInk形式は、Microsoft Tablet PC Platform SDKをインストールしていないマシン上で手書き情報を取り扱うために本プロジェクトで設計された簡易データ構造である。単純な文字列のため、言語やプラットフォームに依存せず手書き文字を扱うことができる。後述するWeb
serviceでは、Microsoft.Ink形式と併せてQInk形式のデータを扱えるインタフェースを提供する。
QInk形式では、2次元平面上の座標を(X座標.Y座標)のようにピリオドでつなぎ、この座標情報をカンマでつなぐことで座標列を表現する。アスタリスクを置くことで、1画1画の区切りを表現す。以下はデータ例の一つである。
1.1, 3.3, *2.2, 1.4
この例では、1画目が(X=1、Y=1)と(X=3、Y=3)を結んだストローク、2画目が(X=2、Y=2)と(X=1、Y=4)をつないだストロークで構成される手書きデータが表現される。
・確率付きテキストを扱う機能群:
本プロジェクトにより開発した確率付きテキストフレームワーク「文金」ライブラリRMCP.dll、AmbientQuery.dllにより提供される機能は以下のようなものである。
●Microsoft.InkからConfusionNet(確率付きテキストを表現するクラス)のオブジェクトを作成
●QInk形式手書きデータ文字列からConfusionNetオブジェクト作成
●XML形式で記述された確率付テキストからConfusionNetオブジェクト作成
●文字列形式で記述された確率付テキストからConfusionNetオブジェクト作成
●ConfusionNetオブジェクトからXML形式に書き出す
●ConfusionNetオブジェクトから文字列形式に書き出す
●ConfusionNetオブジェクトから文字列を検索する
●ConfusionNetオブジェクトから辞書に登録されているキーワードを抽出する
これらの機能は以後に述べる様々なアプリケーションに応用されている。第三者が文金フレームワークを用いたアプリケーションを開発する際には、次節に示すWeb
serviceの仕様のみを理解すればよいため、各機能のインタフェースの詳細の記載は省く。 Web service利用に当たってはサンプルコードを用意しているので、それを用いれば応用は容易である。
・Web
serviceの整備
文金フレームワークを用いることで、手書きコンテンツに対し「どのような文字列が書かれているか」の概略を知ることができるようになる。これをWeb
serviceとして展開することで、例えば既存のblogに「検索可能な手書き情報」を簡単に加えることができるようになる。そこで文金フレームワークのWeb
service版として、bunkinwebservicesプロジェクト、およびこれを用いたサンプルアプリケーションとして、クライアントアプリケーション BunkinClientSampleとWebアプリケーションInkWebBlogBunkinを開発した。これらは主に開発者、およびWeb事業者向けの開発物である。
・bunkinwebservicesプロジェクト
手書きデータを扱うPC上のアプリケーション、もしくはWebアプリケーションから確率付テキストを扱う際に必要な機能をWeb serviceとして実装したのがbunkinwebservicesプロジェクトである。このプロジェクトはhttp://bunkin.net/bunkinwebservices/ws.asmxで試験的に運用しているが、現時点ではパフォーマンスの問題から不特定多数のユーザからの多数のリクエストを処理することはできない。開発者、事業者が各自のサーバでこのWeb
serviceを運用することを想定し、プロジェクトのソース自体も公開する。本プロジェクトで提供するサービスは以下のものである。
1. Microsoft.Ink形式データを入力し、生成された確率付テキストをXML形式で出力する
●string MSInkString2CNXML(string src, string pass)
2. Microsoft.Ink形式データを入力し、生成された確率付きテキストをDoublet String形式で出力する
●string MSInkString2DoubletString(string src, string pass)
3. Microsoft。Ink形式データを入力し、生成された確率付テキストにマッチする辞書キーワードを出力する
●string [] MSInkString2Keywords(string src, string pass)
4. QInk形式データを入力し、生成された確率付テキストをXML形式で出力する
●string QInkString2CNXML(string src, string pass)
5. QInk形式データを入力し、生成された確率付テキストをDoublet String形式で出力する
●string QInkString2DoubletString(string src, string pass)
6. QInk形式データを入力し、生成された確率付テキストにマッチする辞書キーワードを出力する
●string [] QInkString2Keywords(string src, string pass)
それぞれ、第一引数としてMicrosoft.Ink形式もしくはQInk形式で表現された手書き文字データをとり、第二引数としてWeb
serviceを利用するためのパスワード文字列を入力する。公開するコードでは入力形式のチェックやパスワードのチェックは行っていないため、不正利用を防ぐためのコードは利用者が追加する必要がある。3および6の辞書キーワード抽出は、現在はてなキーワード(http://d.hatena.ne.jp/hatenadiary/20040205)を利用している。出力結果は“(キーワード)、(確率)”という文字列の配列であるが、現時点での実装では確率は常に1を返す。
・BunkinClientSample
BunkinClientSampleはbunkinwebservicesを用いたクライアントアプリケーションのサンプルプロジェクトである。このコードを流用することにより、通常のデスクトップアプリケーションに確率付テキストを用いた処理機能を付与することができる。このサンプルでは、ユーザが書いた手書き文字を用いてbunkinwebservicesにアクセスし、結果を出力する一連の作業を体験できる。(図4参照)
このサンプルプロジェクトを実行するためには、Tablet PC 系のマシンが必要である。しかしQInkを生成するコードを自前で書けば、任意のマシンでbunkinwebservicesは利用できる。
図4 BunkinClientSampleのスナップショット:「ノート」と書いて、bunkinwebservicesと通信し3つの形式で結果を受信した。
・InkWebBlogBunkin
InkBlogWebBunkinは、bunkinwebservicesを用いたWebアプリケーションのサンプルプロジェクトである。このコードを流用することにより、webアプリケーションに確率付テキストを用いた処理機能を付与することができる。このサンプルはblog風のアプリケーションとなっており、書き込んだ手書きblogに対しbunkinwebservicesによりキーワードを抽出・付与しつつ保存し、Googleなどの検索エンジンによる検索を可能にする応用例である。(図5参照)
サンプルコードでは接続するbunkinwebservicesのホストがbunkin.netとなっているが、これを変更することで独自に構築したbuninwebservicesへと接続が可能である。
このサンプルプロジェクトを実行するためには、タブレットPC 系のマシン+IIS ver.5.1以降が必要である。このサンプルWebアプリケーションは、http://bunkin.net/InkWebBlogBunkin/で試験運用している。
図5 InkWebBlogBunkinのスナップショット:「太平洋の天気」と書いて、bunkinwebservicesと通信しキーワードを抽出した。手書き画像とキーワードを併記することで、通常のWeb検索エンジンによる検索が可能となる。
●成果2.手書きWeb検索、デスクトップ検索アプリケーション「GOEMOSO」
文金フレームワークを用いることで、手書きコンテンツに対し「どのような文字列が書かれているか」の概略を知ることができるようになる。これをドキュメント検索に応用し、「曖昧な情報検索」に「曖昧な手書き情報」をそのまま用いたものがGOEMOSOである。従来手法では、文字入力後即座に文字認識の結果の確定作業を行った後、通常の検索を行っていた(図1上段)。一方GOEMOSOでは、ユーザは文字認識の複数の可能性を吟味する作業と、求める検索結果を吟味する作業を同時に行うことができる(図1下段)。
例えば、「テロ」という言葉についてweb検索したい場合を考える。手書きで「テロ」と書き、
confusionnet:[ラ(0.5)テ(0.4)モ(0.1)][ロ(0.9)口(0.1)]
という確率つきテキストが得られたとする。第二区画のロ(0.9)はラリルレロの“ロ”、口(0.1)は「くち」である(赤色で区別する)。このような、見た目が似ていて異なる文字認識結果が得られることは実際の文字認識ではよくあることである。この確率付きテキストを展開すると、
ラロ ラ口 テロ テ口 モロ モ口
という6種類の文字列が得られる。これらをそれぞれWeb検索エンジンで検索する。すると、
テロ 6350000
hit
モロ 2910000 hit
ラロ 247000 hit
ラ口 825 hit
テ口 563 hit
モ口 294 hit
という検索hit数がそれぞれ得られる。Hit数でこれらをソートすると、「Web上で最も一般的な情報の順」として文字認識結果とWeb検索結果が表示されることになるため、求めていた「テロ」が最上位に来ることとなる。これがGOEMOSOの基本的な考え方である。デスクトップ検索においても、同様の考え方ができる。ただし、デスクトップ検索においては検索hit数が適切な評価基準ではない場合も多いので、最新更新日時順などの要素も考慮に入れる。
GOEMOSOの実装として、本プロジェクトでは以下の3つのアプリケーションを実装した。
1. タブレットPC系マシンのデスクトップで動作し、Web検索とデスクトップ検索を行える「GOEMOSO Desktop」
2. タブレットPC系マシンのサーバ上で運用し、タブレットPC系のマシンからブラウザ経由でWeb検索を行えるWebアプリケーション「GOEMOSO
Web」
3. タブレットPC系マシンのサーバ上で運用し、任意のマシンのJavaScript動作のブラウザ経由でWeb検索を行えるWebアプリケーション「GOEMOSO.JS」
・GOEMOSO
Desktop
実行にはタブレットPC系のマシンが必要である。デスクトップ検索を実行するためには、Google Desktopをインストールしておく必要がある。実行画面のスナップショットを図6.1、2、3
に示す。
図6.1 GOEMOSO
Desktopの画面スナップショット
図6.2 GOEMOSO
DesktopのWeb検索結果表示画面スナップショット:
Web社会では見た目に似たことばを隠語として使い裏情報を議論する人たちが存在する。この例では、「ラーメン」に対し「ラーメソ」という隠語を用いているドキュメントの検索に成功している。このようにVisually
Equivalentなことばを意識せずに検索できるのが、確率付きテキストを用いたGOEMOSOの特徴の一つである。
図6.3 GOEMOSO
Desktopのデスクトップ検索結果表示画面スナップショット:
個人のコンピュータにはそれほど多くの情報は無いため、Hit数と最終更新日時を組み合わせてソートし表示する。
・GOEMOSO
Web
インストールにはIIS ver.5.1以降の動作するタブレットPC系マシンをサーバとする必要がある。また、利用に当たってはこのアプリケーションはインストール不要でブラウザ経由で用いることができるが、手書き文字処理系統はローカルマシンで行うため、タブレットPC系マシンが必要である。本アプリケーションはhttp://bunkin.net/goemoso/ で、試験的に運用している。実行画面のスナップショットを図7に示す。「GOEMOSO
Desktop」とほぼ同等の機能だが、以下の2点が異なる。
● Webアプリケーションのため、デスクトップサーチは行わない。
●不特定多数のユーザからアクセスされる可能性があるため、膨大なクエリ発行によりサーバ負荷が集中することを防ぐため、Web検索にはGoogle
Search APIを用いた。画面下部の「検索key」の欄に、Google Search API利用申請時に得られる検索用パスワードを入力する。デフォルトでは本プロジェクトで入手したパスワードが入力されているため、そのまま利用すると1日の検索件数が利用者全体で制限される。利用者自身が持つパスワードにより利用することが望まれる。(※通常のWeb検索に比べてGOEMOSO
Webの動作が非常に遅いのは、Google Search APIを用いた検索が非常に時間を要することによる。)
図7GOEMOSO
Webの画面スナップショット
・GOEMOSO.JS
インストールにはIIS ver.5.1以降の動作するタブレットPC系マシンをサーバとする必要がある。また、利用に当たってはこのアプリケーションはインストール不要でブラウザ経由で用いることができ、JavaScriptの動作する任意のブラウザで実行可能である。例えばLinux
Zaurus+OperaなどのPDA環境でも動作する。これはJavaScriptを用いてQInk形式の手書き文字情報を生成し、サーバ側で確率付きテキストの生成および検索を行うからである。本アプリケーションはhttp://bunkin.net/goemosojs/ で、試験的に運用している。実行画面のスナップショットを図8に示す。
図8
GOEMOSO.JS の画面スナップショット:JavaScriptの動作する任意のブラウザから利用可能である。
●成果3.タブレットPCに最適化された手書きメーラ、手書きテキストエディタ
手書き文字入力による文章作成を行う際の一つの問題は、キーボード入力に比べて手間がかかることである。そこで予測入力機構を導入し、ユーザの負荷を軽減することを提案する。予測入力機構とは,携帯電話による文字入力などで応用されている。文字を入力し始めると、ユーザが入力したい単語列をシステムが予測し、その候補を複数表示するというものである。これらの従来手法では、すべての文字を活字テキストに変換しながら入力することに主眼を置いている。したがって、以下の二つの問題のいずれかを必然的に孕む。
●複雑な文字(漢字など)を入力すると文字認識がうまく行かず、人間の目には正しく文字を理解できるにもかかわらず
何度も書き直すことになる。
●ローマ字アルファベットなどに入力を限定すると、ユーザの書く文字と結果の文字とがまったく別のものになる。
そこで本プロジェクトでは、上記の問題を解決するため、手書き文字をユーザが書いたまま保存しつつ予測入力を行う「予測付手書き文字入力方法」を提案する。
予測付手書き文字入力方法の要点は、「ユーザは常に現時点から未来に何を書くかのみを考えればよい」ということを貫徹したインタフェースであるということである。手書き文字をそのまま扱うことにより、認識誤りを訂正が必要だったり、書きたい文字と実際に書く文字・書く場所とが乖離したりといった従来の問題は発生しない。その上で確率付きテキストフレームワークを用いた予測提示により、「もし予測が当たっていたときだけそれを選択すればよい。当たっていなければそのまま無視して書き進めればよい」という環境をユーザに提供することができ、利用を強制することなく文字入力効率を高めることが可能である。図9に本手法の概要を示す。
図9 予測付手書き文字入力方法の概要
●成果4.「手書きBlog」「手書きメーラ」アプリケーション
テキストエディタがあれば、そのテキストをWeb経由で送信する機能の実装により手書きメーラおよび手書きBlogアプリケーションを実現できる。予測付手書き文字入力方法により得られた「見た目」を画像データとして、内部表現の確率付きテキストを付与しつつ送信すれば、可視性と被検索可能性を併せ持つ情報の通信が可能となる。さらに手書きならではの利点として、絵画的表現と言語的表現を自由に組み合わせることが可能である。写真などの画像にコメントを添えて綴るスタイルがBlogの表現方法として確立されているが、それを一歩進めて、写真、イラスト、文字情報を自由にレイアウトしたものを取り扱うことが可能となる。本プロジェクトでは、予測付文字入力方法を用いて文字入力を行い、画像の貼り付け、レイアウトなどを自由に行った上で自分のBlogサイトに投稿したり、メールとして知人に送信することができる機能を実装した。
●成果5.タブレットPCの使い勝手を向上させる新しいデスクトップ環境の構築
現在のペンコンピュータのインタフェースは、従来のキーボード+マウスを前提としたコンピュータと同様に扱うための余分な手間(手書き文字認識の訂正など)をユーザに強いるものが多い。一方コンピュータがこれほど発達した現代においても、紙にペンで書く人は絶えない。その理由を尋ねると、「思ったとおりに描けるから」「思いついたとき、すぐに書けるから」などと答える人が多い。これは、ユーザはペンというものに「思い通りの場所に、思い通りのやり方で」という期待を抱いているため、「ペンを導入することによって通常以上の余分な手間がかかる」というアプローチではうまく行かない、という教訓である。我々がペンコンピュータの普及を考える上では、ペンの持つこれらの特徴をうまく取り入れることが重要である。
そこで本プロジェクトでは、基本的にユーザには常に「白紙」を提供し、自由な場所に思い通り書き進められる状態にする。そして、必要に応じて検索や情報発信などが行えるような「あとづけ」の機能呼び出しを可能とするような環境:ペンベースデスクトップ環境「koto-buki」の開発を行った。
|