NLU概要
自然言語理解は高度なバーチャルエージェントの核となるものです。Cognigy.AIは、Cognigy NLUと呼ばれる業界をリードするNLUエンジンを搭載しています。
Intent(インテント)
インテント・マッピングはNLUエンジンの中核をなすもので、このプロセスでは機械学習を用いてユーザーの発話を定義されたインテントにマッチさせる。
Intentは[NLU]タブの[Intents]セクションで作成することができ、例文の形式で学習データを入力することができます。これらの例文には、モデルがうまく機能するよう、一定のバリエーションを含む必要があります。次の画像は、Intent作成メニュー内のIntentライブラリの例です:
機械学習モデルは、すべてのIntentクラスについて同量の情報がある場合に最もよく機能します。つまり、すべてのIntentに同量の例文があり、内容的に明確に分離可能であることが理想的です。機械学習は不完全な入力にも対応できますが、機械の負担を軽減することが重要です。
有用な情報のない単語や文だけのIntentがないようにしてください。そのようなIntentは、モデルの全体的な有効性を低下させる可能性があります。NLUが発話をIntentモデルの範囲外だと予測した場合、Intentはトリガーされず、入力オブジェ クトのIntentは 「null(無)
」に設定されます。Reject Intent に例を追加して、バーチャルエージェントの範囲外のユーザー入力をNLUが認識しないようにすることができます。
NLUモデルのフィードバック
NLUモデルのフィードバック
モデルが学習されるとすぐに、Cognigy NLUはモデルのパフォーマンスに関するフィードバックを表示します。これは異なる色で表示され、緑は良好、オレンジは最適以下、赤は不良を意味します。追加情報はマウスオーバーで表示されます。
例文の数
NLUを十分に学習し、適切なモデルを得るためには、Intentには最低5つの例文が必要です。入力する例文が多ければ多いほど、より高い精度でモデルをビルドすることができます。その結果、Intentはより高確率でトーク中に認識され、さらに精度の高いモデルに基づきより高いスコア率で評価されます。これにより、バーチャルエージェントのIntent認識が向上します。
Rules(ルール)
ルールは、特定の条件下でIntentをトリガーするために使用できます。ルールは、NLUの実行時に評価されるJavaScript式として定義されます。
Intentエントリポイント
Intentエントリポイントは、NLUの実行後にFlowのEntrypointを変更するために使用できます。以下の3つのオプションがあります:
- 通常実行 自動的にエントリポイントを設定します。
- このFlowのSTARTから実行 Start Nodeを使用してFlowを実行します。
- このFlowのNodeから実行 特定のNodeから開始するFlowを実行します。
DeDefault Replies(デフォルト返信)
Intentは、いわゆる Default Replies (デフォルト返信) の形で直接出力 (回答) を設定できます。デフォルト返信は Say に統合され、チャネル固有の出力に設定できます。
個々のIntentごとに、デフォルト返信を例文として使用するように設定を上書きできます。デフォルトでは、Use Flow Settings(フロー設定を使用)に設定されており、つまり、Flow設定をそのまま使用することを意味します。
この機能を有効にすると、NLUは設定されたデフォルト返信も使用して学習するため、設定されたインテントの一致率が向上します。
応用編
Intentは、多くの応用的なオプションで設定することができます。
Tags (タグ)
タグを使用して、Intentを分類することができ、管理がしやすくなります。
Conditions (条件)
CognigyScript 条件を使用して動的にIntentsを有効または無効にする方法の詳細については、[Intent Conditions(インテントの条件)]をご覧ください。
Confirmation Sentence(確認文)
Cognigy NLUには、各Intentに確認文を設定することで動作するIntent確認メカニズムが搭載されています。Intentのスコアが(設定可能な)範囲(例えば0,4~0,6)に入るたびに、確認文がトリガーされ、ユーザーに表示されます。ユーザーがIntentを確認すると、Intentがトリガーされます。
再確認文を追加する方法については、[Machine Learning Intents(機械学習インテント)]をご覧ください。
InteIntent オプションメニュー
Intent オプションメニューは、「Create Intent(インテントを作成)」ボタンの隣にある 3 つの点をクリックすることで選択できます。このメニューにはいくつかのオプションがあります:
- IntentsのCSVまたはJSONファイルをアップロード このオプションで、CSVまたはJSON形式のIntentコレクションをアップロードできます。
- Intentのダウンロード CSV またはJSON形式でIntentをダウンロードすることもできます。
- Reject Intent の作成 Reject Intentを使用すると、特定の発言を明示的に拒否することができます。Reject Intentは、特定のユーザの発話をIntentとして登録すべきでない場合に使用できます。
- すべてのIntentを削除 特定のFlow内のすべてのIntentを一括削除できます。
Intentのアップロード
Intentをアップロードするには、以下の手順で行います:
- Flowを開きます。
- Flowエディタで、[NLU] > [Intents]に移動します。
- [+Create Intent(インテントの作成)]ボタンの右側で、縦の三点リーダをクリックします。
- [Upload Intents CSV File or JSON File(IntentsのCSVまたはJSONファイルをアップロード)]を選択します。
- 次のいずれかのモードを選択します:
・スキップ – この名前のIntentがすでに存在する場合、インポートプロセスはこのIntentをスキップします。
・上書き – 同じ名前のIntentがすでに存在する場合、既存のIntentが削除され、新しい値に置き換えられます。
・結合 – 同じ名前のIntentがすでに存在する場合、複数の値を使用するプロパティが結合されます。これらのプロパティには以下が含まれます:
・例文
・ルール
・タグ
・確認文 デフォルト返信や条件などのその他のプロパティは変更されません。 - [Confirm(確定)]をクリックします。
Intentをアップロードしても、アップロードファイルに含まれていない既存のIntentは削除されません。Intentを削除する場合は、[Delete All Intents(すべてのIntentを削除)] オプションを使用するか、事前に個々のIntentを削除してください。
Intentのダウンロード
注意
@、+、-、=の文字で始まるフィールドは使用できません。
Intentをダウンロードするには、以下の手順で行う:
- Flowを開きます。
- Flowエディタで、[NLU] > [Intents]に移動します。
- [+Create Intent(インテントの作成)]ボタンの右側で、縦の三点リーダをクリックします。
- [Download Intents(インテントのダウンロード)]を選択します。
- ダウンロード形式を選択します: CSVまたはJSONを選択します。
- [Confirm(確定)]をクリックします。
選択した形式でファイルがダウンロードされます。
個別Intentオプションメニュー
各Intentには、さらに独自のオプションメニューがあり、Intent名の横にある3つの点をクリックすることで選択できる。メニューにはいくつかのオプションがあります:
- 子Intentの作成 Intentを子Intentとして選択肢に追加します。[Intent Hierarchy(インテント階層)]をご覧ください。このプロパティは、データのインポート/エクスポートに含まれます。
- Intentを無効にする 選択されたIntentを無効にして、ユーザー入力で認識またはアクティブ化できないようにします。この機能は、一時的にIntentとそれに関連する学習データをモデルから削除しますが、ワンクリックで再追加することができます。このプロパティはデータのインポート/エクスポートに含まれます。
- Intentを削除 Intentと関連するすべての学習データをモデルから削除します。
結合
Cognigy NLUは、追加のFlowとLexiconが結合されるたびに、それらを加味することができます。
結合Flow
Intentを持つFlowに別のFlowが結合すると、NLUモデルの学習時に、その結合FlowのIntentが加味されます。これは、異なるIntentコレクションを1つの大きなモデルにまとめる実用的な方法です。
Flowの結合に注意
Flowが別のFlowに結合されると、両方のFlowのIntentが1つのモデルに統合されます。このため、思いがけない結果につながる可能性があります。
結合Lexicon
Flowがキーフレーズを検出できるようにするには、LexiconをFlowに結合する必要があります。リソースを結合またはデタッチするときは、必ずモデルを再学習させましょう。
States(状態)
Statesを使用すると、特定の Intentを意図的にブロックすることができます。これは、エッジケースや非常に大きなIntentコレクションで有益です。
詳細は[State]をご覧ください。
Slot Fillers(スロットフィラー)
ロットを設定することができ、NLUの実行毎に実行されます(通常は入力のたびに)。スロットフィラーは検出されたスロットを自動的にコンテキストオブジェクトにコピーするため、後続のユーザー発話を何度も使用してスロットを埋めることができます。Question Nodesと組み合わせることで、ユーザーが「過回答」することができるため、非常に自然な情報収集メカニズムが実現します。
例 3つの情報を集めたいとします:
- サイズ
- メールアドレス
- 製品
これらの情報に適切なスロットフィラーを設定します:
一致する Question Nodes を追加すると、次のような Flow になります:
スロットフィラーの結果が格納される場所なので、「Skip if Answer exists in Context(コンテキストに答えが存在する場合はスキップする)」を選択した状態で、Question Nodesを構成してください。
これでFlowは、さまざまな種類の発話を受け取り、不足している情報を自動的に質問する準備ができました。
“XLのTシャツが欲しい” →[メールアドレスがありません]→” メールアドレスを教えてください”。
“XLのTシャツが欲しいです、私のメールアドレスはmax@cognigy.comです。”→Flowが完了しました。
応用版スロットフィラーオプション
追加検証
CognigyScriptの条件で、マッチが有効とみなされるためにはtrue
を返す必要があります。例えば、メールアドレスを聞く際の追加検証としてinput.slots.EMAIL[0].endsWith("cognigy.com")
を指定すると、cognigy.comのメールアドレスのみが検証を通過することが保証されます。
結果の場所
埋められたスロットの結果の場所は、デフォルトではスロットのタイプによって決定されます(例えば、メールアドレスを聞く場合はinput.slots.EMAIL[0]
)。これは、この設定を使用して上書きすることができます(例えば、input.slots.EMAIL
は、見つかったすべてのメールスロットを格納します)。結果の場所が値を返さない場合 (=falsyである場合)、回答は無効と見なされます。