ふたくちおとこ

クチート大好きな私が、主にポケモンやボドゲに関して書くブログ

ポケモン第八世代についていろいろ予想してみる

みなさまこんにちは。さっちんです。

昨日、初代ポケモンの発売日にPokémon Directが放送されましたね。 リアルタイムでワクワクしながら見させて頂きました。

多くの方が色々な予想をされているので、私も記事を書いてみようと思います。

2019/02/27時点の情報

昨日発表された内容は以下です。

  1. タイトルはポケモンソード・シールド
    • 公式の略称は「剣盾」
  2. ガラル地方
    • 穏やかな田園風景、近代都市、雄大な草原、険しい雪山など色々な表情を持つ地方
    • 人間とポケモンが協力して産業を発展させている
  3. 御三家
    • 好奇心旺盛でやなちゃな、小(木?)ザルポケモン「サルノリ」
    • 元気いっぱいで走り回る、うさぎポケモン「ヒバニー」
    • ちょっぴり臆病で水に隠れて狙い撃つ、ミズトカゲポケモン「メッソン」
  4. 主人公はジムをめぐり、チャンピオンを目指す
  5. 最強のポケットモンスターがテーマ

予想

では、上記を踏まえて2019/02/28時点での予想をしていきましょう。

タイトル

タイトルから予想できるといえば、伝説のポケモンでしょう。 剣と盾がモチーフになるということは言わずもがなですね。

タイプを考えると、剣は「はがねタイプ」のイメージが強いですね。 盾は「はがねタイプ」以外にも、いわ、じめん、くさなどがあるでしょうか。 タイトルのバックにあるエンブレムに注目すると、どちらも狼の頭のようなデザインになっています。 なので、ドラゴンタイプがつくということは無さそうな印象です。

私はバトルが好きなので、種族値も気になります。素直に剣は攻撃・特攻が高いアタッカーで、盾は防御・特防が高い受けポケモンになるか、あるいは…?といったところでしょうか。

ガラル地方

おそらくイギリスがモチーフでしょう。ヒルフィギュアの丘っぽいマップがあったり、ビックベンのような建物もありましたし、主人公の家がコッツウォルズの風景に似ています。 以前からイギリスになると噂されていましたが、それが当たりましたね。 サッカー大国ということで、主人公がサッカーユニフォームを着てフィールドに歩いていく様子が映像の中にありました。

カロス地方に近いということで、関連性が気になりますね。 AZが話していた3000年前の戦争相手がガラル地方だったりするのでしょうか? メガストーン、キーストーンという資源が戦争の発端だという説もあるので、第八世代でメガシンカポケモンが増える可能性があるかもしれません。

  • 20190304追記
    • メルメタルの図鑑にも3000年前というキーワードが出てるんですね。関連があるかもしれません。

御三家

ここは最終進化を考えていきましょう。

日本語 日本語の由来 英語 英語の由来 フランス語 中国語
サルノリ サル+ノリノリ Grookey groom+monkey(グルーミング、サル) Ouistempo 敲音猴
ヒバニー 火+バニー Scorbunny score+bunny(スコア、うさぎ) Flambino 炎兔兒
メッソン メソメソ+ Sobble sob+bubble(すすり泣く、泡) Larméléon 淚眼蜥

※由来はツイッター上で噂されている情報をまとめたものになります。

  • サルノリ
    • 映像で木の棒をリズムよく叩いていたり、ノリノリ、グルーミングと音を連想させるワードが並んでいるので、音技を色々と覚えそうですね。
    • タイプはくさ・かくとうのイメージが強いですね。
    • ということで、体格が大きいゴリラに近い最終進化と予想します。
  • ヒバニー
    • 一番情報が少ないのはこの子な気がします…。
    • 素早さの種族値は高くなりそうですね。
    • タイプは、ほのお・かくとう、または、ほのお・フェアリーと予想しましょう。
  • メッソン
    • 映像で透明になったり(擬態かな?)しているので、カクレオンと同じように変色・変幻自在が隠れ特性になるでしょうか。
    • みず単タイプになりそうな予感がします。
    • オオサンショウウオのような四足歩行の最終進化と予想します。

旅の目的

主人公はジムをめぐり、チャンピオンを目指すと明言されたので、従来のジム制に戻ったようです。 アローラの試練も嫌いではなかったのですが…。 ここは大きな変化はなさそうです。

テーマ

最強のポケットモンスターがテーマということで、新要素がありそうなお話でした。 第6世代でメガシンカ、第7世代でZ技が出てきたので、バトルにおける新要素の可能性が一番高いと思われます。 あとは産業が強く押し出されているので、「武器・防具をもたせる」があるかもしれません。(タイトルともマッチしますし。) 武器・防具をもたせることで、5つ目の技が使えたり、特性が強化されたり、バトル中に特性が変わったりするなどはありそうですね。 新タイプの追加はない気がしていますが、相性の整理はあるかもしれません。

  • 20190304追記
    • アーマー進化のリークがあったんですね。知りませんでした…。ブラック・ホワイトキュレム、日食・月食ネクロズマのような感じになるのでしょうか?

