kun432's blog

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

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

LVMでPVディスク名が変わった場合、ボリュームはどうなるのか?

ちょっと疑問に思ったので試してみた。例えばこういう状況があって、

  • /dev/sda
    • ローカルディスク(LVM)
  • /dev/sdb
    • ローカルディスク(LVM)
  • /dev/sdc
    • ローカルディスク(LVM)
  • /dev/sdd
    • ローカルディスク(非LVM)
  • /dev/sde
    • ローカルディスク(非LVM)

ここにディスクを追加してLVMに参加させる

  • /dev/sda
    • ローカルディスク(LVM)
  • /dev/sdb
    • ローカルディスク(LVM)
  • /dev/sdc
    • ローカルディスク(LVM)
  • /dev/sdd
    • ローカルディスク(非LVM)
  • /dev/sde
    • ローカルディスク(非LVM)
  • /dev/sdf
    • ローカルディスク(LVM)

そして、途中にある非LVMな/dev/sdd, /dev/sdeを取り除いて再起動する。再起動後のディスク名はこうなるはず。

  • /dev/sda
    • ローカルディスク(LVM)
  • /dev/sdb
    • ローカルディスク(LVM)
  • /dev/sdc
    • ローカルディスク(LVM)
  • /dev/sdd
    • ローカルディスク(LVM)

こうなった場合、LVMはどうなるのだろうか?という話。

やってみる

  • VirtualBox
  • Ubuntu 18.04LTS
  • インストール時にLVMを有効化
  • ディスクを2本追加してSATAコントローラに接続

こういう状態

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               965M     0  965M   0% /dev
tmpfs                              200M  760K  199M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   19G  3.7G   14G  21% /
tmpfs                              997M     0  997M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              997M     0  997M   0% /sys/fs/cgroup
/dev/sda2                          976M   80M  830M   9% /boot
tmpfs                              200M     0  200M   0% /run/user/1000

# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B69B2A9B-16EA-41DE-8A34-E46EB4477426

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem


Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 19 GiB, 20396900352 bytes, 39837696 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

インストーラでは/dev/sda3を使ってLVMボリュームが構成されている。/dev/sdbと/dev/sdcが新たに追加したディスク。こいつを普通にLVMに参加させるのはとてもかんたん。

まずパーティションを切る。

# parted /dev/sdb -s mklabel gpt
# parted /dev/sdb -s mkpart primary ext4 0% 100%
# parted /dev/sdb -s set 1 lvm on

# parted /dev/sdc -s mklabel gpt
# parted /dev/sdc -s mkpart primary ext4 0% 100%
# parted /dev/sdc -s set 1 lvm on

PV作成

# pvs -v
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
  PV         VG        Fmt  Attr PSize   PFree   DevSize PV UUID
  /dev/sda3  ubuntu-vg lvm2 a--  <19.00g      0  <19.00g eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W

# pvcreate /dev/sdb1
# pvcreate /dev/sdc1

# pvs -v
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
  PV         VG        Fmt  Attr PSize   PFree   DevSize PV UUID
  /dev/sda3  ubuntu-vg lvm2 a--  <19.00g      0  <19.00g eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W
  /dev/sdb1            lvm2 ---  <10.00g <10.00g <10.00g fovUGe-k8ab-Ff55-KHO8-SfKc-qPnG-kQ2TmB
  /dev/sdc1            lvm2 ---  <10.00g <10.00g <10.00g vltXDY-QR0h-eq52-Q6mj-SW39-Cn1M-Hn22Sc

VGにPVを追加

# vgs -v
  VG        Attr   Ext   #PV #LV #SN VSize   VFree VG UUID                                VProfile
  ubuntu-vg wz--n- 4.00m   1   1   0 <19.00g    0  bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

# vgextend ubuntu-vg  /dev/sdb1
# vgextend ubuntu-vg  /dev/sdc1

# vgs -v
  VG        Attr   Ext   #PV #LV #SN VSize   VFree  VG UUID                                VProfile
  ubuntu-vg wz--n- 4.00m   3   1   0 <38.99g 19.99g bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

LVを拡張

