エンティティの作成

エンティティを作成する方法を示します。

エンティティを作成するには:
  1. サイド・ナビゲーション・バーで「エンティティ」(これは「エンティティ」アイコンのイメージです。)をクリックします。
  2. 「エンティティの追加」をクリックして、名前を入力し、タイプを選択します。ダイアログのフィールドがエンティティ・タイプを反映します。たとえば、正規表現エンティティでは、正規表現を追加できます。値リスト・エンティティでは、値とシノニムを追加します。
    スキルがデジタル・アシスタントのネイティブ言語サポートを介して複数の言語をサポートしている場合は、バリュー・リスト・エンティティの値とシノニムに対応する外国語を追加する必要があります。

    これらの値はプライマリ言語の対応する値(プライマリ言語の値)にマップする必要があるため、プライマリ値を選択してから、それに対応するセカンダリ言語の値を追加する必要があります。たとえば、プライマリ言語が英語であるスキルに、セカンダリ言語としてフランス語を追加した場合、最初に「プライマリ言語値」として「small」を選択してから「petite」を追加します。

  3. オプションのステップとして、説明を入力します。説明を使用して、PizzaToppingエンティティに対してthe pizza toppingsのように、エンティティのスペルを表すことができます。この説明は、エンティティをコンポジット・バッグに追加すると保持されません。
  4. 次の機能(オプション)を追加できます。これは、エンティティをコンポジット・バッグに追加すると上書きされることがあります。
    • 値リスト・エンティティに長い値リストが含まれているが、一度に少ない数のオプションのみがユーザーに表示されるようにする場合は、「列挙範囲サイズ」フィールドに数値を入力するか、この数値に評価されるApache FreeMarker式を定義することによって、これらの値のページ区切りを設定できます。たとえば、チャネルに基づいてenum値を返す式を定義できます。

      このプロパティを0に設定した場合、スキルはリストを一切出力せず、ユーザーがエンティティ値に対して入力します。

      この数値を、このエンティティに定義されている値の合計数よりも小さいものに設定した場合、エンティティの解決コンポーネントによって、値の完全なセットをそれぞれ伴う「さらに表示」ボタンが表示されます。共通レスポンス・コンポーネントを使用してエンティティを解決する場合は、自分でさらに表示ボタンを構成できます。
      これは「さらに表示」ボタンのイメージです。
      「エンティティの解決」および「共通レスポンス」コンポーネントに属するshowMoreLabelプロパティを使用して、「さらに表示」ボタンのテキストを変更できます。

    • 無効なユーザー入力に関するエラー・メッセージを追加します。system.entityToResolve.value.userInputプロパティを含むApache FreeMarker式を使用します。例: ${system.entityToResolve.value.userInput!'This'}' is not a valid pizza type.
    • ユーザーが値リスト・エンティティから複数の値を選択できるようにするには、「複数の値」をオンにします。これをオンにすると、値は番号付きリストとして表示されます。
      これは番号付きの複数値リストのイメージです。
      このオプションをオフにすると、値はオプションのリストとして表示され、単一選択のみが許可されます。
    • 「あいまい一致」をオンにすると、値に多数のシノニムがない場合は特に、ユーザー入力が値と一致する可能性が高くなります。あいまい一致では、ワード・ステミングを使用してユーザー入力から一致を識別します。あいまい一致をオフにすると、厳密な照合が実施されます。つまり、ユーザー入力は値およびシノニムとの完全一致である必要があります。「車」は「車」という値とは一致せず、「マネージャ」は「開発マネージャ」という値とは一致しません。
    • 翻訳サービスで構成されたスキルの場合、エンティティ照合は入力の翻訳に基づきます。「元の値の照合」をオンにすると、元の入力もエンティティ照合で考慮されるため、翻訳不可能な値の照合に役立つことがあります。
    • 単一の値を選択するようユーザーに強制するには、「あいまい性解消のプロンプト」をオンにし、あいまい性解消のプロンプトを追加します。デフォルトでは、このメッセージは「<item name>の値を1つ選択してください」ですが、これを次のものと置き換えることができます。テキストのみで構成されるもの(「一度にオーダーできるピザは1枚のみです。どのピザをオーダーしますか。」)またはテキストとFreeMarker式の組合せ。例:
      "I found multiple dates: <#list system.entityToResolve.value.disambiguationValues.Date as date>${date.date?number_to_date}<#sep> and </#list>. Which date should I use as expense date?"
    • FreeMarker式を使用して検証ルールを定義します。
      ノート

      組込みエンティティのプロンプト、あいまい性解消および検証は、それらがコンポジット・バッグに属している場合にのみ追加できます。
  5. 「作成」をクリックします。
  6. 次のステップ:
    1. エンティティをインテントに追加します。これにより、言語処理中にユーザー入力から抽出する必要がある値がスキルに通知されます。インテントへのエンティティの追加を参照してください。
    2. ダイアログ・フローで、エンティティの変数を宣言します。
    3. Apache FreeMarker式を使用して変数値にアクセスします。組込みのFreeMarker配列操作を参照してください。
    4. 「検証」をクリックし、エンティティ・イベント・ハンドラに関連するエラー(使用する場合)、同じシノニムを共有する値リスト・エンティティ内の複数の値などの潜在的な問題、およびベスト・プラクティス(スキルを強化するための複数のプロンプトの追加など)の適用に関するガイダンスについて、検証メッセージを確認します

