絖綛 N@i.jp  昨日:00016823
 今日:00003813
 総計:00085915
keywords
管理者専用
  Post   Add link   Control Panel 






























新しいトピック
最新:05/28 20:36


新しいコメント
最新:06/28 21:33






管理人へMAIL

プライバシーポリシー

Amazon Echo Dotを買って1ヵ月経ったので

少しレビューなどを


 Amazon Echo Dotを購入して1ヵ月になりましたので、アレクサ君(女性の声なのでアレクサちゃん?)と過ごした感想などを少し書いてみたいと思います。

1. 日本語の認識率について

 認識率はなかなかのレベルなのですが、得手、不得手があるようです。あまりスラスラと淀みなく喋ると認識率が下るようで、どうやら助詞(てにをは)があまり得意ではないようです。「アレクサ、ラジコで"放送局名"をつけて」をスラスラと喋ると、多くの場合"放送局名"を認識してくれません。
 あと寝起きの時などで、口がうまく回らずボソボソとした喋り方をした時は認識が悪いですね。

 認識率を上げるには、はっきりとした口調で少し区切りながら喋ると良いようで、いっそ単語のみを少し間をおいた喋り方をした方が認識率が上がるようです。つまり「アレクサ、ラジコで、"放送局名"」の方が認識率が高くなるようです。
 自分が作成したスキルでログを見て、アレクサ君がどのように認識したのかを見てみたところ、助詞がスロットの一部としてくっついて、スロットに無い単語として認識されているパターンがちょいちょい見られました。

 色々とスキルを追加すると誤認識や認識できない事象も増えてきまして、折角声で指示してもうまくいかなくて、リモコンの所まで言って操作してる虚しさったら・・・(^^;)。

2. 結局便利なのか?不要なデバイスなのか?

 少し動けば手が届く所にリモコンやスイッチがある場合は、声でアレクサ君に指示するよりはリモコンを手に取って操作したり、スイッチを直接操作した方が良いです(誤認識や認識不能でストレスが溜まらない)。離れた部屋の家電を操作する場合、例えばウチの場合はリビングにいて寝る前に寝室のエアコンを点けて部屋を暖めておきたい場合などに使っていますが、そのような場合には便利ですね。
 それ以外には、徐々に使い方が固定化されて来まして、一番多いのが radiko.jp(ラジコ)。次にPCを使っている間のBGM的にJazzやポップスをかけるという使い方ですね。その次がタイマー、アラーム的な使い方で「何分後にアラーム」とか「何時何分になったら教えて」という使い方です。

 最近になって良く使い始めたのが「定型アクション」機能で、朝起きたらエアコン、照明を点けて、今日の天気予報を聞く、とか全部オフにする(出掛ける前に家電の切り忘れが無いようにするため。明にオフできる家電に限りますが)という使い方です。

 こうして改めて考えてみると、どうしても必要な手放せないデバイスになったというわけではないですね。すべて以前は別の方法で行っていたり、少し注意すれば良いだけのことですからね。
 でも、まだAmazon Echoには日本では開始していないサービス、例えば通話機能などがありますので、今後はもっと色々な使い方ができるようになる可能性はあります。
 先行して販売されていた米国、欧州では、既にかなりの数のIoTデバイスやスキルが販売、提供されているようです。残念ながら、これら英語圏(リージョン)のスキルは、日本(アジアパシフィック(東京)リージョン)のAmazon Echoでは使用できません。Alexaではユーザーとスキルの地域的リージョンが一致している必要があるからです。日本は後発のため、英語圏では豊富にあるIotデバイスとスキルは、日本語にローカライズされるのを待つしかない状況です。そのため、日本でAmazon Echoの普及が進めば、もっと多くのIotデバイスやスキルが提供され、充実したサービスが提供されるようになるでしょう。その時を期待して待つとしましょう。