# lvs -v
  LV        VG        #Seg Attr       LSize   Maj Min KMaj KMin Pool Origin Data%  Meta%  Move Cpy%Sync Log Convert LV UUID                                LProfile
  ubuntu-lv ubuntu-vg    1 -wi-ao---- <19.00g  -1  -1  253    0                                                     hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2

# lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# lvs -v
  LV        VG        #Seg Attr       LSize   Maj Min KMaj KMin Pool Origin Data%  Meta%  Move Cpy%Sync Log Convert LV UUID                                LProfile
  ubuntu-lv ubuntu-vg    3 -wi-ao---- <38.99g  -1  -1  253    0                                                     hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2

ファイルシステムを拡張

# resize2fs /dev/ubuntu-vg/ubuntu-lv

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               965M     0  965M   0% /dev
tmpfs                              200M  760K  199M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   39G  3.7G   33G  11% /    ★19GBから39GBに増えている
tmpfs                              997M     0  997M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              997M     0  997M   0% /sys/fs/cgroup
/dev/sda2                          976M   80M  830M   9% /boot
tmpfs                              200M     0  200M   0% /run/user/1000

問題なし。

でここに非LVMなディスクを2本追加することとする。

Disk /dev/sdd: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sde: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

順番にディスク名が振られていることがわかる。

では、改めてLVMを拡張するためにディスクを追加する。

Disk /dev/sdf: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

続けてsdfとして認識されている。ではこいつをLVMに参加させる。

# parted /dev/sdf -s mklabel gpt
# parted /dev/sdf -s mkpart primary ext4 0% 100%
# parted /dev/sdf -s set 1 lvm on

# pvcreate /dev/sdf1

# vgextend ubuntu-vg  /dev/sdf1

# lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

# resize2fs /dev/ubuntu-vg/ubuntu-lv

# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               965M     0  965M   0% /dev
tmpfs                              200M  776K  199M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   49G  3.8G   43G   9% /  ★さらに10GB増えてる
tmpfs                              997M     0  997M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              997M     0  997M   0% /sys/fs/cgroup
/dev/sda2                          976M   80M  830M   9% /boot
tmpfs                              200M     0  200M   0% /run/user/1000

ではPVがいなくなったと想定して、/dev/sddと/dev/sdeをVirtualBoxマネージャーから取り除いてやる。

f:id:kun432:20210715025220p:plain

3と4がないのがわかると思う。ではこの状態でrebootしてみる。どうなるか?

$ sudo fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B69B2A9B-16EA-41DE-8A34-E46EB4477426

Device       Start      End  Sectors Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096  2101247  2097152   1G Linux filesystem
/dev/sda3  2101248 41940991 39839744  19G Linux filesystem


Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AB3F4A27-6E98-49C5-9837-B6F902D930B5

Device     Start      End  Sectors Size Type
/dev/sdb1   2048 20969471 20967424  10G Linux LVM


Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 57BDD116-BEB8-402E-8832-882DD1345CA8

Device     Start      End  Sectors Size Type
/dev/sdc1   2048 20969471 20967424  10G Linux LVM


Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CA56E550-1BDE-48FA-9503-0F3549DEC04F

Device     Start      End  Sectors Size Type
/dev/sdd1   2048 20969471 20967424  10G Linux LVM


Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 49 GiB, 52596572160 bytes, 102727680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

/dev/sdfだったディスクは/dev/sddとして認識されている。

$ sudo vgdisplay -v
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               48.98 GiB
  PE Size               4.00 MiB
  Total PE              12540
  Alloc PE / Size       12540 / 48.98 GiB
  Free  PE / Size       0 / 0
  VG UUID               bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2021-07-14 16:02:56 +0000
  LV Status              available
  # open                 1
  LV Size                48.98 GiB
  Current LE             12540
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sda3
  PV UUID               eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W
  PV Status             allocatable
  Total PE / Free PE    4863 / 0

  PV Name               /dev/sdb1
  PV UUID               fovUGe-k8ab-Ff55-KHO8-SfKc-qPnG-kQ2TmB
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdc1
  PV UUID               vltXDY-QR0h-eq52-Q6mj-SW39-Cn1M-Hn22Sc
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdd1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

普通にディスク名の順序が詰められて認識されていて、LVM的にはなんの問題もなかった。

