Rule Grammar
使用 grammar 文件 进行语音识别
在 AmiVoice API Private 中可用的"音声入力_ルール"引擎(-a-rule-input-private)中,可以使用用户创建的 grammar 文件 进行语音识别。例如,在 IVR 系统中进行客户信息的语音识别时,对于确认会员号码等基于特定 rule 且仅使用有限词汇的预期发话场景,这种方法非常有效。
Grammar 文件 格式
"音声入力_ルール"引擎可以使用 JSpeech Grammar Format(JSGF)描述的 grammar 文件 (JSGF grammar 文件 ),或者 Speech Recognition Grammar Specification(SRGS)描述的 grammar 文件 (SRGF grammar 文件 )。使用这些格式,可以有限地描述希望语音识别引擎识别的短语(单词集)和标签(当短语被识别时作为附加信息返回给应用程序的字符串)。如果要新建 grammar 文件,推荐使用 JSGF grammar 文件。 这里简要说明两种 grammar 文件 的规范,有关各 grammar 文件 规范的详细信息,请参阅以下网页:
- JSpeech Grammar Format: https://www.w3.org/TR/jsgf/
- Speech Recognition Grammar Specification Version 1.0: https://www.w3.org/TR/speech-grammar/
JSGF Grammar 文件 简易规范
JSGF grammar 文件 由以下元素组成:
Header 信息
描述字符编码信息和国家/语言信息。"header 信息"的格式如下:
#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 【grammar 名称】;
Grammar 名称应指定去除路径部分和扩展名部分后的 grammar 文件 名。
例:
grammar Sample;
Rule 定义语句
描述实际希望语音识别引擎识别的短语和标签的定义。一个 grammar 文件 中可以描述多个 rule 定义语句。 Rule 分为 public rule 和 private rule 两种。Public rule 单独规定希望语音识别引擎识别的短语或标签。Private rule 被其他 rule 引用。 Public rule 的"rule 定义语句"格式如下:
public <【rule 名】> = 【rule 定义】;
Private rule 的" rule 定义语句"格式如下:
<【rule 名】> = 【rule 定义】;
关于 rule 定义,请参阅rule 定义。
例:
public <sample1> = 早上好 <sample2>;
<sample2> = AmiVoice\あみぼいす;
Rule 定义
Rule 定义由以下元素组成:
单词
描述希望语音识别引擎识别的单词。单词可以串行或并行描述。单词的"显示"和"读音"用\(反斜杠)分隔。对于一个"显示"有多个"读音"时,各读音用/(斜杠)分隔。格式如下:
| 符号 | 说明 |
|---|---|
( ) | 表示"集合化" |
| | 表示"并行" |
\ | 表示显示和读音的分隔符 |
/ | 表示读音的分隔符 |
串行示例:
・・・ AmiVoice\あみぼいす/あみ 语音识别\おんせいにんしき 引擎 ・・・
并行示例:
・・・ ( AmiVoice\あみぼいす/あみ | 语音识别\おんせいにんしき | 引擎 ) ・・・
关于单词的描述方式,还请确认以下内容:
- "读音"中只能指定平假名、"ー"(长音符号)和"."(句点)。
- 在描述"读音"时,无论使用"ー"(长音符号)还是不使用,在语音识别引擎内部都会作为相同的"读音"处理。基于这个同一视 rule,请避免注册重复的单词。
例:
「かー」=「かあ」 「きゃー」=「きゃあ」
「きー」=「きい」
「くー」=「くう」 「きゅー」=「きゅう」
「けー」=「けい」=「けえ」
「こー」=「こう」=「こお」 「きょー」=「きょう」=「きょお」等
- 在"读音"中使用"は"或"へ"时,这些总是被视为"h a"或"h e"。它们不会被视为"w a"或"e"。
- 在描述"读音"时,使用"."(句点)可以强制不应用上述同一视 rule。 例:
「やまのうち」 → "やまのーち"
「やまの.うち」 → "やまのうち"
「りくうんきょく」 → "りくーんきょく"
「りく.うんきょく」→ "りくうんきょく" 等
Rule 名
当想要引用同一 grammar 文件 内的不同 rule 时使用。rule 名也可以串行或并行描述。格式如下:
<【rule 名】>
例:
・・・ こんにちは <name> さん・・・
特殊 rule 名
也可以描述对特殊 rule 的引用。表示特殊 rule 的 rule 名如下:
| Rule 名 | 说明 |
|---|---|
<NULL> | 表示什么都没有的特殊 rule |
<VOID> | 表示绝对不匹配任何发话的特殊 rule |
<GARBAGE> | 表示匹配任何发话的特殊 rule |
例:
・・・ こんにちは ( <NULL> {no-name} | アミ {AMI} ) ・・・
・・・ こんばんは <VOID> ・・・
<GARBAGE>+ ( おはよう | おやすみ ) <GARBAGE>+
特殊 rule <GARBAGE> 是 AmiVoice 对 JSGF 的独有扩展,不包含在标准 JSGF 规范中。
重复
可以描述"1 次"、"0 或 1 次"、"0 次或以上重复"、"1 次或以上重复"四种重复次数。格式如下:
| 符号 | 说明 |
|---|---|
[ ] | 表示"0 或 1 次"的符号 |
* | 表示"0 次或以上重复"的后置符号 |
+ | 表示"1 次或以上重复"的后置符号 |
"1 次"示例:
・・・ AmiVoice\あみぼいす 语音识别\おんせいにんしき 引擎 ・・・
"0 或 1 次"示例:
・・・ [ AmiVoice\あみぼいす ] ・・・
・・・ [ AmiVoice\あみぼいす 语音识别\おんせいにんしき 引擎 ] ・・・
"0 次或以上重复"示例:
・・・ AmiVoice\あみぼいす * ・・・
・・・ ( AmiVoice\あみぼいす 语音识别\おんせいにんしき 引擎 )* ・・・
"1 次或以上重复"示例:
・・・ AmiVoice\あみぼいす + ・・・
・・・ ( AmiVoice\あみぼいす 语音识别\おんせいにんしき 引擎 )+ ・・・