複数言語の値リスト・エンティティ

複数の言語を対象とするスキルがあり、そのスキルがデジタル・アシスタントのネイティブ言語サポートを使用する場合、そのスキルに各言語の値を設定できます。スキルのプライマリ言語の各エンティティ値に、追加言語ごとに対応する値を指定する必要があります。

ヒント:

スキルで検出された言語でレスポンスが一貫して出力されるようにするには、「共通レスポンス」、「エンティティの解決」および「エンティティの照合」状態に常にuseFullEntityMatches: trueを含めます。「ネイティブ・サポート言語のスキルへの追加」で説明されているように、このプロパティをtrue (デフォルト)に設定すると、エンティティ値がオブジェクトとして返され、そのプロパティによってプライマリ言語が検出された言語と区別されます。Apache FreeMarker式で参照される場合、これらのプロパティによって、スキルのメッセージ・テキストおよびラベルに適切な言語が表示されることが保証されます。

ファジー・マッチでのワード・ステミングのサポート

リリース22.10以降、リスト値エンティティのあいまいな一致はワード・ステミングに基づいており、値の一致は単語の字句根に基づきます。以前のバージョンでは、部分一致と自動修正によってファジー照合が有効になりました。このアプローチでは、ユーザー入力のタイポが許容されていましたが、トランスポーズされた単語も含まれますが、値リスト・エンティティ内の複数の値と一致することもあります。ステミングでは、この散布が排除されます。一致はユーザー入力の単語順序に基づいているため、1つの一致が行われるか、まったく一致しません。たとえば、「Lovers Veggie」は一致しませんが、「Veggie Lover」はピザ・タイプのエンティティの「Veggie Lovers」の値と一致します。(「Lover」は語られています。)記事や前置詞などのストップ・ワードは、特殊文字と同様に抽出された値では無視されます。たとえば、「Veggie the Lover」と「Veggie////Lover」はどちらも「Veggie Lovers」の値と一致します。

MLエンティティの作成

MLエンティティは、エンティティ抽出に対するモデル主導のアプローチです。インテントと同様に、トレーニング発話(インテントの作成に使用したものと同じトレーニング発話)からMLエンティティを作成します。ただし、MLエンティティの場合、エンティティに対応するトレーニング発話の単語に注釈を付けます。

開始するには、トレーニング・データの一部に自分で注釈を付けることができますが、インテントの場合と同様に、クラウド・ソーシングによって、より多様な(したがって堅牢な)トレーニング・セットを開発できます。トレーニング・ガイドラインに記載されているように、堅牢なエンティティ検出には、トレーニング・セット全体で各MLエンティティの600から5000オカレンスの任意の場所が必要です。また、インテント・トレーニング・データがすでに拡張されている場合は、各発話に自分で注釈を付けるのではなく、クラウド・ソースにすることもできます。いずれの場合も、トレーニング・データを分析して、エンティティが均等に表されているかどうか、およびエンティティ値が十分に変化しているかどうかを確認する必要があります。注釈が完了したら、モデルをトレーニングし、テストします。テスト実行で検出されたエンティティを確認した後、コーパスを更新して再トレーニングし、精度を向上させることができます。

