投稿者: nishimotz

  • 電子書籍 DAISY

    今年度、特定非営利活動法人 全国視覚障害者情報提供施設協会さんの「視覚障害者総合情報ネットワーク事業」に関わらせていただくことになりました。

    昨日は電子書籍プロジェクトの会合に出席しました。視覚障害をお持ちの方に広く使われている DAISY という技術に関する活動です。

    現在日本で普及している DAISY 図書は、音訳された音声を CD-ROM で流通するシステムで、要素技術として MP3 や SMIL などが使われています。

    世界的には新しいバージョンであるマルチメディア DAISY が普及し始めています。墨字の書籍を音訳するには時間や人手がかかりますが、テキストのまま流通させてプレイヤー側で音声合成を用いることにすれば、より迅速に電子書籍を流通させることができます。また、XHTML の機能をフルに生かしたマルチメディア DAISY は拡大図書の役割を果たしたり、手話の動画を付与して聴覚障害の方に利用していただいたり、学習障害の子供の支援に用いることが期待されています。

    今回のプロジェクトでは、特にテキスト音声合成の利用を前提としたテキストDAISYに注目し、私はこの技術の普及に向けた活動をお手伝いすることになりました。

    日本ではこれまで著作権法の制約で書籍のバリアフリー化が盛んではありませんでしたが、改正著作権法の施行(2010年1月)に伴い、新しい試みが可能になると期待されています。

    Webアクセシビリティでも似たような話が。。。と思ったことは、やはり海外製のオーサリングツールやブラウザの技術が進歩しており、日本語対応が遅れているのだそうです。

    データフォーマットとしてのDAISYの特徴は、「章」「節」といった書籍の持つ階層構造と、メディアの同期情報のみが記述され、ナビゲーションはブラウズ技術にゆだねる、ということにあると思います。

    当事者のお話を伺うと、教育や就労といった分野に限定しても、視覚障害をお持ちの方は実にさまざまな分野の書籍に対するニーズを持っておられます。

    支援技術を生かすコンテンツの選定と制作、コンテンツを生かす支援技術の改良、出版におけるビジネスモデルとの整合、などなど、検討の余地がたくさんありそうな分野です。DAISY という技術の認知度ももっと高まる必要があると感じます。

    • 2009年7月8日:一部の表記や誤字を修正しました。
  • rubyhtk

    HTKに関する先日の考察を踏まえて ruby による HTK ラッパーを実装してみました。

    いまは連続数字音声認識のタスク(CENSREC-4の音声をrawからwavに変換したデータが対象)に依存したスクリプトになっているのですが、

    $ rake clean

    $ rake

    $ rake train

    $ rake hvite

    $ rake hresults

    のように使うことができます。

    実装における基本的な考え方は

    • インタフェースが複雑であったり安定しない場合は、目的に応じて自前のラッパーをかぶせる
    • 手続きではなくモデルに着目してクラスを設計する

    というところでしょうか。もはや HInit と HCompV と HRest の違いで初心者が躓くのは時代遅れのような気もするし、やりたいことをコーディングするときに入出力をファイル名やディレクトリ名で指定することも直感的ではないと思うのです。

    下記では、音響モデルをコーパスで学習しながら精緻化するプロセスを、Model のインスタンス配列によって扱っています。

    models = []
    models << Model.first_train(data0,label)
    while models.last.num_mixes < TARGET_NUM_MIXES
    models << models.last.mixup_train(data0,label)
    end
    models.last.vite(data1,recout)
    

    first_train メソッドはプロトタイプのモデルを作る処理、HCompV で平均と分散の初期化をする処理、HERest で最初の連結学習を行う処理をまとめてラップしています。クラスメソッドになっており、新しい Model クラスのインスタンスを返します。

    mixup_train メソッドは Model のインスタンスメソッドです。HHEd でガウス分布の混合数をひとつ増やし、HERest を再度実行し、学習された新しいモデルのインスタンスを返します。メソッドの中で新しいインスタンスが生成されています。

    Model クラスのインスタンスの実体は、一時ディレクトリに作られる MMF ファイルですが、ファイルやディレクトリに通し番号を付けて管理する作業を Model クラス実装の中に隠しています。

    Model のインスタンスについて、dir メソッドで MMF が保存されたディレクトリ名を返します。また num_mixes メソッドは混合数を返します。

    認識結果を得る HVite コマンドは Model の vite メソッドにラップされています。vite メソッドの引数で認識対象データを指定します。MFCC (*.mfc) ファイルのリストが格納されたスクリプトファイル名を指定しています。

    まだまだ中途半端な実装ですが、なかなか興味深い方向性かなと思っています。

    R のクラス設計をお手本に考えると、HVite や HResults などの出力をクラス化するのもよさそうです。

    • 2009-06-27 : メソッドの説明を加筆しました。
    • 2009-07-02 : wav 変換されたデータが対象であることを加筆しました。
  • ヒューマンインターフェースとソフトウェア開発

    音声認識の研究者に広く使われているHTKというソフトウェアがあります。

    数ヶ月前にリリースされた Ver 3.4.1 をいじりながら、多くの人が「HTKは難しい」と言うのはなぜなのか、改めて考え直しています。

    「そんな難しくないですよ」と言いながら、いろいろ試したり説明をしようとしたら、私自身が落とし穴にはまり、落ち込んでしまうこともあります。

    HTK は HMM(隠れマルコフモデル)による音声認識のためのツールキットです。最初はケンブリッジ大学で開発され、有償ソフトウェアになったのは 1993 年だそうです。その後 Microsoft に買収され、現在はケンブリッジの手に戻って、無償で配付されています。最新版の英語マニュアル(HTKBook)は384ページにもおよぶ膨大なPDFファイルです。

    十数年にわたる音声認識研究の歴史が詰まっている HTK は、最近に至るまで拡張が続いています。今回、久しぶりにチュートリアルを精読してみたら、知ってるつもりで知らなかった機能にいくつか気づくことができました。と同時に、拡張を繰り返してきたツール全体の仕様の見通しの悪さ、コマンドラインオプションの覚えにくさ、などなど、課題もいろいろあるように感じました。

    HTKBookのチュートリアルをできるだけそのまま実行してみようとして、チュートリアルの説明と挙動が異なる箇所があること、配付サイトで公開されているファイルだけではチュートリアルを完全に再現できないこと、などにも気づきました(私の誤解かも知れませんが)。

    フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで

    フリーソフトでつくる音声認識システム – パターン認識・機械学習の初歩から対話システムまで

    荒木先生が書かれた参考書は HTK の手っ取り早い入門として学生からも評判がよいのですが、突っ込んで使いこなしたい場合には、自力でマニュアルを読んで理解をしなくてはなりません。

    最近、信号処理やパターン認識の分野で Matlab や R などスクリプト言語系のツールが普及しつつあります。性能や言語仕様の利便性などの議論はともかく、学習の容易さという点からは高く評価できるでしょう。

    また、個人的には Ruby on Rails の勉強において script/console がとても有用であることに気づきました。いわゆる「コード補完」が有効であることにも驚いたし、irb で “hello”.methods を実行すればStringクラスのメソッド一覧が簡単に見られる、というのも目からウロコでした。

    プログラミング言語がプログラマーと言語処理系のインタフェースであるとすれば、「ユーザインタフェースの原則」がプログラミングという行為においても重要ではないかと思います。

    • やりたいことが完結に記述できること
    • やりたいことがコマンド名、関数名、メソッド名として「連想が容易」であること
    • 連想された記述法が正しいかどうか、対話的にフィードバックを得られること

    などがインタプリタ系言語の嬉しいところです。そう考えていると、

    において議論してきた「インタフェースの原則」と重なってきます。

    HTKでは数千個という膨大な学習データを扱ったり、膨大なパラメータ数の統計モデルを学習することができます。しかし、やりたいことを完結に記述できるか、コマンドやオプションを容易に連想できるか、操作のフィードバックが容易に得られるか、などと考えると、あちこちに落とし穴(ノーマンの7段階モデル流に言えば「淵」)がありそうです。

    HTKについて考察していると「音声認識による機械と人間のインタフェース」にとどまらず「HTK と研究者のインタフェース」についても考えたくなってしまいます。