かえんほうしゃ - ほのお + みず = ハイドロポンプになるか?
みなさんこんにちは。さっちんです。
ポケモンに関する文章を使ってword2vecをやってみたので、今回はその結果をお見せしたいと思います。 ソースコードと学習データは以下に置いています。 github.com
最近の流行?!、「単語と単語での計算」
タイトルを見て興味を持った方は、word2vecってなんだ???となると思いますので、簡単にご説明します。 最近、AIや人工知能という単語がニュースなどで取り上げられるように、IT業界ではAIや人工知能が非常にホットな話題となっています。 その文脈の中で、文章も人工知能で分析してやるぜ!という試みが流行しており、word2vecはその中の一つの手法です。
word2vecのイメージを具体的にするために、非常に有名な例を挙げたいと思います。 それは…
王様 - 男 + 女 = 女王様
です。
つまり、文章で「王様は男性における地位の名称ですが、王様と同様の意味を持つ女性における地位の名称は何でしょうか?」と表現される質問を計算式で表したものになります。このように、「単語同士で計算ができるようになったら、人工知能に文章を理解させる手助けになるんじゃね?」という発想で生まれた手法です。
ポケモンでword2vecしたい
難しい話はこのくらいにして、本題に移りたいと思います。 単語同士が計算できるとなると、ポケモン好きな皆様におかれましてはポケモン用語でもやってみたいと思うのではないでしょうか? それが今回のタイトルである「かえんほうしゃ - ほのお + みず = ハイドロポンプになるのか?」に帰着するわけです。
そこで今回は、ポケモンWiki*1とポケモン対戦考察まとめWiki*2の記事を学習させてみました。それでは結果を見ていきましょう。
単語自体の計算結果
まずは単語そのものを見ていきましょう。指定した単語と関連の強い単語のトップ10が表示されます。 横にある数値は関連度になります。
さっそく、我らがメガクチートを計算してみましょう。
calc("メガクチート")
- バンギラス 0.9744253754615784
- テッカグヤ 0.9737641215324402
- 一 0.9579521417617798
- メガギャラドス 0.9565474987030029
- 喰らう 0.9561516046524048
- カイリュー 0.9555752277374268
- マンムー 0.9530206918716431
- 舞 0.9496548175811768
- メガハッサム 0.949008584022522
- てる 0.9439014792442322
クチート一緒にパーティへ入ることの多いカイリューやマンムーがトップ10に入っています。 舞は「つるぎのまい」のことですね。
続いてパーティの名称である雨パを計算しました。
calc("雨パ")
- 独自 0.9668172597885132
- ペリッパー 0.9622671604156494
- 個性 0.9604281783103943
- 化す 0.9601962566375732
- 充実 0.9588289260864258
- 使い 0.9584391117095947
- あめふらし 0.9568397998809814
- あくタイプ 0.9563978314399719
- 多芸 0.9530139565467834
- 無類 0.9518377184867859
7世代で雨パで採用されることが多いペリッパーや、雨パに欠かせない特性のあめふらしが入っていますね。
続いてタイプのフェアリーを計算。
calc("フェアリー")
- 倍 0.9322121143341064
- 一貫性 0.922793984413147
- 格闘 0.9219501614570618
- ゴースト 0.9165294170379639
- 相性補完 0.9136119484901428
- ドラゴンタイプ 0.9095576405525208
- 地面 0.9079031944274902
- 4倍弱点 0.9013127088546753
- 4倍 0.8987537622451782
- 強い 0.8973758220672607
フェアリーに弱点を突かれる格闘やドラゴンという単語が入っています。 4倍弱点はサザンドラやジャララガン、ズルズキン、ゴロンダあたりの記事が効いてるのでしょうか?
次は性格のおくびょう。
calc("おくびょう")
- ひかえめ 0.9599519371986389
- CS 0.9132525324821472
- こだわりメガネ 0.9035917520523071
- 基 0.8862846493721008
- 冷静 0.8780158758163452
- 性格 0.8219131231307983
- せっかち 0.8143517374992371
- 努力値 0.8130760192871094
- ハイドロポンプ 0.8049198389053345
- ムーンフォース 0.8013639450073242
これは素晴らしいですね。おくびょうと同じように特殊アタッカーに採用されるひかえめ、冷静がランクインしています。 また、努力値の振り方であるCSという単語や持ち物であるこだわりメガネも入っています。
calc("きあいのタスキ")
- カムラ 0.9162214398384094
- 持ち物 0.8896895051002502
- ラム 0.8842946290969849
- 蜻蛉返り 0.8831953406333923
- クリスタル 0.8821411728858948
- 優先 0.8816790580749512
- ジュエル 0.8660957217216492
- 選択 0.8502988219261169
- がんせきふうじ 0.8499913811683655
- なげつける 0.8491314649581909
きあいのタスキだと、同じ持ち物であるカムラのみやラムのみ、Zクリスタル、ジュエルが関連の強い単語として挙げられています。 とんぼがえりはタスキ潰しによく使われるからでしょうか?
さて、それでは技を見ていきたいと思います。
calc("じしん")
- ストーンエッジ 0.9791466593742371
- ぢ 0.9695087671279907
- いわなだれ 0.9539787173271179
- れいとうパンチ 0.9350066184997559
- すてみタックル 0.9336516261100769
- かみくだく 0.9321756958961487
- アームハンマー 0.9284919500350952
- アイアンヘッド 0.9270839095115662
- かみなりパンチ 0.9270591139793396
- どくづく 0.9257274270057678
じしんを計算すると、物理技ばかりが列挙されました。 また、じしんと同時に採用されやすいストーンエッジといわなだれが上位に入っています。
最後にかえんほうしゃを見たいと思います。
calc("かえんほうしゃ")
- あくのはどう 0.9866007566452026
- れいとうビーム 0.9813727140426636
- りゅうのはどう 0.978251576423645
- なみのり 0.9763879776000977
- だいもんじ 0.9738233685493469
- ラスターカノン 0.9735146760940552
- ソーラービーム 0.9731917977333069
- きあいだま 0.973129391670227
- かみなり 0.9693619012832642
- だいちのちから 0.9692765474319458
こちらは完全に特殊技ばかりが並んでいます。これは期待が膨らみますね。
単語と単語の計算結果
では、かえんほうしゃ - ほのお + みず を計算してみましょう。
calc("かえんほうしゃ-ほのお+みず")
- 特殊技 0.9034083485603333
- はどうだん 0.8909361958503723
- サブ 0.8858975172042847
- りゅうのはどう 0.8845259547233582
- ふぶき 0.8783226013183594
- ハイドロポンプ 0.8712683916091919
- 電 0.8656661510467529
- だいもんじ 0.8648360371589661
- 軸 0.8628724813461304
- メイン 0.8532931804656982
・・・やりました。かえんほうしゃからほのおタイプを引いてみずタイプを足すと、ちゃんとハイドロポンプになります。 (※それ以外の技が上位に来ているのは気のせいです。) せっかくなので、他の計算もしてみましょう。
calc("ぜったいれいど-氷+地")
- 地割れ 0.9815039038658142
- とんぼがえり 0.976150631904602
- あやしいひかり 0.967402458190918
- ちから 0.9479234218597412
- ドリル 0.9468713998794556
- じこさいせい 0.9343216419219971
- 叩き台 0.9340541958808899
- あまごい 0.9317256212234497
- きゅうけつ 0.9308851361274719
- パンチ 0.9303572773933411
これまたすごい結果になりました。ぜったいれいどから氷タイプを引いて地面タイプを足すと、ちゃんと地割れになります。
次は、ポケモンのタイプを引いたり足したりしてみましょう。
calc("リザードン-ほのお+みず")
- すべて 0.9639962911605835
- 近く 0.9628123641014099
- ソルガレオ 0.9590645432472229
- ざら 0.9563183784484863
- ボスゴドラ 0.949439525604248
- 一般 0.9466379284858704
- 本来 0.9451665878295898
- ケース 0.9429201483726501
- 呼称 0.9397175312042236
- おろか 0.938876211643219
このように、リザードンからほのおタイプを引いてみずタイプを足すと、ちゃんと御三家のカメックスに…、 ソルガレオになるそうです。
アローラの守り神でみんなのアイドルでもあるカプ・テテフちゃんも、エスパータイプを引いてでんきタイプを足すと、しっかりカプ・コケコに…、
calc("カプ・テテフ-エスパー+でんき")
- てる 0.9460397362709045
- テッカグヤ 0.9357684850692749
- 勝てる 0.9340535402297974
- 取れる 0.9280171990394592
- ヒードラン 0.9266940951347351
- 切る 0.9233332276344299
- ボーマンダ 0.9210865497589111
- ギルガルド 0.9198833703994751
- 処理 0.9168146848678589
- 読みで 0.9078798890113831
UBのテッカグヤになるそうです。
最後は気持ちよく終わりましょう。クチートにメガストーンを加えると…
calc("クチート+メガストーン")
- 飛ぶ 0.9863591194152832
- 違える 0.9835994243621826
- 小さい 0.9808191657066345
- 上書き 0.9792056083679199
- 伴う 0.9779235124588013
- 裏 0.9774397015571594
- 返す 0.9748541116714478
- 見せる 0.9745727777481079
- 針 0.9743210077285767
- バグ 0.9740380048751831
はい。飛び立つそうです。
計算結果の考察
みなさん、お気づきだとは思いますが、今回の精度はいまいちな結果となってしまいました。 実は上記の結果は、100ケース以上の計算をして、見栄えの良いものを並べたものです。 10まんボルトから電気を引いて炎を足してもかえんほうしゃにはなりませんでした。
今回のケースでは、学習データに難アリという印象です。 Wikiという媒体の性質上、言葉のゆらぎがあり、略語(トリックルームパーティーがトリパとなっている)も多用されて非常にデータ加工が困難でした。 また素直に処理をすると、オボンのみが「お盆」と「のみ」に分割されてしまい、固有名詞も拾えませんでした。 かなり丁寧に言葉のゆらぎを直し、略語を正式な単語に復元し、技や持ち物の名前などの固有名詞が残るように手作業で加工したのですが、 上記のような精度に落ち着きました。
また、データ量も少なく、高精度に学習できなかったとも感じています。 2つのwikiだけではなく、ポケモンに関するまとめサイトもクローリングして、もっと文章を集めたほうが良かったです。
人工知能も、適切なデータを使い、適切な手順を踏まないと賢くならないという良い例になったと思います。
まとめ
今回は、word2vecを使って「かえんほうしゃ - ほのお + みず = ハイドロポンプ」を計算しました。 たくさんの計算をしましたが、上記くらいしか見栄えのいいものがありませんでした。 とは言え、「かえんほうしゃ - ほのお + みず」を計算した結果の中にハイドロポンプを見つけたときは、めちゃめちゃ嬉しかったです。 また、技に関しては精度がよく、物理技と特殊技はしっかり見分けられるようです。 きれいに加工されたもっと大量のデータを利用することで、まだまだ賢くなるなと思いました。