意図、発話、エンティティを定義する
"発話" とは、ユーザーが言語モデルを使用するアプリケーションと対話するときに入力する可能性のあるフレーズです。 "意図" は、ユーザーが実行したいタスクやアクションを表します。より簡単に言うと、発話の "意味" です。 モデルを作成するには、意図を定義し、それを 1 つまたは複数の発話に関連付けます。
たとえば、次のような意図と関連する発話の一覧を考えてみましょう。
- GetTime:
- "何時ですか?"
- "時刻は何時ですか?"
- "今何時ですか"
- GetWeather:
- "天気予報はどうですか?"
- "傘は必要ですか?"
- "雪は降りますか?"
- TurnOnDevice
- "照明をつけて。"
- "照明のスイッチを入れて。"
- "扇風機をつけて"
- なし:
- "Hello"
- "さようなら"
モデルでは、モデルに理解させたい意図を定義する必要があります。そのため、モデルがサポートする必要がある "ドメイン" と、ユーザーが要求する可能性のあるアクションや情報の種類について、時間をかけて考える必要があります。 すべてのモデルには、定義する意図に加え、非意図が含まれます。これは、ユーザーが送信する可能性はあっても、特定のアクションが要求されていない発話 (たとえば、"こんにちは" のような会話のあいさつ) や、このモデルのドメインの範囲外の発話を明示的に特定するために使用されます。
モデルでサポートする必要がある意図を特定したら、それぞれの意図に対してさまざまな異なる発話例をキャプチャすることが重要です。 ユーザーが入力すると思われる発話を収集します。これには、同じ意味の発話であっても、構成方法が異なるものも含みます。 次のガイドラインを念頭に置いてください。
- さまざまな例や、同じことの別の言い方をキャプチャします
- 短いものから、中程度、長いものまで、発話の長さを変化させる
- 発話の "名詞" や "対象" の位置を変化させる。 それを先頭、末尾、またはその間のどこかに配置します
- 適切なトレーニング データの例を提供するために、さまざまな発話の中で正しい文法と間違った文法を使用する
- ラベル付けされたデータの正確性、一貫性、完全性が、モデルのパフォーマンスを決定する重要な要因です。
- 正確なラベル付け: 各エンティティを常に適切な型にラベル付けします。 ラベルには、抽出するデータのみを含め、不要なデータを入れないでください。
- 一貫したラベル付け: すべての発話で、同じエンティティには同じラベルが付いているようにします。
- 完全なラベル付け: すべての発話に含まれるエンティティのすべてのインスタンスにラベルを付けます。
"エンティティ" は、意図に特定のコンテキストを追加するために使用されます。 たとえば、複数のデバイスに適用できる TurnOnDevice 意図を定義し、エンティティを使用してさまざまなデバイスを定義することができます。
次のような発話、意図、エンティティを考えてみましょう。
発話 | インテント | エンティティ |
---|---|---|
"時刻は何時ですか?" | GetTime | |
"ロンドン" では何時ですか? | GetTime | 場所 (ロンドン) |
"パリ" の天気予報はどうですか? | GetWeather | 場所 (パリ) |
今晩は "傘" が必要ですか? | GetWeather | 時刻 (今晩) |
明日の "シアトル" の天気予報はどうてすか? | GetWeather | 場所 (シアトル)、時刻 (明日) |
"照明" をつけて。 | TurnOnDevice | デバイス (照明) |
"扇風機" のスイッチを入れて。 | TurnOnDevice | デバイス (扇風機) |
エンティティは、いくつかの別の種類のコンポーネントに分割できます。
- 学習済みエンティティは最も柔軟性の高いエンティティで、ほとんどの場合に使用します。 学習済みエンティティに適切な名前を定義し、発話のトレーニング時に単語またはフレーズをそれに関連付けます。 モデルをトレーニングすると、発話の中の適切な要素をエンティティと対応させることを学習できます。
- リスト エンティティは、特定の値のセットを持つエンティティが必要な場合に便利です (例: 曜日)。 リスト エンティティの定義には同義語を含めることができるので、"Sun"、"Mon"、"Tue" などの同義語を持つ値 "Sunday"、"Monday"、"Tuesday" などを含む DayOfWeek エンティティを定義することができます。
- 事前構築済みエンティティは、数値、日時、名前などの一般的な型に便利です。 たとえば、事前構築済みコンポーネントが追加されると、"6" や "Microsoft" などの組織などの値が自動的に検出されます。 サポートされている事前構築済みエンティティの一覧については、この記事を参照してください。