MLエンティティを作成するには:
  1. +「エンティティの追加」をクリックします。
  2. 「エンティティの作成」ダイアログを完了します。「名前」と「摘要」は、「エンティティ注釈ジョブ」のクラウド・ワーカー・ページに表示されることに注意してください。
    • 注釈付きコンテンツを識別する名前を入力します。一意の名前は、群集作業者を支援します。
    • 説明を入力これはオプションのプロパティですが、クラウド・ワーカーはこれをNameプロパティとともに使用してエンティティを区別します。
    • リストから「MLエンティティ」を選択します。
  3. トレーニング注釈に、システム・エンティティ値と競合する可能性がある名前、場所、数値またはその他のコンテンツが含まれている場合は、「システム・エンティティ一致の除外」をオンにします。このオプションを設定すると、このMLエンティティに解決された入力内のシステム・エンティティ値がモデルによって抽出されなくなります。この入力の周囲に境界が適用されるため、モデルではMLエンティティ値としてのみ認識され、システム・エンティティ値に対してさらに解析されません。このオプションは、MLエンティティを参照するコンポジット・バッグ・エンティティに対して設定できます。
  4. 「作成」をクリックします。
  5. +Value「エンティティのリスト」をクリックして、このエンティティを5つまでの値リスト・エンティティに関連付けます。これはオプションですが、MLエンティティを値リスト・エンティティに関連付けると、MLエンティティのコンテキスト抽出と、値リスト・エンティティのコンテキストに依存しない抽出が結合されます。
  6. 「DataSet」タブをクリックします。このページには、スキルの各MLエンティティのすべての発話がリストされます。これには、エンティティのブートストラップに追加した発話、クラウド・ソーシング・ジョブから送信された発話、またはJSONオブジェクトとしてインポートされた発話が含まれます。このページでは、JSONファイルをアップロードすることで、発話を手動でまたは一括で追加できます。このページから発話を管理するには、発話を編集するか(注釈付けや再注釈付けを含む)、削除、インポートおよびエクスポートします。
    • 発話を手動で追加します。
      • 「発話の追加」をクリックします。発話を追加したら、「注釈の編集」をクリックしてエンティティ・リストを開きます。
        ノート

        一度に追加できる発話は1つのみです。発話を一括で追加する場合は、エンティティ注釈ジョブを介してそれらを追加するか、JSONファイルをアップロードできます。
      • MLエンティティに関連するテキストを強調表示し、エンティティ・リストからMLエンティティを選択してラベル付けを完了します。ラベルの「x」をクリックすると、注釈を削除できます。
        これは注釈の「削除」アイコンのイメージです。

    • JSONファイルから発話を追加します。このJSONファイルには、発話オブジェクトのリストが含まれています。
      [
        {
          "Utterance": {
            "utterance": "I expensed $35.64 for group lunch at Joe's on 4/7/21",
            "languageTag": "en",
            "entities": [
              {
                "entityValue": "Joe's"   
                "entityName": "VendorName",
                "beginOffset": 37,
                "endOffset": 42
              }
            ]
          }
        },
        {
          "Utterance": {
            "utterance": "Give me my $30 for Coffee Klatch on 7/20",
            "languageTag": "en",
            "entities": [
              {
                "entityName": "VendorName",
                "beginOffset": 19,
                "endOffset": 32
              }
            ]
          }
        }
      ]
      アップロードするには、「詳細」「インポート」をクリックしてローカル・システムから取得します。
      entitiesオブジェクトは、発話内で識別されたMLエンティティを示します。前述の例では、発話ごとに1つのentitiesオブジェクトを示していますが、発話には複数のentitiesオブジェクトを意味する複数のMLエンティティを含めることができます。
      [
        {
          "Utterance": {
            "utterance": "I want this and that",
            "languageTag": "en",
            "entities": [
              {
                "entityName": "ML_This",
                "beginOffset": 7,
                "endOffset": 11
              },
              {
                "entityName": "ML_That",
                "beginOffset": 16,
                "endOffset": 20
              }
            ]
          }
        },
        {
          "Utterance": {
            "utterance": "I want less of this and none of that",
            "languageTag": "en",
            "entities": [
              {
                "entityName": "ML_This",
                "beginOffset": 15,
                "endOffset": 19
              },
              {
                "entityName": "ML_That",
                "beginOffset": 32,
                "endOffset": 36
              }
            ]
          }
        }
      ]
      entityNameはMLエンティティ自体を識別し、entityValueはエンティティのラベルが付いたテキストを識別します。entityValueは、発話に加えられた変更に対してラベル付きテキストを検証するために使用できるオプションのキーです。ラベル自体は、ラベルを開始および終了する文字のオフセットを表すbeginOffsetおよびendOffsetプロパティによって識別されます。このオフセットは、単語ではなく文字によって決定され、発話の最初の文字(0-1)から計算されます。
      ノート

      このJSONからMLエンティティを作成することはできません。ファイルをアップロードする前に存在している必要があります。
      オフセットを決定しない場合は、entitiesオブジェクトを未定義のままにして、JSONファイルのアップロード後にラベルを適用できます。
      [
        {
          "Utterance": {
            "utterance": "I expensed $35.64 for group lunch at Joe's on 4/7/21",
            "languageTag": "en",
            "entities": []
              
            
          }
        },
        {
          "Utterance": {
            "utterance": "Give me my $30 for Coffee Klatch on 7/20",
            "languageTag": "en",
            "entities": []
            
          }
        }
      ]
      重複エントリがないかチェックされます。JSONファイルのentities定義に加えられた変更のみが適用されます。JSONファイルで発話が変更された場合、それは新しい発話とみなされます。
    • 注釈付き発話を編集します。
      • 「編集」これはMLエンティティの編集アイコンのイメージですをクリックして、注釈を削除します。
        ノート

        変更された発話は、新しい(注釈のない)発話とみなされます。
      • 「注釈の編集」をクリックして、エンティティ・リストを開きます。
      • テキストを強調表示し、「エンティティ」リストからMLエンティティを選択します。
      • 注釈を削除する必要がある場合は、ラベルの「x」をクリックします。
  7. 発話の注釈付けが完了したとき。「トレイン」をクリックして、トレーナTmとエンティティ・モデルの両方を更新します。
  8. 発話テスターにテスト・フレーズ(トレーニング・データにない値を持つテスト・フレーズ)を入力して、認識をテストします。結果をチェックして、モデルが正しいMLエンティティを検出したかどうか、およびテキストに正しく完全にラベルが付けられているかどうかを確認します。
  9. MLエンティティをインテントに関連付けます。

