sumikko.tokyo

espeak による日本語 TTS 研究、考察、乱用

espeak は主に欧米言語のテキスト読み上げ、 つまり文字を音声にする TTS "text-to-speech" ソフトウェアです。

Attention!

このシリーズはこのトップページを除き、 その内容に関してかなり不真面目というか、 寒いジョークの流れを含みます。

「うんちくの前に、目次やで?」

  1. espeak ちゃんのカタコト日本語 TTS デモ:その壱
    • いろは歌をこなし順風満帆に思えたその時、京都が襲いかった。
  2. espeak ちゃんのカタコト日本語 TTS デモ:その弐
    • でっち上げ単語で超えられぬ壁、しかし奥義 direct phoneme が!
  3. espeak ちゃんのカタコト日本語 TTS デモ:その三
    • 新たな決意を胸に、万葉集 Any% RTA を走る。

espeak の概略

日本語には対応していないのですが、

  1. ほぼGPL 的 free である。Debian main パッケージとして使える。
  2. リアルタイム合成をコンパクトなサイズ、低 CPU 負荷で可能にする。
  3. UNIX コマンド的な使い方がしやすい (パイプ経由で発声させたり)。

などの特徴があります。

このシリーズにおける espeak の扱い

多言語同時対応リアルタイム TTS としての例示です。 日本語の音声合成はかなり癖のあるものになっていますが、 続くシリーズ記事でのコメントにも記す通り、 一定の縛りを設けた結果でもあります。

縛りルール

espeak は低負荷リアルタイム TTS なので、 その音声合成を可能にする入力テキストも簡素にします。

具体的には espeak に改変をしない、 ASCII 文字のみで運用する、というもの。

espeak ソースコードと多言語対応について

espeak は voice ファイルと rule / list ファイルなどで 多言語対応できる構成になっており、 実際それにより英語 en 以外にもドイツ語 de やスペイン語 es など、 多数の言語にすでに対応しています。

espeak の合成はほぼ純粋波形によるようで (ソース一部で確認、未完了) 声の特徴、男性女性の声色への変更やピッチ変更などは コマンドラインオプションから容易にできます。

  • UNIX 的コマンドとして使えつつ同時音声出力可能で、 これは PortAudio で実装されています。
  • 実装言語は C 言語です。

日本語テキストにも構造的には対応可能なのですが、

  • 多量の音素置換ルールの作成
  • 固有名詞などの定形音素辞書の作成

以上が最低限必要な公式アプローチなのです。 ここで可能なことは「ほぼ単純置換」によるテキスト音素解析なので、 現実的な「漢字混じりの日本語テキストの読み上げ」 に対応しようとするのはかなり障壁があります。

追加で、最低限、いわゆる「漢字再変換」が必要なわけです。

後述する Open JTalk は BSD ライクフリーに使える ソフトウェアとして一部が公開されていますが、 そこでは mecab を利用した漢字混じりテキスト解析が実装されています。 この場合は単なる再変換ではなく、 形態素分析も行っているわけです。 フリーに使えるものとしては他には代替手段は乏しく、 仮に espeak に「文脈や文法に則った日本語テキスト対応」をしようとするなら、 mecab による解析結果を espeak 内の音声合成部分に埋め込む必要があるでしょう。

この部分だけでもかなりの障壁になるので、 日本語のテキストからの一発での自然な音声合成、 は espeak にとっては極めて困難なものになります。

espeak 解析経過レポによると 「音素からの音声波形合成部分は多分日本語に適していない」 という別問題もあります。 「不自然とまで言わないが明らかにカタコトな聞こえがおそらく限界」 というのが sumikko.tokyo での現時点での結論です。

  • しかしながら むしろ「カタコト日本語 TTS」としては有用である。
  • さらに言えば「カタコト日本語と英語などの 多言語同時性能は高い 」とも。
  • そういう観点からサンプルとしてカタコト espeak ちゃんが生まれました。

