トレタ開発者ブログトレタ開発者ブログ飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。2022-12-19トレタ予約番を支える技術こんにちは、トレタ予約番事業で開発リーダーをしている北川です。トレタ2022年アドベントカレンダー19日目の記事として、トレタ予約番サービスについて今まであまり公表していなかった裏側の仕組みについて紹介したいと思います。トレタ予約番とはまずトレタ予約番というサービスの紹介です。トレタ予約番は、飲食店の電話に自動応答ロボットが24時間応答し、予約の受付/変更/キャンセルを対応してくれるサービスです。飲食店にとっては今まで営業時間外にかかってきて取りこぼしていた予約電話を受けられるようになったり、多忙な営業時間の電話応答はトレタ予約番に任せつつ、スタッフ対応が必要な電話だけトレタ予約番からスタッフに繋ぐことで、業務負荷の軽減に役立てていただいています。自動応答の電話というと宅配便の受取時間変更の電話のようなIVRをイメージされるかと思いますが、大きな違いとしてはユーザーはプッシュボタンでの操作ではなく、音声で操作を行う点です。それを実現するために、音声認識や音声合成などの技術要素を色々と利用しているので、その仕組みについて紹介していきます。toreta.in具体的なトレタ予約番に電話したときの様子はこちらのサービスサイトに動画があるので、是非見て聞いてみてください。Connectを利用しています。Connectはコールセンター向けの電話サービスです。Lambdaを使うことでプログラマブルな制御を入れることができるのも特徴です。Streamsというライブラリが提供されています。これらを使い、電話の応答・切断・転送などをプログラムで制御します。通話中の音声データから、音声認識を行いテキストデータに変換します。音声認識にはGCPのSpeech-to-Textを利用しています。Speech-to-TextのAPIに音声データを入力してほぼリアルタイムに音声認識結果のテキストデータを取得することができます。日本語に対応していますし、GCP以外の音声認識エンジンをいくつか精度検証を行いましたが現時点ではGCPが頭ひとつ抜けて精度がよい印象です。後述していますが、専用の学習モデルに切り替えられたりチューニングなどで音声認識の向上を行うことも可能です。取得したテキストデータは文字起こしされた文章なので、そこから意味を解釈して必要なデータを抽出するのが自然言語処理です。予約の人数について「2名です」という発話であれば「2」という数値データを抽出します。人によって「2名」や「2人」など語彙の揺れがあるので、自然言語処理によってそれらの揺れを吸収します。cloudを使用しています。www.unirobot.com会話シナリオ予約電話の会話は基本的にシナリオがあり、大まかに以下のステップを踏みながら会話を進めます。日時の質問であればユーザーが日時を答えることが期待値であり、自然言語処理を行なった結果が日時として認識できれば次のステップに進みます。日時以外の内容であれば再度日時を言い直すように応答します。ユーザーの発話内容をサーバー側の処理を通すことでシステムの応答内容を分岐させる場合もあります。ユーザーが「23時」と答えた場合、日時としては正しいですが店舗の営業時間外であれば正しく日時として、正しくないことを伝え再度日時を質問します。最後に予約確認まで進めば、トレタの予約台帳のAPIに対して予約登録を行い、登録完了を伝えて通話終了となります。音声合成シナリオに沿ってシステムの回答を音声合成サービスを通して音声データとして作成します。大体は決まった文言ではありますが、ユーザーの発話内容を復唱したりするため毎会話ごとに音声合成を行なっています。現在は株式会社エーアイのAITalkを利用しています。日本語がとても自然なのと、イントネーションや感情値など細かいチューニングが行えるので、明るく活発な印象にすることができています。www.ai-j.jpサービス向上のとりくみ基本的な動きとしては前述の通りですが、より自然に、よりユーザーにストレスがないように細かいチューニングを日々行なっています。サービスの質に直結する音声認識精度の向上に向けた取り組みについていくつか紹介します。学習モデルのチューニング現在使用しているGCPのSpeechToTextには認識精度を向上させるためのチューニング方法がいくつか提供されています。通話音声は音の帯域が狭く音質が悪いためこのモデルを利用するのは有効的です。設定することで任意の単語の精度を上げることができます。「はい」「いいえ」の回答を要求する会話の部分において、「いいえ」を「家(いえ)」と誤認識してしまうことがありましたが、「はい」「いいえ」をフレーズ設定することで正しく認識する確率が上がりました。意味を汲み取る正しく音声認識をしても文脈で意味が異なるケースがあります。予約の日時を聞いた時の回答が「7時」であった場合、予約の文脈であれば「午前7時」ではなく「午後7時(19時)」が正しいと考えるのが一般的です。厳密にはその店舗の営業時間を参照し、7時なのか19時なのかを判別し正しいと思われる方で音声認識の結果を補正します。他にも、例えば予約の日時を「7月(しちがつ)」と認識した場合、その時の日付が1月であれば「1月(いちがつ)」を「7月(しちがつ)」と誤認識してしまった可能性が高いです。「2月(にがつ)」「4月(しがつ)」などの様に、日時としては正しいが聞き間違い(誤認識)をしてしまうことは多々あります。その場合はその時の日付や時間帯なども考慮して、音声認識した結果を改めるようにしています。難しい判定としては「大丈夫」などのどちらにも捉えられるワードがあります。「この内容でよろしいですか?」「大丈夫です」の場合、おそらくYesと思われます。「店舗にお繋ぎしますか?」「大丈夫です」の場合、おそらくNoと思われます。このように曖昧な表現は各会話ごとにどう解釈させるかを定義として入れて対応しています。さいごにトレタ予約番は正式ローンチして1年以上経つサービスですが、AIの業界は日進月歩の世界なのでその時その時でよりよい音声認識エンジンであったり合成音声エンジンを切り替えたり、多くの試行錯誤やチューニングを行なっています。知見も溜まり新しい機能やシステムのリプレイスを考えたり、やりたいことはまだまだあるので興味を持たれたエンジニアの方は是非話を聞きにいらしてみてください。16:22Tweet関連記事2021-12-21マイクロサービスへの挑戦とその結果こんにちは。エンジニアのkitagawaです。本記事はトレタアドベントカレンダー19日目の記事です。2017の24日目の記事です。...2016-10-19「データサイエンティスト協会3rdシンポジウム」に参加しましたトレタのAPIをメンテしている芹沢です。»トレタ開発者ブログ飲食店向け予約/顧客台帳サービス「トレタ」、超直前予約アプリ「トレタnow」の開発メンバーによるブログです。Blog引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。