その他

  • イーブイの進化系が増える
    • 1世代おきに出ているので、あると思います。
    • どく、ひこう、ゴーストのいずれかの可能性が高いと睨んでます。

まとめ

今回は第八世代の内容を予想してみました。 予想というよりは、頭に浮かんだことをメモしたような感じになってしまいましたが…。 情報があらかた解禁された頃に答え合わせをしようと思います!

p.s. ほのお御三家が背負っている、「ほのお・かくとう二足歩行」という伝統は今作も続くのでしょうか?個人的には、「ほのお・フェアリー四足歩行もふもふ」になると期待したいところです。

SSD + Keras でクチート認識するぞ。モデル作成編

みなさまこんにちは。さっちんです。

最近PokemonGOを再開しました。リリース後1ヶ月位しか遊んでいなかったのでクチートを捕まえていませんでしたが、最近はレイドバトルばかりを探してクチートをお出迎えしています。

さて、今回は画像認識のお話です。前回の記事で、ポケモンの選出画面を画像認識することでパーティーを簡単に登録できるようにする試みがあることをご紹介しました。 これを実現するためには、画像のどの箇所にどのポケモンが写っているかを判定する必要があります。

私もパーティー記録ツールを作りたいなと思っていましたので、勉強のため、まずクチートを認識するモデルを作ってみようと決心しました。以下で、モデル構築までの手順を記載していこうと思います。

下記に今回の記事で説明するコードを置いていますので、適宜参照してください。 github.com

利用する手法

リアルタイムに物体検出したかったので、SSD(Single Shot Multibox Detector)を利用しました。 以下のgithubレポジトリが広く使われていたので、私も下記を利用しました。

github.com

手順

手順は以下になります。

データの準備

まずは画像を用意します。「ワシのクチート画像は百八式まであるぞ」ということで、 秘蔵のクチート画像フォルダから108枚の画像を選出してきました。

まずは、画像のどこにクチートが写っているのかという教師データを作成する必要があります。 今回、以下のサイトを参考にさせて頂き、AnnotationTool.exeを利用しました。 このツールを利用して、108枚すべての画像に手作業で丁寧にアノテーションしていきます。 すると、108個のxmlファイルが生成されます。

arkouji.cocolog-nifty.com

次に、画像のData Augmentationで画像を増やしていきます。 image_augmentation.ipynb が、Data Augmentationを実施しているコードになります。 ガウシアンノイズやソルトペッパーノイズを付与したり、画像を白黒化したりして、 1つの画像から6枚の画像を生成しています。これにより、108枚の画像が756枚になりました。

最後に、xmlファイルをonehot表現に変換して、pickle形式で出力します。 create_mawile_pkl.py の中にある _to_one_hot(self, name) で判定したいクラスを定義しているので、ここを編集します。 (今回は、44行目に書かれていたaeroplaneという文字列を、アノテーションで付与したラベルと同じ文字列 kucheat に変更しました。)

以上で、データの準備は完了です。

コーディング

詳しい説明は上記の参考資料を参照してください。下記のソースコード群が学習に利用しているソースコードになります。

training.ipynb
ssd.py
ssd_layers.py
ssd_training.py
ssd_utils.py
kucheat_training.py

training.ipynb を実行すると、学習が始まります。 特にカスタマイズしていないPCだと、かなり時間がかかりますので、下記にAWSを利用する方法を記載します。

クラウドで学習環境を構築する

お安くするため、スポットインスタンスを活用した構築方法を記載します。 (最近、Amazon SageMakerという便利なサービスが登場したので、そちらを利用しても良いかもしれません。)

インスタンスの作成

まず、EC2インスタンスを作成して、SSHで接続します。

  • ステップ1
    • AMI:AmazonLinux2を選択
  • ステップ2
    • GPU コンピューティング: p2.xlargeを選択
  • ステップ3: インスタンスの詳細の設定
    • スポットインスタンスのリクエストにチェックを入れる
    • 最大価格の設定
      • 現在の価格という欄が現れて、ap-northeast-1a:$0.4626といった情報が表形式で表示される
      • この表示価格より高い金額を設定する
        • 上記の場合、0.5だとエラーとなり、0.6でうまく作成できたので、ギリギリを攻めすぎるとダメかも
  • セキュリティグループの8000を許可
  • 作成されたインスタンスのグローバルアドレスにSSHする

環境の構築

下記のコマンドを実行していきます。

[ec2-user@ip-x-x-x-X ~]$ sudo yum -y upgrade
[ec2-user@ip-x-x-x-X ~]$ sudo yum -y install git tmux emacs gcc gcc-c++ python-setuptools python-devel 
[ec2-user@ip-x-x-x-X ~]$ sudo git clone https://github.com/yyuu/pyenv.git /usr/bin/.pyenv
[ec2-user@ip-x-x-x-X ~]$ cd /usr/bin/.pyenv
[ec2-user@ip-x-x-x-X ~]$ sudo mkdir shims
[ec2-user@ip-x-x-x-X ~]$ sudo mkdir versions
[ec2-user@ip-x-x-x-X ~]$ sudo chown -R ec2-user:ec2-user /usr/bin/.pyenv
[ec2-user@ip-x-x-x-X ~]$ vi ~/.bashrc

