Voice UI Designer Meetup Tokyo個人メモ(雑記)
3/14 Google社主催の Voice UI Designer Meetup Tokyo行ってきた。
Google社の内部に入るの初めてだぜ!いろはす無料。というか六本木ヒルズ初めてだ。
公式
まとめ
- 日本語VUIのエッセンスは安藤幸央さんの資料が最強。会話は人でも難しい。誘導尋問的に作るとユーザーにやさしい。
- GoogleHomeはGoogle社の技術の結晶。騒音の中で呼びかけに応答できるようになる壁を越えたので製品化できた。
- IoTべからず集は残酷だが真実味ある…😰
詳細
Actions on Google / Google Home セッション
- 徳生 裕人さん
- スライドどっかにある?(不明)
- Google社的にAIファーストで進めている。あらゆるプロダクトにAIを。
- 騒音の中の音声認識エラー率25%に減ったので製品化できた。
- 音声合成もmsecですごいことやってる。不気味の谷を越えた。
- 社の使命:「(あらゆる)相手のコンテキストを正しく受け付けて、正しいものを返す」を実践。
- ペアレンタルコントロール今年対応
- 多言語対応。日本はかなり早くやった。中国語予定はスライドに無し(去年の実績の話だから乗ってなかった?)
- トランザクション日本対応予定(時期明言無し)
- アプリのサジェスト改善していきます。最初期よりは良くなってる。
質問など
togetterにまとまってる。
- GoogleHome応答早いけど国内なの?firebase us-centralだけど遠くね?*1
- 国内で完結しない。がんばってます。
- SEO的なことどう考えてる?広告とかは?
- 普及期はまず信頼感構築が優先。
- GoogleHomeアプリはアプリ?アクションどっちで呼べばいい?海外だとアプリと呼んでることが多いけど
- アプリでいいんじゃない?アクションだとカバーする範囲が狭い印象。
質問できなかった
- (マイクオープンで)ユーザー入力待ちになると、(開発者目線だと)短く簡潔に言おうとして焦る。なんかテクニックある?
- 日本語のグローバル終了キーワードについて詳細教えて
- こないだfirebase落ちたけど、GoogleHomeアプリのサービス健康状態悪くなった。firebase落ちた時にサービスごと落ちるのを回避する設計方針(ベストプラクティス)教えて。
- ユーザー入力音声からテキスト以外の情報取り出せないか?会話のテンポだとか、声の大小。ユーザー感情の分析にテキスト文面以外のアプローチ無いの?
- ssmlの日本語文末「?」の処理うまい方法ある?
VUIデザインの勘所
- 安藤 幸央さん
- めちゃめちゃ(日本語)VUI研究してる
- 設計の一番最初はマインドマップが良い
- 海外はモックツールが色々ある。ボットモック集めたサイト良すぎるので見て。
- VUIのペルソナをまず作る。その方が会話パターンを作りやすい。
- メラビアンの法則。音声だけでは7%しか伝わらない。難しいことは避ける。
- 秘書の本がVUIの参考になる
- アプリの使い方の説明。もう具体的に説明する方がよい。GoogleHome/echoのパッケージ見て。
- 会話は難しい。VUIは誘導尋問する方が会話しやすい。
- 音声入力は失敗したときのストレスが酷い。人格を意識する裏付けではある。ハッカーの人の記事が参考になるぞ。
- IoTべからず集。IoTを使い続けてくれることはほとんどない事例集。唯一うまくいく例がある。
- 電車しりとりが一番使われる。乗換案内はそれほど…
- VUIはスマフォ苦手な人、子供やお年寄りがむしろターゲットなのでは
- パスワードをユーザー音声で入力させる設計はヤバイ。どうしてそういうことになるか。既存のものをそのままVUIに適用するとハマる。VUIの強みが何かを意識して作らないと。
- Leszek Zawadzki氏の会話の種別がVUI設計に役立つ。アプリ・ペルソナごとにそれぞれの比率を変えて対応する。マインドマップの最初の枝もこれにしている。
- VUIのおもてなし。対応を尽くすこと。
- 会話を導くエージェントは2種類に分類できる。多数ある設定条件から1つのゴールに絞り込むもの(逆ピラミッド)。ゴールが多数ある中の一つを選ばせる探索型のもの(ピラミッド)。
- 隠れ強化。表面に出ないが裏側で強く対応しているなど。秘書感。
事例紹介
疲れてほぼメモなし…。(このメモも内容と合ってるか不明)
- 伊東 春菜さん
- 台本の作り方はコツあり。修正しやすいように作る。
- フローはチームで必要なら作る。
- 色んな回答を用意する。エラーはランダムにする。
- UXを上げる。言葉をよく吟味する。
- 根岸 秀樹さん
- ペルソナを作りこむ。ブランディング。
個人メモ
- VUIで異口同音はかなり避けたい問題。チェックツール無いのか?
- 目指すものは何でもかんでも受け付けるアプリなのか?何でもかんでも受け付けないアプリなのか?(特定の用途のみ)
- 個人開発だと後者を意識したほうがよさそう。前者は大企業に任せる。
- VUIのUX鍛え上げるには、動くものさっさと作ってテストして鍛え上げる方が良さそうなルート。紙面や理論優先だと良くないものができる可能性あり
- ラジオの音声(文言)は素晴らしい。専門の処理は専門家の話し方が参考になりそうだ。
デザインスプリント体験
以前デザインスプリント本買ってざっくり読んだけど、こんな立派なことできねーよと思ってほったらかしてた。
今回は体験できるとのことで、戦々恐々としながら参加。
知らない人で集まっても、短期間でものすごい集中してアウトプットできたのは驚き。良い体験だ。
個人開発への応用には、効果は限定されるけどアイディアの発散と集中が使えそう。
本から入門だと理屈優先になるので、やる気がしなかったけど、
スプリントマスターの指導の下で体験してから理論を補強していくのが正しい気がした。
デザインスプリント ―プロダクトを成功に導く短期集中実践ガイド
- 作者: Richard Banfield,C. Todd Lombardo,Trace Wax,安藤幸央,佐藤伸哉,牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/11/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
ピンとこなかった本これ。
実際にやった流れ
- 本日のテーマ・目標物・ざっくりとした作るものを提示
- 付箋にとりあえずテーマに関するものを書き出す(個人作業/発散)
- それぞれが内容を説明しながら付箋をボードに貼る。似たものは固める(チーム作業/収束)
- ある程度の集合が出来たらそれに名前を付けるとわかりやすい
- 付箋全体を見て、個人の持ち点3点を良いアイデアにシールで投票する。この時は黙ってやる
- 特例なし
- 最高点テーマについて実際の使用シーン(情景、タイミング)を書き出す。1コマ漫画を8個描くイメージ(個人作業/発散)
- 画面の説明ではなく、ユーザーがどういうときに使うかを描くこと。棒人間で良い
- とにかく短い時間で8個埋める
- それぞれがシーンについての内容を説明する。また投票を行う。持ち点3点
- 投票結果のシーンを元に、実際の会話フローを書き出していく
- VUIの場合は吹き出しでユーザーとデバイスのやり取りを書いていくと良い
- それぞれが紹介する
- 目標物の具体的イメージが固まる
- この後どうするか不明。モックづくりに入る??
ポイント
- アイディアを出し切る、絞り込む(発散と収束)を繰り返してアイディアを洗練させていく
- ユーザーレビューは必要(何回か回すことも)
- レビュー用のモックは集中して作りこむ
- モックはレビューの肝を抑えたもので、UXに関係ない場合は見た目が酷い状態のものもある(ハードウェアなど)
- ユーザーレビューまで通すと決裁者の同意を得やすい
- デザインスプリントに適さないものもあるので注意。作るものが決まっている・開発速度優先など
- 絞り込みの投票制ルールは色々パターンがある。今回はシンプルに特例なし。(持ち点3点)
- ユーザーの意図と対象取り出すインテントマッチングは中核となる技術。Dialogflow使ってね。
- デザインスプリントでググればGoogle社の資料あるので見て
その他質疑などのメモ
適当メモ。全然違うこと言ってたかもしれない。
- push通知できるようになったら、音声案内をユーザーに適切なタイミングでできるようにするのがよい。一度にわーっと説明しても全然分からんので。
その他
なんかヒルズ前にタカアシ蜘蛛的なオブジェあったけど何なんだろう。
*1:これ自分
Actions on Google(actions SDK)にて Implicit Invocationを設定したけど動作確認ができない(雑記)
(3/14追記)
Google公式で日本国内のImplicit Invocationについての案内が出ています。
developers-jp.googleblog.com
====
actions SDKにて、カスタムインテントを使いたい。
公式のドキュメントを参考に、アクションパッケージ(actions.json)に追加アクション(Implicit Invocation)を定義した。
しかし、これがsimulatorでも実機でも動かず、途方に暮れていた。
公式のサンプルコードやGitHubのサンプルソースを見ても、ものすごく簡単に実現していることなので全然理由が分からず非常に混乱してしまった。
日本語のImplicit Invocationの現状。
VoiceAppLabさんが状況を知っていた。助かりました。
テストできないですよねー。ウチのアプリもリリース後、しばらくしないと反映されなかったです。
— ボイスアップラボ (@voiceapplab) 2018年3月9日
(恐らく)リリース後に反映されるような項目のようだ。
開発段階にてテストできないのは不安でしょうがない。
Implicit Invocationをやる場合はリリース後のupdateで対応する感じが良いかもしれない。
関連の記事
他の方のtwitter
例えば日本語の場合だと「山手線動いてる?」がImplicit Invocationの良い例かと思います。
— Yoichiro Tanaka (@yoichiro) 2018年2月3日
公式資料
- Invocation and Discovery -- Explicit(アプリ名呼び出し) とImplicit(暗黙呼び出し)がある
Overview | Actions on Google | Google Developers
- Implicit Invocation -- 暗黙呼び出しについて
Qiita
- Explicit / Implicitが良くまとまってる良記事。
- SimulatorでImplicit Invocationが動かないという情報あり。
- ちょっと逸れるけど、action invocation phraseについて
- action invocation phrase現在機能している。シミュレーターと実機で確認済み
- アプリ名+でXXして、等で呼びかけると変数としてXXが取れる
- この時のインテントはapp.StandardIntents.MAIN
Stack Overflow
初回呼び出し時のカスタムインテントについての議論ではなく、アプリ起動以降の処理についての話だと思われる。
初回呼び出しカスタムインテントは動いてそうな雰囲気なのでめちゃめちゃ悔しい😫
サンプルソース
GitHubでのactions SDKのサンプル。raw.inputという独自Intentを定義している。
簡単な定義だが…しっかしこれがSimulatorで動かないのだ…。
https://github.com/actions-on-google/actionssdk-eliza-nodejs(GitHub - actions-on-google/actionssdk-eliza-nodejs: Eliza Actions SDK sample for Actions on Google]
Actions SDKのアプリの終了処理について(メモ書き)
action.jsonにアプリ終了処理を書けるという公式の説明がある。
調べた感じ、日本語だとあまり対応していないようだ。
Actions SDKにて日本語での終了処理を書く場合は、素直にapp.StandardIntents.TEXTのコールバック関数内でグローバル終了処理を記述したほうがよさそうだ。
公式
App Exits | Actions on Google | Google Developers
英語モードでは以下の発話が認識されると、アプリは特に終了音声もなく終了する。
- "exit"
- "cancel"
- "stop"
- "nevermind"
- "goodbye"
actions.jsonにinDialogIntentsを追加すれば、actions.intent.CANCELが発生する。
そこに処理を書けば終了時音声を発話できるようになる。
日本語の対応
キャンセルのみ同等の処理が動くことをシミュレーターで確認。
今後の対応で増えそうではあるが…
- "キャンセル"
対応してない単語
- "終了",”イグジッド"
- "ネバーマインド"
- "グッドバイ","さようなら"
その他
Actions on Googleのシミュレーターは発話中でも次の値を入力しても問題ないようだ。
テストをさくさくやりたい場合はどんどん値を入力していけるので、どんどん使っていきたいところだ。
Windows10 WSL(Ubuntu)にMeCubのインストール
使い方
$ echo "バーチャルユーチューバーのじゃロリおじさん。" | mecab -d /usr/local/lib/mecab/dic/mecab-ipaバーチャルユーチューバー 名詞,固有名詞,一般,*,*,*,バーチャルYouTuber,バーチャルユーチューバー,バーチャルユーチューバー の 助詞,連体化,*,*,*,*,の,ノ,ノ じゃ 接続詞,*,*,*,*,*,じゃ,ジャ,ジャ ロリ 名詞,固有名詞,一般,*,*,*,ロリ,ロリ,ロリ おじさん 名詞,一般,*,*,*,*,おじさん,オジサン,オジサン 。 記号,句点,*,*,*,*,。,。,。 EOS
nodeのmecubライブラリ
ライブラリ2つあり。
utf-8対応済みだと、ライブラリで文字化けが発生しないようだ。
neologdを利用したいので前者を採用した。
- neologd利用可能
- 実行時にutf8化オプションあり
- 最初は何も考えずこのモジュールを使ったが、WSL(ubuntu)ではうまく動作せず文字化けしたままだった
その他
neologdのインストール先確認方法
$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd" /usr/local/lib/mecab/dic/mecab-ipadic-neologd
振り返り
住所の地名の読み仮名を作成しようと思い、最初は何も考えずGoogle Translate APIに突っ込んでローマ字読みを取り出そうとした。
しかし日本の地名は、漢字を素直に読んだものではなく、変わった読み方などが多くエラー率が高かった。
今回はMeCub+neologd+jpanese(Node module)で対処したが、完全ではないにせよ翻訳APIよりは精度が良かった。
メモ
VUI読み上げ時用のjapanese option(若干イマイチ)
const joption = { "ああ": "aa", "いい": "ii", "うう": "uu", "ええ": "ee", "おお": "oo", "あー": "aa" }; let roma = japanese.romanize(yomi, joption);
windows wsl(ubuntu)にGoogle Cloud SDK のインストール(雑記)
Googleのubuntuインストール手順通りにやると、エラーが出る。
ざっくり調べたけど無視して進めて問題なさそう。
無視した結果、後で問題になるかもしれないけど…とりあえず動いたので一応記事にしておく。
Google Cloud SDKインストール手順
Debian / Ubuntu 用のクイックスタート | Cloud SDK のドキュメント | Google Cloud Platform
Qiitaの記事
qiita.com
エラーについて
手順の以下のコマンドの実行結果でエラーが出る
コマンド
sudo apt-get update && sudo apt-get install google-cloud-sdk
エラー結果
grub-probe: error: failed to get canonical path of `rootfs'. grub-probe: error: failed to get canonical path of `rootfs'. grub-probe: error: failed to get canonical path of `rootfs'. /usr/sbin/grub-probe: error: failed to get canonical path of `rootfs'. dpkg: error processing package grub-pc (--configure): subprocess installed post-installation script returned error exit status 1 dmesg: read kernel buffer failed: Function not implemented E: Sub-process /usr/bin/dpkg returned an error code (1)
調査
MicrosoftのWSLリポジトリにissueとしてgrubのエラーがリポートされている。
aseering 氏のコメント(commented on 21 Apr 2017)
Relatedly, grub doesn't need to work, because WSL doesn't actually boot :-)
It would be nice if package installations didn't fail as a result of this.(WSLは実際には起動しないので、grubは動作する必要はありません:-)
この結果、パッケージのインストールが失敗しなかった場合は、いいでしょう。)
調査結果より判断
issueの内容とコメントを見る限りWSLではgrubは動作しなくて良いようだ。
今回はとりあえずGoogle Coud SDKにてエラーが出るが特に問題ないと判断した。
コメントにもあるがエラー表示が嫌な場合は、grub-pcをアンインストールする手もある。
>>|shellscript|
sudo apt -f remove grub-pc
|
今後作業にて不具合があったらここに追記する。
GoogleHomeアプリ「つくば市のゴミカレンダー」をリリースした
リリース!またつくば市が最強に一歩近づいたな😎
その他仕様
- 隠れ仕様的なのは特に仕込まず
- 悪意のある連続アクセス遮断処理をキツメに入れたらGoogle社のレビューで発動してしまいリジェクト😓
- GoogleHome全体で4種類の声質設定が有効化された
- リリース時に設定したfemale2ではちょっと気に障る声だったので、male1に変更。male1はイケボ。
- でもdefaultのGoogleHomeの声が一番落ち着くんだ…
振り返り
郵便番号周りの処理が若干めんどくさかった。
静的データのアクセス頻度と速度を考慮してデータを3か所に保存した・・・んだけど、作りが良くないかも。
良くある失敗例で、最初から処理速度とか考慮して設計すると構造がややこしくなるというアンチパターンになってしまったかも。
- node.js埋め込みのゴミカレンダーデータ
- 頻度高
- 郵便番号と匿名IDを管理するrealtime database
- 登録は1度だけ
- 匿名IDに紐づいたカレンダー番号を読み出す
- 郵便番号とゴミカレンダーデータの区分けを管理するfirestore
- 参照は初回に一度だけ
- 応答が若干遅い
埋め込みゴミカレンダーデータはrealtime databaseに統合しても良かったかも。
あとはnode.jsで簡単な状態遷移処理が構築できたので、次のGoogleHomeアプリからは作るのが楽になりそうだ。
Ryzen3 2200GとRyzen5 1400のベンチマーク比較
meltdownで嫌気が差しているので、格安自作PCの構成を検討している。
丁度2/13にRyzenの新しいAPUが発売された。
新シリーズではRyzen 3 2200Gが最も廉価だ。
同価格帯の旧版(Ryzen5 1400)との性能差を見てどちらを購入するか検討したい。
価格COMの参考価格
- Ryzen3 2200G BOX 13824円
- Ryzen5 1400 BOX 14972円
調査方法
PCWatchのベンチマーク結果を並べて性能比較する
参考元記事
- Ryzen5 2400G / Ryzen3 2200G
【レビュー】【本日発売】GPU内蔵になったRyzenの性能をベンチマーク - PC Watch
- Ryzen5 1400 / Ryzen3 1200
調査結果
ベンチマークは参考元記事から項目を抜粋している
凡例
- A:Ryzen5 2400G(GPU内蔵)
- B:Ryzen3 2200G(GPU内蔵)
- C:Ryzen5 1400+GPU( GeForce GTX 1080)
- D:Ryzen3 1200+GPU( GeForce GTX 1080)
- 1stスコアは太字
- 2ndスコアは斜体
ベンチマーク内容 | A | B | C | D | 備考 |
---|---|---|---|---|---|
CINEBENCH R15(Single) | 159 | 147 | 135 | 135 | |
CINEBENCH R15(All) | 833 | 585 | 698 | 483 | |
HandBrake(H.264) | 78 | 99 | 116 | 157 | 数値が低いほど良い |
TMPEGEnc(H.264) | 158 | 196 | 217 | 252 | 数値が低いほど良い |
PCMark10 | A | B | C | D |
---|---|---|---|---|
score | 3842 | 3577 | 6059 | 5711 |
Essentials | 8021 | 7817 | 7400 | 7002 |
Productivity | 6719 | 6555 | 6585 | 6538 |
DigitalContentCreation | 4181 | 3892 | 5984 | 5624 |
Gaming | 2614 | 2219 | 12495 | 11165 |
SandraPlatinum | A | B | C | D |
---|---|---|---|---|
Int | 161.00 | 145.00 | 131.33 | 116.51 |
Long | 160.24 | 141.00 | 133.20 | 115.37 |
Single-Float | 96.75 | 63.44 | 84.67 | 54 |
Double-Float | 82 | 53.51 | 70.78 | 44.62 |
SandraPlatinum(memory BW) | A | B | C | D |
---|---|---|---|---|
Integer B/F | 33.45 | 32 | 35.62 | 34.45 |
Float B/F | 33.51 | 33.18 | 35.85 | 35.29 |
3Dmark(TimeSpy) | A | B | C | D |
---|---|---|---|---|
score | 1231 | 1007 | 6261 | 5837 |
Graphics Score | 1103 | 899 | 7163 | 7158 |
CPU score | 3619 | 3186 | 3655 | 2857 |