botframework
自然言語処理の追加
サーチ…
前書き
BotフレームワークはRecognizers
サポートしています。レコグナイザーは、ユーザーがbotにメッセージを送信するたびに何をすべきかを認識するために使用されます。したがって、ユーザーの入力に基づいてインテントを認識するようにボットを設計できます。レコグナイザは、ボットの自然言語の理解を追加するためにLUIS APIと共に使用することができます。
構文
var recognizer = new builder.LUISRecognizer( 'あなたのモデルのURL');
var intents = new builder.IntentDialog({認識子:[認識子]});
LUISRecognizerの初期化と追加
はじめにで紹介した基本テンプレートを使って新しいプロジェクトを作成したら、LUISRecognizerを追加することができます。
var model = '' // Your LUIS Endpoint link comes here
var recognizer = new builder.LuisRecognizer(model);
今、 recognizer
はLUISRecognizerであり、定義されたLUISモデルに基づいてインテントを渡すことができます。 recognizer
プログラムをインテントに追加するには
var intents = new builder.IntentDialog({recognizers: [recognizer]});
あなたのボットはLUISからのインテントを処理できるようになりました。 IntentDialog
クラスのmatches
プロパティを使用すると、LUIS上の任意の名前付きインテントを検出できます。つまり、 hi
という名前のインテントがLUISモデルで定義され、ボットの意図を認識し、
intents.matches('hi', function(session) {
session.send("Hey :-)");
});
インテントによるLUISモデルの定義
LUISモデルを作成するには、プログラミングの経験はほとんど必要ありません。ただし、広範囲に使用される2つの重要な用語に精通している必要があります。
- インテント - ユーザーが何かを入力したときに実行する必要のある関数を識別する方法です。例:
Hi
という名前のインテントは、ユーザーが「Hi」を送信するたびに実行する必要のある関数を識別します。インテントは、プログラム/モデル内で一意に命名されます。 - エンティティ(Entities) - ステートメント内の名詞を識別します。例えば、 - 「午後1時にアラームを設定する」、ここでは
1:00 pm
は、アラームを設定するためにチャットボットによって認識される必要があるエンティティです。
注:ウェブサイトの画像は私の変更のフロントエンドとして提供されていませんが、コアコンセプトは変わりません。
新しいモデルを作成するには、LUIS.aiにアクセスし、Microsoftアカウントでサインインしてアプリ作成ページに移動します。空のプロジェクトを作成できる場所。
インテントの定義:
インテントは[ Intents
]タブで定義できます。ユーザーが何かを入力したときに実行する必要がある機能を識別します。
すべてのアプリケーションには、ユーザーの入力が他のインテントと一致しない場合にアクティブ化されるデフォルトの「 None
インテントがあります。
インテントを定義するには、
- 実行する機能に固有の固有の名前を付けます。
- 命名が完了したら、意図に
utterances
を追加する必要があります。発話は、定義している意図をアクティブにするためにユーザーが送信したいものです。 LUISがintents
とutterances
適切に関連付けるためには、できるだけ多くの異なるutterances
を試してみてください。 - 「
Train and Test
タブの「Train
ボタンをクリックして、LUISモデルをトレーニングします。トレーニングの後、アプリは下のパネルでテストすることができます。 - 最後に、アプリを[アプリの
Publish App
タブにPublish App
します。LUISRecognizer
で、ボットコードにLUISRecognizer
を定義するLUISRecognizer
に入力する必要のあるエンドポイントURLを取得する必要があります。
LUISモデルへのエンティティの追加
エンティティは、ボットがインテントに従った特定の発話から抽出した情報です。
してみましょうEG- My name is John Doe
と呼ばれる意思に属しintroduction
。あなたのボットが文からJohn Doe
という名前を理解して抽出するには、そうするエンティティを定義する必要があります。エンティティには任意の名前を付けることができますが、抽出する内容に名前を付けるのが最善です。この例では、エンティティname
呼び出すことができます。
エンティティは異なる目的間で再利用され、異なるものを抽出することができます。ですから、最良の原則は、データのタイプのみを抽出し、異なるインテントで使用するエンティティを作成することです。したがって、上記の例では、 booking
とは、 Book a flight on Emirates
がインテントbooking
属している場合、同じエンティティ、 name
使用してemirates
航空のフライト名を抽出することができます。
エンティティを定義する前に、2つのことを覚えておく必要があります。
- エンティティは意図的に発声ごとに一意でなければなりません。エンティティは同じ発声で2回使用できません。
- LUISは大文字と小文字を区別しません。これは、エンティティ抽出によって抽出され受信されるすべてが小文字になることを意味します。したがって、エンティティを介して大文字と小文字を区別するデータを抽出することはおそらく悪い考えです。
あらかじめ作成されたエンティティを追加する
名前が示すように、あらかじめ作成されたエンティティは、事前に構築されているため、追加された意図を超えて特定のタイプのデータを抽出するように既に設定されています。例は、それが割り当てられている意図からnumber
を抽出するエンティティnumber
です。数字は10
またはten
ような数字またはアルファベットのいずれかにすることができます。
すべての事前構築エンティティの完全なリストについては、[Pre-built Entities List] [1]を参照してください。
あらかじめ作成されたエンティティを追加するには、
-
entities
タブに移動します。 - [
Add pre-built entities
をAdd pre-built entities
クリックし、モデルに追加するAdd pre-built entities
を選択して[保存]をクリックします。
カスタムエンティティの追加カスタムエンティティは4種類あり、
- シンプル :単純なエンティティは特定のデータを抽出しますが、上記の例の
name
は単純なエンティティです。 - 階層的 :親に依存する子エンティティ(サブタイプ)を持つ親エンティティ。
- コンポジット :2つ以上のエンティティからなる独立したグループ。
- リスト :与えられたリストからの単語だけを認識する実体。
単純なエンティティの定義
-
entities
タブに移動します。 -
Add Custom Entities
クリックします。 - エンティティに名前を付け、必要なエンティティタイプを確認して[
Save
。
Entity Type
を上記のいずれかのEntity Type
に変更するだけで、他のすべてのタイプのエンティティを同じ方法で追加できます。階層型および複合型のエンティティタイプでは、親エンティティ名とともに子ネームも与える必要があります。リスト・エンティティを定義することは、残りのものとは少し異なります。
リスト・エンティティの定義
上記の手順に従って、 List Entity
としてEntity Type
を入れてList Entity
を作成すると、今定義したエンティティの詳細ページが表示されます。
- 標準的な値を定義する。これは、ユーザーが同義語のいずれかをタイプするときにボットが受け取る標準値です。
- シノニムを標準的な値に定義します。それらは、エンティティが遭遇すると、標準的な値に変換されます。
次の形式のJSONオブジェクトの配列を使用して、リスト全体をインポートすることもできます。
[
{
"canonicalForm": "Hey",
"list": [
"Howdy",
"Hi"
]
},
.
.
.
]
エンティティとインテントの関連付け
Pre-built
エンティティとlist
エンティティには、すべての入力から抽出できる値のセットがすでに定義されていますが、 Simple
、 Hierarchical
、 Composite
発話を訓練して値を取得する必要があります。
これは、
- [
intents
]タブに移動し、エンティティを追加するintents
を選択します。 - あなたが抽出したいダミーの値を持つ発話を追加してください。言って、
My name is John Doe
を発言として追加できます。 - エンティティが抽出する単語にマウスをクリックしてドラッグします。上記の例では、
john doe
を強調表示する必要があります。 - プロジェクトで使用できるすべてのエンティティのリストがドロップダウンで表示されます。適切なものを選択してください。
Name
は上記の例で選択されたエンティティです。 - 毎回異なるダミー値を持つ発話を追加し、考えられるすべての可能な構造を追加します。
- LUISモデルをトレーニングして公開します。