# 下記を末尾に追記
# from
export PYENV_ROOT="/usr/bin/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
fi
# to

[ec2-user@ip-x-x-x-X ~]$ source ~/.bashrc
[ec2-user@ip-x-x-x-X ~]$ pyenv install --list

ここまで実行して、ズラッと一覧が表示されればOKです。 上記の一覧からanacondaの最新バージョンを確認します。私の場合は3-5.2.0 が最新だったので、それをインストールします。

[ec2-user@ip-x-x-x-X ~]$ pyenv install anaconda3-5.2.0
[ec2-user@ip-x-x-x-X ~]$ pyenv global anaconda3-5.2.0
[ec2-user@ip-x-x-x-X ~]$ python --version

ここで、Python 3.6.5 :: Anaconda, Inc. と表示されていればOKです。 残りのライブラリをインストールしていきます。

[ec2-user@ip-x-x-x-X ~]$ conda install keras
[ec2-user@ip-x-x-x-X ~]$ conda install tensorflow
[ec2-user@ip-x-x-x-X ~]$ conda install -c conda-forge jupyterhub
[ec2-user@ip-x-x-x-X ~]$ cd /home/ec2-user/
[ec2-user@ip-x-x-x-X ~]$ mkdir jupyterhub
[ec2-user@ip-x-x-x-X ~]$ cd jupyterhub/
[ec2-user@ip-x-x-x-X ~]$ jupyterhub --generate-config
Writing default config to: jupyterhub_config.py
[ec2-user@ip-x-x-x-X ~]$  vi jupyterhub_config.py
# 下記を書き換える
#c.Spawner.notebook_dir = ''"
c.Spawner.notebook_dir = '~/notebook'

[ec2-user@ip-x-x-x-X ~]$ sudo passwd ec2-user
[ec2-user@ip-x-x-x-X ~]$ sudo reboot

再起動するまで待ち、再びSSHします。

[ec2-user@ip-x-x-x-X ~]$ jupyterhub -f /etc/jupyterhub/jupyterhub_config.py &

これでJupyteが動きます。インスタンスIPアドレス:8000にWebブラウザからアクセスするとjupyterhubのログイン画面が表示されます。 ec2-userでログイン(パスワードは上記で設定したもの)できたらOKです。

レーニングの実行

まずはソースコードをダウンロードします。

[ec2-user@ip-x-x-x-X ~]$ git clone https://github.com/sacchin/mawile_ssd_keras.git
[ec2-user@ip-x-x-x-X ~]$ cd mawile_ssd_keras/
[ec2-user@ip-x-x-x-X ~]$ git checkout add_training_code

用意した画像とxmlファイルをzipファイルにまとめて送信します。

[ec2-user@ip-x-x-x-X ~]$ mv /home/ec2-user/images.zip /home/ec2-user/mawile_ssd_keras/data
[ec2-user@ip-x-x-x-X ~]$ cd /home/ec2-user/mawile_ssd_keras/data
[ec2-user@ip-x-x-x-X ~]$ rm images/ -r
[ec2-user@ip-x-x-x-X ~]$ unzip images.zip

再びjupyterhubにログインして、kucheat_training.py を開きます。 下記を任意の値に編集します。

* 211行目: batch_size = 10
* 260行目: nb_epoch = 50
* 269行目: nb_worker = 1

その後、jupyterにある training.ipynb を開きます。 2行目までを実行すると学習が始まります。 最終結果が /home/ec2-user/mawile_ssd_keras/data/weights に、途中の結果が /home/ec2-user/mawile_ssd_keras/data/checkpoints に格納されたら成功です。

画像の判定

jupyterにある、 predictor.py を開きます。 こちらも9行目までを実行すると、画像を認識します。

f:id:sacchin13:20181101172724p:plain

学習の画像を増やしていくと、この判定の精度が向上していきます。

まとめ

今回は、SSD + Keras でクチートの画像認識するモデルを学習する流れを説明しました。 バッチサイズを10で実行すると、1つのEpochが30分くらいました。数百円くらいの出費でした。 この辺のノウハウが無くて、もっと早く安くする方法あるのか分かっていないので、誰か教えて頂けると嬉しいです!

p.s. Let's Go ピカチュウ予約しました。オリジナルコースターを貰うため、ノジマオンラインを選んでおります。

ポケモンデータ分析学会できるのでは?

みなさんこんにちは。さっちんです。

最近はダンジョンメーカーに手を出してしまい、非常に時間を盗まれております。 ポケモンが好きな人は多分ハマると思いますので、ぜひともオススメします。