今度はさきほど取り外したディスクを追加して起動してみる。fdiskでみてみると、

Disk /dev/sdd: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sde: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdf: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: CA56E550-1BDE-48FA-9503-0F3549DEC04F

もとに戻ってる。vgdisplayでも見てみたけどなんの問題もなかった。

$ sudo vgdisplay -v
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               48.98 GiB
  PE Size               4.00 MiB
  Total PE              12540
  Alloc PE / Size       12540 / 48.98 GiB
  Free  PE / Size       0 / 0
  VG UUID               bdUp1Q-y1ED-3fKi-KuSJ-ksRt-t6Il-FXRBeb

  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                hAfmud-82vu-xhHd-mnTB-mfXP-2lqW-RDl1I2
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2021-07-14 16:02:56 +0000
  LV Status              available
  # open                 1
  LV Size                48.98 GiB
  Current LE             12540
  Segments               4
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sda3
  PV UUID               eE0Pw0-XSAw-E170-zwpF-wAJH-i8d8-88Gj5W
  PV Status             allocatable
  Total PE / Free PE    4863 / 0

  PV Name               /dev/sdb1
  PV UUID               fovUGe-k8ab-Ff55-KHO8-SfKc-qPnG-kQ2TmB
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdc1
  PV UUID               vltXDY-QR0h-eq52-Q6mj-SW39-Cn1M-Hn22Sc
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdf1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

前後のvgdisplayの結果を見比べてみると、PV UUIDは同じなのでディスク名が変わってもちゃんと管理されているのかもしれない。しらんけど。

  PV Name               /dev/sdd1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

  PV Name               /dev/sdf1
  PV UUID               0L1Rfr-ve3M-OcP4-1kIG-coUi-R3fX-j0oZ3W
  PV Status             allocatable
  Total PE / Free PE    2559 / 0

とはいえ、udevを使って一意な名前にしておくのが良いような気はする。

incarose86.hatenadiary.org

#VUIchallenge #003 - The Lists

f:id:kun432:20210711001052p:plain

#VUIchallengeの第3回です。テーマは「The Lists」。VUIにとっては難しいテーマですね・・・

過去の#VUIchallengeの記事はこちら

お題

The challenge

Design a list for your service. Your VUI interface gives movie recommendations from a catalogue of hundreds of titles. Each title is associated with rich information like actors, year, rating, etc. You can decide how many titles you want to list in a row, and what's the information you are going to include for each title.

Jesús' Tips

When listing items you need to be super cautious with cognitive overload. Cognitive load can vary from one user to another and it will depend on many different aspects. Here you have some ideas you can consider:

  • Amount of information shared for each title.
  • Familiarity with the results.
  • Customer goal: do customers want to get many results or just a single recommendation?

DeepLによる日本語訳

課題

お客様のサービスのためのリストをデザインしてください。あなたのVUIインターフェースは、何百ものタイトルのカタログから映画をお勧めします。それぞれのタイトルには、俳優、製作年、評価などの豊富な情報が関連付けられています。一列に並べるタイトルの数と、各タイトルに含める情報を決めることができます。

Jesúsのヒント

アイテムをリストアップする際には、認知的過負荷に細心の注意を払う必要があります。認知的負荷は、ユーザーによって異なりますし、さまざまな側面に依存しています。ここでは、いくつかのアイデアを考えてみましょう。
たとえ言葉遣いが完璧であっても、さまざまなシナリオに対応できるようにしておく必要があります。ここではいくつかのアイデアをご紹介します。

  • 各タイトルで共有されている情報量。
  • 結果に対する親しみやすさ。
  • お客様の目的:お客様は多くの結果を得たいのか、それとも1つのお勧めを得たいのか?

デザイン

最初に「認知的負荷」について考えてみましょう。

上記のサイトの説明を見てもらうとわかるように、人間が一度に覚えれる情報の量は限られています。ここに限界以上の情報を与えるとオーバーフローします。これが「認知的過負荷」です。

音声インタフェースにおいては、耳できいたことを頭で覚えるということが必要になります。そして「リスト」のような大量の情報を音声だけで一度にユーザにわたすというのは、ユーザの記憶力に対して大きな負荷をかける行為になるため、とても相性が悪いです。

