なんも分からないのでしらべた

なんもわからん!…ので、できる範囲で調べる。

Voice UI Designer Meetup Tokyo個人メモ(雑記)

3/14 Google社主催の Voice UI Designer Meetup Tokyo行ってきた。
Google社の内部に入るの初めてだぜ!いろはす無料。というか六本木ヒルズ初めてだ。

f:id:kbn1053:20180315063635j:plain

公式

events.withgoogle.com

各種リンク

togetter.com

  • togetterまとめ

www.slideshare.net

  • 日本語のVUI最強資料来ました🤨

twitter.com

まとめ

  • 日本語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鍛え上げるには、動くものさっさと作ってテストして鍛え上げる方が良さそうなルート。紙面や理論優先だと良くないものができる可能性あり
  • ラジオの音声(文言)は素晴らしい。専門の処理は専門家の話し方が参考になりそうだ。

デザインスプリント体験

以前デザインスプリント本買ってざっくり読んだけど、こんな立派なことできねーよと思ってほったらかしてた。
今回は体験できるとのことで、戦々恐々としながら参加。
知らない人で集まっても、短期間でものすごい集中してアウトプットできたのは驚き。良い体験だ。
個人開発への応用には、効果は限定されるけどアイディアの発散と集中が使えそう。

f:id:kbn1053:20180315064717j:plain

本から入門だと理屈優先になるので、やる気がしなかったけど、
スプリントマスターの指導の下で体験してから理論を補強していくのが正しい気がした。

デザインスプリント ―プロダクトを成功に導く短期集中実践ガイド

デザインスプリント ―プロダクトを成功に導く短期集中実践ガイド

ピンとこなかった本これ。

実際にやった流れ

  • 本日のテーマ・目標物・ざっくりとした作るものを提示
  • 付箋にとりあえずテーマに関するものを書き出す(個人作業/発散)
  • それぞれが内容を説明しながら付箋をボードに貼る。似たものは固める(チーム作業/収束)
    • ある程度の集合が出来たらそれに名前を付けるとわかりやすい
  • 付箋全体を見て、個人の持ち点3点を良いアイデアにシールで投票する。この時は黙ってやる
    • 特例なし
  • 最高点テーマについて実際の使用シーン(情景、タイミング)を書き出す。1コマ漫画を8個描くイメージ(個人作業/発散)
    • 画面の説明ではなく、ユーザーがどういうときに使うかを描くこと。棒人間で良い
    • とにかく短い時間で8個埋める
  • それぞれがシーンについての内容を説明する。また投票を行う。持ち点3点
  • 投票結果のシーンを元に、実際の会話フローを書き出していく
    • VUIの場合は吹き出しでユーザーとデバイスのやり取りを書いていくと良い
  • それぞれが紹介する
    • 目標物の具体的イメージが固まる
    • この後どうするか不明。モックづくりに入る??

ポイント

  • アイディアを出し切る、絞り込む(発散と収束)を繰り返してアイディアを洗練させていく
  • ユーザーレビューは必要(何回か回すことも)
  • レビュー用のモックは集中して作りこむ
  • モックはレビューの肝を抑えたもので、UXに関係ない場合は見た目が酷い状態のものもある(ハードウェアなど)
  • ユーザーレビューまで通すと決裁者の同意を得やすい
  • デザインスプリントに適さないものもあるので注意。作るものが決まっている・開発速度優先など
  • 絞り込みの投票制ルールは色々パターンがある。今回はシンプルに特例なし。(持ち点3点)
  • ユーザーの意図と対象取り出すインテントマッチングは中核となる技術。Dialogflow使ってね。
  • デザインスプリントでググればGoogle社の資料あるので見て

その他質疑などのメモ

適当メモ。全然違うこと言ってたかもしれない。

  • push通知できるようになったら、音声案内をユーザーに適切なタイミングでできるようにするのがよい。一度にわーっと説明しても全然分からんので。
  • VUIのモックどうする。
    • ダイアログフローでポチポチ作るか、ルール決めてチャットするだけでも良い。
  • VUIコンペでの差のつけ方。
    • VUI知識量が重要。顧客が作りたいものを出してきたとき、恐らく考慮が足りない。そこを補う提案を出していくことで競合に差をつけられる。
  • VUIとブランディング。車のブランディングとVUIの人格ブランディングどうまとめる。

その他

なんかヒルズ前にタカアシ蜘蛛的なオブジェあったけど何なんだろう。

*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さんが状況を知っていた。助かりました。

(恐らく)リリース後に反映されるような項目のようだ。
開発段階にてテストできないのは不安でしょうがない。
Implicit Invocationをやる場合はリリース後のupdateで対応する感じが良いかもしれない。

関連の記事

他の方のtwitter


公式資料

  • Invocation and Discovery -- Explicit(アプリ名呼び出し) とImplicit(暗黙呼び出し)がある

Overview  |  Actions on Google  |  Google Developers

  • Implicit Invocation -- 暗黙呼び出しについて

