マンガでわかるLINE Clova開発 第3話「対話モデルを作ろう」

トレンド
VUI Serverless FaaS Azure Functions スマートスピーカー
マンガでわかるLINE Clova開発 第3話「対話モデルを作ろう」
前回のお話 第2話では、LINEのスマートスピーカー「LINE Clova」のスキルの基本情報を登録しました。
今回から、「健康運 占って」と話しかけると「占いの結果は大吉です」と答えるような、対話モデルを作っていきます!

(アイキャッチイラスト:湊川あい/マンガ・解説:ちょまど・湊川あい)

わかば
なんだかおなかがすいてきました。もうピザのことしか考えられない…!
ちょまどさん
ちょっと、わかばちゃん! ピザの例にするべきじゃなかったかな。笑
ちょまどさん
ちなみに、わかばちゃんもさっき言ってたけど、インテント(Intent)っていうのは英語で「意図」「意思」「目的」という意味だよ。インテントは「その発話の意図」っていうイメージだね
ちょまどさん
たとえば「午後1時から会議室取って」とか「13時から1時間、営業チームの会議室をセットして」とかいう発話のインテント(意図)は『会議セット依頼』とか。
わかば
テントとはなんの関係もなかったでござる
ちょまどさん
とにかく!占いスキルを作っていくよ!

今回作るスキル

「〇〇運占って」と話しかけると、運勢を占ってくれるスキルを作ります。

1. 発話, インテント, スロット とは

Clovaの対話モデルは発話とインテントとスロットで作られます。

ちょまどさん
これら 3つのキーワードはClovaスキル開発特有の知識ではなく、Chat bot作成などVoice UIを使ったアプリ開発ではよく聞く単語なので、覚えておいて損はないよ!

発話(utterance)とは、ユーザーがスマートスピーカーに何と喋りかけるかという、具体的な発言内容です。

インテント(intent)とは、ユーザーの要求、その発話の意図のことです。

スロット(slot)とは、変数部分、その発話の中のキーワードのことです。

具体的には

  • 「午後3時から1時間、営業チームとの会議をセットして」という発話に対し、
  • その発話のインテントは『MeetingRequestIntent』(会議室依頼)
  • 『午後3時』『1時間』『営業チーム』のような変数部分は スロット

となります。

同様に、占いスキルだと

  • 「ユーザーの運勢を占う」という意図のインテントを設定。
  • そのユーザーの運勢を占うインテントに対する発話としては「健康運を占って」「私の恋愛運を占って」「仕事運を教えて」「全体運はどう?」などが考えられます。
  • それぞれの発話からスロットを拾うと、『健康運』『恋愛運』『仕事運』『全体運』が挙げられます。

という構成になります。

わかば
ユーザーがこんなことを言うだろうなあってのが発話なのかな。ひとつのインテントに対してめっちゃいっぱいありそう
ちょまどさん
そうだね。対話モデルにたくさん発話のパターンを学習させることが重要

2. スロットを作ろう

まずは「◯◯運」のスロットを作りましょう。
Clova Developer Centerで2話までの操作が終わると、次のような画面が表示されていると思います。
新規スロットを作るために、「カスタムスロットタイプ」の右にある【 + 】ボタンをクリックします。

▼ここでは、スロット名は「FortuneSlot」としましょう。入力して【作成】をクリックします。

▼どのような単語をスロット値として認識するか設定します。入力したら【 + 】ボタンをクリックし、単語を登録していきます。

▼話し言葉の揺れもカバーするため、想定される同義語も入力します。入力し終えたら【保存】をクリックします。

わかば
これでスロットができたよ!


????豆知識 ???? カスタムスロットとビルトインスロットの違い

カスタムスロットとは、今あなたが作ったスロットのことです。開発者が必要に応じて自由に作れます。ピザ宅配の例で言うと、「チーズピザ, ペパロニピザ, BBQピザ」などが、カスタムスロットで作ることになります。

一方、ビルトインスロットとは、数字や都市の名前などの、最初からLINE Clovaが用意してくれているスロットです。「"四千円", "1ドル",...」「"1秒間", "1分間", "1時間", ...」「"東京", "大阪", ...」など使われそうなものが用意されています。 ピザ宅配の例で言うと、「1枚, 2枚, 3枚……」などが、ビルトインスロットを使うことになります。
使用できるビルトインスロット一覧は公式ドキュメントに掲載されています。