さて、今回はポケモンに関する分析記事を集めてみました。 私自身も分析するのですが、下記にもある@poke_odanさんの記事を見つけて、「同士が多いのでは?!」と思ったのがきっかけです。 みんなどんどん分析して学会開きましょう。温泉街とかで。

ということで時間順に並べてみました。

2016/12/23

haripo.com

LDAトピックモデルの「文書」と「単語」の関係性を「ポケモン」と「技」に置き換えて分析しています。 ポケモンが覚える技リストをデータセットとしてモデルを作ることで、技のタイプが強く関連しているトピックや爪や剣のような特徴を捉えたトピックなどを発見しています。 「文書」と「単語」の関係性を「ポケモン」と「技」に置き換えたところがミソだと感じました!

2017/03/04

qiita.com

ポケモン対戦のログを取るために、画像処理をしたという記事です。 対戦中に相手のパーティを見返すために写メを撮るのは、レート対戦したことがある人は覚えがあるでしょう。 この写メを収集することでどんなパーティが流行っているのか分かるので、助かる人も多いと思います。

この研究分野?は非常に課題意識があり、多く人が研究していました。 私も興味ある分野なので、次やるとしたここかなぁ。

2017/09/26

sacchin13.hatenablog.com

私の過去記事です。かえんほうしゃ - ほのお + みず = ハイドロポンプ を実現させたいというモチベーションのみでやりました。 一部、特徴を捉えてベクトル化できていたので満足しています。(もうちょっとデータセットをキレイにしても良かったとは思っていますが…。)

2017/12/10

rautaku.hatenablog.com

ポケモンAとBが戦ってどちらが勝つか?を予測した記事になります。 種族値の差やタイプ相性など、どの因子が勝率に貢献しているのかを見ています。

ランダムフォレストが一番精度良くなったそうで、素早さ種族値が一番勝率に貢献しているようです。 データからみても、やはり素早さは重要のようですね。

2018/03/26

qiita.com

こちらも非常に面白いアイデアでした。 あるポケモンの画像を与えたときに、勾配ブースティング決定木を利用してそのポケモン種族値を予測しています。 結果は芳しくなかったようですが、画像からタイプを予測するなど、いろいろ流用できそうな気がしました。

2018/04/08

odanpoyo.github.io

私の過去記事は技に注目していましたが、こちらはパーティに注目してword2vecを活用した記事でした。 Pokémon Showdown(オンライン上のポケモン対戦シミュレータ)から対戦に使われたパーティを抽出して、ポケモンの役割をベクトル化するという試みでした。対戦経験者も納得するような結果が得られています。

コメント欄の議論も良く、「水タイプ+地面タイプ+鋼タイプ+メガシンカポケモン+残り2匹でパーティーが構成されている」のような解釈がされたりしていました。

2018/06/26

www.hands-lab.com

種族値からタイプを予測するという問題を、ロジスティック回帰で取り組んだ記事でした。 87%の精度で判定することができたということで、種族値からタイプを予測できるんだという新たな発見がありました。 ポケモン自体の知識が必要という考察も非常に共感しました。

まとめ

今回はポケモンのデータ分析に関する記事を一覧化しました。 ちょっと探しただけでこれだけ見つかったので、まだまだ多くの方が分析していると思います。 定期的にサーベイしているので、また集まったら公開したいですね。

p.s. 百ポケ夜行のクチート可愛すぎて、めっちゃグッズ買ってしまった。

ポケモンのデータセットを公開しました。

みなさんこんにちは。さっちんです。

最近はモンスターハンターワールドやっていました。初めてのモンハンでしたが、めちゃくちゃ良かったです。シリーズで数千時間やる人がいるのも頷けます。

さて、今回は第7世代までのポケモンのデータを分析に使いやすい形に整形しました。下記のレポジトリで公開していますので、必要な方はどうぞ。

github.com

[2018/5/08 追記] Kaggleに投稿しました。

Pokemon with stats. Generation 7 | Kaggle

データ定義

列名 詳細
No 図鑑番号です。
Japanese 日本語名です。
English 英語名です。
German ドイツ語名です。
French フランス語名です。
Korean 韓国語名です。
Simplified Chinese 中国語の簡体字での名前です。
Traditional Chinese 中国語の繁体字での名前です。
Generation 初登場した世代です。
Form フォルムチェンジ、メガシンカゲンシカイキなどの名前です。
H HPの種族値です。
A 物理攻撃の種族値です。
B 物理防御の種族値です。
C 特殊攻撃の種族値です。
D 特殊防御の種族値です。
S すばやさの種族値です。
Ability1 1つ目の特性です。
Ability2 2つ目の特性です。
Ability3 隠れ(夢)特性です。
Type1 1つ目のタイプです。
Type2 2つ目のタイプです。
Weight 体重です。
Evolve Flag 最終進化系である場合1を、そうでない場合0を割り当てています。

利用例

下記のように、いくつかお試しで分析して見ました。参考にして頂ければ幸いです。

まとめ