Implicit Invocation  |  Actions on Google  |  Google Developers

  • Define Actions -- Actions SDKでの暗黙呼び出し/アクションパッケージへのインテント追加

Define Actions  |  Actions on Google  |  Google Developers

Qiita

  • Explicit / Implicitが良くまとまってる良記事。
    • SimulatorでImplicit Invocationが動かないという情報あり。

qiita.com

  • ちょっと逸れるけど、action invocation phraseについて
    • action invocation phrase現在機能している。シミュレーターと実機で確認済み
    • アプリ名+でXXして、等で呼びかけると変数としてXXが取れる
    • この時のインテントはapp.StandardIntents.MAIN

qiita.com

Stack Overflow

初回呼び出し時のカスタムインテントについての議論ではなく、アプリ起動以降の処理についての話だと思われる。
初回呼び出しカスタムインテントは動いてそうな雰囲気なのでめちゃめちゃ悔しい😫

stackoverflow.com
stackoverflow.com
stackoverflow.com

サンプルソース

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]

その他

国内GoogleHomeアプリ開発情報はtwitterが最速…!
VoiceAppLabさんありがとうございました。

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のインストール

公式

MeCub
MeCab: Yet Another Part-of-Speech and Morphological Analyzer

固有名詞強化辞書 neologd
github.com

参考

QiitaのMeCab utf8インストール対応記事
最後までやらなくても、文字化けは解消した。途中の辞書をインストールまでOK。

qiita.com

neologdは公式の手順通りでいける

使い方

$ echo "バーチャルユーチューバーのじゃロリおじさん。" | mecab -d /usr/local/lib/mecab/dic/mecab-ipaバーチャルユーチューバー    名詞,固有名詞,一般,*,*,*,バーチャルYouTuber,バーチャルユーチューバー,バーチャルユーチューバー
の      助詞,連体化,*,*,*,*,の,ノ,ノ
じゃ    接続詞,*,*,*,*,*,じゃ,ジャ,ジャ
ロリ    名詞,固有名詞,一般,*,*,*,ロリ,ロリ,ロリ
おじさん        名詞,一般,*,*,*,*,おじさん,オジサン,オジサン
。      記号,句点,*,*,*,*,。,。,。
EOS

nodeのmecubライブラリ

ライブラリ2つあり。
utf-8対応済みだと、ライブラリで文字化けが発生しないようだ。
neologdを利用したいので前者を採用した。

github.com

  • neologd利用可能

github.com

  • 実行時に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 のインストール(雑記)

Googleubuntuインストール手順通りにやると、エラーが出る。
ざっくり調べたけど無視して進めて問題なさそう。
無視した結果、後で問題になるかもしれないけど…とりあえず動いたので一応記事にしておく。

エラーについて

手順の以下のコマンドの実行結果でエラーが出る

コマンド
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は動作する必要はありません:-)
この結果、パッケージのインストールが失敗しなかった場合は、いいでしょう。)

github.com

調査結果より判断

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が発売された。

ascii.jp

新シリーズでは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

【レビュー】2万円を切る「Ryzen 3」の実力を見る - PC Watch

調査結果

ベンチマークは参考元記事から項目を抜粋している

凡例

  • 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

所感

  • PCMark10のEssentials/Productivityの結果を見ると、基本的なCPU性能はRyzen3 2200GはRyzen5 1400と比べて遜色ない
  • 浮動小数点演算(Float)はRyzen5 1400が明らかに良い
    • 3シリーズは元々プロセッサからSMP(同時マルチスレッディング)機能が省かれているためのようだ
  • memory bandwidthがRyzenの新シリーズ劣っている
    • 計測元のハードウェア構成を見ると、単にベンチマークを取った時のメモリレイテンシの違いによるものだろう
    • 新シリーズのベンチマークで使ったメモリ:DDR4-2933 8GB×2 (2ch、14-14-14-34、1.20V)
    • 旧シリーズのベンチマークで使ったメモリ:DDR4-2933 8GB×2 (2ch、16-18-18-36、1.35V)
  • 新シリーズ内臓Gpahics性能とGTX1080ではさすがに比較にならない差が出る
    • このPCではゲームをやらないので参考値程度に

終わりに

格安自作PCを作るうえで、GPUを別途購入するコストを考えると、Ryzen5 1400 + 格安GPU >> Ryzen3 2200Gとなる。
コスパは相当良い。ただ、新しい製品なのでマザーボードBIOS周りがちょっとリスクありそう。
初物は様子見たいところだけど、せっかく調べたのでRyzen3 2200G行ってみましょ~🙃
という結論で終わる。

おまけ

発注した構成

パーツ 型番 価格(税込み) 備考
CPU Ryzen3 2200G 13824 1'sPC在庫なしだったため仕方なくツクモ
マザーボード GA-A320M-HD2 6980 Gigabyte社が新シリーズに一番対応まともとの情報より。1'sPCにBIOS更新を依頼
メモリ crucial 4G×1 5760 1'sPC送料無料狙い(ケチってデュアルチャネルなし!)
その他 ケースとかHDD電源全部流用

合計 26564円