言語系ディープラーニング

こんにちは、TOMOです。

最近テキスト読み上げツールを開発しています。 今のところ日本語と中国語が読めるようになりました。 英語は研究データも多く難易度が低いのでこれも追加する予定です。 Youtubeにデモ動画をあげてあるので、よろしければ見てください。 プロトタイプの段階ですが、とりあえず使い物になるものができたと思います。

私は普段は画像処理系の仕事をすることが多いです。 最近テキスト関係の開発を始めて、今一か月ぐらいです。 一昔前までは個人で音声合成が開発できるなどとは想像もしなかったのですが、良い時代になりました。 今日は音声合成の仕組みだとか応用に関して話をします。 動画の構成としては、前半部分は音声処理でどんなことができるか、後半部分は音声合成に関する理論的な話となります。

音声処理のディープラーニングを使って何ができるかというと、 まず第一に語学学習、他には動画作成などにも応用できます。

昔は本を使って語学を勉強するのが主流で、日本人は英語の読み書きはできても話すことができないということがありました。 CDが普及すると聞き取りの勉強が手軽にできるようになりました。 ただ、教科書の例文やオーディオブックなどは音声があるわけですが、自分の読みたい文章に音声がついているということはあまりなかったわけです。 これが音声読み上げの技術を使うと好きな文章を発声させることができます。 実際この辺りは十年ぐらい前でもそれなりの事ができました。 私が語学を勉強したときは基本的に全ての文章をプログラムに発声させていました。

最近は人工知能や音声認識部分も発達してきているので、 人工知能を使って発音矯正や対話練習などもできるようにしたいと考えています。 自分の外国語の発音がどこが悪いかというのは一人ではよくわからないわけです。 ここを人工知能によって発音を採点して数字で表したら、一人でもどう発音を直していったら良いかわかるわけです。 さらに音声読み上げ技術を使って、自分の声でネイティブの発音の例文を作ったら もっと発音の違いが分かりやすいんじゃないかと思っています。 一昔の技術は大体録音した音声を上手くつなぎ合わせるような感じの手法なので、録音した人の声しか出せません。 最近はTacotronなどにもスタイルトークンというようなものを使って、複数の人間の声を生成するようなことができるようになっています。 そういう技術を使えば、教科書の例文に自分の声をまねさせるといったことができるということになります。

次に動画作成に関しては、文字を読ませてテキストを動画に変換するというのはまず基本的な使い方です。 移動中に本を読むなどしたいとき、音声があると色々と便利なわけです。 他には外国語の文章を読むときなんかもやっぱり音声があると読みやすいということがあります。 こういう事があるので自動でテキストを動画に変換するようなツールが欲しいなと思うわけです。 この辺りのツールの作成部分はディープラーニングというよりも普通のプログラミングがメインになります。 ディープラーニングにおける技術的な問題としては、 本を読ませると日本語と英語が混ざっている文なんかは結構出てくるわけです。 技術的にはこういうところの処理を上手くやらないといけません。

あと、Youtubeなんかで動画をあげてみると分かるのですが、字幕を付けるというのは結構面倒な作業です。 色々と自動でやってくれるツールがあるわけですが、 英語や中国語だと音声から文字というのはある程度正確にできるのですが、日本語は誤変換が多いです。 また、字幕を装飾して動画に埋め込むには動画編集ツールを使わないといけないので、 色々なツールが必要となって制作の流れがかなり煩雑になります。 この辺りをもう少し簡略化したいと考えています。 日本語の誤変換が多いのはどうしようもないところがあるので、事前にスクリプトだけは準備して、 ドラッグアンドドロップしたら音声認識で自動で時間をあわせて動画への字幕の埋め込みまでできるようにしたいです。

ここから音声合成の理論的な話に入ります。

音声合成の基本的なモジュールは次の三つになります。

  • テキスト解析 : テキストを言語特徴量に変換
  • 音響モデル:言語特徴量を音響特徴量に変換
  • ボコーダー:音響特徴量を実際の音声に変換

テキスト解析の部分はフロントエンドなどとも呼ばれます。


日本語音声合成

日本語の音声合成はまだ一昔前の技術が主流らしいです。

