Amazon Lexに新しいBuilt-In Slot「Phone numbers」「Speed」「Weight」が追加!

2017.09.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

爽涼の候, 暑さ寒さも彼岸までと申します。お元気でいらっしゃいますか、せーのです。

今日はAWSのチャットボットサービス「Amazon Lex」に新たに加わったSlot Typeをご紹介します。

Built-In Slotとは

Amazon LexにおいてSlotの精度というのはとても重要になります。例えば

Lex: いらっしゃいませ、お飲み物は何にしますか?
User: {飲み物} をください。

というやり取りをLexを使って実現する場合、{飲み物}の部分が適切に反応するためには、「飲み物」Slotの精度が大事です。LexのSlotは機械学習にて精度が変わってきます。その際「飲み物」Slotのサンプルが教師データの役割を果たします。教師データの数が多いと学習精度が高まりますので、なるべく沢山の飲み物を登録しておくと良いです。 ですが、こういった単語の数を増やしたり言い回しを登録するのはある意味時間との戦いで、やればやるほどキリがありません。そこでAWSではあらかじめそれらの教師データを大量に用意し、トレーニングも済んでいるSlotが用意されています。それを「Built-In Slot」と呼びます。

このBuilt-In Slotはなかなか強力で

Take me up on {AMAZON.DATE}
({日付}に私を迎えに来て)

という登録をすると{日付}の部分は「2017年9月22日」といった通常の言い方の他に、「今日」「明後日」「今度の日曜日」「来週の月曜日」など、大抵の日付を表す言い回しに対応してくれます。 現状では

  • AMAZON.DATE (日付)
  • AMAZON.DURATION (期間)
  • AMAZON.FOUR_DIGIT_NUMBER (数字4桁)
  • AMAZON.NUMBER (数字)
  • AMAZON.TIME (時間)

等90種類以上がBuilt-In Slotとして使用できます。

新たに加わったBuilt-In Slot

そんな強力なSlot Typeである[Built-In Slot]ですが、今回新たにいくつかタイプが増えましたのでご紹介します。ちなみに2017/09/22時点でまだプレビュー段階ですので、仕様が変わる恐れもあります。

Phone numbers

電話番号です(アメリカ式)。 電話番号の入力方式は「国際番号(+あり)」「国際番号(+なし)」「国際番号なし、市外局番あり」「市外局番なし」の4パターンがあります。それぞれこのように変換されます。

  • +1 (509) 555–1212 => +15095551212
  • 1 (509) 555–1212 => 15095551212
  • (509) 555–1212 => 5095551212
  • 555–1212 => 5551212

基本カッコやハイフンが取れる、という認識で良いかと思います。

SpeedUnit

速さの単位です。マイルとキロ、両方に対応しています。それぞれこのように変換されます。

  • miles per hour, mph, MPH, m/h => mph
  • kilometers per hour, km per hour, kmph, KMPH, km/h => kmph
  • meters per second, mps, MPS, m/s => mps
  • nautical miles per hour, knots, knot => knot

「ノット」までカバーしてるんですね。

WeightUnit

重さの単位です。こちらはこのように変換されます。

  • kilograms, kilos, kgs, KGS => kg
  • grams, gms, gm, GMS, g => g
  • milligrams, mg, mgs => mg
  • pounds, lbs, LBS => lbs
  • ounces, oz, OZ => oz
  • tonne, ton, t => t
  • kiloton, kt => kt

注意点

ここで実際にこれらのSlotを実装する際の注意点は、「SpeedUnit」「WeightUnit」はあくまで「単位」のSlotだ、ということです。つまり「30km/h」という速さを認識させたい場合は

{AMAZON.WeightUnit}

ではなく

{AMAZON.NUMBER} {AMAZON.WeightUnit}

と設定して初めて「30km/h」が表せます。単位だけを設定してもエラーになるので注意しましょう。

やってみる

それでは実際にやってみます。こちらを参考にサンプルを立ち上げます。その後Slotに[PhoneNumber]を追加します。選ぶSlot Typeは「AMAZON.PhoneNumber」です。

lex_new_slot_1

同様に[AMAZON.SpeedUnit]を使って「Speed」、[AMAZON.WeightUnit]を使って「Weight」を作ります。元々サンプルにあった[FlowerType], [PickupDate], [PickupTime]は今回使わないので右側のXボタンで削除しましょう。

次に速度と重さの数値を表すSlotを作ります。[SpeedNumber][WeightNumber]を同じ[AMAZON.NUMBER]を使って作ります。上に設定するSample Utteranceに数値と単位を並べて記述し、実際の会話時にこれらが反応するように設定します。今回Lambdaは使わないので[Initialization and validation code hook]チェックが付いている人は外しましょう。結果、このような設定になります。

lex_new_slot_4

これで設定は完了です。[Save]ボタンで保存し、[Build]ボタンでビルドします。

ビルドが終わったら右ペインにあるテストチャットでテストしてみましょう。

lex_new_slot_3

電話番号が認識されてSlotに入っている様子がわかります。この感じで続けます。

lex_new_slot_5

速度の数値と速度の単位、重さの数値と重さの単位がそれぞれ分かれてSlotに格納されているのがわかりますね。セットしておいたSample Utteranceが効いています。成功です。

まとめ

いかがでしたでしょうか。電話番号や単位などは実際チャットでやり取りすると日本語でも「キロ」と言ったり「キログラム」と言ったり、「揺れ」の多い部分です。ココらへんをBuilt-Inで吸収してくれるのはありがたいですね。

参考リンク

  • https://aws.amazon.com/jp/about-aws/whats-new/2017/09/new-amazon-lex-built-in-slot-types-for-phone-numbers-speed-and-weight-available-in-preview/
  • http://docs.aws.amazon.com/lex/latest/dg/built-in-slot-phone.html
  • http://docs.aws.amazon.com/lex/latest/dg/built-in-slot-speed.html
  • http://docs.aws.amazon.com/lex/latest/dg/built-in-slot-weight.html