3. インテントを作ろう

続いて、インテント(ユーザーの要求)を作りましょう。

▼今回、インテント名は「FortuneTellingIntent」とします。
新規インテントを作るには、メニューの「カスタムインテント」の右にある【 + 】ボタンをクリックします。
インテント名「FortuneTellingIntent」と入力して【作成】をクリックします。

▼まず、このインテント内で先ほど作ったスロットが使えるように設定します。
インテント中で使う名前(FortuneSlot)を入力し、Enterキーを押します。スロットタイプのプルダウンから、先ほど登録した「FortuneSlot」を選択します。

▼続いて、サンプル発話を登録します。
サンプル発話リストに、想定する発話の全文「健康運占って」と入力し【 + 】ボタンをクリックします。
「健康運」の部分をドラッグして選択すると、ポップアップメニューが開くので、そこからFortuneSlotを選択して登録します。

ちょまどさん
同じように「健康運 占ってください」「健康運 教えて」みたいな感じで、ユーザーが話しかけそうな思いつく限りのバリエーションを登録していってね
わかば
はーい!どんどん登録するぞ~!

わかば
できました! スロットが紐づけられると、該当の単語が緑色になりますね!
ちょまどさん
最後に【保存】ボタンを押すのを忘れないでね。これで占い用のインテント「FortuneTellingIntent」が作られたよ。ここで名付けたインテント名は、あとでサーバー側のコードを書くときにも使うよ!


????豆知識 ???? カスタムインテントとビルトインインテントの違い

カスタムインテントとは、今あなたが作ったインテントです。開発者が必要に応じて自由に作れます。ピザ宅配スキルの例で言えば、「OrderPizza 」インテントをカスタムインテントで作ることになります。一方、ビルトインインテントとは、頻繁に発生するという理由であらかじめ定義されているインテントです。

ビルトインインテントの例

  • Clova.CancelIntent 対話キャンセルのリクエスト
    (ユーザーのサンプル発話:「キャンセル」)
  • Clova.GuideIntent ヘルプのリクエスト
    (ユーザーのサンプル発話:「使い方を教えて」)
  • Clova.YesIntent 肯定の返事
    (ユーザーのサンプル発話:「はい」)
  • Clova.NoIntent 否定の返事
    (ユーザーのサンプル発話:「いいえ」)

詳しくは公式ドキュメントをご参考ください。

4. ビルドしよう

以上で占いインテント・終了インテント・終了スロットの登録が完了しました。登録した設定を反映させるためにビルドします。画面左上の【ビルド】ボタンをクリックしましょう。

ちょまどさん
ビルドには数分かかるからお茶でも飲んで待っててね
わかば
はーい!

〜数分後〜

わかば
ビルドが終わりましたよ!さっそく、テストしてみましょう!えい!

わかば
あれ!?「応答がありません」って言われちゃいました……!ナンデ!?
ちょまどさん
うん、今は応答はないだろうね!なぜならまだサーバー側にプログラムを書いてないからだよ
わかば
あっ、そうか!というか、そもそもサーバーをまだ立ててないんでした……
ちょまどさん
次回から、Microsoft のサーバーレスのサービス「Azure Functions」を使ってバックエンドを作っていくよ。 お楽しみに!

次回、第4話へ続く


マンガ・解説: 湊川あい / ちょまど

他にもある「わかばちゃんと学ぶ」シリーズ

マンガと図解で技術がわかる「わかばちゃんと学ぶ」シリーズ。
全国の書店・Amazonで発売中です。

わかばちゃんと学ぶ Git使い方入門:湊川あい 著・DQNEO 監修

著者プロフィール

湊川あい

絵を描くWebデザイナー。高等学校教諭免許状 “情報科” 取得済。マンガと図解の力で、物事をわかりやすく伝えることが好き。2014年より「マンガでわかるWebデザイン」をインターネット上に公開していたところ、出版社より声がかかる。
Twitter: @llminatoll
Webサイト: マンガでわかるWebデザイン


ちょまど(千代田まどか)

エンジニア兼マンガ家。Microsoft 社のソフトウェアエンジニアとしての本業のかたわら、マンガ家やイラストレーター、松屋エバンジェリスト(非公式)としても活動。MS入社前から Twitter 廃人であり、フォロワーは4万人を超える。
Twitter: @chomado
ホームページ: http://chomado.com/