システム・エンティティの一致を除外

「システム・エンティティの一致の除外」をオンにすると、モデルによって、以前に抽出されたシステム・エンティティ値がMLエンティティの境界内で見つかった競合する値に置換されなくなります。このオプションを有効にすると、「火曜日の成果物について話し合うための月曜日の会議の作成」では、該当するDATE_TIMEエンティティ(月曜日)を解決し、MLエンティティとして認識されるテキストの「火曜日」を無視して、DATE_TIMEおよびMLエンティティ値を別々に保持します(火曜日の成果物の説明)。

このオプションを無効にすると、スキルはかわりに2つのDATE_TIMEエンティティ値(月曜日と火曜日)を解決します。このような値をクラッシュすると、意図しない値で以前にスロットされたエンティティ値を更新したり、会話のフローを中断する曖昧さ回避プロンプトをインタージェクトすることで、ユーザー・エクスペリエンスが低下します。
ノート

MLエンティティを参照するコンポジット・バッグ・エンティティの「システム・エンティティ一致の除外」オプションを設定できます。

CSVファイルからの値リスト・エンティティのインポート

一度に1つずつエンティティを作成するのではなく、エンティティ定義を含むCSVファイルをインポートすると、エンティティ・セット全体を作成できます。

このCSVファイルには、エンティティ名(entity)、エンティティ値(value)およびシノニム(synonyms)の列が含まれます。このファイルは最初から作成することも、エクスポートで作成されたCSVを再利用したり別の用途に使用したりすることもできます。

新たに開始するかエクスポート済ファイルを使用するかにかかわらず、インポート先のスキルのバージョンに注意する必要があります。ネイティブ言語サポートのフォーマットと内容の変更がバージョン20.12で導入されたためです。ほとんどのケースで、インシデントなしで以前のリリースのCSVを20.12スキルにインポートできますが、場合によっては互換性の問題に対処する必要があります。ただし、その前に、20.12よりも前のファイルのフォーマットを見てみましょう。このファイルは、entityvalueおよびsynonymsの列に分かれています。例:
entity,value,synonyms
PizzaSize,Large,lrg:lrge:big
PizzaSize,Medium,med
PizzaSize,Small,little
バージョン20.12で作成されたスキルまたはバージョン20.12にアップグレードされたスキルの場合、インポート・ファイルによってvalue列とsynonyms列のヘッダーに言語タグが追加されます。たとえば、スキルのプライマリ・ネイティブ言語が英語(en)の場合、value列およびsynonyms列はen:valueおよびen:synonymsになります:
entity,en:value,en:synonyms
PizzaSize,Large,lrg:lrge:big
PizzaSize,Medium,med
PizzaSize,Small,
PizzaSize,Extra Large,XL
複数のネイティブ言語をサポートするCSVでは、セカンダリ言語ごとにvalueおよびsynonyms列の追加セットが必要です。ネイティブが英語のスキルで、セカンダリ言語がフランス語(fr)の場合、CSVにはen列に対応するfr:value列とfr:synonyms列が含まれます:
entity,en:value,en:synonyms,fr:value,fr:synonyms
PizzaSize,Large,lrg:lrge:big,grande,grde:g
PizzaSize,Medium,med,moyenne,moy
PizzaSize,Small,,petite,p
PizzaSize,Extra Large,XL,pizza extra large,
バージョンをまたがってCSVをインポートする場合は、次の点に注意してください:
  • 20.12よりも前のCSVを20.12スキル(ネイティブ言語をサポートするスキルまたは翻訳サービスを使用するスキルを含む)にインポートすると、値とシノニムはプライマリ言語としてインポートされます。
  • プライマリ言語とセカンダリ言語の両方ですべてのエンティティ値はエンティティ内で一意である必要があるため、単一のエンティティに対して同じ値が複数回定義されている場合はCSVをインポートできません。20.12よりも前のバージョンでは、値が重複している可能性があります。大文字と小文字が違うと値が一意とみなされたためです。これは20.12には当てはまりません(大/小文字の区別はより厳密に適用されます)。たとえば、PizzaSize, SmallPizzaSize, SMALLの両方が含まれるCSVはインポートできません。バージョン20.12へのアップグレードを計画している場合は、アップグレードを実行する前に、まず、大/小文字の違いのみで区別されている同じエンティティ値をすべて解決する必要があります。
  • プライマリ言語サポートは、バージョン20.12以降を使用して作成されたスキルに適用されるため、以前のバージョンで作成されたスキルにバージョン20.12 CSVをインポートするには、事前に言語タグおよびセカンダリ言語エントリを削除する必要があります。