簡単になりましたが、分析しやすいポケモンのデータセットとお試し分析について記載しました。 暇を見つけてKaggleにもあげたいと思います。

p.s. Switch版のポケモンの期待が高まる…。

ビビリS+が実践している、ガチアサリで勝てるようになる方法

みなさんこんにちは、さっちんです。

年末も近いですが、まだまだスプラトゥーンを楽しみたいと思ってる今日この頃です。さて、今回はスプラトゥーン2の201712月時点のガチアサリの基本的な戦略について書いていこうと思います。

私自身が敗北を極力減らすことで勝率を上げるタイプなので、消極的な戦略と感じる方も多いと思います。また、ガチパワーが1800~1900で実践している戦略なので、それ以外では通用しないかもしれないということを前置きとさせて頂きます。

(ちなみに今は、A帯1800~1900, A-帯1700~1800, C帯1300くらいの感じです。)

全ルール共通の考え方

まず、FPSでよく言われる「オブジェクトに絡む行動」が防衛につながります。 ガチエリアであればエリア(床)、ガチヤグラであればヤグラ、ガチホコであればホコ、ガチアサリであればアサリとゴールがオブジェクトです。 スプラトゥーンにおける「オブジェクトに絡む行動」とは、

  • これらを塗る
  • これらのカウントを進める
  • これらをキープする
  • 相手からこれらを奪う

ことだと考えてください。 裏取りを嫌う人がいるのは、裏取りをするとオブジェクトに絡む行動ができなくなるためです。 (私もあまり裏取りしない派です。)

ガチアサリ

まずは、逆転負けを減らす

今日までプレイしていて一番気になったのは、逆転で勝敗が決まることが多いことです。 勝つにせよ負けるにせよ、逆転の発生する率が他のルールよりも非常に多いです。 これは、防衛方法が確立されていないことが原因だと思われます。

他のルールであれば、ゲームの終了間際に優位チームが負けないためにする行動が概ね固まってきています。

  • ガチエリア
    • エリアと相手チームのリスポーン地点の間まで前線を進めて、そもそも相手をエリアに到達させないように戦う
  • ガチヤグラ
    • 相手がヤグラから降りざるを得ない状況を作り、その間にヤグラを奪う。例えば、ボムをヤグラに載せる、ハイパープレッサー、マルチミサイル、スーパーチャクチ、イカスフィアを使うなど
  • ガチホコ
    • ホコを持って自陣に引きこもる

しかし、現時点のガチアサリにおいて、終了間近にこれをすればゲームを終わらせることができるという行動が確立されていません。 これにより、逆転という状況が生まれやすくなっていると思います。

私が実践している方法としては、

  • 相手のガチアサリ持ちを倒す
    • 倒した後に、そのガチアサリが消滅するのを見守るまでが大事です
  • フィールド上のアサリを専有する
    • アサリ拾い、自チームのガチアサリを作り、自陣に投げる。またアサリを拾って…を繰り替えすことで専有できます

これらを実施することで、逆転されることが少なくなります。

相手の「追いアサリ」を止める

ガチアサリでバリアを破った後に、アサリを投げ入れることを「追いアサリ」と個人的に呼んでいます。 この追いアサリこそ、ガチアサリで最も注意するべき行動です。

破ったバリアは一定時間経過すると復活しますが、「追いアサリ」をされると、その時間が延長されます。 一度バリアを破られた後、何度も「追いアサリ」をされて、そのまま負ける…。ということを、みなさんも経験したことがあると思います。

ガチアサリを止めるのも大事ですが、この「追いアサリ」がなくなるまでバリアを守り続けることが重要です。

自陣のアサリは回収する

当たり前のように思う方もいると思いますが、非常に重要なことです。 自陣にアサリが残っていると、以下のようなリスクが発生します。

  • ゴール近くで相手がガチアサリを作ることができる
  • 追いアサリの数が飛躍的に増える

アサリを2つしか持っていない敵に、アサリを4つ以上持っている味方が倒され、落とした4つと自然湧きした4つを拾われ、そのままシュートとなる場面すら発生してしまいます。

このようなことにならないように、自陣のアサリはできるだけ拾いましょう。

まとめ

今回は、現時点で私が考えるガチアサリの勝ち方をご紹介しました。 ガチホコが初登場したときも、ガチヤグラに比べて非常に戦略を求められるルールが来たなぁと思っていましたが、 まさか、それを遥かに上回るガチアサリというルールが登場するとは…。驚きましたが、非常に研究しがいのあるルールだなと感じています。

以上、Splatoon Advent Calendar 2017の23日目の記事でした。

adventar.org

p.s. パブロがガチアサリに適正あることは間違いないですが、ただ使うだけでは勝てないのでご注意を。

甘党が考える、コーヒーと最高に相性が良いお菓子

みなさんこんにちは。さっちんです。

みなさん、コーヒーはお好きでしょうか?インスタント派、缶コーヒー派、スタバ派、自宅で豆挽いて淹れる派など多くの流派があるように、コーヒーを飲む方は多いと思います。かくなる私も、自宅で豆挽いて淹れる派のコーヒー党です。今日は、そんな自宅で豆挽いて淹れる派向けに美味しいお菓子を紹介していきましょう。