実際にサンプルのフローで体験してみましょう。

ムービーレコメンドスキルです。
このスキルでは、あなたの好みに合わせておすすめの映画をご紹介します。お好きな映画のジャンルを言ってください。

ラブコメかな。

わかりました。あなたにおすすめのラブコメ映画を100件ご紹介します。ユー・ガット・メール、あなたが寝ている間に、ウェディング・シンガー、・・・の100件です。詳しく聞きたい映画のタイトルを言ってください。

はい、100件なんて覚えられないですよね・・・しかも多分これは読み上げるのにもかなりの時間がかかるのではないかなと思います・・・

じゃあ10件なら行けるか?多分無理でしょう。Alexa音声デザインガイドにもありますが、一度に選択できるのはせいぜい3つ程度です。それ以上は聞いても忘れますし、ユーザは興味を失うでしょう。

そこでお題に上がっている、アイデアのいくつかについて考えてみましょう。

各タイトルで共有されている情報量

情報量が多いのはタイトルだけではありません。個々の映画の詳細情報についても同じです。

  • 監督
  • 出演
  • 脚本
  • 公開年度
  • 評価
  • カテゴリ
  • あらすじ

詳細な情報を沢山伝えようとすればするほど、音声で伝えないといけないことの量と時間が増え、そしてユーザの認知的負荷も高くなります。

さきほどのサンプルスキル、10件覚えるのも大変ですけど、なんとか一つの映画についてユーザが訪ねたとしましょう。

ユー・ガット・メールについて教えて

ユー・ガット・メールは、1998年に公開されたロマンティック・コメディです。インターネットで知り合った名前も知らない男女がメールのやり取りをしながらお互いに惹かれ合っていくというストーリーです。監督ノーラ・エフロン、脚本ノーラ・エフロン、デリア・エフロン、出演トム・ハンクス、メグ・ライアンです。インターネット・ムービー・データベースの評価は6.7です。

多分こんな感じの情報をお伝えすることになると思いますが、これも長いですよね・・・

お客様の目的:お客様は多くの結果を得たいのか、それとも1つのお勧めを得たいのか?

このように多くのリストやデータベースから情報を抽出するというのは、音声インタフェースにとってはとても難しいです。

でも少し考えてみてください。

そもそもユーザは音声でそれをもとめているのでしょうか?これってパソコンやスマホでも良い、というかむしろそっちのほうが使い勝手が良くないですか?本当にユーザは音声でデータベース検索みたいなことをやりたいと思っているのでしょうか?

考え方としては2つになると思います。

  • やっぱりユーザは多くのオススメを求めている
    • 音声だけでは難しいので、何かのアシストが必要
  • そうではなくて、ユーザは一つのオススメを知りたい
    • 音声の制約を逆手に取ったアイデアで勝負
    • やれることは少ないけど、シンプルな目的を使い勝手よく果たす

前者については、「画面付きデバイスを使って音声と併用する」というやり方があります。つまり「GUI」ですね。

パソコンやスマホのように、GUIでは大量の情報を一度に表示できますし、メニューのような階層構造やページネーションなどを使って表示する情報を切り替えたりもできます。そして音声のように一定時間に回答しないといけないということもなく、タッチやマウス操作で見たい情報を見ることができますね。

参考までにAmazon PrimeビデオをEcho Showで開くとこうなります。

f:id:kun432:20210714231320j:plain

ひと目でわかりやすいですし、ここから選択する場合、タッチでもいいでしょうし、音声でも良いでしょう。

後者の場合、そもそも根本的に大量の情報を返すことは諦めます。音声のメリットを活かす、逆に言うと音声の制約を逆手に取って、アイデア and/or 使い勝手で勝負することになります。

例えば、こんな感じ。

  • 一つのテーマに特化した形で提案
    • カンフー映画専門のおすすめ、とか。
    • テーマを広く扱わないかわりに、かなりマイナーな映画も扱っているとか、そのジャンルの専門家によるおすすめ、といったプラス要素が必要。
  • ユーザの想定を「いい意味」で裏切る形での提案(セレンディピティ)
    • 普段見ないような、でも一度見ると必ずハマるような「新しい出会い」を提案
    • ユーザの反応が良ければいいが、おそらく確率は低くなる
  • ユーザの個人的な嗜好にあわせた提案(パーソナライズ)
    • おすすめに対する結果を反映して、徐々にユーザの嗜好に寄せていく(パーソナライズ)
    • 以下にユーザの期待に沿った提案ができるかが鍵

