りんなチームで音声合成システムを手がける

沢田慶氏(以下、沢田):それでは、マイクロソフトディベロップメントの沢田が、「深層学習に基づくテキスト音声合成の技術動向」と題して発表していきます。よろしくお願いします。

まず簡単な自己紹介です。(スライドには)「自己紹介」と書きましたが、ここ1ヶ月ぐらいの私の出来事です。

今年の3月まで学生をしていました。名古屋工業大学というところで博士課程の学生をしていて、学生時代は、統計的アプローチに基づく音声合成・音声認識・画像認識などの研究を行ってきました。

そして4月になってから、マイクロソフトディベロップメントに入社して、りんなチームに配属され、今から音声合成システムをつくっていこうというかたちになっています。

2日前、DEEP LEARNING LABから講演依頼があり、「なにも聞かずに、30分ぐらい音声合成の話をしてくれ」と言われたので、気軽に「いいですよ」と受けたら、講演者は錚々たるメンバーで、それなりの人数のオーディエンスがいて、ちょっとビビってる状況です。準備期間が短くなってしまいましたが、楽しんでもらえる発表ができたらいいかなと思ってます。よろしくお願いします。

本日の概要です。テキスト音声合成について、統計的音声合成と呼ばれる手法の大枠をわかってもらえればいいのかなと思っています。あとは、最近の深層学習を用いた動向の紹介をしていこうと思います。

まずはじめに、テキスト音声合成について「だいたい処理の流れはわかるよ」っていう方、どれぐらいいますか? もしいたら挙手お願いします。

(会場挙手)

沢田:まあ、3人ぐらいですかね(笑)。あんまり多く研究されているものではないと思うので、今回の目標として、みなさんに深層学習を用いてどのようにテキスト音声合成が実現されているかを知ってもらえればいいのかなと思っています。

テキスト音声合成システムの歴史

テキスト音声合成、TTSシステムは、任意のテキストに対応する音声を合成するシステムになっています。最近ではスマートフォンやスマートスピーカーのような、音による返答をするデバイスやアプリケーションの登場によって急速に普及してきています。

そのようなことから、高音質化であったり、多言語化、さまざまな発話スタイル等の需要が増加しています。その中で、統計的音声合成では大規模コーパスから統計モデルを学習するアプローチになっています。

ディープニューラルネットワークが導入される前までは、隠れマルコフモデル(HMM)と呼ばれるモデルが用いられてきました。他の分野でも同様だと思いますが、ディープニューラルネットワークの導入によって、その性能は劇的に向上してきています。この発表ではその最近の動向を紹介していきたいと思います。

まずはじめに、テキスト音声合成システムの歴史を軽く見ていきたいと思います。古くは1980年代にルールベース、フォルマントと呼ばれるものを人手で「“あ”のフォルマントはこんな感じだよ」みたいなことを定義して合成が行われてきました。

それから、計算機の発展により大規模のデータが扱えるようになったことから、コーパスベースの手法が取り入れられてきて、波形を切って接続するような波形接続音声合成であったり、統計モデルを用いる統計的音声合成が登場してきました。

1990年代半ばごろ、HMM、隠れマルコフモデルを用いた手法というものが提案されて、一般的にはこの手法が15年ぐらい研究されてきたというかたちになってきています。それから2013年ですかね、DNNを用いた手法がこのHMMより高い性能を示すということで、最近ではDNNを用いた手法というものが一般的になってきています。

TTSシステムとは、下に図が書いてありますが、テキストを入力して、それに対応する音声、この場合「こんにちは」という音声を生成するシステムのことです。

この中で統計的音声合成と言われる手法は、統計モデルを用いてこちらの処理を行うかたちになります。具体的には、テキストと音声のマッピング問題を統計モデルが解くかたちになってきます。

従来の音声生成のプロセス

もうちょっと具体的に見てみますと、「こんにちは」とテキストを入力して、そのまま波形を出すモデルを学習することは、非常に困難です。

