[PYTHON] Ich suchte mit Deep Learning nach einer ähnlichen Karte von Hearthstone

In letzter Zeit ist Doc2Vec interessant, deshalb mache ich verschiedene Dinge. Ich habe den folgenden Artikel gefunden und ihn selbst ausprobiert. → Ich habe mit Doc2Vec nach einer ähnlichen MTG-Karte gesucht

Was ist Doc2Vec?

Word2Vec betrachtet Word als Vektor, aber Doc2Vec (Paragraph2Vec) sieht Document als eine Menge von Word und weist einen Vektor zu, um die Ähnlichkeit zwischen Dokumenten und Vektorberechnung zu realisieren. ..

Zum Beispiel kann auch die Ähnlichkeit zwischen Nachrichtenartikeln, die Ähnlichkeit zwischen Lebensläufen, die Ähnlichkeit zwischen Büchern und natürlich die Ähnlichkeit zwischen dem Profil einer Person und einem Buch berechnet werden. Alle sind zielgerichtet.

Quelle: http://qiita.com/okappy/items/32a7ba7eddf8203c9fa1

Sprache / Paket verwendet

Zieldaten

Blizzards Heartstone Karte 922 Texte

Kartenmuster 00912eb0f9c8d30b0bc9804db54210a3-1.png

Korpuserstellung