少なくともGithubギットハブなどでは基本的に英語で、中国語も少しあります。

一つの問題は文字と音声の関係性にあると思われます。


日本語音声合成

英語や中国語は文字と発音が基本的に一対一に対応しています。

知らない単語でも文字を見れば大体読み方は想像できます。

それに対し、日本語では特に人名地名など、読み方を覚えていなければ発音が想像できない場合が多々あります。

そのため、日本語は音声合成が最も難しい言語の一つと考えられます。


https://www.slideshare.net/f2forest/nips2017-speech-audio-86474213


ディープラーニングでは人の手で特徴量を作らず、データから特徴量を学習させます。

従来では人の手で生成していた言語特徴量・音響特徴量を機械学習によって生成します。

これは音声合成に限らず、画像認識等の分野でも同様です。


今回使った仕組み

  • 音声データ: JSUT

  • テキスト解析:Mecabメカブ

  • 音響モデル: Tensorflowテンサーフロー

  • ボコーダー: Worldワールド


音声データ

JSUTとは、東京大学猿渡研究室による日本語女性話者の約10時間の音声です。

無音カット、音素アラインメントといった前処理はせず、直接学習させます。

今後の予定として、使用者の声を直接学習させるといったことをしたいので、複雑な前処理は不要なシステムにします。

Ryosuke Sonobe, Shinnosuke Takamichi and Hiroshi Saruwatari, “JSUT corpus: free large-scale Japanese speech corpus for end-to-end speech synthesis,” arXiv preprint, 1711.00354, 2017.


テキスト解析

漢字の読み方をJSUTだけでEndToEndエンドトゥーエンドに覚えさせるのはデータ量的に厳しいです。

そのため、単語辞書を使って形態素解析ということを行い音素列を生成します。

漢字をローマ字に置き換えるような感じです。

また、日本語には橋と箸と言った音の高さで区別される単語があるので、高低アクセントも付与します。

機会があればこの辺りもディープラーニングを使いたいところです。


テキスト解析

実は今のところこの音声合成ツールは英語が読めません。

そのため英語の部分にはルビを振って読ませています。

後ほど英語を読む機能を追加したいところです。


音響モデル

テキスト解析によって生成された音素列をスペクトログラムと呼ばれる音響特徴量に変換します。

スペクトログラムというのは音声の各周波数の強さを表したものです。

正確にはWorldワールドボコーダーを使っているので、スペクトログラムを直接使うわけではありません。


音響モデル

音響モデルは音素列を音響特徴量に変換します。

このような処理にはSeq2Seqシークエンストゥーシークエンスと呼ばれるRNNモデルを使うことが多いです。

ただ、この方法の欠点として訓練に時間がかかる、訓練データが悪いとそもそも学習できないという点があります。

Tacotronタコトロンなどではアラインメントが上手く学習できないということもよく聞きます。


音響モデル

そういうわけで、今回は単純に音響モデルには一次元CNNによるオートエンコーダーを使います。

スペクトログラムを入力し、音素列にエンコード、さらにスペクトログラムへデコードします。

デコードの部分が実際に使う音響モデルです。

オートエンコーダーは収束も早く、訓練も安定しているので、画像処理でもよく使いました。

ついでにGANガンも使っています。


オートエンコーダ


ボコーダー

ボコーダーを使ってスペクトログラムを波形データに戻します。

今回は簡単のためWorldワールドボコーダーをそのまま使っています。

理想的にはここもディープラーニングを使いたいところです。

ボコーダー部分は話者依存、言語依存が低いので、英語データで訓練した物を流用できると思われます。

ディープラーニングにおいてデータの不足は致命的なので、今後このような方法を検討する予定です。


今後の予定

  • スライダーで声質を調整できるようにする

  • 文字から音声の変換だけでなく、自分の声を他の人の声にすると言った声質変換をする

  • テキスト解析にディープラーニングを利用、英語を読めるようにする

  • Tacotron/Wavenetタコトロン、ウェーブネットのような訓練に時間が掛かる機構も導入

おしまい

ご視聴ありがとうございました。

何かあればコメント欄にお願いします。

需要があればツールの公開もする予定です。

TOMO (ながさか ともひろ)
人工知能、システム開発

関連項目