3. スキルを作成する際に注意すること

 スキルを自分で作成する際、落ちやすい罠、注意すべき点を思いつくまま書き出してみました。

  1. 日本語のスマートホームスキルの、AWS Lambdaのリージョン

     現時点の最大の罠ですかね。スマートホームスキルでサポート言語が日本語の場合には、AWS Lambda を作成する地域的リージョンは「米国西部(オレゴン)」である必要があります。「アジアパシフィック(東京)」で作ってしまうと、そのLambdaのARNは日本語のスマートホームスキルに設定できません。

  2. カスタムスロットタイプに列挙する値(語彙)は、すべてその言語であること

     カスタムスロットタイプに列挙する値(語彙)は、そのスキルがサポートする言語が日本語なら全て日本語でなければなりません。値に"on", "off", "auto" など英語を混ぜてはいけません。

  3. カスタムスロットタイプの値にアルファベット文字列を指定したい場合

     例えばTVリモコンのスキルを作りたいとします。TVチャンネルをNHKにするようなカスタムスロットを作るとき、値(語彙)は日本語でなければならないので「nhk」と全角英小文字で書きます。これがLambdaに渡ってくると、値は半角英小文字の"nhk"になっています。

  4. カスタムスロットタイプの値に数字を含ませたい場合

     この場合も値は日本語でなければならないので、「一」、「二」と全角の漢数字で書きます。これがLambdaに渡ってくると、半角数字の文字列"1", "2"になるようです。ビルトインタイプの"AMAZON.NUMBER"を使った場合も、Lambdaに渡って来ると半角数字の文字列になっています。日本語のスキルとは言え、決して"一"、"二"のまま渡って来ることは無いようです。

  5. Node.jsで逐次的に処理したいとき

     例えばTVリモコンをスキルにしたいと思ったとしましょう。リモコンには数字が書かれたチャンネルボタンがあって、例えば1を押すと放送局はNHKになりますね。でもこれはTVが地デジになっている場合であり、CSになっていたりすると1を押してもNHKにはなりません。
     このとき「アレクサ、テレビリモコンで、チャンネルをnhkにして」と指示して、放送局を地デジのNHKにさせたいと思ったら、リモコンの「地デジ」ボタンを押して、その後「1」ボタンを押すことになります。この「地デジ」ボタンを押す操作に対応するLmabda関数を "onTV_Digital()"と、「1」ボタンの関数を "onTV_1ch()" としましょう。チャンネルをNHKにするためには、"onTV_Digital()"関数と"onTV_1ch()"関数を逐次(シリアル)実行する必要があります。それを Node.jsで書くとき、

    	onTV_Digital();
    	onTV_1ch();

    としたらNG!Node.js(Java Script)では "onTV_Digital()"関数と "onTV_1ch()"関数は非同期に実行されるのだそうです。非同期実行と言うことは、同時に実行される可能性もあり、順序も不定で順序が逆転する可能性もあるってことですよね?Webアプリとしては、Webブラウザへの表示がどんな順序で行われても全然構わないわけで、まぁ至極当然な仕様と言えのかもしれません。
     それでも逐次(シリアル)実行したいケースは当然あるわけです。そのためには呼び出す関数に引数としてcallback関数を渡します。呼び出された関数は終了時にcallback関数を呼び出して、多くの場合Errorオブジェクトを復帰値としてcallbackに関数に渡すようにします。呼び出し側は引数で渡すcallback関数内で、その次に呼び出したい関数を呼び出すようにするという方法を採ります。あぁ、ヤヤコシイ。プログラムで書くと、

    function onTV_Digital(callback) {
    	if (処理成功) {
    		callback(null);
    	}
    	else {
    		var err = new Error("エラー情報");
    		callback(err);
    	}
    }
    function onTV_1ch(callback) {
    	if (処理成功) {
    		callback(null);
    	}
    	else {
    		var err = new Error("エラー情報");
    		callback(err);
    	}
    }
    〜
    
    	onTV_Digital(function (error) {
    		if (error) {
    			// onTV_Digital関数でエラーが発生した場合の処理
    		}
    		onTV_1ch(function (error) {
    			if (error) {
    				// onTV_1ch関数でエラーが発生した場合の処理
    			}
    		});
    	});

    となってしまうそうな。逐次実行したいのに、関数呼び出しがcallbackのために入れ子構造になってしまうので、もしも逐次実行したい関数が3つ4つとなると入れ子がどんどん深くなるので、これをcallback地獄と呼ぶそうです。プログラムの構造が分かりにくく、エラー処理も作り込むとしたらすごく複雑になります。地獄と呼びたくなる気持ち、分かります。
     これを防ぐためのテクニックも色々あるようですが、本題と外れた話になりますので、このへんで止めておきます。


< 過去の記事 [ 12月の 全てのカテゴリ リスト ] 新しい記事 >

2017 calendar
12月
12
3456789
10111213141516
17181920212223
24252627282930
31


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.