20.12 CSVを20.12スキルにインポートする場合:
  • 複数言語CSVを、ネイティブ言語サポートを使用しないスキル(翻訳サービスを使用するスキルを含む)にインポートできます。
  • 複数言語CSVを、ネイティブ言語をサポートするスキルまたは翻訳サービスを使用するスキルにインポートする場合、プライマリ言語の有効値が含まれる行のみがインポートされます。残りのタグは無視されます。
これらを考慮した上で、インポートによってエンティティを作成する方法を次に示します:
  1. サイド・ナビゲーション・バーで「エンティティ」(これは「エンティティ」アイコンのイメージです。)をクリックします。

  2. 「詳細」をクリックし、「値リスト・エンティティのインポート」を選択して、ローカル・システムから.csvファイルを選択します。
    import-entities.pngの説明が続きます
    図import-entities.pngの説明

  3. エンティティをインテントに追加します(または、エンティティ・リストに追加してから、インテントに追加します)。

CSVファイルへの値リスト・エンティティのエクスポート

値およびシノニムをCSVファイルでエクスポートして、別のスキルで再利用できます。エクスポートされたCSVは、インポートによってエンティティの作成に使用されるCSVと同じフォーマットであり、entityvalueおよびsynonyms列が含まれます。このようなCVSにはリリース固有の要件があり、再利用に影響を与える可能性があります。
  • バージョン20.12で作成されたスキル、または20.12にアップグレードされたスキルからエクスポートされたCSVは、プライマリ言語(場合によってはセカンダリ言語)のタグがvalue列とsynonyms列に付加されており、ネイティブ言語サポートに対応しています。たとえば、次のスニペットのCSVには、スキルのプライマリ言語である英語(en)用のvalue列とsynonyms列のセットに加え、セカンダリ言語であるフランス語(fr)用の別のセットが含まれます:
    entity,en:value,en:synonyms,fr:value,fr:synonyms
    プライマリ言語タグは、ネイティブ言語サポートに関係なく、すべての20.12 CSVに含まれています。これらは、(ネイティブまたは翻訳サービスを介して)どのようなタイプの翻訳も行う予定がないスキルにも、翻訳サービスを使用するスキルにも存在します。
  • 20.12より前のバージョンで実行されているスキルからエクスポートされたCSVには、entity、valueおよびsynonyms列がありますが、言語タグはありません。
値リスト・エンティティをエクスポートするには:
  1. サイド・ナビゲーション・バーで「エンティティ」(これは「エンティティ」アイコンのイメージです。)をクリックします。

  2. 詳細をクリックし、値リスト・エンティティのエクスポートを選択して、ファイルを保存します。
    export-entities.pngの説明が続きます
    図export-entities.pngの説明

    エクスポートされた.csvファイルには、スキルの名前が付けられます。このファイルをインポートとして使用する際に、場合によってはCSVファイルからのインテントのインポートで説明されている編集を実行する必要があります(バージョン20.12のスキルにインポートしたり、それよりも前のバージョンからエクスポートしたりする場合)。

動的エンティティの作成

動的エンティティの値は、Oracle Digital AssistantのREST APIで説明されている動的エンティティAPIのエンドポイントを通じて管理されます。エンティティの値とシノニムを追加、変更および削除するには、まず動的エンティティを作成して、RESTコールで使用されるentityIdを生成する必要があります。