映画自体がビジュアルなものであること、そして、非常に多くの情報を持っている、というところで、音声だけで勝負するには何かしらの工夫が必要かなという気がします。

ということで、最初のサンプルスキルをブラッシュアップしてみました。

ムービーレコメンドスキルです。
このスキルでは、あなたの好みに合わせておすすめの映画を3本ご紹介します。お好きな映画のジャンルを言ってください。

ラブコメかな。

わかりました。今回のおすすめは、ユー・ガット・メール、あなたが寝ている間に、ウェディング・シンガー、の3本です。興味があるものを言ってください。 f:id:kun432:20210715000514j:plain

ユー・ガット・メール(「1番」といってもいいし、画面タッチでもOK)

インターネットで知り合った名前も知らない男女がEメールのやり取りをしながらお互いに惹かれ合っていくというストーリーです。まあまあおすすめです。 f:id:kun432:20210715001813j:plain

まとめ

今回、対話のデザインという点では、少し脱線していますが、リスト的なものはやっぱり音声には鬼門ですね。やはり、画面付きデバイスをうまく使って多くの情報を提供しつつも、音声ならではのメリットを活かすような使い方を考えるべきですね。

#VUIchallenge #002 - The cities

f:id:kun432:20210711001052p:plain

#VUIchallengeの第2回です。テーマは「The cities」。

過去の#VUIchallengeの記事はこちら

お題

The challenge

Design a prompt asking users to tell the city in the US they want to visit. What possible answers can you get for that prompt?
Design also all the prompts that you will give back depending on the possible answers you can get.

Jesús' Tips

Just some ideas today. Depending on your wording your customers might get it right and say a city on the US, or get it totally wrong and ask for countries in Europe. Be super careful with your words!
Even if your wording is perfect, you will need to be ready for different scenarios. Here you have some ideas:

  • The city name is shared.
  • The city is not in the US.
  • Any other scenario you can think of.

DeepLによる日本語訳

課題

ユーザーに「行ってみたいアメリカの都市」を尋ねるプロンプトをデザインします。そのプロンプトに対して、どのような回答が得られるでしょうか。
また、得られる可能性のある答えに応じて、返すプロンプトをすべてデザインしてください。

Jesúsのヒント

今日はいくつかのアイデアを紹介します。あなたの言葉遣いによっては、顧客は正しく理解してアメリカの都市を答えるかもしれませんし、全く間違ってヨーロッパの国を尋ねるかもしれません。言葉遣いには細心の注意を払ってください。
たとえ言葉遣いが完璧であっても、さまざまなシナリオに対応できるようにしておく必要があります。ここではいくつかのアイデアをご紹介します。

  • 都市名が共有されている。
  • その都市はアメリカにはない。
  • その他のシナリオを考えてみましょう。

デザイン

サンプルとして、日本の都市名を言うとその都市のおすすめの観光名所を教えてくれる、というもので考えてみましょう。

はじめまして、トリップアドバイザースキルをご利用いただきありがとうございます。
このスキルでは、行きたい日本の都市名を言うとおすすめの観光名所を提案します。
例えば「京都に行きたい」と言ってみてください。

京都に行きたい

京都ですね。京都だと清水寺がおすすめです。

ではいくつかのパターンを見ていきましょう。

都道府県が違うけど都市名が同じ

ウィキペディアによると、都道府県は違うけど同じ都市名というのは日本には2つあるようです。府中市(東京と広島)と伊達市(北海道と福島)ですね。

アメリカの場合も、ソースが出てこなかったのですが、いくつかあるようです。

この場合、都市名だけでは区別がつかないので、追加で質問する必要があるでしょう。

府中に行きたい

府中は東京都と広島県にあります。どちらの府中についてお調べしましょうか?

東京の方で

東京都の府中なら、東京競馬場が有名ですね。

場合によっては、両方ともお伝えするというのも一つかも入れません。セレンディピティ的な効果を期待して。