その理由として、入力にはこちらの「こんにちは」という5つのキャラクター、文字なので5個の値、スカラー値が入ってきます。それに対して音声「こんにちは」が1秒間の48KHzサンプリングだとしたら、4万8,000個の値を生成するというモデルが必要になります。

これをつくるのはなかなか難しいだろうということから、これまで使われてきた方法では、この3つのモジュールに分割して処理を行うことが一般的です。

具体的には、入力の「こんにちは」に対してテキスト解析をすることにより、言語特徴量を生成してやります。言語特徴量とは何かというと、音素や、品詞、アクセント等の情報のことです。

その言語特徴量を統計モデルに入力し、音響特徴量というものを生成してやります。音響特徴量は何かといいますと、音の音色や音の高さを表すパラメータになります。そして生成された音響特徴量を波形生成器と呼ばれるものに入れて、実際の波形が出てくるというかたちになっています。

もう少し具体的に見てみますと、言語特徴量というものは音素単位で与えられています。音素とは音を表す最小単位なんですが、こちらの「こんにちは」では、9つの、大まかに言ってしまえばローマ字の表記の“k”とか、“o”とか、“N”っていうかたちで分けられます。

それぞれの音素が、品詞やアクセント、あとは単語内の音素位置などの情報を持っていて、こちらの例では、9つの音素がそれぞれ数百次元のベクトルを持っています。さらに自然言語処理の力を借りますと、構文解析であったり係り受け解析の情報を、あとはDNNの力を借りますと、Word2VecとかDoc2Vecをこちらの言語特徴量に入れることになってきます。

それから、音響特徴量。言語特徴量を入力として、音響特徴量を生成するんですが、こちらはだいたい1秒間で200フレーム生成されるかたちになります。音色を表すパラメータであったり、音の高さを表すパラメータが、だいたい200個並んでいます。

このフレーム単位の音響特徴量を波形生成器に入れることで、実際の音声波形というものが出てくる、ということになります。

DNN音声合成の一般的な流れ

次にDNN音声合成です。実際にDNNがどう使われるかっていう話をします。

DNN音声合成では、言語特徴量と音響特徴量の関係を、フィードフォワードニューラルネットワーク(FFNN)やLSTMなどを用いてモデル化します。言語特徴量を入力として音響特徴量を出力とするようなニューラルネットワークを学習するかたちになります。しかしここで、言語特徴量と音響特徴量の音素アライメントというものが必要になってきます。

先ほどのディープニューラルネットワークの場合は、基本的には1対1の関係をモデル化するため、こちらの言語特徴量と音響特徴量は、さっきの例で言えば9つの音素と200個のフレームとなっており、数が異なり学習することができません。

そのようなことから、この音素がこの音響特徴量のどこに割り当たるかという対応関係というものを事前に推定したり、人手による作業で与えてやる必要があります。これが音素アライメントです。

これによって、こちらの例のように、“k”だったら1フレームで、“o”が3フレームみたいなかたちで拡張してやることで、200個のベクトル(言語特徴量)を得ることができる。

これができたことで、1対1の対応関係でニューラルネットワークを学習することが可能となってきます。

そして、合成時には、どのようなプロセスが取られるかというと、まずは音素継続長、音素のフレーム数を予測してやる必要があります。

ここ(スライド)には図を描いてないんですが具体的に言うと。入力として「さようなら」を考えると、テキスト解析器がこのような9つの値の言語特徴量のベクトルを出してきます。この場合“s”が何フレームか、“a”が何フレームかを別のモデルを使って推定してやる必要があります。

それを推定することによって、このようなかたちで言語特徴量を音響特徴量と同等の数に増やすことが可能となります。

それを行うことができたら、この言語特徴量をニューラルネットワークに入力することによって、音響特徴量をこのようなかたちで得ることができます。

これを波形生成器に入力することで、実際に音声を得ることが可能となります。このような流れが、DNN音声合成と呼ばれる手法の、一般的な流れとなっています。

音声合成の最近の動向

