Amazon LexとAWS Lambdaを利用した音声注文システムの実装

Amazon LexとAWS Lambdaを利用した音声注文システムの実装

目次

    はじめに

    今回はラーメンチェーン店を想定して、注文受付を音声AIで効率化できないかというテーマについて検討してみます。

    一般的なラーメンチェーン店では、券売機やタッチパネルで食券を購入した後、

    • 麺の硬さ
    • 味の濃さ
    • 脂の量
    • トッピングの有無

    などを店員が確認する運用が行われています。 この方法はシンプルである一方、

    • 店員の対応負荷が発生する
    • 注文内容の聞き間違いが発生する可能性がある
    • 注文履歴を分析用データとして活用しづらい

    といった課題もあります。

    そこで今回は、AWSの対話型AIサービスである Amazon Lex V2 を利用して、ラーメン店の注文受付を音声で行うデモを作成しました。

    また、注文内容をデータとして蓄積することで、

    • 人気商品の分析
    • トッピング傾向の分析
    • 時間帯別の注文傾向分析

    などへ活用できる可能性もあります。

    本記事では、Amazon Lex V2 を利用した音声注文システムの構築方法と、デモ作成を通じて見えてきた課題について紹介します。

    Amazon Lexとは

    Amazon Lex は AWS が提供する対話型AIサービスです。

    自然言語理解(NLU)と音声認識(ASR)を利用し、ユーザーの発話から意図を解析できます。

    Amazon Alexaと同じ技術基盤を利用しており、チャットボットや音声アシスタントを比較的簡単に構築できます。

    Lexで利用する主な用語は以下です。

    用語 説明
    Intent ユーザーの目的
    Slot Intent実行に必要な情報
    Utterance 発話例
    Fulfillment Intent完了後の処理

    例えば、

    味玉ラーメンをお願いします
    

    という発話から、

    Intent:PlaceOrder
    
    product:味玉ラーメン
    

    を抽出できます。

    システム構成

    今回作成したデモの構成は以下です。

    1. 注文内容を音声またはテキストで入力
    2. Amazon Lex V2 が商品名や麺の硬さなどを抽出
    3. Amazon Lex V2 から AWS Lambda を呼び出す
    4. AWS Lambda が DynamoDB に保存
    5. 注文受付完了メッセージを返却

    実装

    Bot作成

    LexコンソールからBotを作成します。

    今回は日本語Botとして作成しました。

    Locale:ja_JP
    

    Intent設定

    注文受付用のIntentを作成します。

    PlaceOrder
    

    Intentには、注文時の発話パターンをサンプル発話として登録します。

    今回のデモでは、商品名や麺の硬さ、味の濃さ、脂の量をSlotとして抽出できるように設定しました。

    サンプル発話設定

    例えば以下のような発話パターンを登録しています。

    {product} 麺{firmness} 味{flavor} 油{fat}
    
    {product} {firmness} {flavor} {fat}
    
    {product}、麺{firmness}、味{flavor}、脂{fat}
    

    商品名や麺の硬さなどのSlotを組み合わせることで、さまざまな注文パターンを認識できるようにしています。

    Slot設定

    今回は、

    • 商品名
    • 麺の硬さ
    • 味の濃さ
    • 脂の量

    をカスタムスロットタイプとして登録しました。

    スロットタイプ一覧

    各Slotにはプロンプトを設定しており、注文時に不足している情報がある場合はLexが自動で聞き返します。

    例えば、商品名のみが入力された場合、

    商品は?
    
    麺の硬さは?
    
    味の濃さは?
    
    脂の量は?
    

    といったプロンプトを利用して不足情報を収集します。

    スロットオプション

    Lambda連携

    注文完了時に Lambda を呼び出します。

    Lambdaでは注文内容を取得し、DynamoDBへ保存します。

    実際の保存イメージは以下です。

    {
      "orderId": "xxxx",
      "product": "MAXラーメン",
      "firmness": "硬め",
      "flavor": "濃いめ",
      "fat": "多め"
    }
    

    今回は注文内容の保存後、注文完了メッセージを返却するようにしました。

    デモ

    実際のデモでは以下のような対話を行いました。

    注文受付デモ画面

    人:
    味玉ラーメン
    
    Lex:
    麺の硬さは?
    
    人:
    普通
    
    Lex:
    味の濃さは?
    
    人:
    普通
    
    Lex:
    脂の量は?
    
    人:
    普通
    
    Lex:
    注文を受け付けました
    

    Lexが不足している情報を自動で収集してくれるため、自然な会話形式で注文を進めることができます。

    また、注文内容はDynamoDBへ保存されるため、後から分析に利用することも可能です。

    課題

    用語のゆらぎ

    実際の運用を想定すると、店舗や利用者によって注文時の表現が異なる可能性がある点が課題として挙げられます。

    例えば麺の硬さだけでも、

    • かた
    • 硬め
    • バリかた
    • やわ

    など様々な表現があります。

    また、

    • 味玉!
    • 全部普通で

    といった注文方法も考えられます。

    Lexでは同義語やサンプル発話を登録できますが、実際の運用では想定していない表現が出てくる可能性があります。

    店舗ごとの差異

    チェーン店であっても店舗独自の運用や常連客の言い回しが存在する可能性があります。

    そのため、本部主導でサンプル発話や辞書を継続的に改善していく運用が重要になりそうです。

    また、Lexが認識できなかった発話を収集・分析し、新しい同義語の追加や辞書改善へ効率的につなげる仕組みの検討も必要です。

    他業務への応用

    今回の検証を進める中で、

    • いらっしゃいませ
    • ありがとうございました

    といった接客用語の発話状況を確認する用途にも応用できるのではないか、というアイデアも見えてきました。

    注文受付だけでなく、

    • 接客品質の可視化
    • 店舗教育
    • オペレーション分析

    などへの活用可能性も感じました。

    まとめ

    今回は Amazon Lex V2 を利用して、ラーメン店向けの音声注文システムを作成しました。

    Lexのスロット機能を利用することで、

    • 商品名
    • 麺の硬さ
    • 味の濃さ
    • 脂の量

    といった注文情報を対話形式で収集できます。

    また、注文内容をデータとして蓄積することで、将来的にはマーケティング分析や業務改善へ活用できる可能性もあります。

    実際にデモを作成してみると、技術的な実現性だけでなく、店舗ごとの運用差異や表現ゆれへの対応といった現場特有の課題も見えてきました。

    今後も生成AIや音声AIを活用した業務改善の可能性を検証していきたいと思います。

    参考

    アジアクエスト株式会社では一緒に働いていただける方を募集しています。
    興味のある方は以下のURLを御覧ください。