RNNで競走馬の名前を生成してみる

RNN (Recurrent Neural Network) を使って何かをやってみようと前々から考えてましたがネタが思いつかない・・・

・・・・・・・・・・・・・・・

・・・ ありました! 競走馬の名前を生成してみよう

ということで早速やってみました。

名前を題材にしたワケ

RNNを使った文章生成というのはいろいろ試されています。

が、何となくの文章は作成できますがまともに意味の通った文章は作成できません... >< 。 名前であればそういう問題を回避でき実用的なアプリケーションとしても成立し得るのでは?と考え選択しました。

データの収集

何はともあれ、データの収集です。 競走馬の名前データはNetkeibaさんのサイトからクローラで取得してきました。

クローラのコードはこちら github.com

以下のような感じで賞金順に約5万頭分取得しました。

テイエムオペラオー
ディープインパクト
ゴールドシップ
ブエナビスタ
オルフェーヴル
ジェンティルドンナ
ウオッカ
ヴァーミリアン
ゼンノロブロイ
スペシャルウィーク
タップダンスシチー
メイショウサムソン
ホッコータルマエ
エスポワールシチー
ダイワメジャー
メジロマックイーン
(以下続く)

学習

yusuketomotoさんのコードを一部だけ修正して学習します。

修正した点

  • 単語単位で入力するのではなく文字単位で入力する
  • 名前の最後に終端記号 <eos> を挿入し、これも入力する

学習のコードはこちらです。 github.com

学習時間は手持ちのGPUなしのMacBookProで50分ちょっとでした。 epoch数を始めパラメータはチューニングせずにとりあえずそのまま使いました。

名前の生成

学習した結果を使って生成してみます。

オリジナルのコードから修正している点は

  • <eos>が出力されたら改行コードに置き換えて出力

だけです。

1epoch後の学習データから生成してみると、、

$ python sample.py --vocabulary data/umaname/vocab.bin --model cv/charrnn_epoch_1.20.chainermodel

ドキドキ、、

ポィー
コンモカッゴード
エンボラータンド
コシャンシィード
ジァブナンシュベ
ダイシッハーブゲ
ダイキビビィ
フメボシャタブウス
マエンジィニスアイ
アインチルダントス
スエーショモンダ
ホイナードフロム
スロフミニント
トサトフリクテケリー
(以下、続く)

おぉ、なんとなく馬の名前っぽい (^^)

さらに学習してみます。 50epoch学習した後で以下のように生成されました。

シタ
メジロモスカル
コスモフローラ
アカネホール
タイコウ
フジノフェアリー
メイショウドナバブ
ラウンドストール
ミサフルチャペル
トウショウコラント
トウショウタキフ
イデルスユー
ダークストーリー
トーセンミューター
(以下、続く)

「トウショウ」や「トーセン」といったおなじみの冠名も再現されてます。より馬名っぽくなりました!