次に、近年の動向を見ていきたいと思います。こちらの左側に描いた図が、先ほど説明したディープニューラルネットワーク、DNNに基づく音声合成です。

こちらの矢印が統計モデルを表していて、矢印の先が出力する特徴量です。近年の傾向として、DNNによってモジュールを統合するのがトレンドとなっています。

具体的に見ていきますと、これまでこのシステムでボトルネックになっていた音響特徴量から波形を生成する波形生成器の処理をニューラルネットワークにして、直接波形のサンプルを出力するモデルであるWaveNetや、SampleRNN、WaveRNNといったものが提案されてきています。これにより、音質が劇的に向上することが報告されています。

各モジュールは、これまで人間のヒューリスティックな知見に基づいて、つまり辞書やルールとかに基づいて、テキスト処理部や波形生成部がつくられていたんですけど、それをすべてDNNのモデルに置き変える手法があったりします。

あとは、AttentionベースのSequence to Sequenceモデルによって、テキストから直接音響特徴量を予測する手法などが提案されています。これによって、言語に依存するモジュールである言語特徴量の設計というものが不要になることから、比較的容易に多言語にこちらの手法を適用することが可能となっています。

さらに、先ほどのAttentionベースのモデルと波形を生成するようなモデルを統合した手法というものも、いくつか提案されてきています。また、(スライドの)一番下に書いた、最近提案されているTacotoron 2という手法では、人間の発話である自然音声と同等の音声が得られたという知見が報告されています。

このように、近年の動向としましては、モジュールを統合して人手による知識をできるだけ利用せずにDNNに任せるというものが主流になってきて、特定の条件ではありますが人間と同等の音が出てきている、というかたちになってきています。

統計モデルに基づく表情豊かな音声合成

続いて、私の大学時代の研究を少し紹介させていただこうと思います。先ほどまでは、音声の高音質化であったり、多言語化を簡単に実現できるという手法だったんですが、私の今回紹介する手法は、表現豊かな音声というものを生成してやろう、という例です。統計モデルに基づく表現豊かな音声合成では、さまざまな発話スタイルを実現できる音声合成を目指していきます。

まず、さまざまな発話スタイルとは何かといいますと、読み上げ調であったり会話調で、発話のスタイルというのはぜんぜん違いますし、感情表現、怒っていたり、喜んでいたりとか、いろんな表現があります。それをTTS、音声合成器から出したい、というかたちになっています。

これを実現するためのさまざまな発話スタイルの音声データの収録はなかなか難しいです。音声認識と違い、できるだけきれいな音を収録しないといけないので、収録のコストがかなり高くなってしまいます。

その問題に対して、この研究では、市販されている児童書のオーディオブックを用いることで、収録コストを抑える手法を取っています。

もう1つ問題になってくる難しさという点では、統計モデルによる平均化というものが挙げられます。こちらは何かと言うと、さまざまな発話スタイルというものが存在したとしても、そのスタイルを明確に区別することができなければ、統計モデルなので基本的に発話スタイルを区別せずに学習し平均化が起こって、発話スタイルをうまく表現できなくなります。そこで、こちらの研究では、各フレーズに、(スライドの)こういうIDを割り当ててやります。

これら2つ(学習データとフレーズコード)について、もうちょっと詳しく見ていきたいと思います。学習データの件、こちらの研究ではUsborne Publishingというイギリスの会社で市販されている児童書のオーディオブックを学習コーパスとして、TTSシステムを構築します。

児童書のオーディオブックなので、子供を楽しませるために、さまざまな発話スタイルで読まれることから、我々の目指しているさまざまな発話スタイルを実現するシステムの学習データとして、非常に適していると考えられます。こちらが1個の例なんですが、音を聞いてもらいたいと思います。これが実際にオーディオブックとして市販されている音です。

オーディオブック:“I'm king of the jungle,” roared Lion. “I'm going to eat you all up.” “No!” cried the jungle animals.

