スキルでの翻訳サービス

英語以外の言語を対象とし、デジタル・アシスタントのネイティブ言語サポートを使用しないスキルについては、翻訳サービスを構成する必要があります。

そのようなスキルでは、ユーザーが英語以外のリクエストまたはレスポンスを入力した場合、スキルは翻訳サービスを使用して、この入力を英語に変換します。翻訳後、自然言語処理(NLP)エンジンでこれをインテントに解決し、エンティティと照合できます。これにより、スキルは、翻訳サービスを使用してラベルやプロンプトを翻訳するか、リソース・バンドルで言語固有の文字列を参照することで、ユーザーに応答できます。

英語以外の言語のトレーニング・コーパスがあるスキルの場合、設計時に翻訳サービスも使用されます。このような英語以外のスキルをトレーニングすると、トレーニング・モデルで使用される発話例およびカスタム・エンティティ値の英語バージョンが作成されます(ただし、これらの翻訳はスキル・デザイナには表示されません)。

ノート

翻訳サービスに基づくスキルをデジタル・アシスタントに追加しようとする場合は、そのデジタル・アシスタントも翻訳サービスを使用する必要があります。

サポートされる翻訳サービス

OCI Language

Oracle Cloud Infrastructure(OCI)は、言語と呼ばれる独自の翻訳サービスを提供しています。このサービスをOracle Digital Assistantの翻訳サービスとして使用する場合、ユーザー・メッセージはサードパーティの翻訳サービスには公開されません。

OCI Languageを翻訳サービスとして使用するには、サービスをサブスクライブし、デジタル・アシスタントがアクセスするための権限を作成する必要があります。OCI言語のポリシーを参照してください。

Google Translation API

Google Translation APIを使用するには、APIキーを生成する必要があります。このキーは、GCP Console (「APIs & services」「Credentials」)から作成します。詳細は、Google Cloud Platformのドキュメントを参照してください。

Microsoft Translator

Oracle Digital Assistantで翻訳サービスとしてMicrosoft Translatorを使用する場合は、TranslatorまたはCognitive Servicesマルチサービスをサブスクライブし、秘密キーを取得する必要があります。https://docs.microsoft.com/en-gb/azure/cognitive-services/translator/reference/v3-0-referenceを参照してください。