動的エンティティを作成するには:
  1. +「エンティティ」をクリックします。
  2. 「タイプ」リストから「動的エンティティ」を選択します。
  3. バックエンド・サービスが使用できないか、まだ値をプッシュしていない場合、またはサービスを維持しない場合は、「+値」をクリックして、テスト目的で使用できるモック値を追加します。通常、動的エンティティ・インフラストラクチャが配置される前に、これらの静的値を追加します。これらの値は、スキルのクローニング、バージョン作成またはエクスポートを行うと失われます。APIを介してエンティティ値をプロビジョニングした後で、それらの値を上書きまたは保持できます(ただし、ほとんどの場合は上書きします)。
  4. 「作成」をクリックします。

ヒント:

会話のテスト時にAPIでエンティティ値がリフレッシュされた場合、「リセット」をクリックして会話を再開します。
サービス開発者向けの注意事項:
  • 生成したentityIdbotIdを使用して、スキルに構成されている動的エンティティを問い合せることができます。これらの値をコールに含めて、エンティティ値を更新するプッシュ・リクエストおよびオブジェクトを作成します。
  • エンティティは150,000を超える値を持つことはできません。大量のデータを処理するときにこの制限を超過する可能性を減らすには、追加のPATCHリクエストを送信する前に、削除のPATCHリクエストを送信します。
ノート

動的エンティティは、Oracle Cloud Infrastructure (Generation 2クラウド・インフラストラクチャとも呼ばれる)にプロビジョニングされたOracle Digital Assistantのインスタンスでのみサポートされます。インスタンスがOracle Cloud Platformにプロビジョニングされている場合(バージョン19.4.1のすべてのインスタンスと同様に)、機能を使用することはできません。

MLエンティティの作成のガイドライン

