追加の言語

ここでは、複数の言語をサポートするデジタル・アシスタントを開発するためのベスト・プラクティスをいくつか示します。

デジタル・アシスタントが複数の言語をサポートするための要件は非常に一般的であり、デジタル・アシスタントとスキル開発の様々な領域に影響します。追加言語のサポートは、ユーザー・メッセージとボット・メッセージの翻訳にとどまらず、地域や文化の違いを把握するために会話設計でも考慮する必要がある実装タスクです。



言語サポートは、スキル・レベルで構成および実装されます。これには、使用する翻訳のタイプの設定、および翻訳のタイプに必要な構成が含まれます。デジタル・アシスタントを介して公開されるスキルの場合、デジタル・アシスタントも複数の言語をサポートするように構成する必要があります。

翻訳サービスvs多言語NLU

Oracle Digital Assistantには、デジタル・アシスタントで複数の言語をサポートするための2つのオプションが用意されています。

  • 翻訳サービスを使用するには、デジタル・アシスタント・インスタンスでGoogleまたはMicrosoftの翻訳サービス・キーを構成する必要があります。受信ユーザー・メッセージは、スキル用に構成された基本言語に翻訳されます。基本言語はモデルのトレーニングに使用する言語であり、ほとんどの場合翻訳サービスでは英語です。現時点で翻訳サービスを使用する利点は、ネイティブ言語サポートよりも多くの言語をサポートすることです。

  • ネイティブ言語サポートでは、言語モデル(自然言語理解 –NLU)で、翻訳サービスを必要とせずに、より少ない数の言語を直接サポートします。組み込みの言語認識は、それ以上の言語固有のトレーニングなしでかなり良いですが、サポートしたい言語ごとに発話を追加することでそれを改善できます。エンティティでは、値リスト・エンティティの値およびシノニムの翻訳文字列を追加する必要があります。

使用するアプローチの決定は、デジタル・アシスタント・プロジェクトでサポートする必要がある言語の数、各言語の即時必要性、および言語がネイティブにサポートされている言語として存在するかどうかによって異なります。

同じデジタル・アシスタントでNLUネイティブ・サポートを使用するスキルを持つ翻訳サービスを使用してスキルを使用することはできません。したがって、最初のスキルを作成するときに、デジタル・アシスタントのすべてのスキルに対してどの翻訳オプションを使用するかを決定する必要があります。

リスト・エンティティの抽出に対するサポートが改善され、その言語のサンプル発話を追加することで追加の言語に対する理解を微調整できるため、ネイティブNLU言語サポートを使用することをお薦めします。

どちらの翻訳オプションも、インテント・モデルのトレーニングとスキルの構築のための基本言語として英語以外の言語をサポートしています。

どこでもリソース・バンドルを使用

すべてのボット・メッセージおよびプロンプトにリソース・バンドル文字列を使用することをお薦めします。翻訳サービスを使用してボットで複数の言語をサポートする場合でも、送信メッセージに翻訳サービスを使用しないでください。常にリソース・バンドルを使用し、どこでも使用してください。

なぜリソース・バンドルなのか

デジタル・アシスタント開発は、そのために設計したペルソナに関するものです。ペルソナは、言語、音声のトーンおよびデジタル・アシスタントの態度を定義します。

設計したペルソナをデジタル・アシスタントが受け入れるようにするには、サポートする言語ごとにボットの送信メッセージを管理する必要があります。リソース・バンドルは、ボット・メッセージを管理する1つの場所を表すため、音声のトーンで一貫性を簡単に確保できます。第2言語をサポートするデジタル・アシスタントを構築する場合、ボット・メッセージを表示するためのリソース・バンドルに代わる現実的な方法はありません。

リソース・バンドルの文字列について

リソース・バンドル文字列は、Oracle Digital Assistantのスキルおよびデジタル・アシスタントで宣言的に作成されます。Apache FreeMarker式を使用して、会話、エンティティおよびスキル構成設定から参照します。メッセージ文字列を参照するには、次のような式を使用します。

${rb('message_key')}

rbは、リソース・バンドル定義を参照し、指定された名前のメッセージ識別子を検索します。上の例では、message_keyという名前のメッセージ・キーを検索します。

リソース・バンドル・キー名がユーザーの言語に存在しない場合は、デフォルト言語(基本言語)に定義された文字列が使用されます。デフォルト言語のメッセージ文字列がない場合、実行時テスト中に例外がスローされます。

リソース・バンドルを介して出力されるメッセージにデータを渡す必要がある場合は、位置パラメータおよび名前付きパラメータを使用してこれを実行できます。

位置パラメータ: Hello {0}, {1}

名前付きパラメータ: Hello {name}, {greeting}

変数から読み取った値を会話に追加するには、次に示すような式を使用します。

位置パラメータの場合: ${rb('message_key',firstname.value, greetingMessage.value)}

名前付きパラメータの場合: ${rb('message_key','name,greeting',firstname.value, greetingMessage.value)}

位置パラメータは使いやすく見えますが、メッセージに追加されるデータのタイプのコンテキストを提供するため、可能な場合は名前付きパラメータを使用することをお薦めします。文脈を知ることは翻訳者の生活を楽にする。

リソース・バンドル・キー名の命名規則の検討

スキルでリソース・バンドルを包括的に使用することは、エンティティ、ダイアログ・フロー、およびスキルおよびデジタル・アシスタント設定からリソース・バンドルを参照することを意味します。リソース・バンドル文字列参照をスキルおよびデジタル・アシスタントで見つけやすくするために、ネーミング規則を実装して、リソース・バンドル・キー名にコンテキストを追加することをお薦めします。