成功です。ヾ ( ´ ρ ` ) ノ

デモサイト

こちらにあります。

https://tanakatsuyo-umaname-generator.herokuapp.com/

「Get one」ボタンを押すとコンピュータが生成した名前をランダムで表示します。 仮想の馬名を使いたいけど考えるのが面倒だというシチュエーションで役立つと思います。。

新ももたろう

むかしむかし、あるところに、おじいさんとおばあさんが住んでいました。

のおなじみのフレーズで始まる日本昔ばなし「桃太郎」。

通常ならば「おじいさんは山へ柴刈りに、おばあさんは川へ洗濯へ」となりますが、 最近、4歳になったばかりの息子に「おばあさんは山へ柴刈りに、おじいさんは川へ洗濯へ」と ストーリーを変えてその後のストーリーも即興で作りながらしゃべってあげました。

4歳ともなると、通常の「桃太郎」のストーリーは知っていて通常とのギャップも理解でき、これが意外とうけました。

ちなみに、おじいさんは川へ洗濯へ行って流れてきた桃を拾おうとしたら流されてしまいました.. という展開をしました。。

ストーリーを即興で作るのはなかなか大変ですが子どもにも受けるし、自分にとってもちょっとした頭のトレーニングになります。引き続きやってみようと思います。

家を建てたのでウォークスルーできるバーチャルツアーを作ってみた

この秋、念願のマイホームを建てました。 ビルダーは「やまけん」の愛称で親しまれている山下建設さん。 限られた予算の中、担当者とあれやこれやと知恵を出し合ってこだわりを詰め込むことができたので大変満足しております。

で、せっかく家を建てたので我が家をウォークスルーできるバーチャルツアーを作ってみました。 その方法をご紹介します。

作ったバーチャルツアー

こちらからご覧ください。 https://momonoki.blob.core.windows.net/content/tsujido-vtour/index.html

必要なもの

  • 360°動画
  • krpano: パノラマ静止画からバーチャルツアーを作成するのに使う
  • ffmpeg: 動画を静止画に変換するのに使う
  • ruby: ゴニョゴニョ計算するのに使う

360°動画を撮るには

360°動画を撮るには専用のカメラが必要です。 本格的に撮影するにはGoProなどのアクションカメラを複数台使った大掛かりな装置が必要で、また複数台のカメラの映像を合成する専用ソフトも必要となります。

www.panoplaza.com

今はVRブームを追い風にワンタッチでお手軽に撮影できるカメラもいろいろ出てきています。 私はRICOHさんのTheta Sを前職のカディンチェさんから借りました。。

theta360.com

価格は38,000円前後のようです。 私はコネで借りることができましたが自分で買うとなると少し躊躇しますね。。

使ってみましたが本当に簡単に360°動画を撮ることができて驚きです。 時代の進化を感じます。

撮り方

ヘルメットにミニ三脚をガムテープで固定し、三脚にTheta Sを取り付けしました。 カメラを目線の位置に合わせたかったので目線の高さにレンズがくるように中腰で歩き回りました。 引き渡しの日に撮影をしましたが家族を含めみなさんの視線が痛かったです。。

<機材の写真>

f:id:sanshonoki:20161210141518j:plain:w200

当然ながら端末のボタンを正確に操作できないのでリモコンアプリをGoogle PlayストアAppStoreからインストールしてリモコン経由で録画操作を行いました。

私はガムテープで超手抜きでやってしまいましたがヘッドマウントのやり方はいろいろあるようです。

カニ歩き

映像からカメラの回転を検知するのが困難なのでカメラの向きを一定方向にすべくカニ歩きで撮影します(何とかしたい)。 後ろ向きの移動は危険も伴うので何度か予行練習が必要です。

<イメージ図>

f:id:sanshonoki:20161210064819p:plain:w300

360°動画ファイルへの変換

Theta Sで動画撮影した場合は全天球を左右に並べた映像になっていて(前面と後面の2つのカメラの映像が並んでいるだけ)このままではパノラマ映像として使えませんのでエクレクタンギュラー形式という映像フォーマットに変換する必要があります。 エクレクタンギュラー形式と言うと難しく聞こえますが小学校で習った世界地図のメルカトル図法みたいなイメージです。

Thetaのサイトから専用PCアプリをダウンロードして変換します。 アプリケーションを起動して撮影したmp4ファイルをドラッグ・アンド・ドロップするだけで変換できます。

変換前

f:id:sanshonoki:20161210060242j:plain:w600

変換後

f:id:sanshonoki:20161210060226j:plain:w600

バーチャツアー化ツール

自作のツールでバーチャルツアー化しました。 パノラマ画像の変換エンジンとしてkrpanoを使います。krpanoはライセンスに129€かかりますがフリーでも使うことができ、その場合はwatermarkがつきます。 基本的に自動的にコンテンツ生成まで行いますが歩いたルートを記述した設定ファイルは事前に手で地道に書く必要があります。他にもデフォルトの視点向きなどは手動で設定調整する必要があります。

この辺は改善、省力化していきたいですが今のところこれといった良いアイディアが思い浮かんでいません。。

ツールはGithubにあげていますのでもし興味があれば覗いてみてください。改善、改造歓迎です。

github.com

いろいろこだわった家の各所については振り返りながらおいおい紹介していこうと思います。