音声認識文法の作成方法¶
はじめに¶
音声認識文法は、音声認識器に与える認識可能な文法(単語の構造)を定義し ます。
OpenHRIのJulius音声認識コンポーネントは、W3C-SRGS形式を使用して音声認識 文法を定義します。
ここでは、W3C-SRGS形式の音声認識文法について解説するとともにOpenHRIで用 意している文法作成用のツールについて説明します。
W3C-SRGS音声認識文法¶
W3C-SRGS(Speech Recognition Grammar Specification)は音声認識文法を定義 する規格の1つです。使用するXML形式のタグを以下に示します。
タグ¶
- lexicon
- W3C-PLS辞書(次のセクション)のURIを定義します。 任意。
- rule
- IDによって区別された各文法を定義します。 IDは音声認識文法の相互参照や、Julius音声認識コンポーネントによって認識されるアクティブな文法を 切り換えるのに利用します。
- item
- 認識される単語や文を定義します。repeatプロパティで繰り替えされる回数を指定できます。
- one-of
- 子項目で定義される文法がすべて許容できることを示します。
- ruleref
- uriで指定される文法を参照します。
例¶
<?xml version="1.0" encoding="UTF-8" ?>
<grammar xmlns="http://www.w3.org/2001/06/grammar"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/06/grammar
http://www.w3.org/TR/speech-grammar/grammar.xsd"
xml:lang="jp"
version="1.0" mode="voice" root="main">
<lexicon uri="sample-lex-jp.xml"/>
<rule id="main">
<one-of>
<item><ruleref uri="#greet" /></item>
<item><ruleref uri="#command" /></item>
</one-of>
</rule>
<rule id="greet">
<one-of>
<item>おはよう</item>
<item>こんにちは</item>
<item>こんばんは</item>
<item>さようなら</item>
</one-of>
</rule>
<rule id="command">
<item repeat="0-1">その</item>
<one-of>
<item>りんご</item>
<item>ケーキ</item>
<item>リモコン</item>
</one-of>
<item>を</item>
<one-of>
<item>取って</item>
<item>渡して</item>
</one-of>
<item repeat="0-1">ください</item>
</rule>
</grammar>
W3C-PLS音声認識辞書¶
W3C-PLS(Pronunciation Lexicon Specification)は音声認識辞書を定義する規格の1つです。 次のタグからなるXMLフォーマットを使用します。
タグ¶
- lexeme
- 表記と発音のセットを定義します。
- grapheme
- 単語の表記を定義します。
- phoneme
- 単語の発音を定義します。
例¶
<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
alphabet="x-KANA" xml:lang="jp">
<lexeme>
<grapheme>こんにちは</grapheme>
<phoneme>{{x-KANA|こんにちわ}}</phoneme>
</lexeme>
<lexeme>
<grapheme>リモコン</grapheme>
<phoneme>{{x-KANA|りもこん}}</phoneme>
</lexeme>
<lexeme>
<grapheme>ケーキ</grapheme>
<phoneme>{{x-KANA|けーき}}</phoneme>
</lexeme>
<lexeme>
<grapheme>さようなら</grapheme>
<phoneme>{{x-KANA|さよーなら}}</phoneme>
</lexeme>
<lexeme>
<grapheme>取って</grapheme>
<phoneme>{{x-KANA|とって}}</phoneme>
</lexeme>
<lexeme>
<grapheme>こんばんは</grapheme>
<phoneme>{{x-KANA|こんばんわ}}</phoneme>
</lexeme>
<lexeme>
<grapheme>りんご</grapheme>
<phoneme>{{x-KANA|りんご}}</phoneme>
</lexeme>
<lexeme>
<grapheme>を</grapheme>
<phoneme>{{x-KANA|を}}</phoneme>
</lexeme>
<lexeme>
<grapheme>ください</grapheme>
<phoneme>{{x-KANA|ください}}</phoneme>
</lexeme>
<lexeme>
<grapheme>渡して</grapheme>
<phoneme>{{x-KANA|わたして}}</phoneme>
</lexeme>
<lexeme>
<grapheme>その</grapheme>
<phoneme>{{x-KANA|その}}</phoneme>
</lexeme>
<lexeme>
<grapheme>おはよう</grapheme>
<phoneme>{{x-KANA|おはよー}}</phoneme>
</lexeme>
</lexicon>
ツール¶
検証ツール¶
“validatesrgs”はW3C-SRGS形式の文法を検証することができるツールです。
検証ツールは以下のコマンドで実行できます。:
$ validatesrgs [grammarfile]
文法が正しい形式で書かれていれば以下のようなメッセージが出力されます。:
$ validatesrgs sample-en.grxml
Validating SRGS file sample-en.grxml...
SRGS file is valid.
Validating PLS file sample-lex-en.xml...
PLS file is valid.
文法の形式が正しくないとき、以下のようなエラーメッセージが出力されます。:
$ validatesrgs sample-invalid.grxml
Validating SRGS file sample-invalid.grxml...
[error] Invalid SRGS file.
Element '{http://www.w3.org/2001/06/grammar}one-of': Missing child element(s). Expected is ( {http://www.w3.org/2001/06/grammar}item )., line 12
視覚化ツール¶
OpenHRIは、W3C-SRGS形式の文法を検証するより強力なツールを用意しています。 “juliustographviz”は、音声認識文法をグラフ表示させて正しさをチェックするツールです。
以下のコマンドでグラフ描画処理を行います。:
$ srgstojulius sample-jp.grxml | juliustographviz | dot -Txlib
以下のような画像が出力されます。:
単語辞書生成ツール¶
W3C-SRGS音声認識文法の作成が終わったら、W3C-PLS辞書を用意しなければならないことがあります (音声認識文法の中に特殊な読み方をする単語があった場合、必要になります)。
OpenHRIは、W3C-SRGS文法からW3C-PLS辞書を自動的に生成するツールを用意しています。
“srgstopls”ツールは以下のコマンドで実行できます。:
$ srgstopls sample-jp.grxml > sample-lex-jp.xml
このツールは現在、英語読み(julius-voxforge辞書を使用)と日本語読み(julius-runkit辞書を使用)をサポートしています。
Note
辞書に含まれない単語は出力XMLファイルの該当個所が空欄になります。出力されたXMLファイルは必ずチェックし、空欄箇所には手動で単語を登録してください。