自然言語処理はじめに要するにやること本記事では遊戯王カードの効果テキストを基にDoc2vecという文章単位の類似度を計算するアルゴリズムを使って類似したカードを探すコードを実装してみます遊戯王カードの効果テキストは、あまりの複雑さや特殊な解釈のために「コンマイ語」と揶揄されることもあるのですが、今回の記事はそんなコンマイ語に対してもDoc2vecが通用するのかの検証の意味合いも持っています。下記の記事を発見し、次のような記載があったので、やってみることにしました。qiita.com余談ですが遊戯王のカードでもやってみたのですが、自分が遊戯王に詳しくないので似ているかどうかピンと来なかったのでやめました。Githubにソースとモデル一式をUPしておくので、興味がある方がいましたらやってみてください。↑のGithubからデータを取得し、Windowsならではの"UnicodeEncodeError"を回避するためにコードを修正しました。修正の過程などはGithubでご確認ください。github.comgensimのDoc2vecは以前に下記の記事で触れていたこともあり、自分のやりやすい書き方にザックリと変更している箇所もあります。upura.hatenablog.com実行card2vec.py(先駆者のこの命名センス、素晴らしいと思います)を実行すると、下記のような形式のデータを保持します。"names"はカード名、"texts"は効果テキストをそれぞれテキスト型で持っています。学習が終了したら、いよいよ類似カードを出力してみます。"\n")例えば「ソーラー・エクスチェンジ」に関する類似カードは、以下のような結果になりました。ライトロード関連のカードが出力されています。ソーラー・エクスチェンジ手札から「ライトロード」と名のついたモンスターカード1枚を捨てて発動する。自分のデッキからカードを2枚ドローし、その後デッキの上からカードを2枚墓地に送る。0.7759238481521606自分の墓地から「ライトロード」と名のついたモンスター1体を選択し、攻撃表示で特殊召喚する。自分のエンドフェイズ毎に、デッキの上からカードを2枚墓地に送る。このカードがフィールド上から離れた時、そのモンスターを破壊する。そのモンスターがフィールド上から離れた時このカードを破壊する。0.7378130555152893このカードがフィールド上に表側表示で存在する限り、「ライトロード」と名のついたモンスターを魔法・罠・効果モンスターの効果の対象にする事はできない。このカードが自分フィールド上に表側表示で存在する限り、自分のエンドフェイズ毎に、自分のデッキの上からカードを2枚墓地に送る。0.7361984252929688このカードの攻撃力は、自分の墓地に存在する「ライトロード」と名のついたモンスターの種類×300ポイントアップする。このカードが自分フィールド上に表側表示で存在する限り、自分のエンドフェイズ毎に、自分のデッキの上からカードを2枚墓地へ送る。0.7135570049285889このカードの攻撃力と守備力は、自分の墓地に存在する「ライトロード」と名のついたモンスターカードの種類×300ポイントアップする。このカードが守備表示モンスターを攻撃した時、その守備力を攻撃力が超えていれば、その数値だけ相手ライフに戦闘ダメージを与える。このカードが自分フィールド上に表側表示で存在する場合、自分のエンドフェイズ毎に、デッキの上からカードを3枚墓地に送る。0.7092658877372742自分フィールド上に存在する「ライトロード」と名のついたモンスター1体をリリースして発動する。0.703083872795105このカードが「ライトロード」と名のついたモンスターを生け贄にして生け贄召喚に成功した時、デッキの上からカードを4枚墓地に送る事で相手フィールド上のカードを2枚まで破壊する。0.6913601756095886自分のデッキの上からカードを3枚墓地へ送って発動する。自分のデッキからレベル4以下の「ライトロード」と名のついたモンスター1体を手札に加える。0.6905478835105896このカードが戦闘によって墓地に送られた時、相手ライフに500ポイントダメージを与える。0.6747479438781738「ライトロード」と名のついたモンスターにのみ装備可能。装備モンスターの攻撃力は700ポイントアップする。このカードがデッキから墓地に送られた時、このカードを自分フィールド上に存在する「ライトロード」と名のついたモンスター1体に装備する事ができる。0.6690211296081543手札の魔法カードを2枚墓地に送る。自分の墓地から魔法カードを1枚選択し、手札に加える。おわりに無事にコンマイ語でもDoc2vecが機能していそうだと分かりました。算出するのが良い気がします。うまい検証方法を思いついたら、発表資料の形式にまとめられるレベルまで深めてみたいと思っています。自然言語処理では「英語でうまくいった手法を日本語で使ってみたら~だった」みたいな論文を見かける気もするので、僕もJSAI辺りへの投稿を目指したいと思います(←舐めんな)。月別アーカイブはてなブログをはじめよう!upuraさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。