音声認識文法の作成方法

はじめに

音声認識文法は、音声認識器に与える認識可能な文法(単語の構造)を定義し ます。

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

以下のような画像が出力されます。:

sample-grammar-ja.png

単語辞書生成ツール

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ファイルは必ずチェックし、空欄箇所には手動で単語を登録してください。