たとえば、値リスト・エンティティのエラー・メッセージ、あいまい性解消メッセージおよびプロンプトに次の名前を使用できます。

  • list.<entity_name>.errorMessage

  • list.<entity_name>.disambiguationMessage

  • list.<entity_name>.prompt1

  • list.<entity_name>.prompt2

コンポジット・バッグ・エンティティの場合、同様のネーミング構造を使用できますが、バッグ・アイテムの名前をそれに追加します。

  • cbe.<entity_name>.<bag_item_name>.errorMessage

  • cbe.<entity_name>.<bag_item_name>.disambiguationMessage

  • cbe.<entity_name>.<bag_item_name>.prompt1

  • cbe.<entity_name>.<bag_item_name>.prompt2

ダイアログ・フロー状態のプロンプトからリソース・バンドル文字列を参照する場合、またはダイアログ・フロー状態によってユーザー・メッセージが出力されるのみの場合は、次のものを使用できます。

  • <dialog_flow_state_name>.prompt

  • <dialog_flow_state_name>.message

共通レスポンス・コンポーネントのページ区切りやヘルプ・ボタンなどのグローバル・アイテムでは、特定のダイアログ・フロー状態の名前を含まないネーミング規則を使用できます。

  • button.next

  • button.previous

  • button.cancel

  • button.help

前述の例のようにドット表記法を使用するか、アンダースコアを使用するか、独自の表記法を使用するかについては、厳密なルールはありません。

キーワードにリソース・バンドルを使用

共通レスポンス・コンポーネントでは、アクション・アイテムのキーワードを定義できるため、ユーザーはキーワードをメッセージとして送信することでキーワードを「事実上押す」ことができます。キーワードは、ユーザー・インタフェースでユーザーがボタンを押すことができない(テキストのみのチャネルや音声を使用する場合など)場合に特に重要です。

優しいが明らかなリマインダとして、ドイツ語、ポルトガル語、フランス語、アラビア語、およびボットでサポートしている他のすべての言語で「送信」とは呼ばれません。そのため、共通レスポンス・コンポーネントのアクション・アイテムのkeywordプロパティは、リソース・バンドル・キーから読み取ることができます。リソース・バンドル・メッセージは、使用するキーワードのカンマ区切りリストになります。

ICUメッセージ形式の使用

リソース・バンドル・メッセージに追加する名前付きパラメータに加えて、メッセージの翻訳時に特定の条件を処理するために使用できるその他のオプションがいくつかあります。たとえば、複数のアイテムに対して印刷するメッセージは、通常、単一のアイテムの注文または出荷時に印刷するメッセージとは異なります。

ICUは、International Components for Unicodeの略で、Oracle Digital Assistantのメッセージ・パケットでサポートされている言語書式構文です。この構文を使用すると、非常に柔軟なメッセージを記述できるため、ボット・メッセージに言語固有および地域の違いを簡単に適用できます。

初期状態では、単数および複数値参照を持つメッセージを処理したり、デジタル・アシスタントを使用するユーザーの性別などの条件によって変化するメッセージを処理するために、ICUメッセージ構文を使用するだけで十分である場合があります。

ボット・ペルソナに対する第2言語サポートの影響

特定の言語のデジタル・アシスタントのペルソナを変更する必要はありません。ただし、地域または文化の違いがボット・ペルソナの態度、音声または表現の変更を必要とする場合、それらの変更を適用することは正当です。デジタル・アシスタントの目標は、ユーザーを喜ばせてエンゲージすることです。これは、地域の習慣に適応する必要があることも意味します。

リソース・バンドルをICU形式で使用すると、リージョンに応じたメッセージの変更に役立ちます。これを行うには、リソース・バンドルに引数を渡して、ボット・ペルソナを適応させる必要があるリージョンを識別し、ICUメッセージ・フォーマットを使用して、それ以外の方法で表示されるものとは異なるメッセージを表示します。

例: メッセージの地域差分の処理

このリソース・バンドル・メッセージの例では、リソース・バンドル・キー名の参照時にregionの引数が渡されることを想定しています。この例では、異なる方法で処理される値は、region1およびregion2として定義されています。これらの値は、国コードなど、必要に応じて設定できます。

{region, select,
  region1 {message for region 1}
  region2 {message for region 2}
  other {message for all other regions}
}

いずれかのリージョンのリソース・バンドル内のメッセージを参照するには、ダイアログ・フロー、エンティティまたはスキル構成で次の式を使用します:

${rb('the_key_name','region','<VARIABLE_CONTAINING_REGION_VALUE>.value')}

<VARIABLE_CONTAINING_REGION_VALUE>は、異なるメッセージが定義されている値を保持するスキルの変数名に置き換える必要があります。

追加言語のチェックリスト

  • ☑スキルを構築する前に、翻訳サービスを使用するか、ネイティブ言語サポートを使用するかを決定します。
  • ☑ デジタル・アシスタントに追加するすべてのスキルで、同じ言語サポート・タイプが使用されるようにします。
  • ☑ ボットによって表示されるすべてのプロンプトおよびメッセージにリソース・バンドルを使用します。
  • ☑動的データをリソース・バンドル・メッセージに渡す場合は、名前付きパラメータを使用します。
  • ☑メッセージ内の複数形および条件に基づいて変化するメッセージには、ICUメッセージ形式を使用します。
  • ☑キーワードの作成時にリソース・バンドル参照を使用します。
  • ☑ リソース・バンドル文字列の「注釈」フィールドを使用して、翻訳者に文字列の意味と使用、およびオプションでメッセージの翻訳方法に関する追加情報を提供します。
  • ☑地域と文化の違いを理解します。