MLエンティティを作成する一般的なアプローチを次に示します。
  1. 簡潔なMLエンティティを作成します。MLエンティティ定義は有用なトレーニング・セットの基礎であるため、わかりやすくすることは、クラウド・ワーカーが発話に注釈を付けるのに役立つ名前と説明の観点から重要です。

    クラウド・ワーカーはMLエンティティの説明と名前に依存するため、特に重複の可能性がある場合は、MLエンティティが相互に簡単に区別できるようにする必要があります。違いが明確でない場合、群衆労働者は混乱する可能性があります。たとえば、業者エンティティとアカウント・タイプ・エンティティは、場合によっては区別しにくい場合があります。「貯蓄口座からPacific Gas and Electricに$100を振り替える」では、「貯蓄」を「口座タイプ」に、「Pacific Gas and Electric」を「業者」に明確にラベル付けできます。しかし、両者の境界線は、「ジョンにお金を送る必要があり、貯金から当座預金口座に100ドルを振り替える必要がある」というような文章でぼやけてしまうことがあります。「口座のチェック」は口座タイプですか、それとも業者名ですか?この場合、受信者は常にアカウント・タイプではなくマーチャント名にする必要があります。

  2. トレーニング発話のソーシングに備えて、様々なエンティティ抽出コンテキストの一般的なユーザー入力を検討します。たとえば、値はユーザーの初期メッセージ(初期発話コンテキスト)で抽出できますか、またはスキルのプロンプト(スロット発話コンテキスト)へのレスポンスから抽出されますか。
    コンテキスト 説明 発話の例(太字で検出されたMLエンティティ値)
    初期発話コンテキスト 通常は適切に構造化され、MLエンティティ値を含むメッセージ。たとえば、経費レポート・スキルの場合、発話には、MerchantというMLエンティティに対してモデルが検出できる値が含まれます。 5月3日に$85のJohn's Pasta Shopでチーム・ディナーの経費を作成します
    スロット発話コンテキスト 会話の設計(スキルは「マーチャントは誰ですか」とプロンプトを表示)のためにプロンプトに応答してMLエンティティを提供するユーザー・メッセージ、または以前に送信されたレスポンスによって提供されていないため値をスロットするユーザー・メッセージ。

    他の状況では、MLエンティティ値がすでに指定されている可能性がありますが、同じ会話の他のユーザー・メッセージに含めることができます。たとえば、スキルによって、追加の経費詳細の入力やアップロードされた領収書のイメージの説明を求めるプロンプトが表示される場合があります。

    • マーチャントはJohn's Pasta Shopです。
    • チームディナー金額$85。John's Pasta Shop
    • 説明は、TurboTaxi 自宅からCMH空港までです。
    • クラウド・シンポジウムのGrandiose Shack Hotel受領
  3. トレーニングとテストのデータを収集します。
    • すでに十分な発話のコレクションがある場合は、エンティティ注釈ジョブを起動する前に、エンティティ分布およびエンティティ値の多様性について評価できます。
    • 十分なトレーニング・データがない場合、または最初から開始する場合は、インテント・パラフレーズ・ジョブを起動します。トレーニングおよびテストの実行可能な(および豊富な)発話を収集するには、各インテントのタスクを作成して、エンティティ・コンテキストをジョブに統合します。多様なフレーズを収集するには、会話コンテキストごとに各インテントを分解することを検討してください。
    • タスクのプロンプトに対して、クラウド・ワーカーのコンテキストを指定し、「How would you respond?」または「What would you say?付随するヒントを使用して、例を示し、様々なコンテキストを示します。例:
      プロンプト ヒント
      経費精算書ボットと話していて、経費を作成します。あなたが最初に言うことは何ですか。 マーチャント名が発話内にあることを確認してください。たとえば、「5月3日にJohn's Pasta Shopでチーム・ディナーの経費を$85に作成します」などです。
      このタスクは、会話を開始するのみでなく、マーチャント名も含むフレーズを要求します。ユーザーが値を指定しない場合、スキルによってプロンプトされるレスポンスを反映する発話が必要になる場合もあります。たとえば、スキルの「マーチャントはJohn's Pasta Shopですか。」というプロンプトに応答して、「マーチャントはJohn's Pasta Shopです。」と入力します。
      プロンプト ヒント
      経費を経費精算書ボットに発行しましたが、業者名を指定しませんでした。どのように対応しますか。 商人を特定する。原題は「Merchant is John's Pasta Shop」。
      領収書のイメージを経費精算書ボットにアップロードしました。現在は領収書の記載を求めています。どのように対応しますか。 入金の業者名を識別します。たとえば、「Grandiose Shack Hotel」はクラウド・シンポジウムの領収書です。
      テストの誤検出(モデルがMLエンティティとして識別できない単語やフレーズ)をテストするには、「負の例」を収集することもできます。これらの発話にはMLエンティティ値が含まれます。
      コンテキスト 発話例
      初期発話コンテキスト 火曜日の夕食に返す。
      スロット発話コンテキスト
      • プレゼンテーションディナー金額$ 50。4人。
      • 記述5のためのゼロックスランチ
      • インタビュー滞在のためのホテルの領収書
    • インテントごとに適切な数のパラフレーズを設定して、大規模なトレーニング・セットを収集します。モデルを正常に一般化するには、各MLエンティティのデータ・セットに500から5000の出現箇所が含まれている必要があります。理想的には、この範囲の下限を避けてください。
  4. クラウド・ワーカーがジョブを完了した(またはジョブを取り消すことができる十分な発話を完了した)と、発話を追加するか、インテント検証ジョブを起動して検証できます。さらにレビューするために、結果をローカル・システムにダウンロードすることもできます。
  5. テスト用に発話の約20%を予約します。インテント・パラフレーズおよびインテント検証ジョブ用にダウンロードしたCSVから発話テスターのCSVを作成するには:
    • インテント・パラフレーズ・ジョブの場合: result列のコンテンツ(クラウド・ワーカーによって提供される発話)を発話テスターCSVのutterance列に転送します。intentName列のコンテンツを発話テスターCSVのexpectedIntent列に転送します。
    • インテント検証ジョブの場合: prompt列のコンテンツ(クラウド・ワーカーによって提供される発話)を発話テスターCSVのutterance列に転送します。intentName列のコンテンツを発話テスターCSVのexpectedIntent列に転送します。
  6. 残りの発話は、単一の列utteranceを持つCSVファイルに追加します。このCSVをアップロードしてエンティティ注釈ジョブを作成します。就業者はエンティティ値にラベルを付けるため、否定的な発話は「I'm not sure」または「None of the entity apply」として分類される可能性があります。
  7. エンティティ注釈ジョブが完了したら、結果を追加することも、エンティティ検証ジョブを起動してラベル付けを検証することもできます。エンティティ検証ジョブでワーカーが正しいとみなす発話のみをコーパスに追加できます。

    ヒント:

    「エンティティ」ページの「データセット」タブで、注釈ラベルを追加、削除または調整できます。
  8. 「エンティティ」を選択して、エンティティをトレーニングします。
  9. テスト・ケースを実行して、インテント・パラフレーズ・ジョブから予約した発話を使用してエンティティ認識を評価します。これらの発話を別のテスト・スイートに分割して、様々な動作をテストできます(不明な値、トレーニング・データに存在しない可能性のある句読点、誤検出など)。これらの発話は多数ある可能性があるため、発話テスターにCSVをアップロードすることでテスト・スイートを作成できます。

    ノート

    発話テスターには、テスト・ケースに合格するためのエンティティ・ラベルのみが表示されます。かわりにクイック・テストを使用して、信頼度しきい値を下回る発話のラベルを表示します。
  10. 結果を使用してデータ・セットを絞り込みます。テスト実行結果がモデルがMLエンティティを効果的に識別していることを示すまで、トレーニング発話を繰り返し追加、削除または編集します。
    ノート

    ユーザー・エクスペリエンスを低下させるような非依存エンティティ一致を回避するには、トレーニング・データに名前、場所、番号が含まれる場合は、「システム・エンティティ一致の除外」をオンにします。

