ゼロからはじめるぜ!Twilio – コラム: 当社広報肉声 vs SAY動詞

こんにちは、ネットワークエンジニアのまさです。

今日は、TwiMLのSAY動詞が読み上げる日本語と肉声をみなさんの耳で実際に比較するお話です。

masa_recieve.jpg 私のシリーズ、通常は前置きがあり、本題をチラ見せしつつ迫っていき、結論に至るころにはみなさんのハートが根こそぎ掴み取られている、というスタイルなんですが、今回は違います。先に結論から言います。

『当社広報の肉声が勝つ。』

あたりまえです(ノ∇`)

私はもう逃げも隠れもしない。私は知っています、みなさんが少なからずSAYに対して思うところがあることを。
「きっとTwilioはアメリカ生まれのサービスだから、SAYもそういうとこ影響受けてるんだよね。」と言い聞かせながら使っていることを。

 

何より、このサービスで4年もお客様サポートをしてきた私自身が、こういうお問い合わせを時々目にしているのです。

  • SAYの話すスピードを変えられませんか?
  • SAYのアクセントの位置を調整できませんか?
  • SAYは他の声で日本語読んでくれないんですか?
  •  

    全て「否!」

    毎回溢れ出んとする涙と鼻水を飲み込みながら、私は毎回同じような回答をみなさんに返しています。

    「タイプする日本語を色々変えてみて変化させられるか挑戦してください。」

    そして、ビジネスセミナーやミートアップ、ハッカソンの会場でもやはりSAYの話題は時々頂くのです。私たちスタッフはバツの悪い笑みを以って、やはり同じ回答を差し上げてきました。

    慙愧の念、極まれり。

    だったら、私がみなさんの代わりに挑戦する。ありモノのSAYを使わざるを得ないなら、一体どこまでSAYをだまくらかして、自然な発音に近づけられるのかを、その限界はどの辺りにあるのかを、包み隠さずお知らせする。

     

    それに、みなさんがSAYを何度も試すんだってタダじゃない、我々は着信料を頂いてるわけですすからね。
    せめてこういうことを我々が挑戦し、実際にみなさんの耳で聞いていただき、ご自身が求める自動音声のクオリティーはどのあたりを目指そうか、という検討をしていただく材料にしていただけたらなと思った次第です。

     

    想定 1

    せっかくなので実践に即しましょう。
    お医者さんの待合番号札を電話で取れる仕組み、さらにボタン押したら過去の治療代が確認できるようなのがあったら「すげえ、この医者便利!」ってなりそうです。

     

    きっとみなさんもそういうの作って売りたいでしょう。このようなIVRを作る想定をします。
    ちなみに、IVR とは Interactive Voice Response の略で「自動音声応答装置」のことです。

     

    ちなみに、私の行きつけの歯医者さんは、電話するといつも可愛い声の子が出るのですが、必ず私の第1希望日時を断り、第2希望日時を提案されます。この声のせいで、つい許してしまうんだが、何なんでしょうか。一度くらい俺の行きたいときに行かせてくれよ。

    で、まずはこれを肉声とSAYとでやってみて比較するところからやってみようと。んー、誰がいいかな。
    どうせなら本格的に実験したいから広報の子に頼むのが良いかな。

     

    まさ「ちょっと、あやみちゃん!声撮らせて、声!!」
    あやみ「は?!何なんですか突然!嫌ですよ!!」

     

    むぅ... 仕事なのに。ちゃんと説明しなきゃか。
    (15分だか20分だかに渡るTwilioってすげえよ&今回の企画説明と説得)

     

    あやみ「・・・これって社」
    a_pic01.jpgあ り が と う !!
    よし、では早速セリフを用意して読み上げて貰う。

    『毎度ありがとうございます、芸能人でなくても歯は命。ゴシゴシ磨いてくださいね、あやみ歯科クリニックです。番号札を引く方は1を、治療費の確認は2を押してください。』

    a001.wav

    うーん、流石である。これなら、俺、虫歯作りまくるわ。よし、ではSAYで同じこと言わせてみる。

     

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    毎度ありがとうございます、芸能人でなくても歯は命。ゴシゴシ磨いてくださいね、

    あやみ歯科クリニックです。番号札を引く方は1を、治療費の確認は2を押してください。
    </Say>

    </Response>

     

    t001.wav

    予想通りである。皆さんはもう重々ご承知、それも分かってます。そうです、こうなるんです(笑) しかし発音だけならまだしも、自然な日本語でセリフをタイプして誤読するのは看過できませんね。「ばんごうさつを」「ひくほうは」と読んでしまいました。こういう時は、ひらがな で打ち込みます。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    毎度ありがとうございます、芸能人でなくても歯は命。ゴシゴシ磨いてくださいね、

    あやみ歯科クリニックです。番号ふだを引くかたは1を、治療費の確認は2を押してください。
    </Say>

    </Response>

    t002.wav

    とりあえず最低限にはなったけど、初めてあやみクリニックのIVRで予約しようと思った人は「え? 今なんて!?」ってなりますよね、きっと。「ゴシゴシ」「あやみ」「1を」「2を」の部分が少し気にいりません。でもしかし、SAYには発音方法やスピード、アクセントの位置を変えるようなパラメータは備わっていません。我々ができることは、ただ、SAY に括られている日本語部分を変えるのみ。ちょっとひらがなをカタカナに変えたり、スペース入れたり、記号を入れてみましょうか。どうなるでしょう。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    毎度ありがとうございます、芸能人 でなくても 歯は命。ゴシゴシ、磨いて、くださいね、
    アヤミ、歯科、クリニックです。番号ふだを、引くかたは、イチを。治療費の確認は、2を。
    押してください。
    </Say>

    </Response>

    t003.wav

    なるほど、そう来たか。少しクドくなってしまいました。しかし、これで分かったことがあります。

    ・スペースは入れても無駄、何も変わらない。
    ・読点「、」句点「。」を入れると結構な間合いを入れてくれる。
    ・数字はすごく速く流すように読む。「1」を「イチ」とすると少しだけ遅くなる。

    それでもまだ「ゴシゴシ」「くださいね」「あやみ」の発音をどうにかしてやりたい。クドくなりすぎた読点を戻し、今度はローマ字を試してみます。読点とカンマで間合いの長さが変わるのかも試してみたくなったので、こうしてみました。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    毎度,ありがとうございます。芸能人でなくても,歯は命。gosi gosi、磨いて苦打際ね、

    A YA MI、歯科クリニックです。番号ふだを引くかたは, イチを、治療費の確認は, 2を, 押してください。
    </Say>

    </Response>

    t004.wav

    ふーん。読点とカンマの差はあまり無さそうですね、ほぼ体感できない。gosi gosi を「ゴジゴジ」と読みました。「くださいね」と「苦打際ね」は全く同じ読み方です。漢字も意味がないのか・・・ A YA MI に至っては「えいやみ」です。が、「やみ」の部分はちょっといい感じです。ひらがな とローマ字では多少差が出そうですね。この辺りが限界かな、もう少しだけ調整してみます。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    毎度,ありがとうございます。芸能人でなくても,歯は命。5死5死 磨いて下さいね、

    亜YAMI、歯科クリニックです。番号ふだを引くかたは, 位置を、治療費の確認は, 二を, 押してください。
    </Say>

    </Response>

    t005.wav

    ほう... これで円満解決とは言えないけど、最初のよりは大分マシになった感じがしませんか?「ゴシゴシ」は「5死5死」とすることで大分我々が普段言ってる「ゴシゴシ」に近づきました。「位置」はやり過ぎましたね、これだと「位置」というときと全く同じように「い」にアクセントが来る。これならまだ「1」と書いたほうがマシでした。今思ったんですが、数字の読み方というよりも、その後に続く「を」が中国語でいう第二声のように上がっていくのが違和感ありますね。あと1回だけ調整してみます。数字に戻した上、「を」を別の文字にしてみる。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    毎度,ありがとうございます。芸能人でなくても,歯は命。5死5死 磨いて下さいね、

    亜YAMI、歯科クリニックです。番号ふだを引くかたは, 1 尾、治療費の確認は, 2 尾, 押してください。
    </Say>

    </Response>

    t006.wav

    お!! これならいつものSAYより、ちょっと良くなった気がしませんか? 「を」より「尾」です。

    では、一旦ここまでをまとめてみます。読み上げたいセリフはこうでした。

    『毎度ありがとうございます、芸能人でなくても歯は命。ゴシゴシ磨いてくださいね、あやみ歯科クリニックです。番号札を引く方は1を、治療費の確認は2を押してください。』

    SAY動詞をシバキ上げた結果、セリフはこのようになりました。

    『毎度,ありがとうございます。芸能人でなくても,歯は命。5死5死 磨いて下さいね、 亜YAMI、歯科クリニックです。番号ふだを引くかたは, 1 尾、治療費の確認は, 2 尾, 押してください。』

    素直にタイプできないのか... というところは仕方ない(´・ω・`) けどお金を掛けずに、読み方を変化させることができました。せっかくなので、もう少しSAYを試してみます。

    想定 2

    あやみ歯科クリニックは、時代の一歩先より常に半歩先を心がけるナウな歯医者にしたい。なので、番号札だけではなく、常連客には予約も自動電話で取ってあげることにしました。会員証番号を入力すると(あやみ歯科クリニックでは「診察券番号」とは言いません、患者を会員と呼びます)、かけてきた電話番号とマッチングし、OKであれば確かにこの会員からの入電だと判別、今日か明日の希望時間を入力し、空いていれば予約をその場で獲得、というような流れのIVRを組んでいる想定とします。

    『本日は 1 を、明日は 2 を押して下さい。』
                (GATHERでプッシュ)
    『希望時間を 4ケタで入力してください。』
                (GATHERでプッシュ)
    『希望時間は 12:30 ですね。よろしければ 0 を、やり直す場合は 9 を押して下さい。』
                (GATHERでプッシュ)
    『受け付けました、5分程度でご予約可否をご連絡します。電話を切ってお待ち下さい。』

    この4ステップのセリフを一気に読ませてみます。まずは、当社広報による肉声。

    a002.wav

    素晴らしい!! さすが広報肉声!! 何度も 9 を押してやり直したくなる。
    やっぱIVRはこうでなくちゃいけない。続いてSAY動詞様。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    本日は 1 を、明日は 2 を押して下さい。

    希望時間を 4ケタで入力してください。
    希望時間は 12:30 ですね。よろしければ 0 を、やり直す場合は 9 を押して下さい。
    受け付けました、5分程度でご予約可否をご連絡します。電話を切ってお待ち下さい。
    </Say>
    </Response>

    t007.wav

    まぁ、でも覚悟してたほどは酷くないですよ。こんな風にシンプルな文章ならこのまんまでも伝わる。時間の読み方にはビックリしましたね、きちんと「じゅうにじ さんじゅっぷん」と読んでます。一点、数字の「ゼロ」を「れい」と読みました。では少し調整してみます。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    本日は 1 尾、明日は 2 尾、押して下さい。

    希望時間を 4ケタで入力してください。
    希望時間は 12:30 ですね。よろしければ ゼロ 尾、やり直す場合は 9 尾 押して下さい。
    受け付けました、5分程度でご予約可否をご連絡します。電話を切ってお待ち下さい。
    </Say>
    </Response>

    t008.wav

    んー、まぁそりゃ広報肉声に比べたら雲泥の差ですけど、機械音声としては、とりあえず聞き違えは避けられる水準はクリアしたでしょうか。

    よく考えると、Twilioは革新的なサービスですので、使っていただく方もこのようなシンプルな応答だけとも限らないんですよね。少し変わったことがしたい、という方はたくさんいると思います。私はSAYにもう少し変わったセリフも読ませたい。それができてこそTwilioでしょうよ!!

    想定 3

    難易度を更に上げてみます。あやみ歯科クリニックは、自衛隊駐屯地の近隣にあり、自衛官の会員が多い。彼らのIVR満足度を引き上げるため、IVRを他社にはない言い回しに変えようと思う。

    すると、読み上げるべきセリフはこうなる。

    『状況開始希望時を 4ケタで押せ。』
    『状況開始希望時 1230 (ひと にー さん まる)、了解は 0、変更は 9 を押せ。』
    『了解、命令下逹(めいれいかたつ) に備え、回線を切断し、通信部隊からの連絡を待て。以上、解散。』

    まずは、当社広報肉声。

    a003.wav

    なにこれ、超カッコイイ!! SAYはどこまで追従できるのか。ネックになるのは、1230の読み方。このままでは間違えなく「せん にひゃく さんじゅう」と読んでしまう。これを防ぐには、スペースで区切ればいいのだが、今度は「いち にー さん れい」と読んでしまう。これは仕方がないので、ひらがな打ちで対応。こうしてみる。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Say language="ja-jp">
    状況開始希望じを,4ケタで押せ。

    状況開始希望じ, ひと にい さん まる、了解は ゼロ、変更は 9 を押せ。
    了解、命令かたつ に備え回線を切断し、通信部隊からの連絡を待て。以上解散。
    </Say>
    </Response>

    t009.wav

    い、いや・・・これはイケるんじゃないか?! 「めいれいかたつ」はちょっと調整の余地あるけど、女隊長機械音声としてはアリなのではないだろうか。こうなると今度は肉声側の課題が出て来る。時刻というのは、様々なバリエーションがあるので、広報に10分刻みで 0:00-23:50 を録音してもらうなんて話になったらぶん殴られる。そこで、自衛隊式の数字を録音し、PLAYでくっつければいいんじゃないかと。

    『ひと・にー・さん・よん・ご・ろく・なな・はち・きゅー・まる』

    やってもらいました(ノ∀`)

    a005.wav

    これを数字1つずつに切り出したWAVにしておき、時刻に合わせて4本のPLAYに分けてみる。

    『状況開始希望時 1450 (ひと よん ごー まる)、了解は 0、変更は 9 を押せ。』

    を、先程録音した広報肉声のファイルと組み合わせ、このようにしてみる。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Response>
    <Play>http://xxxxxx/voice_1.wav</Play>
    <Play>http://xxxxxx/n_1.wav</Play>
    <Play>http://xxxxxx/n_4.wav</Play>
    <Play>http://xxxxxx/n_5.wav</Play>
    <Play>http://xxxxxx/n_0.wav</Play>
    <Play>http://xxxxxx/voice_2.wav</Play>
    </Response>

    「状況開始希望時を 4ケタで押せ。状況開始希望時」までが voice_1.wav、「ひと よん ごー まる」が n_[1450].wav、その後セリフが voice_2.wav という形で分割してそれぞれ Play動詞で流してみた。

    a006.wav

    んー、Play動詞を跨ぐとかなり間が空いてしまいますね。それでもやっぱ SAYよりは肉声のほうがイイです。これ、Twilioから呼び出した1回目の録音なのですが、2回目以降は、Twilio側でWavのキャッシュが効くので数字のところはもう少し間隔が狭まります。ところが、「5」の数字をかなり短く作ってしまったので、2回目以降は「ご」と「まる」の間がすごく短いです。これを防ぐには、1つずつの音声ファイル側の長さをピッタリそろえておくと、定間隔で読み上げることができます。

    総論

    というわけで、ここまでの実験で、SAY動詞はある程度、イントネーションを変えることはできるけど、気持ち程度、聞き間違えしなくて済む水準くらいまでの調整ができることが分かりました。そしてやっぱり肉声にはかなわない。でも、やはりAPIサービスですから、出来る限り人を介さずプログラム上でなんとかしたい、その上、もっと自然な日本語を喋らせたいんだ、俺達はヽ(`Д´#)ノ

    分かります、ええ、すごく分かります。

    実は、Twilioのイベントで時々顔を見せていただける AI Talkさん が提供している合成音声エンジンがあるんですけど、試しに今日のセリフを聴き比べてみました。サンプルの二次利用を許可していないので、以下のサイトで、文字をタイプすればサンプルを聞くことができます。下にあるテキストをカッコの中身だけ1行ずつそのままタイプしてみてください。

    http://www.ai-j.jp/

    毎度ありがとうございます、芸能人でなくても歯は命。ゴシゴシ磨いてくださいね。
    
    アヤミ歯科クリニックです。番号ふだを引く方は 1を、治療費の確認は 2を、押してください。

    本日は 1 を、明日は 2 を押して下さい。希望時間を 4ケタで入力してください。

    希望時間は 12:30 ですね。よろしければ 0 を、やり直す場合は 9 を押して下さい。

    受け付けました、5分程度でご予約可否をご連絡します。電話を切ってお待ち下さい。

    状況開始希望時を4ケタで押せ。状況開始希望時、ひと にい さん まる、了解は ゼロ、変更は 9 を押せ。

    了解、命令下達に備え回線を切断し、通信部隊からの連絡を待て。以上解散。

    すげええええヽ(`Д´#)ノ

    「命令下達」を漢字のまま正しく「めいれいかたつ」と読んでくれます。それにしても、「希望時間は 12:30 ですね。」にはビックリしましたね! いたずらっ子を諭すような「ね」の締め方です。惚れそう。

    どうしてもSAYの喋り方じゃダメ、かといって広報女子に録音して貰う暇もリソースもない、なんとかデジタルで済ませつつ発話品質を上げたい、という方は、このようなサービスを利用してみるのもアリです。実際、当サービスのお客様でもAI Talkさんのを使っている事例もあるようです。こちらもAPIサービスなので、AI Talk側にAPIリクエストを出すと、音声ファイルを瞬時に作り、そのURLが返ってくるという使い方です。PLAY動詞との相性も抜群。

    結局、SAY動詞の自虐ネタような回になってしまったのですが、もう皆さんご利用していて分かってることですからね・・・こうして聴き比べたり色々調整する機会はなかなか無いのではと思います。今回のコラムを参考に、皆さんのサービスにおける自動音声品質をどのあたりに定めようか、それを達成するために、必要なものはSAYの微調整なのか、外部エンジンなのか、やっぱり肉声なのか、そんなことを再検討していただく機会になれたら幸いです。

    この記事をシェア


    最新記事

    すべての記事へ