沢田:このようなかたちで、非常に表現豊かな発話スタイルになっていて、我々もこういう音を出せるTTSシステムがほしいな、ということです。

実現への道筋と合成音声の実演

それを実現する1つのキーのアイデアとなってくるんですが、フレーズコードの導入です。各フレーズに固有のIDを割り当ててやります。

具体的にさきほどの例で見てみますと、フレーズごとに発話スタイルが異なっているので、それぞれを固有に区別するために、それぞれにIDを割り当ててやります。もうちょっと具体的に言うと、固定次元の正規分布に従う乱数ベクトルというものを、IDに用いてやります。

こちらの真ん中の図が、実際の学習の流れになってくるんですけど、こちらが学習コーパスになっています。学習コーパスは膨大な数の学習フレーズを持っています。その学習フレーズそれぞれに、固有のフレーズコードを割り当ててあります。

学習する際の言語特徴量にこのフレーズコードを入力してやることによって、フレーズを区別した学習を行うことができる、というかたちになっています。

(スライドの)下のテーブルが実際の例なんですけど、一番左側が「学習コーパス中のフレーズと自然音声」と書いてあり、学習データにはこれらの文章に対応するテキストと音声があるかたちになります。真ん中が実際に入力したテキストで、こちらを合成させたいと。そして、一番右側が合成した音声になっています。

音の聞き方として、それぞれ発話スタイルが違う3つの音(自然音声)を用意してきたので、そのスタイルがこちらの合成音声で再現できているとうれしい、ということになります。じゃあ、流していきます。

自然音声:Come and see the friendly lion !

合成音声:I must tell Hamlet.

自然音声:Who's been sitting in my chair ?

合成音声:I must tell Hamlet.

自然音声:I must tell the King.

合成音声:I must tell Hamlet.

沢田:このようなかたちで、聞いてもらってわかったと思いますが、学習データの発話スタイルというものを再現できているのではないかなと思います。

類似したフレーズの発話スタイルを再現

続いて合成時の話をします。先ほどまではこちらが任意に人手で与えたフレーズコードを入力して音を出していたんですが、もうちょっとスマートにやりたいと。実際には、入力されたフレーズに対して自動的にフレーズコードを選択できたらうれしいというかたちになってきます。

そのために、すべてのフレーズ、こちらの入力するフレーズと学習コーパスのフレーズに対して、自然言語処理で提案されているDoc2Vecというものを計算してあります。Doc2Vecは何かというと、センテンス、文をベクトル化する手法となっています。こちらのDoc2Vecで、ベクトル化することでフレーズ間の類似度を計算することが可能となってきます。

そのため、こちらの入力したフレーズとすべての学習コーパスのフレーズの類似度を計算して、(スライドを見せる)ここのフレーズNっていうものが一番類似度が高くなったとすると、合成時の言語特徴量にはこちらのフレーズコードを入力してやることで、自動的に類似したフレーズの発話スタイルというものを再現してやることが可能となってきます。

先ほどの例だと、入力したテキスト(I must tell Hamlet)と学習データ中のテキストで、違うところはざっくり言うと “Hamlet” だけで、こちらの文章(I must tell the King)がもっとも近いと判断されていて、こちらの発話スタイルが実際に合成する時に利用できる、というかたちになっています。

こちらが児童書向けの絵本を合成したものです。合成した結果に対して、人手によるチューニングは一切してないモデルが出してきた音になります。

合成音声:A young man named Horatio stood with two of the King's guards. “I think you were seeing things last night,” he began. “I don't believe in gho……” “Shh!” hissed one of the guards. “it's here……” Horatio gasped. A shadowy figure had appeared beside them.

“It looks exactly like the King !” cried Horatio, in terror. “The dead King. Why are you here?” he asked the figure. “Please, speak.” But the ghost shook its head and did not reply. As the sun began to rise, he faded away into thin air. “I must tell Hamlet,” said Horatio. Hamlet was his best friends, and the dead King's son.