MLエンティティ・トレーニング・ガイドライン

モデルは、単語(または単語)の周囲のコンテキストと単語自体に関する字句情報の両方を使用してエンティティを一般化します。モデルを効果的に一般化するには、エンティティごとの注釈の数を500から5000の範囲にすることをお薦めします。すでに十分な大きさのトレーニング・セットがあり、エンド・ユーザーから期待されるエンティティ値のバリエーションがある場合があります。その場合は、エンティティ注釈ジョブを起動して、結果をトレーニング・データに組み込むことができます。ただし、十分なトレーニング・データがない場合、またはすべてのMLエンティティに対する十分なカバレッジがないデータがある場合は、クラウドソースのインテント・パラフレーズ・ジョブから発話を収集できます。

ソースに関係なく、エンティティ値の分布は、モデルで発生する可能性のある値の一般的な考え方を反映している必要があります。モデルを適切にトレーニングするには:
  • トレーニング・データで同じエンティティ値を過剰に使用しないでください。トレーニング・データの繰返しエンティティ値により、モデルが不明な値を一般化できなくなります。たとえば、MLエンティティでは様々な値が認識されますが、エンティティはトレーニング・セット内の10から20の異なる値のみで表されます。この場合、2、3000の注釈がある場合でも、モデルは一般化されません。
  • 各エンティティ値の単語数を変更します。ユーザーが3語から5語の長さのエンティティ値を入力することを想定しているが、トレーニング・データに1語または2語のエンティティ値注釈が付けられている場合、モデルでは単語数が増えるにつれてエンティティの識別に失敗する可能性があります。場合によっては、エンティティを部分的にのみ識別できます。モデルでは、指定した発話からエンティティ境界が想定されます。1つまたは2つの単語を使用して値についてモデルをトレーニングした場合、エンティティ境界は1つまたは2つの単語のみであるとみなされます。単語が多いエンティティを追加すると、モデルでより長いエンティティ境界を認識できます。
  • 発話の長さは、ユース・ケースと予想されるユーザー入力を反映している必要があります。短い発話と長い発話の両方を収集することで、様々な長さのメッセージのエンティティを検出するようにモデルをトレーニングできます。発話には複数のフレーズを含めることもできます。スロット入力コンテキストを反映する短い発話が予想される場合は、それに応じてサンプル・データを収集します。同様に、初期コンテキスト・シナリオの発話を予測している場合は、トレーニング・セットに完全なフレーズが含まれている必要があります。
  • 句読点を含めます。エンティティ名に「- 」や「/」などの特殊文字が必要な場合は、それらをトレーニング・データのエンティティ値に含めます。
  • すべてのMLエンティティがトレーニング・データに等しく表されていることを確認します。不均衡なトレーニング・セットには、あるエンティティのインスタンスが多すぎ、別のエンティティのインスタンスが少なすぎます。不均衡なトレーニング・セットから生成されるモデルは、インスタンス数が少なすぎるエンティティの検出に失敗し、インスタンス数が不均等に多いエンティティの予測が過剰になる場合があります。これは偽陽性につながる。

MLエンティティ・テストのガイドライン

スキルをトレーニングする前に、注釈のない発話の約20%を予約して、トレーニング・データに含まれていない発話またはエンティティ値が提示されたときにモデルがどのように一般化されるかを確認する必要があります。評価する動作によっては、この発話セットが唯一のテスト・セットではない場合があります。例:
  • スロット・コンテキスト発話のみを使用して、コンテキストの少ないエンティティをモデルがどの程度予測しているかを確認します。
  • 不明な値を持つ発話を使用して、モデルがトレーニング・データに存在しない値でどの程度一般化されているかを調べます。
  • MLエンティティのない発話を使用して、モデルで誤検出が検出されたかどうかを確認します。
  • 句読点付きのMLエンティティ値を含む発話を使用して、モデルが異常なエンティティ値でどの程度パフォーマンスを発揮するかを調べます。