kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Voiceflow TIPS #36 パーソナライズがVoiceflowでも使えるようになったので試してみた

やや某所での興奮冷めやらぬところですが、さらにこんなのが。

Airtable - Voiceflow Community Marketplace

f:id:kun432:20191120225430p:plain

先日のリリース後には使えなかった「パーソナライズ機能」がVoiceflowでも実装されたようなの早速試してみます。ということで久々のAdvent Calendar延長戦。

スキルはMarketplaceからダウンロードできますが、ブロックも少ないのでステップバイステップでやっていきます。


パーソナライズの実装を説明する前に、AlexaにはいろいろなIDがあるのでそれについて少しおさらい。

ID名 単位 Voiceflowでの参照方法
ユーザID スキル有効時に、Amazonアカウントごとに一意で生成されます。例えば、ユーザごとの情報を管理するのに使う。 ビルトインのプロジェクト変数 {user_id}で取得できます。
バイスID スキル有効時に、Amazonアカウントに併せて、デバイスごとに一意で生成されます。例えば、同じユーザのデバイスの場所ごとの情報を管理するのに使う。 Code Blockで以下のコードを書いて変数に入れれば取得できます。
deviceId = _system.device.deviceId;

図にするとこんな感じですね。

f:id:kun432:20191120234245p:plain

一人暮らしの人ならこれでも十分なんですけど、例えばこういう場合はどうなるでしょうか?

f:id:kun432:20191120234832p:plain

答えは、ユーザIDもデバイスIDも花子さんの場合と同じ、つまり、あくまでもデバイスに登録されたAmazonアカウント(すなわち≒デバイスの所有者)がキーになり、「話者」の区別はできなかったんですね、いままでは。

そこでできたのが音声プロフィールです。

同一世帯の他の成人がAlexa搭載端末を共有している場合は、各人が個別に音声プロフィールを作成できます。

具体的にはこういうことができます。

アクティブな音声プロフィールを持っていると、次のような機能で使用体験がカスタマイズされます。
・Alexaコール・メッセージ: 自分に送信されたメッセージだけが再生され、自分からのメッセージだけが送信されます。
・フラッシュニュース: Alexaがあなたの声を認識すると、フラッシュニュースはあなたがすでに聞いたストーリーやニュースをスキップします。
・ショッピング: 音声コードが有効な場合、購入手続きを行うたびに音声コードを言う必要がなくなります。
・ミュージック: Amazon Music Unlimitedファミリープランをお持ちの場合、Alexaは、声に基づいて楽曲再生をカスタマイズします。
・ミュージック: Amazonプライム会員の場合、Alexaは、声に基づいて楽曲再生をカスタマイズします。

はい、つまり、登録されている音声ごとにカスタマイズができるということですね。図にするとこんな感じです。

f:id:kun432:20191127001139p:plain

そしてこれが「パーソナライゼーション機能」により、カスタムスキルからも利用可能になったというのが今回の話です。

なお、パーソナライゼーション機能を利用するには、ユーザ側で音声識別が有効になっていて、かつ、音声プロフィールが登録されている必要があります。設定方法は某Championのサイトが詳しいのでそちらをご覧ください。


ではスキルを作ってみましょう。

まず、最初に変数を作りましょう。音声プロファイルが登録されている場合、パーソンIDという新たなIDがデバイスから送信されてきますので、これを記憶しておくための変数になります。ここではpersonIdとしました。

f:id:kun432:20191121000538p:plain

パーソンIDが取得できるかどうかのチェックはUser Info Blockを使います。ドラッグアンドドロップでキャンバスに配置してください。

f:id:kun432:20191121001202p:plain

User Info Blockを設定していきます。どの情報をチェックするかのところで”Skill Personalization" という新しい項目が増えていますね!これがパーソナライゼーションになりますので、これを選択します。

f:id:kun432:20191121001147p:plain

パーソンIDが取得できた場合の変数を指定します。先程作ったpersonIdを設定します。あとHome Blockからもつなげておいてください。

f:id:kun432:20191121001327p:plain

続きですね。まず、パーソンIDが取得できた場合はそのままSpeak Blockで話をさせるようにします。ここちょっと面白いですよ。Speak Blockをドラッグランドドロップして・・・

f:id:kun432:20191121002813p:plain

