(58)【調査した分野】(Int.Cl.,DB名)
1つまたは複数のコンピュータと命令を記憶する1つまたは複数の記憶デバイスとを備えるシステムであって、前記命令が、前記1つまたは複数のコンピュータによって実行されたときに、前記1つまたは複数のコンピュータに動作を実行させるように動作可能であり、前記動作が、
音声入力を表現するデータを受信する動作と、
前記音声入力に関するトランスクリプションを判定する動作であって、前記音声入力の複数のセグメントについて、
複数のコンテキストと前記複数のコンテキストに関連するそれぞれの重みとを保持する動作と、
前記音声入力の第1のセグメントに関する第1の候補トランスクリプションを取得する動作と、
前記複数のコンテキストから前記第1の候補トランスクリプションに関連する1つまたは複数のコンテキストを判定する動作と、
前記1つまたは複数のコンテキストにそれぞれ対応する1つまたは複数の重みを特定する動作と、
前記第1の候補トランスクリプションに基づいて前記1つまたは複数のコンテキストの各々に関する前記1つまたは複数の重みのうちのそれぞれの重みを調整する動作と、
前記調整された重みに部分的に基づいて前記音声入力の第2のセグメントに関する第2の候補トランスクリプションを判定する動作とを含む、前記音声入力に関するトランスクリプションを判定する動作と、
前記音声入力の前記複数のセグメントの前記トランスクリプションを出力のために提供する動作とを含むシステム。
前記1つまたは複数のコンテキストは、ユーザの地理的位置、ユーザの検索履歴、ユーザの関心、またはユーザの活動を含むデータを含む、請求項16に記載のシステム。
【発明を実施するための形態】
【0009】
様々な図面における同じ参照記号は同じ要素を示す。
【0010】
図1は、例示的な音声認識システム100の概要を示す図である。音声認識システム100は、ユーザ10からの音声入力110をユーザデバイス120から受信し、音声入力110のトランスクリプションを判定し、音声入力110のトランスクリプションを出力として提供するようにプログラムされた1つまたは複数のコンピュータを含む。
図1に示す例では、出力は、検索クエリ150に応答して検索結果170を取得するために検索エンジン160に与えられる検索クエリ150であってもよい。1つまたは複数の検索結果170は次いで、ユーザデバイス120に与えられる。音声認識システム100は、たとえば、サーバを含む1つまたは複数のコンピュータあるいはユーザデバイス上に実装することができる。
【0011】
音声認識システム100は、1つまたは複数のネットワーク180を介してユーザデバイス120と通信する発話認識エンジン140を含む。1つまたは複数のネットワーク180は、ワイヤレスセルラーネットワーク、ワイヤレスローカルエリアネットワーク(WLAN)またはWi-Fiネットワーク、ワイヤードイーサネット(登録商標)ネットワーク、その他のワイヤードネットワーク、またはそれらの他の適切な組合せを含む音声ネットワークおよび/またはコンピュータネットワークであってもよい。ユーザデバイス120は、限定はしないが、1つまたは複数のプロセッサとコンピュータ可読媒体とを含むモバイルフォン、スマートフォン、タブレットコンピュータ、音楽プレーヤ、電子書籍リーダー、ラップトップまたはデスクトップコンピュータ、PDA、またはその他のハンドヘルドデバイスもしくはモバイルデバイスを含む任意の適切な種類のコンピューティングデバイスであってもよい。
【0012】
ユーザデバイス120は、ユーザ10から音声入力110を受信するように構成される。ユーザデバイス120は、たとえば、音響電気トランスジューサまたはセンサ(たとえば、マイクロフォン)を含むことができ、あるいはそれに結合することができる。ユーザ10が音声入力110に入力したことに応答して、音声入力を発話認識エンジン140にサブミットすることができる。(一般に、このことは、音声入力を表現するかまたは符号化するデータを発話認識エンジン140にサブミットすることによって行われてもよい。発話認識エンジン140は、データを処理して、受信されたデータから音声入力を抽出することができる。)
【0013】
発話認識エンジン140は、音声入力を順次認識することができ、たとえば、音声入力110の第1の部分111を認識することができ、次いで、音声入力110の第2の部分112を認識することができる。音声入力110の1つまたは複数の部分が、特定の安定性基準に基づいて音声入力110の個々のセグメントとして認識されてもよい。1つの部分がワードを含んでもよく、サブワードを含んでもよく、あるいはワードのグループを含んでもよい。いくつかの実装形態では、音声入力110の1つまたは複数のセグメントは、以下により詳細に説明するように1つまたは複数のコンテキストを調整するのに使用することができる中間認識結果を提供することができる。
【0014】
全体にわたって例示のために検索クエリの例が使用されるが、音声入力110は、音声ベースの命令、検索エンジンクエリターム、ディクテーション、ダイアログシステム、あるいはトランスクライブされた発話を使用するかまたはトランスクライブされた発話を使用してアクションを実行するソフトウェアアプリケーションを起動する任意の他の入力を含む任意の種類の音声通信を表現することができる。
【0015】
発話認識エンジン140は、音声入力110を受信し処理するように構成された音声認識システム100のソフトウェア構成要素であってもよい。
図1に示す例示的なシステムでは、発話認識エンジン140は、音声入力110を検索エンジン160に与えられるテキスト検索クエリ150に変換する。発話認識エンジン140は、音声デコーダ142と、コンテキストモジュール144と、コンテキスト調整モジュール146とを含む。音声デコーダ142、コンテキストモジュール144、およびコンテキスト調整モジュール146は、音声認識システム100のソフトウェア構成要素であってもよい。
【0016】
発話認識エンジン140が音声入力110を受信すると、音声デコーダ142は音声入力110に関するトランスクリプションを判定する。音声デコーダ142は次いで、音声入力110に関するトランスクリプションを出力として、たとえば、検索エンジン160に与えるべき検索クエリ150として提供する。
【0017】
音声デコーダ142は、言語モデルを使用して音声入力110に関する候補トランスクリプションを生成する。この言語モデルは、ワードまたはワードのシーケンスに関連する確率値を含む。たとえば、言語モデルはNグラムモデルであってもよい。音声デコーダ142が音声入力を処理するにつれて中間認識結果を決定することができる。中間認識結果の各々は、音声入力110のトランスクリプションの安定したセグメントに対応する。トランスクリプションの安定したセグメントを判定するための安定性基準について、以下に
図3に関して詳細に説明する。
【0018】
音声デコーダ142は、安定した各セグメントをコンテキスト調整モジュール146に与える。コンテキスト調整モジュール146は、コンテキストモジュール144からの関連するコンテキストを特定する。特定された各コンテキストは重みに関連付けられてもよい。最初に、様々な基準に従って、たとえば、コンテキストのポピュラリティ、コンテキストの時間的な近さ(すなわち、特定のコンテキストが最近の期間において積極的に使用されるかどうか)、またはコンテキストの最近の使用状況もしくはグローバルな使用状況に基づいて、コンテキストごとの基準重みが指定されてもよい。基準重みは、ユーザ入力が特定のコンテキストに関連付けられる可能性に基づいて初期バイアスを作成することができる。コンテキスト調整モジュール146は、関連するコンテキストを特定した後、音声デコーダ142によって与えられた1つまたは複数の安定したセグメントに基づいてコンテキストに対する重みを調整する。重みは、音声入力のトランスクリプションが特定のコンテキストに関連付けられる範囲を示すように調整することができる。
【0019】
コンテキストモジュール144は、コンテキスト148およびコンテキスト148に関連付けられた重みを記憶する。コンテキストモジュール144は、コンピューティングデバイスにユーザデバイス120から1つまたは複数のコンテキスト148を受信させるように構成された発話認識エンジン140のソフトウェア構成要素であってもよい。発話認識エンジン140は、受信されたコンテキスト148をコンテキストモジュール144に記憶するように構成されてもよい。いくつかの例では、コンテキストモジュール144は、ユーザ10向けにカスタマイズされた1つまたは複数のコンテキスト148を生成するように構成することができる。発話認識エンジン140は、生成されたコンテキスト148をコンテキストモジュール144に記憶するように構成されてもよい。
【0020】
コンテキスト148は、たとえば、(1)繰り返される音声入力間の時間間隔、ユーザデバイスのスクリーンの近くの前方カメラからの視線の移動を反映する視線追跡情報などのユーザ活動を表すデータ、(2)使用されるモバイルアプリケーションの種類、ユーザの位置、使用されるデバイスの種類、または現在の時間など、音声入力が発行される環境を表すデータ、(3)検索エンジンにサブミットされた以前の音声検索クエリ、(4)検索エンジンへのコマンド、要求、または検索クエリなど、発話認識エンジンにサブミットされた音声入力の種類を表すデータ、(5)エンティティ、たとえば、特定の範疇のメンバー、場所の名称などを含んでもよい。コンテキストは、たとえば、以前の検索クエリ、ユーザ情報、エンティティデータベースなどから形成することができる。
【0021】
図2は、例示的なコンテキストを示す図である。発話認識エンジンは、「テニス選手」に関連するコンテキスト210、および「バスケットボール選手」に関連するコンテキスト220をコンテキストモジュール、たとえばコンテキストモジュール144に記憶するように構成される。コンテキスト210は、特定のテニス選手、たとえば、「Roger Federer」、「Rafael Nadal」、および「Novak Djokovic」に対応するエンティティを含む。コンテキスト220は、特定のバスケットボール選手、たとえば、「Roger Bederer」、「Rafael Madall」、および「Novak Jocovich」に対応するエンティティを含む。
【0022】
コンテキストモジュール144は、コンテキスト210、220に関する重みを記憶するように構成されてもよい。これらの重みは、音声入力の1つまたは複数のトランスクリプションがコンテキスト210、220に関連付けられる範囲を示してもよい。コンテキスト調整モジュール146は、コンテキスト210、220を特定すると、コンテキスト210、220に関連付けられた重みも特定する。
【0023】
音声デコーダ142は、音声入力110の第1のセグメント111に関する「how many wins does tennis player」という第1の候補トランスクリプションを取得すると、第1のセグメント111に関する第1の候補トランスクリプションをコンテキスト調整モジュール146に与える。コンテキスト調整モジュール146は、コンテキストモジュール144からの関連するコンテキストとしてのコンテキスト210、220、およびコンテキスト210、220に関連付けられた重みを特定する。次いで、コンテキスト調整モジュール146は、音声入力110の第1のセグメント111に関する第1の候補トランスクリプションに基づいてコンテキスト210、220に関するそれぞれの重みを調整するように構成される。特に、コンテキスト調整モジュール146は、音声入力110の以後のセグメントを認識する際に使用できるようにコンテキスト210、220に関するそれぞれの重みを調整することができる。
【0024】
それぞれのコンテキストに関する基準重みは最初、たとえば、テニスに対するバスケットボールに関する音声入力の履歴ポピュラリティに起因して、音声認識をより重い初期重みを有するバスケットボールのコンテキストに偏らせている場合がある。しかし、音声認識は、中間認識結果に基づいて調整され、テニスのコンテキストの方に偏らされる場合がある。この例では、「how many wins does tennis player」という音声入力110の第1の候補トランスクリプションは「テニス選手(tennis player)」というタームを含む。コンテキスト調整モジュール146は、第1の候補トランスクリプションの「テニス選手」というタームに基づいて、コンテキストのうちの1つまたは複数に関する重みを調整するように構成されてもよい。たとえば、コンテキスト調整モジュール146は、コンテキスト210に関する重みを、たとえば「10」から「90」にブーストすることができ、コンテキスト220に関する重みを、たとえば「90」から「10」にデクリメントすることができ、あるいは重みをブーストすることとデクリメントすることの組合せを実行することができる。
【0025】
音声デコーダ142は、調整された重みに部分的に基づいて音声入力110の第2のセグメント112に関する第2の候補トランスクリプションを判定するように構成されてもよい。発話認識エンジン140は、コンテキストに関するそれぞれの重みを調整したことに応答して、コンテキストモジュール144におけるコンテキスト210、220に関する調整された重みを更新するように構成されてもよい。上記の例では、音声デコーダ142は、音声入力110の第2のセグメント112の第2の候補トランスクリプションを判定する場合、調整された重みに基づいてコンテキスト220よりも重い重みをコンテキスト210に与えてもよい。音声デコーダ142は、コンテキスト210への重みに基づいて、「Roger Federer」を音声入力110の第2のセグメント112に関する第2の候補トランスクリプションとして判定してもよい。
【0026】
これに対して、コンテキスト調整モジュール146が第1のセグメント111に関する第1の候補トランスクリプションに基づいてコンテキスト210、220に関する重みを調整しない場合、音声デコーダ142は、コンテキストモジュール144に記憶されたコンテキスト210、220に関する基準重みに基づいて第2のセグメント112に関する第2の候補トランスクリプションを判定する場合がある。コンテキスト210の重みがコンテキスト220の重みよりも重い場合、音声デコーダは、「Roger Bederer」などのバスケットボール選手の名前を第2のセグメント112に関する第2の候補トランスクリプションとして判定する場合がある。したがって、音声デコーダ142は誤った認識結果を提供することがある。
【0027】
音声デコーダ142は、音声入力110のトランスクリプション全体を取得した後、音声入力110のトランスクリプションを出力のために提供してもよい。出力は、ユーザデバイスに直接提供することもでき、あるいはさらなる処理に使用することもできる。たとえば、
図1では、出力認識がテキスト検索クエリ150として使用される。たとえば、音声デコーダ142は、「Roger Federer」を音声入力110の第2のセグメント112に関する第2の候補トランスクリプションとして判定したときに、「how many wins does tennis player Roger Federer have?」というトランスクリプション全体を検索クエリ150として検索エンジン160に出力してもよい。
【0028】
検索エンジン160は、検索クエリ150を使用して検索を実行する。検索エンジン160は、音声認識システム100に結合されたウェブ検索エンジンを含んでもよい。検索エンジン160は、検索クエリ150に応答して1つまたは複数の検索結果170を決定してもよい。検索エンジン160は、検索結果170をユーザデバイス120に与える。ユーザデバイス120は、検索結果170をユーザ10に提示するためのディスプレイインターフェースを含むことができる。いくつかの例では、ユーザデバイス120は、検索結果170をユーザ10に提示するためのオーディオインターフェースを含むことができる。
【0029】
図3は、所与のセグメントについて安定性基準が満たされると判定するための例示的なプロセスを示す図である。音声デコーダ142は、音声入力110のこの部分が安定性基準を満たすと判定するように構成される。
【0030】
音声デコーダ142は、音声入力310の部分311を受信したときに、音声入力310の部分311が安定性基準を満たすかどうかを判定するように構成されてもよい。安定性基準は、この部分がさらなる音声認識によって変更されやすいか否かを示す。
【0031】
安定性基準は、1つまたは複数のセマンティック特性を含んでもよい。意味的に音声入力の一部の後にあるワードが続くことが予期される場合、音声デコーダ142は、その部分が安定性基準を満たさないと判定することができる。たとえば、音声デコーダ142は、音声入力310の部分311を受信したときに、意味的に部分311の後にあるワードが続くことが予期されると判定してもよい。音声デコーダ142は次いで、部分311が安定性基準を満たさないと判定する。いくつかの実装形態では、音声デコーダ142は、音声入力の一部として「mine」を受信したときに、意味的に「mine」という部分の後にあるワードが続くことは予期されないと判定してもよい。音声デコーダ142は次いで、「mine」という部分がセグメントに関する安定性基準を満たすと判定することができる。音声デコーダ142は、セグメントをコンテキスト調整モジュール146に与えてコンテキストに関する重みを調整してもよい。
【0032】
音声デコーダ142はまた、意味的にある部分の後に別のサブワードが続くことが予期される場合にこの部分は安定性基準を満たさないと判定してもよい。たとえば、音声デコーダ142は、「play」を音声入力310の部分312として受信したときに、意味的に部分312の後には「play-er」、「play-ground」、および「play-off」などのサブワードが続くことができるので意味的に部分312の後にあるワードが続くことが予期されると判定してもよい。音声デコーダ142は次いで、部分311が安定性基準を満たさないと判定する。いくつかの実装形態では、音声デコーダ142は、「player」を音声入力の一部として受信したときに、意味的に「player」という部分の後にあるワードが続くことは予期されないと判定してもよい。音声デコーダ142は次いで、「player」という部分がセグメントに関する安定性基準を満たすと判定することができる。音声デコーダ142は、セグメントをコンテキスト調整モジュール146に与えてコンテキストに関する重みを調整してもよい。
【0033】
いくつかの実装形態では、安定性基準は、音声入力310の一部の後に生じる時間遅延を含んでもよい。音声デコーダ142は、音声入力310のこの部分の後の時間遅延がしきい値遅延値を満たす持続時間を有する場合に、音声入力310のこの部分が安定性基準を満たすと判定することができる。音声デコーダ142は、音声入力310のこの部分を受信したときに、この部分が受信された瞬間から音声入力310の後続の部分が受信される瞬間までの時間遅延を測定してもよい。音声デコーダ142は、時間遅延がしきい値遅延値を超える場合にこの部分が安定性基準を満たすと判定することができる。
【0034】
図4は、受信された音声入力に関するトランスクリプションを判定するための例示的な方法400のフローチャートである。説明の都合上、方法400については、方法400を実行するシステムに関して説明する。
【0035】
このシステムは、受信された音声入力をそれが発話された順序で処理し(410)、音声入力の一部を第1のセグメントとして判定する。システムは、音声入力の第1のセグメントに関する第1の候補トランスクリプションを取得する(420)。システムは、第1のセグメントに関する第1の候補トランスクリプションを取得する場合、音声入力の第1のセグメントが安定性基準を満たすかどうかを判定してもよい。音声入力の第1のセグメントが安定性基準を満たす場合、システムは、第1のセグメントに関する第1の候補トランスクリプションを取得してもよい。音声入力の第1のセグメントが安定性基準を満たさない場合、システムは、第1の候補トランスクリプションを取得しなくてもよい。次いで、システムは、音声入力の1つまたは複数の部分を受信し、音声入力の新しい第1のセグメントを認識して、音声入力の新しい第1のセグメントが安定性基準を満たすかどうかを判定してもよい。システムは、
図3によって上記において説明したように、プロセス300を使用して、音声入力の第1のセグメントが安定性基準を満たすと判定してもよい。
【0036】
システムは、コンテキストの集合から第1のセグメントに関連する1つまたは複数のコンテキストを判定する(430)。第1のセグメントに関連する特定のコンテキストは、第1のセグメントによって与えられるコンテキストにも基づいて判定することができる。たとえば、第1のセグメントの特定のキーワードを特定のコンテキストに関連するキーワードとして特定することができる。再び
図2を参照するとわかるように、システムは、「テニス選手」に関連するコンテキストおよび「バスケットボール選手」に関連するコンテキストを特定してもよい。テニス選手コンテキストは、「Roger Federer」、「Rafael Nadal」、および「Novak Djokovic」などのキーワードに関連付けることができる。バスケットボール選手コンテキストは、「Roger Bederer」、「Rafael Madall」、および「Novak Jocovich」などのキーワードに関連付けることができる。システムは、各コンテキストに関する重みを記憶するように構成されてもよい。システムは、コンテキストを特定したときに、コンテキストに関するそれぞれの重みを特定してもよい。コンテキストに関するそれぞれの重みは、音声入力の1つまたは複数のトランスクリプションがコンテキストに関連付けられる範囲を示す。
【0037】
システムは、1つまたは複数のコンテキストの各々に関するそれぞれの重みを調整する(440)。システムは、音声入力の第1の候補トランスクリプションに基づいて各コンテキストに関するそれぞれの重みを調整してもよい。たとえば、音声入力の「how many wins does tennis player」という第1の候補トランスクリプションは、「テニス選手(tennis player)」というタームを含む。システムは、第1の候補トランスクリプションの「テニス選手」というタームに基づいて、コンテキストに関する重みを調整するように構成されてもよい。たとえば、システムは、コンテキストに関する重みを、たとえば「10」から「90」にブーストすることができ、コンテキストに関する重みを、たとえば「90」から「10」にデクリメントすることができ、あるいは重みをブーストすることとデクリメントすることの組合せを実行することができる。
【0038】
いくつかの実装形態では、最も関連性の高いコンテキストの重みのみが調整され(たとえば、大きくされ)、一方、他のすべてのコンテキストが一定に維持される。いくつかの他の実装形態では、他のすべてのコンテキストがデクリメントされ、一方、大部分の関連するコンテキストが一定に維持される。さらに、この2つを任意に適切に組み合わせて実行することができる。たとえば、関連するコンテキストを、別のコンテキストがデクリメントされる量とは異なる量だけ増大させてもよい。
【0039】
システムは、調整された重みに部分的に基づいて音声入力の第2のセグメントに関する第2の候補トランスクリプションを判定する(450)。システムは、コンテキストに関するそれぞれの重みを調整したことに応答して、コンテキストに関する調整された重みを更新してもよい。たとえば、システムは、調整された重みに基づいて、第1のセグメントに対する関連性が第2のコンテキストよりも高いコンテキストとして特定された第1のコンテキストにより重い重みを与えてもよい。音声デコーダは、調整された重み付けられたコンテキストに基づいて、音声入力の第2のセグメントに関する第2の候補トランスクリプションを判定してもよい。このプロセスは、認識すべき音声入力のさらなる部分がなくなるまで継続する。
【0040】
図5は、音声検索を行うための例示的な方法500のフローチャートである。説明の都合上、方法500については、方法500を実行するシステムに関して説明する。
【0041】
システムは音声入力を受信する(510)。システムは、ユーザから音声入力を受信するように構成されてもよい。システムは、ユーザが発話している間音声入力の各セグメントをリアルタイムに受信することができる。
【0042】
システムは、音声入力を受信すると、その音声入力に関するトランスクリプションを判定する(520)。システムは、たとえば
図4に関して上記において説明したようにトランスクリプションを判定してもよい。システムは、音声入力のトランスクリプション全体を判定した後、この音声入力のトランスクリプションを出力のために提供する(530)。システムは、この出力をテキスト検索クエリとして提供してもよい。システムは、テキスト検索クエリを使用して検索を実行し、検索結果を取得することができる。システムは、検索結果をユーザに与えてもよい。いくつかの実装形態では、システムは、検索結果をユーザに提示するためのディスプレイインターフェースを提供することができる。他の実装形態では、システムは、検索結果をユーザに提示するためのオーディオインターフェースを提供することができる。
【0043】
本明細書において説明する主題および動作の実施形態は、デジタル電子回路として実装することもでき、あるいは本明細書において開示する構造およびその構造均等物、またはそれらの1つまたは複数の組合せを含むコンピュータソフトウェア、ファームウェア、またはハードウェアとして実行することもできる。本明細書において説明する主題の実施形態は、1つまたは複数のコンピュータプログラムとして実装することができ、すなわち、データ処理装置によって実行されるコンピュータ記憶媒体上に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールまたはデータ処理装置の動作を制御するためにコンピュータ記憶媒体上に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実装することができる。代替または追加として、プログラム命令は、適切なレシーバ装置に送信されデータ処理装置によって実行されるように情報を符号化するために生成される人工的に生成される伝搬信号、たとえば、機械によって生成される電気信号、光信号、または電磁信号上に符号化することができる。コンピュータ記憶媒体は、コンピュータ可読記憶デバイス、コンピュータ可読記憶基板、ランダムまたはシリアルアクセスメモリアレイまたはデバイス、あるいはそれらのうちの1つまたは複数の組合せであってもよく、あるいはそれらに含めることもできる。さらに、コンピュータ記憶媒体は、伝搬信号ではなく、人工的に生成される伝搬信号において符号化されるコンピュータプログラム命令の送信元または送信先であってもよい。コンピュータ記憶媒体は、1つまたは複数の別個の物理的構成要素または媒体、たとえば、複数のCD、ディスク、またはその他の記憶デバイスであってもよく、あるいはそれらに含めることもできる。
【0044】
本明細書において説明する動作は、1つまたは複数のコンピュータ可読記憶デバイス上に記憶されたデータまたは他の送信元から受信されたデータに対してデータ処理装置によって実行される動作として実現することができる。
【0045】
「データ処理装置」という用語は、一例としてプログラム可能な処理ユニット、コンピュータ、チップ上のシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ、ノートブック、ネットブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、アプリケーションサーバ、記憶デバイス、またはカメラ、カムコーダ、セットトップボックス、モバイルデバイス、ビデオゲームコンソール、ハンドヘルドビデオゲームデバイスなどの家庭用電子機器、またはスイッチ、モデム、ルータなどの周辺デバイス、または一般的に任意の種類のコンピューティングデバイスもしくは電子デバイス、あるいはそれらの複数または組合せを含む、データを処理するためのあらゆる種類の装置、デバイス、および機械を包含する。この装置は、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含むことができる。この装置は、ハードウェアに加えて、当該コンピュータプログラム用の実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォームランタイム環境、仮想マシン、またはそれらののうち1つまたは複数の組合せを構成するコードを含むこともできる。この装置および実行環境は、ウェブサービス、分散コンピューティングインフラストラクチャおよびグリッドコンピューティングインフラストラクチャなどの様々な異なるコンピューティングモデルインフラストラクチャを実現することができる。
【0046】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとしても知られる)は、コンパイル言語またはインタプリタ言語、宣言言語または手続き言語を含む任意の形態のプログラミング言語で書くことができ、スタンドアロンプログラムとして、あるいはモジュール、構成要素、サブルーチン、オブジェクト、またはコンピューティング環境において使用するのに適した他のユニットとして、任意の形態で展開することができる。コンピュータプログラムは、必要ではないが、ファイルシステム内のファイルに対応することができる。プログラムは、他のプログラムまたはデータ(たとえば、マークアップ言語ドキュメントに記憶された1つまたは複数のスクリプト)を保持するファイルの一部に記憶することも、当該プログラム専用の単一のファイルに記憶することも、あるいは複数の協調的なファイル(たとえば、1つまたは複数のモジュール、サブプログラム、またはコードの各部を記憶するファイル)に記憶することもできる。コンピュータプログラムは、1つのコンピュータ上で実行されるように展開することもでき、あるいは1つのサイトに配置された複数のコンピュータまたは複数のサイトにわたって分散され通信ネットワークによって相互接続された複数のコンピュータ上で実行されるように展開することもできる。
【0047】
本明細書において説明するプロセスおよび論理フローは、1つまたは複数のコンピュータプログラムを実行し、入力データを処理して出力を生成することによってアクションを実行する1つまたは複数のプログラム可能な処理ユニットによって実行することができる。プロセスおよび論理フローを専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって実行することもでき、装置を専用論理回路として実装することもできる。
【0048】
コンピュータプログラムを実行するのに適した処理ユニットは、一例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つまたは複数の処理ユニットを含む。一般に、処理ユニットは、読取り専用メモリまたはランダムアクセスメモリあるいはその両方から命令およびデータを受信する。コンピュータの基本的な要素は、命令に従ってアクションを実行するための処理ユニットと、命令およびデータを記憶するための1つまたは複数のメモリデバイスである。一般に、コンピュータはまた、データを記憶するための1つまたは複数の大容量記憶デバイス、たとえば、磁気ディスク、磁気光ディスク、または光ディスクを含むか、あるいはそのような大容量記憶デバイスからデータを受信するか、それにデータを転送するか、あるいはその両方を行うように動作可能に結合される。しかし、コンピュータはそのようなデバイスを有する必要がない。さらに、コンピュータは、別のデバイス、たとえば、モバイル電話、携帯情報端末(PDA)、モバイルオーディオプレーヤまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)レシーバ、ネットワークルーティングデバイス、またはポータブル記憶デバイス(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ)などに埋め込むことができる。コンピュータプログラム命令およびデータを記憶するのに適したデバイスは、すべての形態の非揮発性メモリ、一例として半導体メモリデバイス、たとえば、EPROM、EEPROM、およびフラッシュメモリデバイス、ならびに磁気ディスク、たとえば、内部ハードディスクまたは取外し可能なディスク、光磁気ディスク、ならびにCD-ROMディスクおよびDVD-ROMディスクを含む、メディアデバイスおよびメモリデバイスを含む。処理ユニットおよびメモリは、専用論理回路によって補助することもでき、あるいは専用論理回路に組み込むこともできる。
【0049】
本明細書において説明する主題の実施形態は、ユーザとの相互作用を可能にするために、ユーザに情報を表示するためのディスプレイデバイス、たとえば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタ、ならびにユーザがコンピュータに入力を与えることができるキーボードおよびポインティングデバイス、たとえば、マウスまたはトラックボールを有するコンピュータ上で実施することができる。他の種類のデバイスを使用してユーザとの相互作用を実現することもでき、たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、たとえば、視覚的フィードバック、聴覚的フィードバック、または触覚的フィードバックであってもよく、ユーザからの入力は、音響入力、発話入力、または触覚的入力を含む任意の形態で受信することができる。さらに、コンピュータは、ユーザによって使用されるデバイスにドキュメントを送り、そのデバイスからドキュメントを受信することによってユーザと相互作用することができ、たとえば、ウェブブラウザから受信された要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送ることによってユーザと相互作用することができる。
【0050】
本明細書において説明する主題の実施形態は、たとえば、データサーバとしてのバックエンド構成要素を含むか、あるいはミドルウェア構成要素、たとえば、アプリケーションサーバを含むか、あるいはフロントエンド構成要素、たとえば、ユーザが本明細書において説明する主題の実装形態と相互作用するのを可能にするグラフィカルユーザインターフェースもしくはウェブブラウザ、またはルーティングデバイス、たとえば、ネットワークルータを有するクライアントコンピュータを含むか、あるいは1つまたは複数のそのようなバックエンド構成要素、ミドルウェア構成要素、またはフロントエンド構成要素の任意の組合せを含むコンピューティングシステムにおいて実施することができる。システムの構成要素は、任意の形態または媒体のデジタルデータ通信、たとえば、通信ネットワークによって相互接続することができる。通信ネットワークの例には、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)、インターネットワーク(たとえば、インターネット)、およびピアツーピアネットワーク(たとえば、アドホックピアツーピアネットワーク)が含まれる。
【0051】
コンピューティングシステムはクライアントとサーバとを含むことができる。クライアントとサーバは、一般に互いに離れており、通常、通信ネットワークを介して相互作用する。クライアントとサーバの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じる。いくつかの実施形態では、サーバが(たとえば、クライアントデバイスと相互作用するユーザにデータを表示し、このユーザからユーザ入力を受信することを目的として)クライアントデバイスにデータ(たとえば、HTMLページ)を送信する。クライアントデバイスにおいて生成されたデータ(たとえば、ユーザの相互作用の結果)をクライアントデバイスからサーバにおいて受信することができる。
【0052】
1つまたは複数のコンピュータのシステムは、動作時にシステムに特定のアクションを実行させるシステム上にインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを有することによって、それらのアクションを実行するように構成することができる。1つまたは複数のコンピュータプログラムは、データ処理装置によって実行されたときに装置にアクションを実行させる命令を含むことによって特定のアクションを実行するように構成することができる。
【0053】
本明細書は多数の特定の実装形態詳細情報を含むが、これらは任意の発明または請求可能なものの範囲に対する制限として解釈されるべきではなく、特定の発明の特定の実施形態に固有の特徴の説明として解釈されるべきである。本明細書において別々の実施形態の文脈で説明した特定の特徴を単一の実施形態において組み合わせて実施することもできる。逆に、単一の実施形態の文脈において説明した様々な特徴を複数の実施形態において別々に実施することもでき、あるいは任意に適切に部分的に組み合わせて実施することもできる。さらに、上記では各特徴が特定の組合せにおいて作用するものとして記載され、場合によっては最初はそのようなものとして請求されることがあるが、請求された組合せにおける1つまたは複数の特徴を場合によっては組合せから削除することができ、請求された組合せを部分的組合せまたは部分的組合せの変形例の対象とすることができる。
【0054】
同様に、動作は図面において特定の順序で示されているが、このことは、そのような動作を図示された特定の順序で実行するかまたは番号通りに実行する必要があると理解されるべきではなく、所望の結果を実現するためにすべての図示された動作を実行する必要があると理解されるべきではない。いくつかの状況では、マルチタスキングおよび並列処理が有利である場合がある。さらに、上述の実施形態における様々なシステム構成要素の分離は、すべての実施形態においてそのような分離が必要であると理解されるべきではなく、一般に、上述のプログラム構成要素およびシステムを単一のソフトウェア製品として一体化することもでき、あるいは複数のソフトウェア製品としてパッケージングすることもできると理解されるべきである。
【0055】
以上、主題の特定の実施形態について説明した。他の実施形態も特許請求の範囲内である。場合によっては、特許請求の範囲に記載されたアクションを異なる順序で実行することができ、それでも所望の結果を実現することができる。さらに、添付の図に示されているプロセスは、所望の結果を実現するうえで、必ずしも図示の特定の順序を必要とせず、また番号通りである必要はない。いくつかの実装形態では、マルチタスキングおよび並列処理が有利である場合がある。したがって、他の実施形態も以下の特許請求の範囲内である。