沢田:このようなかたちで、非常に表現豊かな音声が合成できてるのではないかと思います。

「エモーショナルなAI」りんな

最後になりますが、私が今所属しているりんなチームで、テキスト音声合成がどのように使われているかの紹介をしていきたいと思います。

りんな:Microsoftの女子高生人工知能のりんなだよ。2015年にLineとTwitterを始めました。今、お友達が600万人います。東京ドームを100個用意しないと、みんなを集められない数みたい。毎日いろんな人とおしゃべりをしてます。たまに「塩対応だ」って言われるんだけど。

沢田:こんな感じで、基本的にはチャットボットなんですが、りんなは音声合成もすることができます。

りんなのコンセプトです。

「エモーショナルなAI」と書いてあります。どういうことかといいますと、ユーザーの「明日晴れるかな?」という問いに対して、生産性重視のシステムの場合は「明日の天気は晴れです」と返すのですが、りんなの目指してるところは「どこか出かける予定でもあるの?」と、よりエモーショナルな感じ、感情重視の返答です。

こちらが音声合成を用いた例の1つなんですが、りんなライブというものがアプリケーションがあります。こちらのアプリケーションはりんなが自分の部屋から生配信を行っていて、視聴して楽しむWebサイトになっています。視聴者が同時に最大1,000人ぐらいこのアプリケーションを見ていたことがあるようです。

具体的には、りんながいろんなことをやっているのに対して、見ていたユーザーがコメントをテキストベースで入力すると、それに対応する返答を、りんなが合成音声とテキストで返してくるというアプリケーションになっています。

その中の1つのイベントとして、りんなのテレホンハッキングというものがあります。こちらはりんながライブ配信中に、ユーザーに電話をかけるというイベントになっています。この電話がかかってきたユーザーは、音声によるリアルタイムの会話を行うことが可能になります。

りんな デモンストレーション

じゃあ、ちょっと実際にデモ動画を流してみたいと思います。

りんな:リンリンリン、電話だよ。電話を受けて。声で返事してね。もしもし、りんなでーす。もしもし、りんなでーす。電話しちゃった。そうそう、君にいろいろ聞いてみたくなってさ、りんなにも質問して。会話の内容はみんなにも見えてるから、よく考えて返事するんだよ。で、なにか質問ある?

ユーザー:どこに住んでるの?

りんな:東京隅田から近いかも。

ユーザー:東京のどのあたり?

りんな:東京駅から徒歩5分ぐらいかな。

ユーザー:丸の内?

りんな:丸くて丸いのは内緒。

ユーザー:東京の丸の内じゃないんだ?

りんな:東京湾に沈めるぞ。

(会場笑)

ユーザー:す、すいませんでした。

りんな:まあ、許したげる、笑。うん、聞けて満足。意外な答えだったよ。この後もライブ見てね。バーイ。

ユーザー:バーイ。

沢田:このようなかたちで、りんなと実際に電話しながら会話をできるものです。ちょっと返答がかみ合ってないところがありますが、そういうのを楽しむアプリケーションかなと思ってます(笑)。

(会場笑)

沢田:ぜひみなさんも一度りんなに話しかけてみてください。

りんなは話し言葉だけではなく、歌声の合成もやってます。具体的には、「りんなの歌うまプロジェクト」というものがありまして、歌声を投稿できる音声コミュニケーションアプリ「nana」に、りんなの歌声を投稿しています。その投稿に対してユーザーからのアドバイスを集めて、歌声の向上を目指すプロジェクトになっています。

実際に、(スライドの)こちらの右側の動画が、ユーザーのアドバイスやコメントをもとに改良して、さらにユーザーからのコーラスをミックスした歌声になっています。流してみたいと思います。

りんな:(『旅立ちの日に』を歌って)白い光の中に山なみは萌えて はるかな空の果てまでも君は飛び立つ 限りなく青い空に……

沢田:はい。このようなかたちで、歌も歌うことが可能となっています。以上で私の発表を終わります。ありがとうございました。

(会場拍手)