Speak Blockの発話の中に以下を入力してみてください。変数はそのままコピペではなくて "{" を入力して変数候補から選択してくださいね。

<alexa:name type="first" personId="{personId}"/>さんですね。こんにちは!

f:id:kun432:20191121003450p:plain

はい、これで一度アップロードして確認してみましょう。音声プロフィールなので音声じゃないとテストできない点にご注意ください。今回は開発者コンソールでマイクを有効にして行いました。

f:id:kun432:20191121004434p:plain

はい、名前が表示されているのがわかるでしょうか?これまではユーザの名前などを取得する場合は、ユーザプロファイルを使うか、アカウントリンクを使って個人情報を取得する必要があり躊躇されていた方も多いかと思います。パーソナライズの場合は音声プロフィールが登録されていればパーソンIDをSSMLから参照するだけで名前を発話することができますので、非常にお手軽ですし、開発者側でもパーソンIDしか見えないので非常に安全ですね!(ただしプライバシーポリシーは必要です)

User Info BlockでパーソンIDが取得できなかった場合は、

  • 音声識別が有効になっていない
  • 音声プロフィールが登録されていない

の可能性があります。これらの有効化・登録を促す場合、これまでであればPermission Blockを使ってカードを送信して、有効化等を促してました。 とりあえず同じようにやってみましょう。

以下のように、failからPermission BlockにつないでSkill PersonalizationをONにして、カードを送信するようにしてみましょう。

f:id:kun432:20191121005404p:plain

最後にSpeak Blockでカードを送信したことを伝えて、Alexaアプリから音声プロフィールの有効を促すようにします。

f:id:kun432:20191121005543p:plain

音声プロフィールを一旦削除して再度確認してみます。

f:id:kun432:20191121012522p:plain

きちんと音声プロフィールがない=パーソンIDがないことを認識しています。カードを見てみると、ん?なんかちょっと違和感ありますね。とりあえず「許可をアップデート」をタップしてみます。

f:id:kun432:20191121012806p:plain

f:id:kun432:20191121012853p:plain

どこにも権限を有効化するリンクがないですね・・・これ、どうやら権限許可を依頼するカードの機能がパーソナライゼーションにはないみたいなのですよね。Alexaの公式ドキュメントにも載ってないし、Alexaアプリでも他の権限関連の設定と設定場所が違うのです。逆にPermission Blockの中に”Skill Personalization” があることで少し混乱するかもしれませんね。パーソナライズの場合は、音声認識の有効化も音声プロフィールの登録も音声だけでやりきると覚えておけばいいと思います。(そのうち追加されるかもしれませんね)


思ったよりも早く使えるようになってびっくりしましたが、非常に嬉しい機能ですね!家庭でお子さんとかと一緒に使っている方も多いと思いますし、アカウントが同じだと音声ショッピングで知らぬ間に・・・ということもあるかもしれません。音声プロフィールによりそういったリスクがなくなると同時に、スキル開発者としてはうまく使うと家族向けのコミュニケーションを行うスキルとかが作れて面白そうです。ぜひご活用ください。

#AAJUG京都 スキル企画・開発アドバンスド でLTしてきた

f:id:kun432:20191110012111j:plain

ちょっと前になりますがAAJUG京都のまとめです。今回はガッツリ開発寄りの非常に濃い話を非常に濃いメンバーでやるということで楽しみにしてました。諸般の事情によりこの記事をやや寝かせていたのですが解禁ということでエモめでお届けします!

そしてそんな猛者の中で空気を読まずに小ネタでLTしてきたアカウントのブログがこちらになります😆

発表内容

今回は「発話とBGMの並列再生」をテーマに話してきました。詳細は資料を御覧いただきたいのですが、GoogleのSSMLにあるタグ、案外知られていないみたいですが、SSMLだけで発話とサウンドの並列再生ができる強力なものです。Googleデベロッパーの方によるデモが以下のサイトにありますので、いくつかご紹介します。

ほんとすごいですよねー。で、これをなんとかAlexaでも実現したいなーと前々からずっと思っていて、とあるところで以下を教えてもらったのがきっかけでした。

Lambda上でSoXというサウンド処理コマンドのバイナリを動かして、Pollyで生成した発話とサウンドをミックスするという、なかなか面白いことをやっていて、これをやってみた、というのが今回のメインの話になります。