コーヒーのお供としてのお菓子

多くの場合、お菓子が主役でそれに合わせてコーヒーが選ばれます。例えば、「コース料理のデザートにケーキを食べるからコーヒーにしようかな…」というのがそれです。しかし、「このコーヒーを飲みたいから、このお菓子を用意しよう。」というコーヒー主役の選び方もあるでしょう。そこで、私が日頃「このコーヒーのお供にはこのお菓子を食べる!」と考えていることをご紹介します。

(※コーヒーはブラックで飲むことを前提としています。)

あっさり酸味があるコーヒを飲む時

あっさり酸味がある豆のコーヒーの場合、甘みが強いお菓子が良いです。

Lotus

まずは、コーヒーのお供で有名なLotusです。

カルディコーヒーファームなどで売っているため比較的手に入れやすく、個別包装されてるのもGood。 硬めのビスケットがホロホロ崩れる感じの食感です。

MOOMLIGHT

次に、森永のMOOMLIGHTです。

森永製菓 ムーンライト14枚×5箱

森永製菓 ムーンライト14枚×5箱

スーパーやコンビニで売ってるので、いつでも手に入ります。 王道のバタークッキーという感じで、甘みが強く、あっさりコーヒーと良く合います。 机の上に常備しておきたいものです。

極細Pocky

最後は、グリコの極細Pockyです。普通のPockyではダメです。

これもスーパーやコンビニで売ってるので、いつでも手に入ります。 普通のPockyがダメと言うのは冗談ですが、極細Pockyのほうが1本あたりが少量なので食べやすく、コーヒーが良く進みます。 また手が汚れないので、PC作業中のコーヒーのお供としても優秀です。

コクあり苦味があるコーヒーを飲む時

コクあり苦味がある豆のコーヒーの場合、甘み控えめのお菓子が良いです。

MARIE

またしても森永のビスケットです。

森永製菓 マリー21枚×5箱

森永製菓 マリー21枚×5箱

こちらはMOONLIGHTに比べて甘さ控え目であるため、そのまま食べると甘党には物足りなく感じます。 しかし!濃いコーヒーを飲んだ後に食べると甘さが際立ち、お口もリセットされるためコーヒーが進み、またビスケットを食べ…と良い感じのループになります。1箱に入っている枚数が多いのも良し。

MAUNALOA

最後はマカダミアナッツの塩味です。

基本的にコーヒーのお供には甘いものを選ぶのですが、このナッツは例外です。 コーヒーに合うしょっぱさを持ったお菓子は珍しいので、一度は食べてみることをオススメします!

まとめ

今日は、コーヒーを主役としたときに、どのようなお菓子を選ぶかをご紹介しました。 コーヒーのお供を真剣に考えることで、コーヒーをより楽しめるようになると思いますので、色々試していきましょう!

以上、8日目の記事でした。 adventar.org

p.s. 普段はポケモンの記事を書いているので、クチート好きな方は是非に~。

かえんほうしゃ - ほのお + みず = ハイドロポンプになるか?

みなさんこんにちは。さっちんです。

ポケモンに関する文章を使ってword2vecをやってみたので、今回はその結果をお見せしたいと思います。 ソースコードと学習データは以下に置いています。 github.com

最近の流行?!、「単語と単語での計算」

タイトルを見て興味を持った方は、word2vecってなんだ???となると思いますので、簡単にご説明します。 最近、AIや人工知能という単語がニュースなどで取り上げられるように、IT業界ではAIや人工知能が非常にホットな話題となっています。 その文脈の中で、文章も人工知能で分析してやるぜ!という試みが流行しており、word2vecはその中の一つの手法です。

word2vecのイメージを具体的にするために、非常に有名な例を挙げたいと思います。 それは…

王様 - 男 + 女 = 女王様

です。

つまり、文章で「王様は男性における地位の名称ですが、王様と同様の意味を持つ女性における地位の名称は何でしょうか?」と表現される質問を計算式で表したものになります。このように、「単語同士で計算ができるようになったら、人工知能に文章を理解させる手助けになるんじゃね?」という発想で生まれた手法です。

ポケモンでword2vecしたい

難しい話はこのくらいにして、本題に移りたいと思います。 単語同士が計算できるとなると、ポケモン好きな皆様におかれましてはポケモン用語でもやってみたいと思うのではないでしょうか? それが今回のタイトルである「かえんほうしゃ - ほのお + みず = ハイドロポンプになるのか?」に帰着するわけです。

そこで今回は、ポケモンWiki*1ポケモン対戦考察まとめWiki*2の記事を学習させてみました。それでは結果を見ていきましょう。

単語自体の計算結果

まずは単語そのものを見ていきましょう。指定した単語と関連の強い単語のトップ10が表示されます。 横にある数値は関連度になります。

さっそく、我らがメガクチートを計算してみましょう。

