ルールグラマ
グラマファイルを用いた音声認識
AmiVoice API Private で利用可能な「音声入力_ルール」エンジン(-a-rule-input-private)では、ユーザが作成したグラマファイルを用いて音声認識を行うことができます。たとえば、IVR システムで顧客情報の音声認識を行う場合に、会員番号の確認など、一定のルールに基づいて限られた単語のみが用いられる発話が期待される場面などに有効です。
グラマファイルフォーマット
「音声入力_ルール」エンジンでは、JSpeech Grammar Format(JSGF)で記述されたグラマファイル(JSGF グラマファイル)、または、Speech Recognition Grammar Specification(SRGS)で記述されたグラマファイル(SRGF グラマファイル)を使用することができます。これらのフォーマットを使用することで音声認識エンジンに認識して欲しいフレーズ(単語のセット)とタグ(フレーズが認識された時に付随情報としてアプリケーションに返される文字列)を限定的に記述することができます。新しくグラマファイルを作成する場合は JSGF グラマファイルを推奨します。 ここでは、2つのグラマファイルの仕様について簡単な説明をしますが、それぞれのグラマファイルの仕様の詳細については、以下の Web ページを参照してください。
- JSpeech Grammar Format: https://www.w3.org/TR/jsgf/
- Speech Recognition Grammar Specification Version 1.0: https://www.w3.org/TR/speech-grammar/
JSGF グラマファイル簡易仕様
JSGF グラマファイルは、以下の要素で構成されます。
ヘッダ情報
文字エンコーディング情報、および、国・言語情報を記述します。「ヘッダ情報」の形式は、以下の通りです。
#JSGF V1.0;
#JSGF V1.0 <文字エンコーディング情報>;
#JSGF V1.0 <文字エンコーディング情報> <国・言語情報>;
文字エンコーディング情報、および、国・言語情報は、記述を省略することができます。
例:
#JSGF V1.0;
#JSGF V1.0 MS932;
#JSGF V1.0 MS932 ja-JP;
#JSGF V1.0 UTF-8;
grammar 文
グラマ名を記述します。「grammar 文」の形式は、以下の通りです。
grammar 【グラマ名】;
グラマ名には、グラマファイル名からパス部分や拡張子部分を除いた文字列を指定するようにしてください。
例:
grammar Sample;
ルール定義文
実際に音声認識エンジンに認識して欲しいフレーズとタグの定義を記述します。一つのグラマファイルの中に複数のルール定義文を記述することができます。 ルールには、public ルー ルと private ルールの二種類があります。public ルールは、それ単独で音声認識エンジンに認識して欲しいフレーズやタグを規定するものです。private ルールは、他のルールから参照されるものです。 public ルールの「ルール定義文」の形式は、以下の通りです。
public <【ルール名】> = 【ルール定義】;
private ルールの「ルール定義文」の形式は、以下の通りです。
<【ルール名】> = 【ルール定義】;
ルール定義については、ルール定義を参照してください。
例:
public <sample1> = おはよう <sample2>;
<sample2> = AmiVoice\あみぼいす;
ルール定義
ルール定義は、以下の要素で構成されます。
単語
音声認識エンジンにより認識して欲しい単語を記述します。単語は、直列ないし並列に記述することができます。単語の「表記」と「読み」は\(バックスラッシュ)で区切ります。一つの「表記」に対して複数の「読み」を記述する場合は、それぞれの読みを/(スラッシュ)で区切ります。形式は、以下の通りです。
| 記号 | 説明 |
|---|---|
( ) | 「集合化」を示す |
| | 「並列」を示す |
\ | 表記と読みの区切りを示す |
/ | 読みの区切りを示す |
直列の例:
・・・ AmiVoice\あみぼいす/あみ 音声認識\おんせいにんしき エンジン ・・・
並列の例:
・・・ ( AmiVoice\あみぼいす/あみ | 音声認識\おんせいにんしき | エンジン ) ・・・
単語の記述の仕方については、以下も確認してください。
- 「読み」 に指定できる文字列は、ひらがなと「ー」(長音記号)と「.」(ピリオド)のみです。
- 「読み」 を記述する際に、「ー」(長音記号)を使用して記述しても、「ー」(長音記号)を使用せずに記述しても、音声認識エンジン内部では、共に同じ「読み」 として扱います。この同一視ルールに基づき、重複するような単語の登録はしないようにしてください。
例:
「かー」=「かあ」 「きゃー」=「きゃあ」
「きー」=「きい」
「くー」=「くう」 「きゅー」=「きゅう」
「けー」=「けい」=「けえ」
「こー」=「こう」=「こお」 「きょー」=「きょう」=「きょお」など
- 「読み」 の中に「は」や「へ」を使用する場合、これらは常に「h a」や「h e」として扱います。「w a」や「e」として扱われることはありません。
- 「読み」 を記述する際に、「.」(ピリオド)を使用することで、上記の同一視ルールを強制的に行わないような記述が可能になります。 例:
「やまのうち」 → “やまのーち”
「やまの.うち」 → “やまのうち”
「りくうんきょく」 → “りくーんきょく”
「りく.うんきょく」→ “りくうんきょく” など
ルール名
同じグラマファイル内の異なるルールを参照したい場合に記述します。ルール名も直列ないし並列に記述することができます。形式は、以下のとおりです。
<【ルール名】>
例:
・・・ こんにちは <name> さん・・・
特殊ル ール名
特殊ルールへの参照を記述することもできます。特殊ルールを表すルール名は、以下のとおりです。
| ルール名 | 説明 |
|---|---|
<NULL> | 何もないことを意味する特殊ルール |
<VOID> | どんな発話にも絶対に合致しないことを意味する特殊ルール |
<GARBAGE> | どんな発話にも合致することを意味する特殊ルール |
例:
・・・ こんにちは ( <NULL> {no-name} | アミ {AMI} ) ・・・
・・・ こんばんは <VOID> ・・・
<GARBAGE>+ ( おはよう | おやすみ ) <GARBAGE>+
特殊ルール <GARBAGE> は、AmiVoice が JSGF に対して独自に拡張した仕様であり、標準の JSGF の仕様には含まれません。
繰り返し
繰り返し回数として「1回」、「0または1回」、「0回以上の繰り返し」、「1回以上の繰り返し」の4種類の記述ができます。形式は、以下の通りです。
| 記号 | 説明 |
|---|---|
[ ] | 「0または1回」を示す記号 |
* | 「0回以上の繰り返し」を示す後置記号 |
+ | 「1回以上の繰り返し」を示す後置記号 |
「1回」の例:
・・・ AmiVoice\あみぼいす 音声認識\おんせいにんしき エンジン ・・・
「0または1回」の例:
・・・ [ AmiVoice\あみぼいす ] ・・・
・・・ [ AmiVoice\あみぼいす 音声認識\おんせいにんしき エンジン ] ・・・
「0回以上の繰り返し」の例:
・・・ AmiVoice\あみぼいす * ・・・
・・・ ( AmiVoice\あみぼいす 音声認識\おんせいにんしき エンジン )* ・・・
「1回以上の繰り返し」の例:
・・・ AmiVoice\あみぼいす + ・・・
・・・ ( AmiVoice\あみぼいす 音声認識\おんせいにんしき エンジン )+ ・・・
タグ
ルール定義の中にタグ(フレーズが認識された時に付随情報としてアプリケーションに返される文字列)を記述することができます。タグを用いることで、認識されたフレーズから、認識されたフレーズを構成する単語のセットとは別の情報を取り出すことが可能になります。同じ意味を持つ異なるフレーズに同じタグを設定することで、タグ文字列を受け取るアプリケーション側で言い回しや言語に依存しない処理の実現を容易にします。形式は、以下の通りです。
{【タグ】}