なお、実際にやってみると、

  • 日本語、というか、Polly日本リージョンで使う場合には少し修正が必要
  • コメントアウトしないといけない箇所がある
  • AWS側の設定も少し追加が必要

というところがあったので、日本語で動かせるようにfolkして修正や解説を加えたものを以下に用意してます。

LamdbaのNode.js 10.Xランタイムでは動かない、Node.js8.Xランタイムも終わりが見えている、ということもあって、とりあえず試せるように変更したって感じなので、もし動かないとかあればissue立ててもらえればと思います。

で、帰りに色々調べていると、どうやらNode10.Xランタイムで動くSoXがあるので、これに置き換えるだけでまだ使えそうな気がします。Lambda Layer化する、OSS版のask-cliつかってIAM設定も入れ込む、とかやれば、もっと手軽に試してもらえるかなと思いますので、そのうち試してみたいと思います。

※issue参照

で、ここまでは技術的な話で、本当に言いたかったことは以下の3点。

要望あげよう!

今回、オチのようにつかって申し訳なかったのですが、 要望をあげることはとても重要だと思っています。特に日本語の要望が少ない現状では日本のユーザの意見なんて聞いてもらえるわけないです。Twitterとかでつぶやけばいいじゃないかという方もいると思いますが、多分そんなのいちいち見てないだろうし自分がその立場だったら見てられませんよね(炎上するぐらいになれば見られるかもですが)。要望は正規のルートがあるならまずはそこで上げていくべきだと思ってます。

ということで、日本語の要望はこちら。(要Amazonアカウントでログイン)

英語の要望はこちら。

alexa.uservoice.com

要望の登録をするのは・・・という人も、他の人の要望に投票することもできるので、気軽に上げていけばいいと思います。今回のparタグについても要望上げてますのでPlease Vote!

Received
Alexa スキル開発に関わる機能リクエストや改善アイディアをお知らせください。
  • 5 votes
  • 0 comments

発話とオーディオ再生を同時に行いたい

SSMLを使って、Alexaからの応答にオーディオファイルを含めることができますが、現状はシーケンシャルにしか処理されません。

例)
発話   →→   →→→
オーディオ  →→→   →→→
※発話中は音楽等が流れない、無音状態

発話している最中にもBGM的にオーディオ再生できるようにしてほしいです。

例)
発話   →→   →→→
オーディオ→→→→→→→→

これにより、TVやラジオ番組のような豊かな表現が可能になることが期待できますが、現状は発話・オーディオを両方含めたオーディオファイルを作って再生させるしかなく、発話を動的にやりたい等の場合に...

Received
How can we improve Alexa Skill development services and tools?
  • 89 votes
  • 13 comments

The possibility to add background music with the help of SSML

See this example
https://gist.github.com/silvolu/63074e8fac76c615746f534f59f28e5f#file-media-example2-xml

他のプラットフォームもさわってみよう

Alexaだけをやっている人にとってはSSMLで発話とサウンドの並列再生はできない、というのは当たり前かもしれませんが、Googleではできる、ということを知ると意味は変わってきますよね。そこが要望につながっていく。そういう意味でも、他のプラットフォームとの違いを見て気づきを得ることは大事だと思います。逆に、AlexaではできるけどGoogleではできないことなどもあるわけでそうなると改めてAlexaの良さもわかるわけですし、そういう違いをどういうふうに吸収するか?を考えるのはマルチプラットフォームにスキル、アクションを提供する上ではとても重要でチャレンジングだと思ってます。

ぜひ、Google HomeやClovaも触ってみましょう!それぞれの良さもしれるし、Alexaの良さも改めてわかります。

サウンドの可能性

今回一番言いたかったのはこれです。その前に当日の参加者だけに先行でデモしていただいたVoice App Labさんの新作スキル「こびとのせかい」の話をします。(これに期待してる人も多いでしょうしね!)

これほんと衝撃的でした。サウンドやビジュアルの作り込みはさすがのVoice App Labさんクオリティなんですけど、個人的にすごいと思ったのはそこではなくて(すいません!いや、普段からものすごいんですけど、今日は別のすごさを語りたい・・・)。

  • 今のAlexaスキルで人気があるのは、音楽を聞いたり、環境音を聞いたりといった、あまり対話モデルを必要としないものという現実。
  • 開発者からするとVUIの観点では物足りないが、その現実を踏まえた上で、ユーザが魅力的なサウンドを聞く・聞きたくなるためのスキルを、Labさんならではのストーリー性やゲーム性をもたせて提供している。
  • 技術的には難しいことをやっていない(と思われる)。以前からあるSSMLオーディオやAudio Player、APLを普通に使っているだけに見える。
  • ただし、それらをうまくスキル内課金と組み合わせることで、音楽を聞きたくなる⇒お金を払いたくなる、ような魅力的なスキルにしている。かつ、スキル内課金の商品は、買い切り型・消費型の両方に対応。