calc("メガクチート")

  1. バンギラス 0.9744253754615784
  2. テッカグヤ 0.9737641215324402
  3. 一      0.9579521417617798
  4. メガギャラドス 0.9565474987030029
  5. 喰らう     0.9561516046524048
  6. カイリュー   0.9555752277374268
  7. マンムー    0.9530206918716431
  8. 舞       0.9496548175811768
  9. メガハッサム  0.949008584022522
  10. てる      0.9439014792442322

クチート一緒にパーティへ入ることの多いカイリューマンムーがトップ10に入っています。 舞は「つるぎのまい」のことですね。


続いてパーティの名称である雨パを計算しました。

calc("雨パ")

  1. 独自 0.9668172597885132
  2. ペリッパー 0.9622671604156494
  3. 個性 0.9604281783103943
  4. 化す 0.9601962566375732
  5. 充実 0.9588289260864258
  6. 使い 0.9584391117095947
  7. あめふらし 0.9568397998809814
  8. あくタイプ 0.9563978314399719
  9. 多芸 0.9530139565467834
  10. 無類 0.9518377184867859

7世代で雨パで採用されることが多いペリッパーや、雨パに欠かせない特性のあめふらしが入っていますね。


続いてタイプのフェアリーを計算。

calc("フェアリー")

  1. 倍 0.9322121143341064
  2. 一貫性 0.922793984413147
  3. 格闘 0.9219501614570618
  4. ゴースト 0.9165294170379639
  5. 相性補完 0.9136119484901428
  6. ドラゴンタイプ 0.9095576405525208
  7. 地面 0.9079031944274902
  8. 4倍弱点 0.9013127088546753
  9. 4倍 0.8987537622451782
  10. 強い 0.8973758220672607

フェアリーに弱点を突かれる格闘やドラゴンという単語が入っています。 4倍弱点はサザンドラやジャララガン、ズルズキンゴロンダあたりの記事が効いてるのでしょうか?


次は性格のおくびょう。

calc("おくびょう")

  1. ひかえめ 0.9599519371986389
  2. CS 0.9132525324821472
  3. こだわりメガネ 0.9035917520523071
  4. 基 0.8862846493721008
  5. 冷静 0.8780158758163452
  6. 性格 0.8219131231307983
  7. せっかち 0.8143517374992371
  8. 努力値 0.8130760192871094
  9. ハイドロポンプ 0.8049198389053345
  10. ムーンフォース 0.8013639450073242

これは素晴らしいですね。おくびょうと同じように特殊アタッカーに採用されるひかえめ、冷静がランクインしています。 また、努力値の振り方であるCSという単語や持ち物であるこだわりメガネも入っています。


calc("きあいのタスキ")

  1. カムラ 0.9162214398384094
  2. 持ち物 0.8896895051002502
  3. ラム 0.8842946290969849
  4. 蜻蛉返り 0.8831953406333923
  5. クリスタル 0.8821411728858948
  6. 優先 0.8816790580749512
  7. ジュエル 0.8660957217216492
  8. 選択 0.8502988219261169
  9. がんせきふうじ 0.8499913811683655
  10. なげつける 0.8491314649581909

きあいのタスキだと、同じ持ち物であるカムラのみやラムのみ、Zクリスタル、ジュエルが関連の強い単語として挙げられています。 とんぼがえりはタスキ潰しによく使われるからでしょうか?


さて、それでは技を見ていきたいと思います。

calc("じしん")

  1. ストーンエッジ 0.9791466593742371
  2. ぢ 0.9695087671279907
  3. いわなだれ 0.9539787173271179
  4. れいとうパンチ 0.9350066184997559
  5. すてみタックル 0.9336516261100769
  6. かみくだく 0.9321756958961487
  7. アームハンマー 0.9284919500350952
  8. アイアンヘッド 0.9270839095115662
  9. かみなりパンチ 0.9270591139793396
  10. どくづく 0.9257274270057678

じしんを計算すると、物理技ばかりが列挙されました。 また、じしんと同時に採用されやすいストーンエッジいわなだれが上位に入っています。


最後にかえんほうしゃを見たいと思います。

calc("かえんほうしゃ")

  1. あくのはどう 0.9866007566452026
  2. れいとうビーム 0.9813727140426636
  3. りゅうのはどう 0.978251576423645
  4. なみのり 0.9763879776000977
  5. だいもんじ 0.9738233685493469
  6. ラスターカノン 0.9735146760940552
  7. ソーラービーム 0.9731917977333069
  8. きあいだま 0.973129391670227
  9. かみなり 0.9693619012832642
  10. だいちのちから 0.9692765474319458

こちらは完全に特殊技ばかりが並んでいます。これは期待が膨らみますね。

単語と単語の計算結果

では、かえんほうしゃ - ほのお + みず を計算してみましょう。