Der Korpus wird aus der [Hearthstone Card List] von 4 Schildkröten (http://www.4gamer.net/games/209/G020915/FC20140702001/) entfernt. Diesmal habe ich Scrapy benutzt. Erstellen Sie ein Projekt mit dem folgenden Befehl.

terminal


$ scrapy startproject hearth_stone

Die folgende Datei wird erstellt.

terminal


$ tree hearth_stone/
hearth_stone
├── hearth_stone
│   ├── __init__.py
│   ├── __pycache__
│   ├── items.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       ├── __init__.py
│       └── __pycache__
└── scrapy.cfg

4 directories, 6 files

Definieren Sie zunächst die Datenstruktur, die an "items.py" ausgegeben werden soll. Dieses Mal brauche ich nur den Namen und den Text, aber ich kann ihn in Zukunft verwenden, damit ich alle Daten auf der Karte abkratzen kann.

items.py


# -*- coding: utf-8 -*-
import scrapy


class HearthStoneItem(scrapy.Item):
    name = scrapy.Field()
    rarity = scrapy.Field()
    ruby = scrapy.Field()
    type = scrapy.Field()
    hero = scrapy.Field()
    race = scrapy.Field()
    text = scrapy.Field()
    mana = scrapy.Field()
    attack = scrapy.Field()
    health = scrapy.Field()

Erstellen Sie als Nächstes eine Spinne (Crawler).

terminal


# For example, to create a new spider:
# scrapy genspider mydomain mydomain.com

$ scrapy genspider hearthstone 4gamer.net

Die folgende Datei wird erstellt.

spiders/hearthstone.py


# -*- coding: utf-8 -*-
import scrapy


class HearthstoneSpider(scrapy.Spider):
    name = "hearthstone"
    allowed_domains = ["4gamer.net"]
    start_urls = ['http://4gamer.net/']

    def parse(self, response):
        pass

Schreiben Sie dies für die 4-Schildkröten-Site neu.

spiders/hearthstone.py


# -*- coding: utf-8 -*-
import scrapy
from ..items import HearthStoneItem
from bs4 import BeautifulSoup


class HearthStoneSpider(scrapy.Spider):
    name = "hearth_stone"
    allowed_domains = ["4gamer.net"]
    start_urls = ['http://www.4gamer.net/games/209/G020915/FC20140702001/']

    def parse(self, response):
        soup = BeautifulSoup(response.body, "lxml")

        for card in soup.find("div", id="UNIT_LIST").findAll("div"):
            item = HearthStoneItem()
            item['name'] = card.find("span", class_="name").string
            item['rarity'] = card.find("span", class_="rarity").string
            item['ruby'] = card.find("span", class_="ruby").string
            item['type'] = card.find("span", class_="type").string
            item['hero'] = card.find("span", class_="class").string
            item['race'] = card.find("span", class_="race").string
            item['text'] = card.find("span", class_="card_comment").find("p").string
            item['mana'] = card.find("span", class_="mana").string
            item['attack'] = card.find("span", class_="attack").string
            item['health'] = card.find("span", class_="health").string
            yield item

Führen Sie den Crawler aus, nachdem Sie zum Schaben bereit sind. Sie können den Namen der Ausgabedatei mit -o angeben. (Der Dateityp wird automatisch aus der Erweiterung ermittelt.)

terminal


$ scrapy crawl hearthstone -o hearth_stone.json

Wenn das Crawlen / Scraping erfolgreich ist, wird die folgende Datei erstellt. Es sieht aus wie eine Chiffre, ist aber nur Unicode, also ist es okay.

hearth_stone.json


[
{"attack": "4", "ruby": "Abomination", "rarity": "\u30ec\u30a2", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "5", "name": "\u6d9c\u308c\u3057\u3082\u306e", "race": "-", "health": "4", "text": "\u6311\u767a\uff06\u65ad\u672b\u9b54\uff1a\u5168\u3066\u306e\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u306b2\u30c0\u30e1\u30fc\u30b8\u3092\u4e0e\u3048\u308b\u3002"},
{"attack": "1", "ruby": "Abusive Sergeant", "rarity": "\u30b3\u30e2\u30f3", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "1", "name": "\u9b3c\u8ecd\u66f9", "race": "-", "health": "1", "text": "\u96c4\u53eb\u3073\uff1a\u3053\u306e\u30bf\u30fc\u30f3\u306e\u9593\u3001\u30df\u30cb\u30aa\u30f31\u4f53\u306b\u653b\u6483\u529b\uff0b2\u3092\u4ed8\u4e0e\u3059\u308b\u3002"},
{"attack": "3", "ruby": "Acidic Swamp Ooze", "rarity": "\u30d5\u30ea\u30fc", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "2", "name": "\u9178\u6027\u6cbc\u30a6\u30fc\u30ba", "race": "-", "health": "2", "text": "\u96c4\u53eb\u3073\uff1a\u6575\u306e\u6b66\u5668\u3092\u7834\u58ca\u3059\u308b\u3002"},
{"attack": "4", "ruby": "Acidmaw ", "rarity": "\u30ec\u30b8\u30a7\u30f3\u30c9", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u30cf\u30f3\u30bf\u30fc", "mana": "7", "name": "\u30a2\u30b7\u30c3\u30c9\u30e2\u30fc", "race": "\u7363", "health": "2", "text": "\u81ea\u5206\u4ee5\u5916\u306e\u30df\u30cb\u30aa\u30f3\u304c\u30c0\u30e1\u30fc\u30b8\u3092\u53d7\u3051\u308b\u5ea6\u3001\u305d\u306e\u30df\u30cb\u30aa\u30f3\u3092\u7834\u58ca\u3059\u308b\u3002"},
{"attack": "1", "ruby": "Acolyte of Pain", "rarity": "\u30b3\u30e2\u30f3", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "3", "name": "\u82e6\u75db\u306e\u4f8d\u796d", "race": "-", "health": "3", "text": "\u3053\u306e\u30df\u30cb\u30aa\u30f3\u304c\u30c0\u30e1\u30fc\u30b8\u3092\u53d7\u3051\u308b\u5ea6\u3001\u30ab\u30fc\u30c9\u30921\u679a\u5f15\u304f\u3002"},
{"attack": "3", "ruby": "Al'Akir the Windlord", "rarity": "\u30ec\u30b8\u30a7\u30f3\u30c9", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u30b7\u30e3\u30fc\u30de\u30f3", "mana": "8", "name": "\u98a8\u306e\u738b\u30a2\u30e9\u30ad\u30a2", "race": "-", "health": "5", "text": "\u75be\u98a8\u3001\u7a81\u6483\u3001\u8056\u306a\u308b\u76fe\u3001\u6311\u767a"},
{"attack": "0", "ruby": "Alarm-o-Bot", "rarity": "\u30ec\u30a2", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "3", "name": "\u30a2\u30e9\u30fc\u30e0\u30ed\u30dc", "race": "\u30e1\u30ab", "health": "3", "text": "\u81ea\u5206\u306e\u30bf\u30fc\u30f3\u306e\u958b\u59cb\u6642\u3001\u3053\u306e\u30df\u30cb\u30aa\u30f3\u3092\u3001\u81ea\u5206\u306e\u624b\u672d\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u30df\u30cb\u30aa\u30f3\u3068\u5165\u308c\u66ff\u3048\u308b"},
{"attack": "3", "ruby": "Aldor Peacekeeper", "rarity": "\u30ec\u30a2", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u30d1\u30e9\u30c7\u30a3\u30f3", "mana": "3", "name": "\u30a2\u30eb\u30c0\u30fc\u306e\u5e73\u548c\u306e\u756a\u4eba", "race": "-", "health": "3", "text": "\u96c4\u53eb\u3073\uff1a\u6575\u306e\u30df\u30cb\u30aa\u30f31\u4f53\u306e\u653b\u6483\u529b\u30921\u306b\u5909\u3048\u308b\u3002"},
{"attack": "8", "ruby": "Alexstrasza", "rarity": "\u30ec\u30b8\u30a7\u30f3\u30c9", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "9", "name": "\u30a2\u30ec\u30af\u30b9\u30c8\u30e9\u30fc\u30b6", "race": "\u30c9\u30e9\u30b4\u30f3", "health": "8", "text": "\u96c4\u53eb\u3073\uff1a\u30d2\u30fc\u30ed\u30fc1\u4eba\u306e\u6b8b\u308a\u4f53\u529b\u309215\u306b\u3059\u308b\u3002"},
{"attack": "2", "ruby": "Alexstrasza's Champion ", "rarity": "\u30ec\u30a2", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u30a6\u30a9\u30ea\u30a2\u30fc", "mana": "2", "name": "\u30a2\u30ec\u30af\u30b9\u30c8\u30e9\u30fc\u30b6\u306e\u52c7\u8005", "race": "-", "health": "3", "text": "\u96c4\u53eb\u3073\uff1a\u81ea\u5206\u306e\u624b\u672d\u306b\u30c9\u30e9\u30b4\u30f3\u30ab\u30fc\u30c9\u304c\u3042\u308b\u5834\u5408\u3001\u653b\u6483\u529b\uff0b1\u3068\u7a81\u6483\u3092\u5f97\u308b\u3002"},
{"attack": "2", "ruby": "Amani Berserker", "rarity": "\u30b3\u30e2\u30f3", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "2", "name": "\u30a2\u30de\u30cb\u306e\u72c2\u6226\u58eb", "race": "-", "health": "3", "text": "\u6fc0\u6012\uff1a\u653b\u6483\u529b\uff0b3\u3002"},
{"attack": null, "ruby": "Ancestor's Call", "rarity": "\u30a8\u30d4\u30c3\u30af", "type": "\u546a\u6587", "hero": "\u30b7\u30e3\u30fc\u30de\u30f3", "mana": "4", "name": "\u7956\u970a\u306e\u58f0", "race": "-", "health": null, "text": "\u5404\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u624b\u672d\u304b\u3089\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u30df\u30cb\u30aa\u30f31\u4f53\u3092\u305d\u308c\u305e\u308c\u306e\u9663\u5730\u306b\u8ffd\u52a0\u3059\u308b\u3002"},
{"attack": null, "ruby": "Ancestral Healing", "rarity": "\u30b3\u30e2\u30f3", "type": "\u546a\u6587", "hero": "\u30b7\u30e3\u30fc\u30de\u30f3", "mana": "0", "name": "\u7956\u970a\u306e\u7652\u3057", "race": "-", "health": null, "text": "\u30df\u30cb\u30aa\u30f31\u4f53\u306e\u4f53\u529b\u3092\u4e0a\u9650\u307e\u3067\u56de\u5fa9\u3057\u3001\u6311\u767a\u3092\u4ed8\u4e0e\u3059\u308b\u3002"},
{"attack": null, "ruby": "Ancestral Knowledge ", "rarity": "\u30b3\u30e2\u30f3", "type": "\u546a\u6587", "hero": "\u30b7\u30e3\u30fc\u30de\u30f3", "mana": "2", "name": "\u7956\u970a\u306e\u77e5\u8b58", "race": "-", "health": null, "text": "\u30ab\u30fc\u30c9\u30922\u679a\u5f15\u304f\u3002\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\uff1a (2)"},
{"attack": null, "ruby": "Ancestral Spirit", "rarity": "\u30ec\u30a2", "type": "\u546a\u6587", "hero": "\u30b7\u30e3\u30fc\u30de\u30f3", "mana": "2", "name": "\u7956\u970a\u306e\u5c0e\u304d", "race": "-", "health": null, "text": "\u30df\u30cb\u30aa\u30f31\u4f53\u306b\u3001\u300c\u65ad\u672b\u9b54\uff1a\u3053\u306e\u30df\u30cb\u30aa\u30f3\u3092\u518d\u5ea6\u53ec\u559a\u3059\u308b\u300d\u3092\u4ed8\u4e0e\u3059\u308b\u3002"},
{"attack": "5", "ruby": "Ancient Brewmaster", "rarity": "\u30b3\u30e2\u30f3", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "4", "name": "\u8001\u7df4\u306e\u9152\u9020\u5927\u5e2b", "race": "-", "health": "4", "text": "\u96c4\u53eb\u3073\uff1a\u5473\u65b9\u306e\u30df\u30cb\u30aa\u30f31\u4f53\u3092\u6226\u5834\u304b\u3089\u81ea\u5206\u306e\u624b\u672d\u306b\u623b\u3059\u3002"},
{"attack": "2", "ruby": "Ancient Mage", "rarity": "\u30ec\u30a2", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "4", "name": "\u8001\u7df4\u306e\u30e1\u30a4\u30b8", "race": "-", "health": "5", "text": "\u96c4\u53eb\u3073\uff1a\u96a3\u63a5\u3059\u308b\u30df\u30cb\u30aa\u30f3\u306b\u3001\u546a\u6587\u30c0\u30e1\u30fc\u30b8\uff0b1\u3092\u4ed8\u4e0e\u3059\u308b\u3002"},
{"attack": "5", "ruby": "Ancient of Lore", "rarity": "\u30a8\u30d4\u30c3\u30af", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u30c9\u30eb\u30a4\u30c9", "mana": "7", "name": "\u77e5\u8b58\u306e\u53e4\u4ee3\u6a39", "race": "-", "health": "5", "text": "\u9078\u629e\uff1a\u30ab\u30fc\u30c9\u30921\u679a\u5f15\u304f\u3002\u307e\u305f\u306f\u3001\u4f53\u529b\u30925\u56de\u5fa9\u3059\u308b\u3002"},
{"attack": "5", "ruby": "Ancient of War", "rarity": "\u30a8\u30d4\u30c3\u30af", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u30c9\u30eb\u30a4\u30c9", "mana": "7", "name": "\u6226\u306e\u53e4\u4ee3\u6a39", "race": "-", "health": "5", "text": "\u9078\u629e\uff1a\u653b\u6483\u529b\uff0b5\u3002\u307e\u305f\u306f\u3001\u4f53\u529b\uff0b5\u3068\u6311\u767a\u3002"},
{"attack": "4", "ruby": "Ancient Watcher", "rarity": "\u30ec\u30a2", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "2", "name": "\u53e4\u4ee3\u306e\u756a\u4eba", "race": "-", "health": "5", "text": "\u653b\u6483\u3067\u304d\u306a\u3044\u3002"},
{"attack": "1", "ruby": "Angry Chicken", "rarity": "\u30ec\u30a2", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u4e2d\u7acb", "mana": "1", "name": "\u30a2\u30f3\u30b0\u30ea\u30fc\u30c1\u30ad\u30f3", "race": "\u7363", "health": "1", "text": "\u6fc0\u6012\uff1a\u653b\u6483\u529b\uff0b5\u3002"},
{"attack": "9", "ruby": "Anima Golem", "rarity": "\u30a8\u30d4\u30c3\u30af", "type": "\u30df\u30cb\u30aa\u30f3", "hero": "\u30a6\u30a9\u30fc\u30ed\u30c3\u30af", "mana": "6", "name": "\u30a2\u30cb\u30de\u30fb\u30b4\u30fc\u30ec\u30e0", "race": "\u30e1\u30ab", "health": "9", "text": "\u6bce\u30bf\u30fc\u30f3\u306e\u7d42\u4e86\u6642\u306b\u3001\u3053\u306e\u30df\u30cb\u30aa\u30f3\u304c\u81ea\u5206\u306e\u552f\u4e00\u306e\u30df\u30cb\u30aa\u30f3\u3067\u3042\u308b\u5834\u5408\u3001\u3053\u306e\u30df\u30cb\u30aa\u30f3\u3092\u7834\u58ca\u3059\u308b\u3002"},
#Kürzung
]

Modellbildung lernen

Verwenden Sie den erstellten Korpus, um doc2vec zu trainieren und ein Modell zu erstellen. Es wird mit der folgenden Verzeichnisstruktur ausgeführt.

terminal


doc2vec
├── card2vec.py
└── hearth_stone # (Scrapy Project)
    ├── hearth_stone
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-35.pyc
    │   │   ├── items.cpython-35.pyc
    │   │   └── settings.cpython-35.pyc
    │   ├── items.py
    │   ├── pipelines.py
    │   ├── settings.py
    │   └── spiders
    │       ├── __init__.py
    │       ├── __pycache__
    │       │   └── __init__.cpython-35.pyc
    │       └── hearthstone.py
    ├── hearth_stone.json
    └── scrapy.cfg

Lernen, Modellieren Teil

Erstellen Sie ein Modell von doc2vec mit dem folgenden Code.

card2vec.py


# -*- coding: utf-8 -*-
import json
import MeCab
from gensim.models import doc2vec
import os


def load_json(target_game_name):
    #Erstellen von Eingabedaten für Kartennamen und Kartentext
    names = []
    text = ""
    texts = []

    #Geben Sie die Ausgabe von Mecab als Division an
    mecab = MeCab.Tagger("-Owakati")
    
    json_path = target_game_name + "/" + target_game_name + ".json"
    
    #Der Text der Karte wird morphologisch analysiert, und die getrennten werden durch Zeilenumbrüche in eine Zeichenfolge getrennt.
    with open(json_path, "r") as file:
        card_dict = json.load(file)
        for card in card_dict:
            if card["name"] not in names:
                names.append(card["name"])
                mecab_result = mecab.parse(card["text"])
                if mecab_result is False:
                    text += "\n"
                    texts.append("")
                else:
                    text += mecab_result
                    texts.append(card["text"])


    with open(target_game_name + ".txt", "w") as file:
        file.write(text)

    return names, texts


def generate_doc2vec_model(target_game_name):
    print("Training Start")
    #Kartentext lesen
    card_text = doc2vec.TaggedLineDocument(target_game_name + ".txt")
    #Lernen
    model = doc2vec.Doc2Vec(card_text, size=300, window=8, min_count=1,
                            workers=4, iter=400, dbow_words=1, negative=5)

    #Modell speichern
    model.save(target_game_name + ".model")
    print("Training Finish")
    return model


if __name__ == '__main__':
    TARGET_GAME_NAME = "hearth_stone"
    names, texts = load_json(TARGET_GAME_NAME)

    if os.path.isfile(TARGET_GAME_NAME + ".model") is True:
        model = doc2vec.Doc2Vec.load(TARGET_GAME_NAME + ".model")
    else:
        model = generate_doc2vec_model(TARGET_GAME_NAME)

Schätzung eines Teils ähnlicher Karten

card2vec.Fortsetzung von py


    #Kartenname, für den Sie eine ähnliche Karte suchen möchten
    TARGET_CARD_NAME = "Hogger"
    card_index = names.index(TARGET_CARD_NAME)

    #Erhalten Sie eine Liste ähnlicher Karten und Ähnlichkeitstafeln (Top 10 Ähnlichkeiten)
    similar_docs = model.docvecs.most_similar(card_index)
    print(names[card_index])
    print(texts[card_index])
    print("--------------------is similar to--------------------")
    for similar_doc in similar_docs:
        print(names[similar_doc[0]] + " " + str(similar_doc[1]))
        print(texts[similar_doc[0]], "\n")

Ausführungsergebnis

Versuchen Sie, eine ähnliche Karte mit dem Kartennamen als Eingabe auszugeben. Dieses Mal gebe ich persönlich meine Lieblingskarte ein.

Eingangskarte: "Hoger"

terminal


$ python card2vec.py
Hogger
Haben Sie am Ende Ihres Zuges eine Provokation 2/Beschwöre 1 Noor von 2.
--------------------is similar to--------------------

Elwins Disaster Hogger 0.9119920134544373
/

.8980860114097595
/

.8811841011047363
Beschwöre 1 Noor von 2. Obsidian-Zerstörer 0 Beschwöre am Ende deines Zuges ein 11 provokatives Scarabe. Beschwöre Stein 0 Wenn du einen Zauber wirkst, beschwöre einen zufälligen Diener mit den gleichen Kosten.

Spiegelbild 0.8686900734901428
0 mit Provokation/Beschwöre 2 Schergen von 2.

Isera 0.8627046346664429
Füge deiner Hand am Ende deines Zuges eine Traumkarte hinzu.
#Kürzung
Eingang Ausgabe
ref_upload.png ref_upload(1).png

Der mit der höchsten Ähnlichkeit zum Eingang "Hogger" war "Elwin's Disaster Hogger". Wie Sie sehen können, ist es interessant, dass dieselbe Hogger-Karte nur mit dem Text ausgegeben wurde. Die 2. und 3. Karte und der Text der Karte sind "Beschwören \ * \ * \ * \ * wenn ~ ~", daher wird sie mit ziemlich hoher Genauigkeit aufgenommen.

Eingangskarte: "Iron Jaguar Note"

terminal


Eisen Jaguar Hinweis
Schrei: Füge 1 "Buried Landmine" zu einer zufälligen Stelle auf dem feindlichen Deck hinzu. "Buried Mine" explodiert beim Ziehen und verursacht 10 Schaden.
--------------------is similar to--------------------

Erdspinne 0.8792235851287842
Füge jeder zufälligen Position auf dem feindlichen Deck 3 "Hinterhalt" -Karten hinzu. Wenn "Hinterhalt" gezogen wird, 4 in Ihrer Position/Beschwöre 1 Nervian von 4.

Elise Star Seeker 0.8761336803436279
Schrei: Füge eine "Karte zum goldenen Affen" an einer zufälligen Stelle auf deinem Deck hinzu.

Zerstörerische Waffe 0.8525710105895996
Füge einem zufälligen Gegner zu Beginn deines Zuges 2 Schadenspunkte zu.

Alter Schatten 0.8471906185150146
Schrei: Füge einen "alten Fluch" zu einer zufälligen Stelle auf deinem Deck hinzu. Wenn Sie den "Alten Fluch" ziehen, erleiden Sie 7 Schadenspunkte.

Schlucht Tyrann Mukura 0.8456800580024719
Schrei: Fügen Sie Ihrer Hand 2 "Bananen" hinzu.
#Kürzung
Eingang Ausgabe
ref_upload (3).png ref_upload(4).png

Dies hat auch eine solide Funktion wie "Addiere ~ \ * \ * \ * \ * zu zufälligen Positionen auf dem Deck des Feindes. Wenn \ * \ * \ * \ * ~ ~ gezeichnet wird." Ich werde. Oben befinden sich auch "Elise Starseeker" und "Ancient Shade", die Karten an zufälligen Positionen auf dem Deck einlegen.

Eingangskarte: "Road Jaluxus"

terminal


Straße Jaluxus
Schrei: Dein Held wird zerstört und Lord Jaluxus wird dein Held.
--------------------is similar to--------------------

Leader Execution 0.8202652335166931
Verzweifelt: Lagunaros, der König des Feuers, wird sein Held.

Befehl 0.8199278712272644
Während dieses Zuges können die Schergen der Verbündeten nicht weniger als 1 erhalten. Ziehe eine Karte.

Elise Star Seeker 0.8164669275283813
Schrei: Füge eine "Karte zum goldenen Affen" an einer zufälligen Stelle auf deinem Deck hinzu.

Tasker's Spear Matcher 0.8136664032936096
Schrei: Zeige einen der Deckschergen jedes Spielers. Wenn dein Diener mehr kostet, heilt dein Held um 7.

Tödliche Ichiya 0.8121815323829651
Zerstöre einen zufälligen feindlichen Diener.
#Kürzung
Eingang Ausgabe
ref_upload (5).png ref_upload(6).png

"Road Jaluxus" ist eine Karte mit einem seltsamen Effekt, der deinen Helden verändert. Die einzigen Karten, die diesen Effekt haben, sind "Road Jaluxus" und "Executors, the Leading Elder". In diesem Ergebnis ist die Ähnlichkeit zwischen den beiden hoch, so dass gesagt werden kann, dass die Merkmale ziemlich gut aufgenommen sind.

Zusammenfassung

Es stellt sich heraus, dass auch kurze Texte wie Kartentexte wie Hearthstone mit doc2vec erfolgreich vektorisiert werden können. Als Korpus konnte ich mit nur 922 Blatt viel Genauigkeit erzielen. In Bezug auf die Parameter von Doc2Vec habe ich auf das in den Referenzen gezeigte Papier verwiesen. Nebenbei habe ich es mit Yugiohs Karte versucht, aber ich wusste nicht, ob es ähnlich war, weil ich mit Yugioh nicht vertraut war, also hörte ich auf. Ich werde die Quelle und das Modell auf Github hochladen. Wenn Sie interessiert sind, versuchen Sie es bitte. https://github.com/GuiltyMorishita/card2vec

Verweise

Distributed Representations of Sentences and Documents An Empirical Evaluation of doc2vec with Practical Insights into Document Embedding Generation

Recommended Posts

Ich suchte mit Deep Learning nach einer ähnlichen Karte von Hearthstone
Ich habe den Deep Learning Framework Chainer installiert
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Ich habe mit ChainerRL Deep Enforcement Learning (Double DQN) ausprobiert
Versuchen Sie mit Kipoi tiefes Erlernen der Genomik
Emotionale Analyse von Tweets mit Deep Learning
Eine Sammlung von Tipps zur Beschleunigung des Lernens und Denkens mit PyTorch
Ich habe GAN mit Keras gemacht, also habe ich ein Video des Lernprozesses gemacht.
Ein Memorandum zum Studieren und Implementieren von Deep Learning
Implementierung eines Deep Learning-Modells zur Bilderkennung
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Eine Geschichte über die Vorhersage des Wechselkurses mit Deep Learning
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich habe mit Tkinter ein Fenster für die Protokollausgabe erstellt
Deep Learning 1 Übung des Deep Learning
Mongodb Kürzeste Einführung (2) Ich habe nach Zehntausenden gesucht
Ich habe versucht, tief zu lernen
Techniken zum Verständnis der Grundlagen von Deep-Learning-Entscheidungen
Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Erstellen Sie durch tiefes Lernen einen "Bot, der Ihnen AV-Schauspielerinnen mit ähnlichen Gesichtern sagt"
Ich habe einen einfachen RPA für die Anmeldung mit Selen ausprobiert
Eine Szene, in der GPU für tiefes Lernen nützlich ist?
Ich habe nach dem Inhalt von CloudWatch Logs Agent gesucht
Verändert TensorFlow das Bild des tiefen Lernens? Was ich dachte, nachdem ich ein wenig berührt hatte
Japanische Übersetzung der öffentlichen Unterrichtsmaterialien des Deep Learning Nano Degree
Ich habe ein Demo-Programm zur linearen Transformation einer Matrix geschrieben
Erstellen Sie mit Docker eine Umgebung für "Deep Learning von Grund auf neu"
(Jetzt) Erstellen Sie eine GPU Deep Learning-Umgebung mit GeForce GTX 960
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Ich habe versucht, Tensorboard zu verwenden, ein Visualisierungstool für maschinelles Lernen
Ich habe einen Ressourcenmonitor für Raspberry Pi mit einer Tabelle erstellt
Ich habe ein Lernkit für word2vec / doc2vec / GloVe / fastText erstellt
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Eine Geschichte über einen 40-jährigen Ingenieurmanager, der "Deep Learning for ENGINEER" bestanden hat
Ich habe das Toho-Projekt mit Deep Learning aufgenommen ... ich wollte.
Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren
Drehen Sie ein Array von Zeichenfolgen mit einer for-Anweisung (Python3).
Ich habe keine GPU, aber ich werde Deep Learning ausprobieren
Versuchen Sie es mit TensorFlow
Deep Running 2 Tuning von Deep Learning
Deep Kernel Learning mit Pyro
Versuchen Sie Deep Learning mit FPGA
Deep Learning für die Bildung von Verbindungen?
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Generiere Pokemon mit Deep Learning
Ich habe nach CD-Befehlen gesucht.
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Ich habe versucht, Deep Learning mit Spark × Keras × Docker skalierbar zu machen
Erstellen einer Windows 7-Umgebung für eine Einführung in das maschinelle Lernen mit Python
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Maschinelles Lernen mit Docker (42) Programmieren von PyTorch für Deep Learning Von Ian Pointer
Multi Layer Perceptron für Deep Learning (Deep Learning mit Python; MPS Yokohama Deep Learning Series)
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
Zusammenfassung der Seiten, die zum Studium des Deep Learning Framework Chainer nützlich sind