Alexaの駅名しりとりをできるだけ長く続けるHack

背景・課題

Amazon Echoを買いました。Amazon Echo の 頭脳である Alexa に「しりとりしよう」というと、
駅しりとり powered by 駅すぱあとが起動され、日本の駅名しりとりが始まります。

駅しりとりは続いた回数のランキング機能があり、2018/01/13の時点で136回でした。

課題

駅名のリストが手元にあったとしても、適当に駅名を返すと、使える駅名が足りなくなってAlexa側に降参されてしまうので、長くしりとりを続けるためには、Alexaに降参させないようにうまく駅名を返す工夫をしなければいけないという課題があります。

成果物の動画

長くなりすぎたので途中までです

説明

背景で述べた課題からして、駅名を選ぶときは、「次にAlexaが使える駅名の選択肢の多い駅名」を選ぶのが良さそうです。
これを実装してみました。
あまり深く考えずに実装してしまったのですが、やってみたら簡単にランキングの1位を抜くことができてしまって、このまま続けると1位を圧倒的な差で更新してしまってランキング荒らしになってヤバイと思ったのでランキング1位を7回抜いたところでこちらから降参しました。
ランキングを汚してしまって申し訳ありませんでした。

せっかくやったので、下記に方法を記録はしておきます。
ランキングは荒らさないようにしましょう。

方法

  • Wikipediaの日本の鉄道駅一覧ページから駅名の書かれた本文のあたりを適当にコピペしてきたファイルを作る (そのファイル)
  • 「上道駅 (鳥取県)(あがりみちえき・西日本旅客鉄道境線)」みたいな行からひらがなの駅名部分を正規表現 ".+((.+)えき・?.*)" で抽出し、重複を排除する
    • ひらがなで7884種類の駅名があった (ファイルの作り方も適当にコピペしてきただけだし、正規表現も漏れなどあると思う)
  • 駅一覧に対し、その駅名を選択した時、次に使える駅名の選択肢数をスコアとして付与する
    • 7884の駅に対して、スコアはこのようになった (スコアのファイル)
    • 一番スコアが高い駅名は「が」で終わる駅名でスコアは575 (「が」または「か」ではじまる駅は575種類ある)。「みなみしが」など53駅ある
    • 「ん」終わり以外で一番スコアが低い駅名は「る」で終わる駅名でスコアは2 (「る」で終わる駅は2種類 (るもい、るべしべ) しかない)。「くうこうだいにびる」など85種類。
    • 次のようなルールが有ることに注意
    • 促音 (ー) は無視する
    • 濁点・半濁点が付く場合はそれらを除いた文字も使用可能 (e.g. “が”終わりの場合”か”からも始められる)
    • 「ゃゅょ」の場合はそれぞれ「やゆよ」に直す
  • Alexaが使った駅名を人手のタイピングによって得る
    • 「ず」と「づ」の判断が難しい
    • クリティカルな問題としては 「いちのへ」 を 「いちのえ」 と発音してくる。 さらにこちらが間違えると、「”へ”で始まる駅名をお願いします」と言っているつもりなのだろうが実際の音としては「”え”で始まる駅名をお願いします」と言ってくるので、エグい。
    • 「いちのへ」を「○○さんへ」の “へ” みたいにAlexaが思ってしまっているのだろう
    • Alexaスキル開発時にひらがなの読み通りに読ませるなどの指定ができたと思うので改善すると良いんじゃないでしょうか > 開発者さん
  • 自分が使った駅名・Alexaが使った駅名・Alexaが聞き取ってくれなかった駅名を順次 駅一覧から除きながら、各ターンでスコアを再計算しつつスコアが最大の駅名をこちらの言う駅として選ぶ
  • Macのsayコマンドで駅名を喋らせる
    • 人間が言うより正確にAlexaに聞き取らせることができる
    • 人間が言うと「きくがおか」と言ったのに、「きくがわ」と認識されてしまい、Alexaが降参するなどの事故が発生する

スクリーンショット

黄色い部分をMacが喋ってます

ソースコード

https://github.com/nikken7101/HackEkimeiShiritori/blob/master/ekishiritori.scala

You may also like...

コメントを残す

メールアドレスが公開されることはありません。