通常、あなたのような狭い分野のチャットボットは、通常、2つの重要な概念に依存しています。
- インテント検出:ユーザーが何を要求しているかを特定します
- エンティティの抽出:ユーザーのリクエストでエンティティを識別します。たとえば、フライト予約ボットのエンティティの例は、出発地、目的地、旅行日です。天気ボットでは、エンティティは天気の希望の日付または天気が必要な場所にすることができます。
完了したタスクのリストを取得し、最後に完了したタスクを取得するという明確な目標を持つ、特定のタイプのチャットボットの場合。これを開発するには、関心のある意図を定義する必要があります。あなたの例から、2つのインテントを簡単に定義できます。
COMPLETED_TASKS_REQUEST
LAST_COMPLETED_TASK
この2つの意図に基づいて、検出されるエンティティは実際にはありません。サービスAPIにクエリを実行するだけで、各シナリオで要求された情報を取得できます。
次のフェーズは、意図を識別するために分類器をトレーニングすることです。これは、リクエストタイプごとにいくつかのサンプルセンテンスを取得し、それらについてトレーニングすることで実行できます。
その後、フローは次のように削減されます。
- ボットはメッセージを受信します
- ボットは意図を識別します
- ボットは関連するエンティティを抽出します(必要な場合)
- インテントが認識された場合、ボットはデータソースにクエリを実行して回答を取得します。そうでない場合、ボットはリクエストを理解していないと文句を言います。または、ボットがリクエストを完了するためにエンティティを必要とする場合、ボットはユーザーに情報の提供を求め、タスクを完了します。これは通常、スロットベースのアプローチと呼ばれます。DialogManagerの動作の詳細を読むことができます。
機械学習やNLPに慣れていない場合は、wit.aiやapi.aiなどのプラットフォームでインテント検出器を簡単にトレーニングできます。このタスクのエンティティ分類部分は単純なhttp
APIリクエストに限定されます。ただし、真に複雑または洗練されたボットを構築する場合は、完全に制御でき、エッジケースをより適切に処理できるため、ほとんどの場合、独自のモデルを構築する方が適切です。wit.aiやapi.aiのようなプラットフォームは、通常、複数の分野でうまく機能する必要がありますが、タスク管理の専門家にすることに集中できます。
お役に立てれば。
PS:ボットをより面白くするために、IDを指定して特定のタスクのステータスを取得するなどのインテントをもう1つ追加できます。たとえば、ユーザーはタスク54のステータスを尋ねることができます。このインテントは次のように呼び出すことができます
TASK_STATUS_REQUEST
。この例では、インテントには要求されたタスクのIDであるエンティティがあるため、それを抽出する必要があります:)