主に、次のことを理解しておく必要があります:

  • Globalリージョンとそれに対応するURL (https://api.cognitive.microsofttranslator.com/)を使用する必要があります。
  • 認証用の秘密キーを取得する必要があります。Azure Portalの「Keys and Endpoints」セクションから取得できます。

Oracle Digital Assistantへの翻訳サービスの登録

  1. サイド・メニューを開くアイコンをクリックしてサイド・メニューを開き、「設定」→「翻訳サービス」を選択します。

  2. 「+サービス」をクリックします。

  3. 「翻訳サービス」ダイアログで、URLおよび認可キー(Microsoft Translatorサービスの場合)または認可トークン(Google Translation APIの場合)を入力します。

    1. URL
    2. 認可キー(Microsoft Translatorサービスの場合)または認可トークン(Google Translation APIの場合)。

スキルへの翻訳サービスの追加

  1. まだ実行していない場合は、Oracle Digital Assistantに翻訳サービスを登録します。
  2. サイド・メニューを開くアイコンをクリックしてサイド・メニューを開き、「開発」→「スキル」を選択して、スキルを選択します。
  3. スキルの左側のナビゲーション・バーで、「設定」(「設定」アイコン)アイコンをクリックし、「一般」タブを選択します。
  4. 「翻訳サービス」ドロップダウンにナビゲートし、翻訳サービスを選択します。

翻訳サービスに基づくアプローチ

英語以外の言語で会話するスキルをサポートするために翻訳サービスを使用するときは、次のいずれかの開発アプローチを使用します:

  • 英語以外の単一言語スキルを作成し、次のようにします:
    • スキルのターゲット言語でトレーニング・コーパスを準備します。

    英語以外の単一言語デジタル・アシスタントを開発する際には、このような単一言語スキルを移入します(特定のデジタル・アシスタントのすべてのスキルで同じ主言語が使用されます)。

  • 複数言語スキルを作成し、次のようにします:
    • トレーニング・コーパスを英語で準備します。
    • スキルのダイアログ・フローを構成して、ユーザー入力およびスキルのレスポンスの翻訳を管理します。
    • (できれば)オプションで、スキルのラベル、プロンプトおよびメッセージについて、1つ以上の言語のリソース・バンドルを作成します。これでスキルのレスポンスの文言を制御できるようになるため、このようにすることをお薦めします。

どちらの場合も、デジタル・アシスタントは翻訳サービスを使用してユーザー入力をベース言語に翻訳します。レスポンスの場合は、リソース・バンドル(スキルで用意されている場合)または翻訳サービスを使用して、スキルのレスポンスをユーザーの言語に戻します。

翻訳サービスを使用する英語以外の単一言語スキル

翻訳サービスに依存する英語以外の単一言語スキルを開発するには:

  1. まだ実行していない場合は、翻訳サービスをスキルに追加します。

  2. (英語ではなく)スキルのターゲット言語でスキルの発話を作成します:
    1. サイド・メニューを開くアイコンをクリックしてサイド・メニューを開き、「開発」→「スキル」を選択して、スキルを開きます。
    2. スキルの左側のナビゲーションで、これは「インテント」アイコンのイメージです。をクリックします
    3. インントを選択します。
    4. 「例」テキスト・フィールドに発話を入力し、[Enter]を押します。
    5. 各インテントについて、前の2つのサブステップを繰り返します。
  3. スキルのカスタム・エンティティについて、各値がスキルのプライマリ言語であることを確認します。

    スキルの左側のナビゲーションで「エンティティ」アイコンのイメージですをクリックすると、カスタム・エンティティを追加および編集できます。

    スキルのプライマリ言語でカスタム・エンティティ値を指定しないと、カスタム・エンティティによる照合が必要な値を含むスキルはユーザー入力を正しく処理できません。

  4. スキルのすべての構成メッセージとプロンプトがプライマリ言語を使用するように更新します:

    これらのメッセージとプロンプトにアクセスするには:

    • スキルの左側のナビゲーションで、「設定」アイコンをクリックします。

    メッセージおよびプロンプトは、「構成」タブと「デジタル・アシスタント」タブにあります。

次の点に注意してください:
  • 組込みエンティティの名前は翻訳できません。

  • この方法でスキルを設定すると、言語処理フレームワークでは英語以外の入力を検出し、その入力を内部的に英語(トレーニング・モデルの言語)に翻訳します。入力を評価した後、適切なレスポンスを判断して、ターゲット言語に戻します。

    これは、英語のトレーニング・コーパスがすでに存在するスキルよりも、翻訳サービスへのコールがより多く必要になるため、翻訳コストに影響する可能性があります。

自動翻訳を使用した複数言語スキル

翻訳サービスを使用するスキルでは、スキルでユーザーの言語を自動的に検出し、その言語でコミュニケーションをとることができます。

これを設定するには、ダイアログ・フローを次のように更新する必要があります:

  • ユーザーの言語を検出します。
  • ユーザー入力を翻訳して解決できるようにします。
ビジュアル・ダイアログ・モードのスキルの翻訳

ビジュアル・ダイアログ・モードで設計された複数言語スキルの場合、翻訳を設定するステップは、次のとおりです。

  1. まだ実行していない場合は、翻訳サービスをスキルに追加します。
  2. スキルの開始ポイントになる予定のフローの開始時に、言語の検出コンポーネントを挿入します。
  3. メイン・フローで、Start Skill組込みイベントを追加し、言語の検出コンポーネントを含むフローにマップします。
  4. スキルの「設定」ページで、「構成」タブを選択し、「ユーザー入力メッセージの翻訳」および「ボット・レスポンス・メッセージの翻訳」プロパティを設定します。
    • ユーザー入力を翻訳するには、「ユーザー入力メッセージの翻訳」をtrueに設定します。
    • ターゲット言語にリソース・バンドルを使用していない場合は、「ボット・レスポンス・メッセージの翻訳」をtrueに設定します。
YAMLダイアログ・モードのスキルの翻訳

YAMLダイアログ・モードで設計されたスキルの場合、autotranslateコンテキスト変数とコンポーネント・レベルのtranslateプロパティのいずれかまたは両方を使用して、コンポーネントごとに変換するコンポーネントを決定できます。

  • autotranslateコンテキスト変数は、スキル全体にグローバルに適用されます。autotranslateを指定しない場合、値はfalseになります。
  • translateプロパティは、コンポーネントごとに個別に設定できます。コンポーネントにtranslateプロパティを設定すると、そのコンポーネントのautotranslate値がオーバーライドされます。

autotranslatetranslateの両方で、値を単一のブールとして設定することも、入力と出力に個別のブール値を指定することもできます。

例: autotranslateコンテキスト変数

次に、autotranslateを使用して入力と出力両方の自動翻訳を有効にする例を示します:

  setAutoTranslate:
    component: "System.SetVariable"
    properties:
      variable: "autoTranslate"
      value: true

次に、autotranslateを使用して、入力はデフォルトで翻訳し、出力は翻訳しない方法を示します。

  setAutoTranslate:
    component: "System.SetVariable"
    properties:
      variable: "autoTranslate"
      value:
        input: true
        output: false
ノート

falseのautotranslation値を指定する必要はありません。たとえば、前のスニペットに次の行を含める必要はありません:

        output: false
例: translateプロパティ

コンポーネントの入力と出力の両方をスキルに指定されている翻訳サービスに送信するようにtranslateプロパティを設定する例を次に示します:

  askName:
    component: "System.Text"
    properties:   
      prompt: "${rb.askNamePrompt}"
      variable: "name"
      translate: true

次に、コンポーネントの入力のみを翻訳サービスに送信する例を示します:

  askName:
    component: "System.Text"
    properties:   
      prompt: "${rb.askNamePrompt}"
      variable: "name"
      translate:       
        input: true
        output: false
オプトイン翻訳

YAMLダイアログ・モードで設計されたスキルの場合、翻訳するコンポーネントを個別に指定する場合のステップを次に示します:

  1. まだ実行していない場合は、翻訳サービスをスキルに追加します。
  2. autoTranslateコンテキスト変数が設定されていない(またはfalseに設定されている)ことを確認します。
  3. System.Intentコンポーネントの状態の上に、System.DetectLanguageコンポーネントを追加します:
      detect:
        component: "System.DetectLanguage"
        properties:
          useExistingProfileLanguageTag: true
        transitions:
          ...
    ノート

    useExistingProfileLanguageTagプロパティは、スキルが翻訳サービスを含むデジタル・アシスタントの一部である場合に使用されます。これにより、スキルはデジタル・アシスタントによって検出された言語をすぐに使用できます。そうでない場合は、言語が(再)検出される前に、スキルではメッセージやプロンプトが英語で提示される可能性があります。スキルが翻訳対応のデジタル・アシスタントにない場合、このプロパティは無視されます。
  4. System.Intentコンポーネントで、translateプロパティtrueに設定します。
      intent:
        component: "System.Intent"
        properties:
          variable: "iResult"
          translate: true
  5. その他の入力コンポーネントについても同様に、translateプロパティをtrueに設定するか、translateプロパティのinput属性をtrueに設定します。次に例を示します:
      askName:
        component: "System.Text"
        properties:   
          prompt: "${rb.askNamePrompt}"
          variable: "name"
          translate:       
            input: true
            output: false
例: 自動翻訳を使用した複数言語スキル(オプトイン)
metadata:
  platformVersion: "1.0"
main: true
name: "AutoTranslatePizzaJoe"
parameters:
  age: 18
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult" 
states:
  detect:
    component: "System.DetectLanguage"
    properties:
      useExistingProfileLanguageTag: true
    transitions:
      next: "intent"
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult" 
      translate: true
  ShowMenu:
    component: "System.CommonResponse"
    properties:
      processUserMessage: true
      translate:       
        input: true
        output: false
      metadata:
        responseItems:
          - type: "text"
            text: "Hello ${profile.firstName}, this is our menu today:"
            ...
  ...  
オプトアウト翻訳

YAMLダイアログ・モードで設計されたスキルの場合、自動翻訳をデフォルトで使用するためのステップは次のとおりです(変換しないコンポーネントを個別に指定します)。

  1. まだ実行していない場合は、翻訳サービスをスキルに追加します。
  2. contextノードに変数としてautoTranslate: "map"を追加します。
    context:
      variables:
        ...
        autoTranslate: "map"
  3. statesノード内のSystem.Intentコンポーネントの上に、System.SetVariableコンポーネントを追加します。次に、autoTranslateコンテキスト変数を使用するようにvariableプロパティを設定し、valueプロパティのinput(およびオプションでoutput)属性をtrueに設定します。
      setAutoTranslate:
        component: "System.SetVariable"
        properties:
          variable: "autoTranslate"
          value:
            input: true
            output: true
        transitions:
          ...
    ノート

    リソース・バンドルを使用している場合は、output値をfalseに設定します。
  4. 次の状態に対して、System.DetectLanguageコンポーネントを追加します:
      detect:
        component: "System.DetectLanguage"
        properties:
          useExistingProfileLanguageTag: true
        transitions:
          ...
    ノート

    useExistingProfileLanguageTagプロパティは、スキルが翻訳サービスを含むデジタル・アシスタントの一部である場合に使用されます。これにより、スキルはデジタル・アシスタントによって検出された言語をすぐに使用できます。そうでない場合は、言語が(再)検出される前に、スキルではメッセージやプロンプトが英語で提示される可能性があります。スキルが翻訳対応のデジタル・アシスタントにない場合、このプロパティは無視されます。
  5. 自動翻訳が不要なコンポーネントについては、translateプロパティfalseに設定します。例:
      done:
        component: "System.Output"
        properties:
          text: "${rb('OnTheWay','${size.value}','${type.value}')}"
          translate:       
            input: true
            output: false
        transitions:
          return: "done"
例: 入力に自動翻訳を使用した複数言語スキル(オプトアウト)

この例では、自動翻訳が入力に設定されていますが、出力に対してはオフになっています(出力テキストはリソース・バンドルに指定できます)。

metadata:
  platformVersion: "1.0"
main: true
name: "AutoTranslatePizzaJoe"
parameters:
  age: 18
context:
  variables:
    size: "PizzaSize"
    type: "PizzaType"
    crust: "PizzaCrust"
    iResult: "nlpresult"
    autoTranslate: "map" 
states:
  setAutoTranslate:
    component: "System.SetVariable"
    properties:
      variable: "autoTranslate"
      value:
        input: true
        output: false
    transitions:
      next: "detect:
  detect:
    component: "System.DetectLanguage"
    properties:
      useExistingProfileLanguageTag: true
    transitions: 
      ...
 

翻訳前の入力の操作

翻訳サービスに送信する前に入力テキストを操作できるようにする場合は、「入力の翻訳」(ビジュアル・ダイアログ・モード)またはSystem.TranslateInput(YAMLダイアログ・モード)コンポーネントを使用できます。たとえば、ユーザー入力を翻訳サービスに送信する前に、これを処理して個人データを削除できます。

次のYAMLスニペットでは、翻訳するテキストがsourceString変数に保持されます。(このテキストは、たとえば、別のコンポーネントによって収集されている可能性があります。)System.TranslateInputが処理を完了すると、英語翻訳はtranslatedString変数に格納されます。
context:
  variables:
    autoTranslate: "boolean" 
    translatedString: "string"
    sourceString: "string"    
   ...
states:
   ...
  translateInputString:
    component: "System.TranslateInput"
    properties:
      source: "sourceString"
      variable: "translatedString"
    transitions:
      ...

主言語

プラットフォーム・バージョン20.09以前を使用するように設定し、翻訳サービスを使用するように構成したスキルの場合、Oracle Digital Assistantが、スキルの発話例の言語に基づいてスキルの主言語を自動的に割り当てます。

スキルに割り当てられている主言語を確認するには、スキルの左側のナビゲーション・バーにある「設定」(「設定」アイコン)アイコンをクリックし、「一般」タブを選択して、「主言語」プロパティの値を確認します。

そのようなスキルでは、インテントの発話例、エンティティおよびダイアログのレスポンス・テキストのすべてが主言語になっていることを確認します。

複数の言語をサポートするようにスキルを設計する場合、主言語は英語である必要があります。

プラットフォーム・バージョン20.09以前に基づくデジタル・アシスタントの場合、主言語は、デジタル・アシスタントに追加する最初のスキルの主言語によって決定されます。デジタル・アシスタントに追加する他のスキルもすべて、同じ主言語を使用する必要があります。

最初に追加したスキルに主言語がない場合(スキルで翻訳サービスが指定されていないため)、デジタル・アシスタントの主言語は英語に設定されます。この場合、英語を主言語とするスキルを追加できます(または、主言語が設定されていないスキルを追加できます)。

ノート

プラットフォーム・バージョン20.12以降に基づくスキルおよびデジタル・アシスタントの場合、主言語は設定されません。かわりに、スキルまたはデジタル・アシスタントの作成時にプライマリ言語を指定します。