VAをウェブサイトに掲載したとき、それは日本国内でのユーザーとの接点のみならず海外からのユーザー問い合わせやファン獲得の可能性も持つことができます。その場合、同じVAだけれども、別の言語で問い合わせされたら、その言葉で反応を返せると良い印象をもたれるでしょう。先日、複数の方々に、自動翻訳や多言語対応についてのデモをご紹介する機会があり、そこで得たコツのようなものをこの記事でまとめておきたいと思います。日本語で構築したバーチャルアシスタント(VA)を英語対応させたいとか、中国語対応させたいなどといった試みを例に、言語検知の仕組みや多言語対応のシンプルな方法についてご紹介します。
Kore.aiのVAが言語を検出するタイミング
Kore.aiのVAが、ユーザーの発話から意図を特定し、その意図にマッチしたタスクやFAQを実行するイメージ図は以下の通りです。この図から、言語の検出については処理のほとんど一番始めに行われることがわかります。
この図を見ると、ユーザーからチャット画面への文字入力や音声発話が行われるたびに、言語検出をする動きとなっています。この点については設定にて制御可能で、以下3つの設定から選択できます。
ライフタイム - 永続的に、またはユーザーが言語の切り替えを選択するまで、ユーザーの優先言語として設定します
セッションごと - すべてのセッションの開始時に発話言語を再検出します。
すべてのユーザーメッセージ - デフォルト。すべてのユーザーメッセージから言語を識別して、ユーザー入力から新しい言語が識別されるまでユーザーの優先言語として使用します。
この設定をデフォルトから変えるときに、ライフタイムの設定にすることがありますが、これにすることで言語検出は最初のみ、あるいは明示的に言語変更のコマンドが実行されたときのみとなります。
この設定は、ボットビルダーのコンソールから[構成] - [言語] - [言語選択ロジック]で開くことが可能です。
ポイント:通常コマンドは利用ユーザーに知られることはありませんので、言語切替を手助けするようなダイアログタスクやメニューを作っておくことが望ましいです。
VAに言語を追加するタイミング
VAの基本言語(デフォルト)は、VAを作成する時点で選択することができます。以下画面のように、デフォルトのボット言語から選択します。
デフォルトの言語でVA作成を始めた後、言語を追加するタイミングには大きく2つあります。
作成開始直後:VA開発スコープとして、複数言語で作成することが想定されており、場合によってはそれぞれの言語エキスパートを確保している
デフォルト言語による作成が概ね完了した後:例えばデフォルト言語以外については自動翻訳で対応する、など。この方法の場合、デフォルト言語によるVAが概ね完成しているので、多言語対応としての作業スコープを限定できるケースもある
このうち、2番目に挙げたアプローチを採用して、そしてデフォルト言語に日本語に設定したとして、「英語」を言語として追加する方法を見ていきます。
言語追加時のコピーオプション
新しい言語(今回は「英語」としています)を追加する場合は、デフォルト言語で定義したメッセージ(メッセージノードやエンティティノードに記載している)の扱いについて選択する必要があります。大きく3つのオプションがあります。なお、この追加設定は、ボットビルダーのコンソールから[構成] - [言語] - [標準言語]より、「言語の追加」ボタンを押下し、指定の言語を選ぶことで開くことができます。
基本モード:メッセージ、プロンプトの定義のみ、デフォルト言語からそのままコピーします。
詳細モード:メッセージに加え、トレーニングデータ、ナレッジグラフのエントリー、ナレッジグラフのツリー構造、スモールトーク、示唆などをコピーできるオプション。
言語パックの利用:デフォルト言語で記載されたメッセージ一覧などをJSON形式のファイルにて出力し、そのファイルに対して、今回追加する言語のメッセージ要件に合わせて各メッセージやプロンプトを編集します。そして編集済のJSONファイルを言語パックとしてアップロードして利用します。
ここで少し立ち止まってみましょう。今回英語を追加するのに、例えば#1や#2ではもとの言語をコピーする、つまり英語を設定したのに、メッセージなどの定義は日本語のものがコピーされたことになります。そのため、この先に取りうるアプローチは2つで、一つはそれぞれコピーされたメッセージやプロンプトを英語に修正していく、もう一つは自動翻訳を使う方法です。
ちなみにもう一つ、ここではNLUモデルの選択について触れておらず、提示されたものをそのまま使うことにします。このNLUモデルの選択は、ユーザーの発話から意図を検出するときに重要なトピックですが、内容が混み合う可能性があるため、別ブログにてお話します。
自動翻訳を使ってメッセージを返す際に翻訳する
自動翻訳モードを活用するには、まず初めに、自動翻訳エンジンの設定を行う必要があります。Google Translator、Microsoft Translatorについては画面にてAPIキーを入力することで利用設定を有効にすることができます。これ以外にも、カスタムとして別の翻訳システムを指定することもできます(この設定については別ブログにて触れる予定です!)。この設定は、ボットビルダーのコンソールから[構成] - [言語] - [翻訳設定]より開くことができます。
翻訳設定が終わったら、再び言語追加の設定画面を開き、下にスクロールすると、[ランタイムレスポンス翻訳を有効化]のオプションが有効になります。このオプションにチェックを入れて、保存することで、メッセージを表示する際の自動翻訳が有効になります。
さて、ここまでは、日本語のVAに対して、多言語対応として英語を追加し、日本語のメッセージなどを自動翻訳することで英語応対ができるように設定してきました。
言語追加後の開発に関するTips
言語を追加したあとは、追加した言語とデフォルトの言語それぞれ見ていく必要があります。開発時に役立つヒントなどを以下に挙げます。
VA言語の切り替え
開発中画面で、どの言語のVAを開発しているかは画面右上の言語オプションより選択します。9.3.0の画面では、ヘルプメニューの左に位置しています。
言語間でのリソースの扱い
VAを構成するダイアログタスク、ナレッジグラフ、デジタルフォームなどのコンポーネントが、異なる言語でどのように扱われるかを以下にまとめています。これらの扱いの違いによって、言語選択のロジックが必要になる場合があります。
コンポーネント | 概要 | 言語間での扱い詳細 | 備考 |
メッセージノード | VAからの返信やメッセージを定義する | ボット言語別に保持される。 | ボット言語を切り替えたあと、ダイアログタスクを開くなどして、該当する言語のメッセージを編集する。 |
エンティティノード | メッセージを表示しユーザー入力を促すノード | ボット言語別に保持される。 | ボット言語を切り替えたあと、ダイアログタスクを開くなどして、該当する言語のメッセージを編集する。 |
確認ノード | メッセージを表示しユーザーの確認(はい・いいえなど)を促すノード | ボット言語別に保持される。 | ボット言語を切り替えたあと、ダイアログタスクを開くなどして、該当する言語のメッセージを編集する。 |
スクリプト・サービスノード | スクリプトノードは条件分岐や各種処理を定義するノード。サービスノードはAPIリクエストを送信しレスポンスを受信し保持するノード。 | ボット言語に依存でず共通。 | スクリプトノードの中やロジックノードなどを活用し、言語別の処理を定義する必要がある。 |
デジタルフォーム | ユーザーに対する入力フォームを設計、表示する | ボット言語に依存でず共通。 | 言語別にデジタルフォームを定義し、ダイアログタスク内でスクリプトノードの中やロジックノードなどを活用し、言語別の処理を定義して利用する。 |
ウィジェット | リストや円グラフ、棒グラフなどを表示する | ボット言語に依存せず共通。 | 言語別に表示内容を変更するスクリプトを定義する、あるいはダイアログタスクを呼び出しその中で言語別振る舞いを定義する。 |
イベント | チャット起動時、終了時などの動作を定義する | 有効・無効の設定はボット言語に依存でず共通。設定内容に関して、Show Message、Run Scriptはそれぞれメッセージノード、スクリプトノードと同じ動き。 | - |
ダイアログタスク名 | 対話や一連の処理が定義されるコンポーネント | ボット言語別に保持される。 | ボット言語を切り替えたあと、ダイアログタスク一覧から名前を変更できる。 |
ナレッジグラフ | オントロジーをベースにした単語と単語の結びつきと質問ー答えのペアを構成するコンポーネント | ボット言語別に保持される。 | ボット言語を切り替えたあと、ナレッジグラフの画面からノード名、同義語、FAQの中身を変更できる。 |
トレーニングなど | ユーザー発話から意図を検出しダイアログやナレッジグラフのFAQに結びつけるための定義 | ボット言語別に保持される。 | ボット言語を切り替えたあと、それぞれ変更できる。 |
自動翻訳のランタイムレスポンス翻訳に関する補足
ランタイムレスポンス翻訳を用いることで、メッセージノードなどに記載しているメッセージが自動的に翻訳されて出力されます。より詳細には
プレインテキスト:自動翻訳される
JavaScriptによるメッセージ表示:自動翻訳されない
となります。メッセージテンプレートなどをJavaScriptで構成している場合など、ボット言語を切り替えてそれぞれのメッセージノードやエンティティノードへの修正が必要になる場合があります。
セッション内で言語を判別する方法
Kore.aiのVAは、それが呼び出されてからの状態や各種メタデータをcontextオブジェクト以下に保持しています。このうち、現在の言語設定を保持している箇所は
context.currentLanguage
です。この中に、英語であればen、日本語であればja、中国簡体字ならZh_cnなどと値が格納されています。をスクリプトノードで参照することで条件分岐を構成したり、ロジックノードを用いて分岐を構成します。以下図では、ロジックノードを使った分岐例です。
開発時に言語を切り替える便利コマンド
今回の例のように、英語、日本語を切り替えてテストしたい場合には、以下のようなコマンドをチャット画面に発行します。
cheat language en
cheat language ja
お客さまの心を掴むお問い合わせ体験を
今回はKore.aiのVA作成において、多言語対応を行うときの大まかな流れやヒントを紹介しました。社内でのグローバル対応やビジネス地域の拡大など、複数の言語を活用するシーンはさらに増えていきます。多言語に対応することは、言語による障壁を取り除いたり、企業競争力を向上させたり、社内を横断的にサポートできることに繋がります。このエントリーがお役に立てれば何よりです。
Comments