さてしかし sumikko.tokyo はそういう方面の専門ではないので、 これ以上に関してはあまり記せることがありません。

他の TTS について

より自然な発音や、日本語テキストの対応、 日本語読み上げにおける流暢さなどでは espeak 以外のソフトが圧倒的です。

一部を例示します。

  • festival は欧米語圏の音声合成能力は非常に高いです。
    • リアルタイム合成より流暢さに重きをおいています。
    • ソフトウェア設計思想が現在では古く、規模が大きいため、 公式に一部機能がセキュリティの面で標準で off になっています。
  • Open JTalk は最近開発された日本語 TTS システムの一部成果です。
    • 日本語テキストからかなり自然な音声合成まで可能です。
    • マルコフモデルを用いた確率的解析による部分と、 声のパーソナリティデータ部分は CC-BY 3.0 で一部が公開、 Debian でも contrib パッケージとして使えます。

Attention!

当該パッケージを含む Debian ソースパッケージの sumikko.tokyo 内における解析における、推測に過ぎません。

おそらく hts-voice-nitech-jp-atr503-m001 パッケージの ファイル内のバイナリ部分が、そういう「声色」と 「統計的音声合成モデル用パラメーター群」を 含んでいるのだろう、程度の話です。

Note

open-jtalk や基盤の htsengine は比較的モジュラー構成ですが、 C 言語で多数の構造体管理 (大半が双方向コンテナ) と 複数エンコード対応での文字列操作しているため、 C++ や Python などのコードに比べると「泥臭い」ものである、と。

改変・改良に際しては境界チェックやメモリ管理の品質担保について 懸念というのが sumikko.tokyo の現時点の評価です。

ただし一般的な利用の範囲では、第三者などが悪意をもって 作成したテキストなどを読ませない限り、 セキュリティ問題として提起するようなものでもないと考えていますし、 試験評価中に目立ったクラッシュなどあったというわけでもありません。

他にも TTS ソフトウェアは多数あります。

他の TTS 利用に当たっての最大の注意点は「ライセンス」です。

  • 非商用でかつ個人利用に限る「フリー」が圧倒的多数です。
  • 生成された音声の利用可能な範囲は利用規約や提供者に要確認です。

Open JTalk はそれらの中ではかなり自由に使えるものではあるのですが、 Debian stable 経由で利用できる範囲においても、 動作に必須の voice ファイルデータが CC-BY であり、 かつその作成ツールキットは non-free であるという側面を持ちます。

Note

この点は Debian open-jtalk パッケージから suggest される voice データパッケージと mecab データのうち、 前者のパッケージに含まれる debian/README.Debian ファイルをご覧ください。

open-jtalk パッケージを BSD ライクフリーの範囲でイジれば、 ある程度 (端的には pitch 操作) 合成音声の特徴を変えることはできるようです。

ただ sumikko.tokyo 内部での評価では 「コアとなる HHM (マルコフ過程的 ? な統計的モデル) が事実上改変不可」 という暫定判断をしています。そのためのツールキットも、 データセットもフリーなものとして公開には至っていません。

  • 商用展開やスポンサー関係の契約などを考えればなんの不思議もありません。
    • むしろ Debian open-jtalk パッケージの存在は、非常にありがたいものです。
  • ちなみに、仮に「全てが FSF 的フリーであっても改変改造は困難」とも。
    • アプローチが確率的モデルや AI の TTS システムでは、 学習用のデータセットの容量・品質、学習用計算機資源、 などなど多数のハードルがあるため。

これらの点を踏まえた上で、 少ないリソースと法的に制限の少ない free な TTS は何で、 それをどう利用すると日本語 TTS にも流用可能か、 という評価の結果がこの espeak 記事の背景にあります。

Note

いわゆる調声 (ちょう・せい、調整が語源らしい) 界隈が 多く扱っている市販ソフトウェアと、 espeak には「技術の方向性」と「法的なライセンス」に 特に大きな隔たりが存在することは念頭においてください。

Published: (Modified: )