府中に行きたい

府中は東京都と広島県にあります。東京都の府中なら、東京競馬場が有名ですね。広島県の府中なら、オオムラサキの里がおすすめですよ。

ただ、この場合、候補数にもよりますね。2つぐらいならいいと思いますが、4つ以上とかになると長くなり過ぎそうです。その場合は候補から選択してもらうのがいいでしょう。

外国の都市名

今回のサンプルでは、日本の都市名だけを対象としています。つまりアメリカの都市名には対応しません。で、Alexaの場合を例に取ると、都市名についてはビルトインスロットタイプAMAZON.Cityを使えばかんたんに取れます。

AMAZON.City

日本で日本語を話すユーザーが一般的に使用する日本や世界各地の都市の名前を認識します。このスロットタイプは都市名の一般的なバリエーションを認識します。サービスに送信される都市名は、ユーザーが話した値と一致します。つまり、Alexaサービスは、都市名のバリエーションを正式な都市名に変換しません。

  • 渋谷
  • 新宿
  • 品川
  • 世田谷
  • 大阪
  • 名古屋
  • (以下略)
スロットタイプリファレンス | Alexa Skills Kit

なんですが・・・これ、必ず日本の都市名だけを拾うわけではなく、海外の都市名も普通に拾ってきます。実際にVoiceflowを使って作ってみました。

サンプルでは京都と奈良だけに対応しています。それ以外は「対応していない」旨を伝えます。

f:id:kun432:20210713232650p:plain

都市名を答えるインテントでAMAZON.Cityスロットタイプを使って都市名を取得しています。

f:id:kun432:20210713233036p:plain

f:id:kun432:20210713233058p:plain

どのインテントにもマッチしない場合は以下のようにメッセージを返します。

f:id:kun432:20210713233423p:plain

テストしてみましょう。

f:id:kun432:20210713233524p:plain

これは想定どおりですね。では「ニューヨーク」で試してみましょう。インテントにマッチしないので「ごめんなさい、よくわかりませんでした。」になるはずですね。

f:id:kun432:20210713233547p:plain

残念ながらそうはなりません。日本の都市名を取得するスロットタイプであるAMAZON.Cityを使ったとしても、海外の都市名も拾ってしまいますね。

ということで、少し脱線しましたが、日本以外の都市名の場合は、「よくわかりませんでした。」よりももう少し突っ込んだ応答が必要になります。例えば

ニューヨークに行きたい

ごめんなさい、ニューヨークはアメリカの都市名です。このスキルでは日本の都市名のみに対応しています。日本の都市名を言ってください。

という感じになるかなと思います。実際にこれをやるには都市名から国名を引っ張ってくるようなAPIが必要になるかと思います。

その他のシナリオ

色々なパターンが考えられますが、一つ思いついたのは「都市名」を聞いていますが「都道府県名」を行った場合とかですかね。これもAMAZON.Cityは拾ってきてしまいます。

f:id:kun432:20210713234349p:plain

なので、この場合に取れる戦略としては、

  • 都道府県名ではなく都市名を言ってもらうように再度聞き直す
  • 都道府県に属する市を列挙して都市名を言ってもらう
  • 都道府県名でもざっくりとした提案できるようにする

というのが考えられますね。最後の例だと、

滋賀に行きたい

滋賀県ですね。滋賀県だと大津市にある比叡山延暦寺がおすすめです。

みたいな感じが良いでしょう。もちろんこれをやろうと思うと結構ロジックは複雑になります。

1番目は親切とは言えませんがその分シンプルにやれることだけに限定しています。

2番目は候補を提案することでユーザの負担を減らそうとしています。ただ数が多いと長くなりがちなので難しくなります。

親切にすればするだけ開発コストも大きくなるので、このあたりはリソースとの兼ね合いも考えてやるしかないですね。

まとめ

今回は都市名がテーマでした。ユーザにとっては、都道府県名なのか、都市なのか、地名なのかということを意識して話すわけではない(大阪「府」なのか、大阪「市」なのか、漠然とした「大阪」なのか、ということ)ので、ビルトインスロットタイプはもちろん使うとしても、それに頼り切らずに、例外パターンも想定しておければいいですね。