calc("かえんほうしゃ-ほのお+みず")

  1. 特殊技 0.9034083485603333
  2. はどうだん 0.8909361958503723
  3. サブ 0.8858975172042847
  4. りゅうのはどう 0.8845259547233582
  5. ふぶき 0.8783226013183594
  6. ハイドロポンプ 0.8712683916091919
  7. 電 0.8656661510467529
  8. だいもんじ 0.8648360371589661
  9. 軸 0.8628724813461304
  10. メイン 0.8532931804656982

・・・やりました。かえんほうしゃからほのおタイプを引いてみずタイプを足すと、ちゃんとハイドロポンプになります。 (※それ以外の技が上位に来ているのは気のせいです。) せっかくなので、他の計算もしてみましょう。


calc("ぜったいれいど-氷+地")

  1. 地割れ 0.9815039038658142
  2. とんぼがえり 0.976150631904602
  3. あやしいひかり 0.967402458190918
  4. ちから 0.9479234218597412
  5. ドリル 0.9468713998794556
  6. じこさいせい 0.9343216419219971
  7. 叩き台 0.9340541958808899
  8. あまごい 0.9317256212234497
  9. きゅうけつ 0.9308851361274719
  10. パンチ 0.9303572773933411

これまたすごい結果になりました。ぜったいれいどから氷タイプを引いて地面タイプを足すと、ちゃんと地割れになります。


次は、ポケモンのタイプを引いたり足したりしてみましょう。

calc("リザードン-ほのお+みず")

  1. すべて 0.9639962911605835
  2. 近く 0.9628123641014099
  3. ソルガレオ 0.9590645432472229
  4. ざら 0.9563183784484863
  5. ボスゴドラ 0.949439525604248
  6. 一般 0.9466379284858704
  7. 本来 0.9451665878295898
  8. ケース 0.9429201483726501
  9. 呼称 0.9397175312042236
  10. おろか 0.938876211643219

このように、リザードンからほのおタイプを引いてみずタイプを足すと、ちゃんと御三家のカメックスに…、 ソルガレオになるそうです。


アローラの守り神でみんなのアイドルでもあるカプ・テテフちゃんも、エスパータイプを引いてでんきタイプを足すと、しっかりカプ・コケコに…、

calc("カプ・テテフ-エスパー+でんき")

  1. てる 0.9460397362709045
  2. テッカグヤ 0.9357684850692749
  3. 勝てる 0.9340535402297974
  4. 取れる 0.9280171990394592
  5. ヒードラン 0.9266940951347351
  6. 切る 0.9233332276344299
  7. ボーマンダ 0.9210865497589111
  8. ギルガルド 0.9198833703994751
  9. 処理 0.9168146848678589
  10. 読みで 0.9078798890113831

UBのテッカグヤになるそうです。


最後は気持ちよく終わりましょう。クチートにメガストーンを加えると…

calc("クチート+メガストーン")

  1. 飛ぶ 0.9863591194152832
  2. 違える 0.9835994243621826
  3. 小さい 0.9808191657066345
  4. 上書き 0.9792056083679199
  5. 伴う 0.9779235124588013
  6. 裏 0.9774397015571594
  7. 返す 0.9748541116714478
  8. 見せる 0.9745727777481079
  9. 針 0.9743210077285767
  10. バグ 0.9740380048751831

はい。飛び立つそうです。

計算結果の考察

みなさん、お気づきだとは思いますが、今回の精度はいまいちな結果となってしまいました。 実は上記の結果は、100ケース以上の計算をして、見栄えの良いものを並べたものです。 10まんボルトから電気を引いて炎を足してもかえんほうしゃにはなりませんでした。

今回のケースでは、学習データに難アリという印象です。 Wikiという媒体の性質上、言葉のゆらぎがあり、略語(トリックルームパーティーがトリパとなっている)も多用されて非常にデータ加工が困難でした。 また素直に処理をすると、オボンのみが「お盆」と「のみ」に分割されてしまい、固有名詞も拾えませんでした。 かなり丁寧に言葉のゆらぎを直し、略語を正式な単語に復元し、技や持ち物の名前などの固有名詞が残るように手作業で加工したのですが、 上記のような精度に落ち着きました。

また、データ量も少なく、高精度に学習できなかったとも感じています。 2つのwikiだけではなく、ポケモンに関するまとめサイトもクローリングして、もっと文章を集めたほうが良かったです。

人工知能も、適切なデータを使い、適切な手順を踏まないと賢くならないという良い例になったと思います。

まとめ

今回は、word2vecを使って「かえんほうしゃ - ほのお + みず = ハイドロポンプ」を計算しました。 たくさんの計算をしましたが、上記くらいしか見栄えのいいものがありませんでした。 とは言え、「かえんほうしゃ - ほのお + みず」を計算した結果の中にハイドロポンプを見つけたときは、めちゃめちゃ嬉しかったです。 また、技に関しては精度がよく、物理技と特殊技はしっかり見分けられるようです。 きれいに加工されたもっと大量のデータを利用することで、まだまだ賢くなるなと思いました。

p.s. メガクチート - メガストーン = マグカルゴになるそうです。なんでや…。