スキルアワード最優秀作品にもなった「どうぶつびより」は技術を駆使した感があったんですが、こちらは逆に難しいことはしてないと思ってて、「聞いていて心地よいサウンド」というところを突き詰めて考えた結果を、既存の機能の組み合わせや見せ方で実現しつつ、かつスキル内課金をうまく組み込んでいる、なんていうか「普通」であるからこそ逆にすごい!みたいなものを感じてしまったのでした、、、

また、私のスライドの中でも紹介した以下の記事の中でも、「ユーザごとにカスタマイズされた音声コンテンツ」ということがVoice系スタートアップの成功の条件だと書かれていて、音声コンテンツ=サウンドと考えると、もっとユーザが好む・望むサウンドを提供することがとても重要なのではないかなと。GoogleのSSMLで実現できる発話とサウンドの並列再生も、個人的にはこの方向性ともあっていると思っています。

techcrunch.com

スキル開発をやっていてなかなかスキルが使われない、という場合に、機能が足りない、とか、国内のスマートスピーカー市場が成熟していない、みたいな理由をつけがちだと思うんですけど(自戒も込めて)、どういうものをユーザが求めているのか、どういう「サウンド」ならユーザが聞きたいと思うのか、お金を払っても良いと思うのか?ということをもっと考えないといけないんだろうなということを改めて考えてしまいました。そして、新しい機能を求めがちだけど、サウンドだってまだまだ可能性がある、ということを突きつけられて気がします。

]

動画をサウンドに置き換えても同じことですよね。もっと突っ込んでやれば面白いものができるはず、、、!

他の発表

他の発表も今回は濃いですw

Daichi Moritaさん

  • AVSキットの話、結構お高いのね、流石にためらうところをイッたのがすごい。
  • 特に「謎」が高い、笑ったw
  • とりあえずはRPiでUSBマイクとスピーカーだけで始めるのがお手軽でいいんじゃないかなと思ったりしますね。

Alexaで作るゲームスキル。GameOn SDKの紹介とその使い方(Hidetaka Okamotoさん)

  • 多分Game Onネタは国内初
  • DynamoDBはユーザ情報を管理するにはいいけど、複数のユーザのスコアなどを横断的にやるのはどうするのかなと思っていたら、やっぱり別立て。めんどくさい。
  • Game Onを使うと、ゲームによくあるユースケースにかんたんに対応できるのでとてもよさげ。
  • ただ、VoiceflowとかだとSDK使えないのでけっこう大変なんだよね・・・もう一枚噛まさないと難しい。

Alexa Gadgets Toolkitから広がるVUIの可能性(山手政実さん)

  • Gadget Toolkitの話なのにGadget使わないw
  • Alexaにおけるセッション時間というのは、技術的にはそうなんだけど、人間らしさからすると非常に辛いのはそのとおり。いちいちAlexaっていうのも微妙だし。
  • 動いてるのはこんな感じ。Gadgetからスキルに定期的にイベントを送ることで、セッションを永続化しつつ、Alexaから能動的なアクションが起きているように見える。すごい!
  • Echo Flexとモーションセンサーを試した後で改めて考えると、これいろいろ用途ありますねぇ・・・

スクリプトも公開されてます。

qiita.com

スキルアワードグランプリ受賞スキル「どうぶつびより」の話やらなんやら(仮)(コバヤシトールさん)

  • ついに公開されました、ぜひお試しを!
  • ちなみにどうぶつびよりの話はちょびっとだけw
  • 発表終わったあとは全員やや放心状態・・・これに全部持っていかれた感が強いwww でもほんといいものを見れたしいい話を聞けたしで満足度高かったです!
  • スキルチャレンジ、マジで期待できるんじゃないかと思ってます。

