読者です 読者をやめる 読者になる 読者になる

おいしいとこはすこしだけ

文系出身SE見習いの備忘録。

Doc2VecでMTGの類似カードをかなり探せるようになった

Python プログラミング マジック・ザ・ギャザリング 機械学習 自然言語処理

文系出身SE見習いの北白川キリコです。


kitashirakawakiriko.hatenablog.com

↑昨日の時点↑ではかなりビミョーな精度だったDoc2Vecでの類似カード探しですが、色々弄ってみたところいい感じになりました。

(メインのDoc2Vec実装部分は上記記事を参照してください)


改善した部分

  • 辞書の保存方式が間違っていたので修正した

Janomeユーザ辞書ファイルはcsv方式で保存しないといけなかったみたいなんですけど、txtファイルにしちゃってたので用語の抽出ができてなかったみたいです。さっくり直しました。


  • カード情報に、マナコストとカードの種類(クリーチャーとかインスタントとか)を追加した

カード名、タイプ、フレーバーテキストイラストレーター、エキスパンション、ナンバー、以外の全ての情報を参照するようになりました。


  • テキスト中に出てくるそのカードの名前の表記をタグに置き換えた

よく「~は」と略される部分ですね。あの部分のせいで、似た効果のカードでも全然違う単語で構成されていることになってしまっていたので、全て<selfname>というタグに置換しました。


  • パラメータを変更した
# model = doc2vec.Doc2Vec(card_text, size=100, window=8, min_count=2, workers=4)
model = doc2vec.Doc2Vec(card_text, size=200, window=5, min_count=1, workers=4,
                        dm=0, iter=20)

パラメータ「dm」はモデルの指定です。デフォルトの1だとPV-DMモデルで、1以外にするとPV-DBOWモデルになります。

あんまり詳しく分かっているわけでもないので追って勉強しようと思うのですが、文脈を読んだりするのはPV-DBOWのほうが得意なようです。

iterは処理のループ回数ですね。これを増やすと収束が進むはずです。


どんな結果になったか

精神を刻む者、ジェイス is similar to...

記憶の熟達者、ジェイス 0.634908735752

リリアナ・ヴェス 0.624688506126

ジェイス・ベレレン 0.623304367065

思考を築く者、ジェイス 0.606780409813

ギルドパクトの体現者、ジェイス 0.556868731976

盗まれた計画 0.550258159637

恐喝 0.52756613493

精神刻み 0.510042726994

アイ・スパイ 0.503896474838

苦悶の記憶 0.499331712723

ふむふむ。まあこれくらいは。(しかしカードタイトルは情報に入ってないのに精神刻みが入るのは偉い)


耕作 is similar to...

木霊の手の内 0.838466882706

爆発的植生 0.755218982697

つややかな雄鹿 0.728160262108

ガイアの恵み 0.713408350945

砕土 0.703940093517

はるかなる放浪 0.702058851719

荒々しき自然 0.701890289783

天球儀 0.700265944004

分かれ道 0.699324011803

地勢 0.691918075085

おお、かなり妥当に!


囁く者、シェオルドレッド is similar to...

下水溜まり 0.565416395664

ダクムーアの女魔術師 0.498627662659

アヌーリッドの濁り水潜り 0.486608326435

影生まれの悪魔 0.48333221674

永遠警備の歩哨 0.480452954769

魏の大将軍 司馬懿 0.465717792511

目覚めし深海、レクシャル 0.463148444891

野生のレオトー 0.450714677572

魔女エンジン 0.448547929525

シタヌールのケンタウルス 0.447803080082

や、やはり沼渡り……? でも少し近くなったし、類似度自体が低いので納得もできるかも。


ここからは新規で試したものを。

ファイレクシアの破棄者 is similar to...

真髄の針 0.778615474701

虚空石のガーゴイル 0.596821725368

翻弄する魔道士 0.588838577271

サーボの網 0.586093187332

無の空間 0.581093549728

失敗の宣告 0.561350464821

金輪際 0.511417448521

太陽の聖杯 0.463119745255

呉の参謀 魯粛 0.462164878845

タラスの研究者 0.456732481718

やるやん!


知識槽 is similar to...

盗品 0.629252254963

吹き荒れる潜在能力 0.575982689857

呪文織りのらせん 0.544468641281

思考の牢獄 0.540273070335

嵐の目 0.520646452904

分かち合う運命 0.512997925282

ズアーの運命支配 0.511536240578

隠れ潜む捕食者 0.504770219326

悪逆な富 0.504193246365

遥かなる記憶 0.501467108727

わかる。


謙虚 is similar to...

お粗末 0.729776024818

羊術 0.692999660969

木化 0.607517182827

縮退 0.582631349564

突然の俗化 0.581382155418

変身術士の戯れ 0.559987187386

ダークスティールの突然変異 0.553241074085

牙の贈り物 0.55151540041

真に暗き時間 0.534347176552

畏敬の神格 0.523278415203

これは見事。


神の怒り is similar to...

滅び 0.883874058723

粉砕の嵐 0.823421597481

ラースの風 0.788604140282

審判の日 0.761777818203

至高の評決 0.690950989723

浄化 0.690596222878

弱者の報復 0.69019562006

カタストロフィ 0.659878373146

疫病の胞子 0.657440006733

ジョークルホープス 0.653918504715

妥当なところ。


大歓楽の幻霊 is similar to...

紅蓮光電の柱 0.742184579372

類電の反響 0.51984077692

テツモスの大神官 0.492548793554

ゴブリン修繕屋 0.492158710957

不純の焼き払い 0.481161177158

石炭運びの豚 0.481044828892

街道筋の強盗 0.477807700634

信仰の癒し手 0.474357873201

ドワーフの祭殿 0.473840385675

テフラダーム 0.47338578105

これはなかなか賢い!


石鍛冶の神秘家 is similar to...

タージ=ナールの剣鍛冶 0.601656615734

ワイアウッドの伝令 0.596696972847

コーの地図作り 0.559696435928

族霊導きの鹿羚羊 0.557160258293

森のレインジャー 0.538396596909

オンドゥの巨人 0.524216353893

鋼打ちの贈り物 0.510856449604

天空の鷹 0.503467321396

マイコシンスの水源 0.500601053238

国境地帯のレインジャー 0.481902807951

これも納得のいく感じ。


運命の輪 is similar to...

シヴ山の隕石 0.674663364887

弧状の刃 0.673180222511

裂け目の稲妻 0.660153388977

略取 0.655520141125

明日への探索 0.646709322929

精神攪乱 0.644515931606

霊気への抑留 0.644413173199

覆われた奇異 0.619173884392

陰謀団の呪い 0.617112517357

裂断術 0.605107724667

あ、あれ……? 命運の輪とごっちゃになってる?


というわけで

かなり賢いモデルになりました!

Webアプリか何かにして、気軽に色んな人に遊んでもらえるようにしたいんですけどね。

せめてデスクトップGUIアプリにできないかな? 少し方法を考えてみます。


※追記(8/26):GUIアプリになりました

Dropbox - Similar Gatherer.zip

作ってみました! Windows対応です。よろしければ触ってみてください。

今後もっと賢くしていけるといいなあ。