Edited at

スマートスピーカースキルの対話モデル変換ツール

この記事は スマートスピーカー2 Advent Calendar 2018 1日目 の記事です。


はじめに

現在、Google Home(Google Assistant)、Amazon Echo(Alexa)、LINE Clovaの3プラットフォームでスキル開発が行えますが、それぞれ実装方法は異なります。

しかし3プラットフォームとも共通しているのが、対話モデルをWeb画面で入力し、処理をエンドポイントのFaaSなり(AWS Lambda、Firebase Functions)で実行させるという仕組みです。

複数プラットフォームで同じスキルをリリースする場合、エンドポイントはNode.jsをはじめとしたプログラム言語となるので、コアロジックを分離させて設計すれば移植は比較的容易となります。

しかし対話モデルはUI/構造が三者三様であり、インポート/エクスポート可能ではあるもののファイル形式/データ構造もバラバラです。

[ Dialogflow (Google Assistant) コンソール画面 ]

image.png

[ Alexa コンソール画面 ]

image.png

[ Clova コンソール画面 ]

image.png

そのためスキル移植の際はプラットフォームごとにインテント、スロットを打ち直さなければなりません。

これはエクスポートデータを直に編集するにもファイル形式/データ構造がバラバラなためツラみが強く、かといってWeb画面からGUIポチポチもなかなかのツラみです。

そもそもこんなところで時間を食うのはスキル開発の本質ではありません。

なので私自身のスキル開発効率化のため作成した対話モデル変換ツールをご紹介させて頂こうと思います。


Dialogflow2AlexaSkillJson

まずはGoogle Assistantの中身実装で一般的に使われているDialogflowからAlexaへの対話モデル変換ツールです。

Dialogflow2AlexaSkillJson (GitHub)

私自身のスキル開発経験の流れとしてGoogle Assistant -> Alexaという順番でスキル開発を行っていたため、最初のAlexaスキル作成時に作ったのがこちらのツールになります。

現仕様としてはGoogle Assistant -> Alexaは変換可能ですが、その逆のAlexa -> Google Assistantは対応していません。

情報量としてはDialogflowの方が多く、特にインテント、エンティティーにそれぞれIDが振られていたりファイルが細かく分割されていたりします。

また対話モデルの仕様としてDialogflowよりもAlexaの方が厳密だったりと(数字は漢数字でないといけなかったり、英単語をスロットに使えなかったり)、変換されたJSONをそのまま突っ込むだけだとちょいちょいコンソールに怒られます。

ただ何がダメかは親切に教えてくれるのでそれに沿って手直ししていけばなんとかなります。


使い方


インストール

以下のコマンドを実行。

git clone https://github.com/miso-develop/dialogflow2alexa-skill-json

cd dialogflow2alexa-skill-json
npm i


Dialogflowのエクスポート


  • DialogflowのコンソールにてAgent名横の歯車をポチ

  • 「Export and Import」タブをポチ

  • 「EXPORT AS ZIP」ボタンをポチ

  • zipファイルを保存


Alexa Skill Jsonの生成

以下のコマンドを実行。

node index.js dialogflow.zip

同ディレクトリにalexa-skill.jsonが生成されます。


Alexa Skillへ反映


  • Alexaのコンソールにて「Build」タブをポチ

  • 「JSON Editor」をポチ


  • alexa-skill.jsonを「Drag and drop a .json file」にドラッグ&ドロップ


  • Skill Invocation Name(スキル名)を手入力して下さい


Alexa2Clova

続いてAlexaからClovaへの対話モデル変換ツールです。

Alexa2Clova (GitHub)

こちらはAlexa -> ClovaClova -> Alexaの双方向への変換に対応しています。

AlexaとClovaは仕様が似ているため比較的すんなり移植できます。

難点としてはClovaの対話モデルが各インテント/スロットごとにTSVをインポート/エクスポートしなければならない点です。

AlexaはJSONをコンソールにポイっと投げ込むだけなのでとても楽ちんです。


使い方


インストール

以下のコマンドを実行。

git clone https://github.com/miso-develop/alexa2clova .


AlexaスキルモデルJSONからClovaスキルモデルTSVを出力


alexa.jsonの作成

「index.js」と同じディレクトリに「alexa.json」を作成。

「alexa developer console」の「JSON Editor」のJSONをコピペ。

touch alexa.json

## ↑にJSON Editorの中身をコピペ!


TSVのエクスポート

node index.js alexa.json

alexa2clovaディレクトリとその配下にintentsディレクトリとslotsディレクトリが作成され、TSVが出力されます。

あとは「Clova Developer Center」の対話モデル画面からアップロード!


ClovaスキルモデルTSVからAlexaスキルモデルJSONを出力


Clovaスキルモデルのダウンロード

「Clova Developer Center」の対話モデル画面よりインテント、スロットタイプをそれぞれダウンロード。

「index.js」と同じディレクトリに「clova」ディレクトリを作成し、ダウンロードしたTSVを格納。

mkdir clova

## ↑にダウンロードしたTSVを格納!


JSONのエクスポート

node index.js -r clova

「clova2alexa.json」が出力されます。

あとは「alexa developer console」の「JSON Editor」にD&D!


まとめ

以上、ご紹介させて頂いたツールにより以下の関係の対話モデル変換が可能となります。

image.png

また、どのプラットフォームの対話モデルをどのプラットフォームへ変換できるのかは以下の表のようになります。

Google Assistant -> ClovaはDialogflow2Alexa、Alexa2Clovaを順にかましていけば変換可能です。

変換元
変換先
ツール

Google Assistant
Alexa
Dialogflow2Alexa 

Google Assistant
Clova
Dialogflow2Alexa
Alwxa2Clova

Alexa
Google Assistant
未対応

Alexa
Clova
Alexa2Clova

Clova
Google Assistant
未対応

Clova
Alexa
Alexa2Clova


さいごに

こんな感じで私自身が必要に駆られた際に必要な分だけ作ったツールではありますが、スマートスピーカースキルをクロスプラットフォーム展開する際には効率化のために必須なツールだと思います。

現状Google Assistant -> AlexaAlexa <-> Clovaでツールが分かれてしまっていたり、

Google Assistantへの変換対応をできていなかったり、Pull Requestを見逃してしまっていたり、

いつか訪れるであろうプラットフォーム側仕様変更に対する対応修正に怯えていたりと、

一人でメンテしていくにはなかなか時間がとれない状況なのでOSSっぽく一緒に開発するよって方いらっしゃいましたら是非ともご協力頂けると嬉しいです。。。

何卒、何卒、、、

田中みそ