今回はちょっと刺激的で楽しすぎましたねー、ガッツリ開発寄りの話は少し人が集まりにくい感はあるけど、自分的には超満足でした!とにかくこの日の雰囲気が少しでも伝われば幸いです。やっぱりスキル作って公開しないとなーと改めて思う今日この頃。

ということで告知です。12月の#AAJUGはオンラインで、re:Invent&今年のAlexa振り返り&大トーク大会となってます。今年最後の#AAJUG、ぜひお気軽にご参加ください!

Echo Flexのスマートナイトライトを試してみた

f:id:kun432:20191116230033j:plain

ということで、続けて、スマートナイトライトです。モーションセンサー編はこちらをご覧ください。

スマートナイトライトもUSBなのでMacにつなげてみたら認識しました。

f:id:kun432:20191116224743p:plain

実際に設置してみました。

f:id:kun432:20191116230120j:plain

Alexaアプリ上では、スマートナイトライトはスマートホームバイスの「照明」として扱われるようです。

f:id:kun432:20191116232239p:plain

f:id:kun432:20191116232249p:plain

明るさや色を調整できます。

f:id:kun432:20191116232320p:plain

f:id:kun432:20191116232331p:plain

まずは普通に使ってみます。「アレクサ、◯番目のライトをつけて」「アレクサ、◯番目のライトを消して」でオン・オフが声で操作できます。


Echo Flexのスマートナイトライト

次は定形アクションで使ってみましょう。

Alexaアプリの定形アクションのメニューを開いてください。

f:id:kun432:20191116200736p:plain

「+」をタップして新規作成します。

f:id:kun432:20191116203017p:plain

最初にトリガーとなる実行条件を設定します。

f:id:kun432:20191116203030p:plain

モーションセンサーと違って、スマートナイトライトはトリガーにはならず、アクションの方で設定することになります。今回は設定された時刻になったらライトがオンになるように設定したいと思います。「時刻を設定」をタップします。

f:id:kun432:20191116234955p:plain

時刻を設定します。少し注意しないといけないのは、ワンタイムだけの起動は設定できないようで、必ず繰り返しにしないといけないようです。

f:id:kun432:20191116235022p:plain

時間が設定できたら、「次へ」をタップ。

f:id:kun432:20191116235118p:plain

次にアクションを設定します。「+」をタップします。

f:id:kun432:20191116235141p:plain

スマートホーム」をタップします。

f:id:kun432:20191116235232p:plain

「照明」をタップします。

f:id:kun432:20191116235305p:plain

最初に認識した「一番目ライト」を選択します。

f:id:kun432:20191116235328p:plain

選択されたら「次へ」をタップします。

f:id:kun432:20191116235520p:plain

ライトのオン・オフ、明るさ、色を設定できますので、適当に設定します。

f:id:kun432:20191116235549p:plain

設定したら「次へ」をタップ。

f:id:kun432:20191116235621p:plain

最後に「保存」を忘れずに。

f:id:kun432:20191116235725p:plain

これで一通りの設定が完了です。ちょっとこのままだとわかりにくいので、少しだけいじってみました。

f:id:kun432:20191117002224p:plain

設定した時間になったらAlexaが「時間ですよー」と喋ってくれてライトがオンになり、すぐに「電気を消しますね」と喋ってライトがオフになる、というような感じです。

実際の動きはこんな感じになります。


Echo Flexのスマートナイトライトで定形アクション

前回のモーションセンサーと今回のスマートナイトライトがどんな感じで設定するのか?どう動くのか?がなんとなく雰囲気だけでもわかっていただけたのではないかなと思います。モーションセンサーは「実行条件」に使えて、スマートナイトライトは「アクション」に使えるということですね。

ということはこれを2つとも組み合わせて一つの定形アクションにすることも可能ですね!

f:id:kun432:20191117000855j:plain

定形アクションはこんな感じです。モーションセンサーをトリガーにして、一定時間ライトが点灯します。夜にトイレに行くときなんかに便利かもですね!

f:id:kun432:20191117002113p:plain

実際の動きは以下になります。暗くてわかりにくいかもしれませんが、ご容赦ください。


2台のEcho Flexでモーションセンサーとスマートナイトライトを組み合わせてみた


こうやって見ると、Echo Flex、結構良くないですか?こういうオプションが今後も増えてくると楽しそうですし、できればこれをカスタムスキルから制御できるといいなーと思ったりしてます。

現場からは以上です。