Récemment, Doc2Vec est intéressant, donc je fais diverses choses. J'ai trouvé l'article suivant, alors je l'ai essayé moi-même. → J'ai cherché une carte similaire de MTG avec Doc2Vec
Word2Vec considère Word comme un vecteur, mais Doc2Vec (Paragraph2Vec) voit Document comme un ensemble de Word et attribue un vecteur pour réaliser la similitude entre les documents et le calcul vectoriel. ..
Par exemple, vous pouvez calculer la similitude entre les articles de presse, la similitude entre les CV, la similitude entre les livres, et bien sûr la similitude entre le profil d'une personne et un livre. Tous sont ciblés.
Source: http://qiita.com/okappy/items/32a7ba7eddf8203c9fa1
Carte Heartstone de Blizzard 922 textes
Échantillon de carte
Le corpus est extrait de la liste des cartes Hearthstone des 4 tortues (http://www.4gamer.net/games/209/G020915/FC20140702001/). Cette fois, j'ai utilisé Scrapy. Créez un projet avec la commande suivante.
terminal
$ scrapy startproject hearth_stone
Le fichier suivant sera créé.
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
Tout d'abord, définissez la structure de données à afficher dans ʻitems.py`. Cette fois, je n'ai besoin que du nom et du texte, mais je peux l'utiliser à l'avenir afin de gratter toutes les données de la carte.
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()
Ensuite, créez un Spider (robot d'exploration).
terminal
# For example, to create a new spider:
# scrapy genspider mydomain mydomain.com
$ scrapy genspider hearthstone 4gamer.net
Le fichier suivant sera créé.
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
Réécrivez ceci pour le site des 4 tortues.
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
Maintenant que vous êtes prêt à gratter, exécutez le robot d'exploration.
Vous pouvez spécifier le nom du fichier de sortie avec -o
. (Le type de fichier est automatiquement déterminé à partir de l'extension)
terminal
$ scrapy crawl hearthstone -o hearth_stone.json
Si l'exploration / scraping réussit, le fichier suivant sera créé. Cela ressemble à un chiffrement, mais c'est juste Unicode, donc ça va.
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"},
#réduction
]
Utilisez le corpus créé pour entraîner doc2vec et créer un modèle. Il est exécuté avec la structure de répertoires suivante.
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
Créez un modèle de doc2vec avec le code suivant.
card2vec.py
# -*- coding: utf-8 -*-
import json
import MeCab
from gensim.models import doc2vec
import os
def load_json(target_game_name):
#Création de données d'entrée pour le nom de la carte et le texte de la carte
names = []
text = ""
texts = []
#Spécifiez la sortie de Mecab en tant que division
mecab = MeCab.Tagger("-Owakati")
json_path = target_game_name + "/" + target_game_name + ".json"
#Analyse morphologique du texte sur la carte et division du texte en une chaîne séparée par des sauts de ligne
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")
#Lire le texte de la carte
card_text = doc2vec.TaggedLineDocument(target_game_name + ".txt")
#Apprentissage
model = doc2vec.Doc2Vec(card_text, size=300, window=8, min_count=1,
workers=4, iter=400, dbow_words=1, negative=5)
#Enregistrer le modèle
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)
card2vec.Poursuite de py
#Nom de la carte pour laquelle vous souhaitez rechercher une carte similaire
TARGET_CARD_NAME = "Hogger"
card_index = names.index(TARGET_CARD_NAME)
#Recevez une liste de cartes similaires et de taples de similitude (10 principales similitudes)
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")
Essayez de sortir une carte similaire avec le nom de la carte comme entrée. Cette fois, j'entre personnellement ma carte préférée.
terminal
$ python card2vec.py
Hogger
À la fin de votre tour, faites une provocation 2/Invoquez 1 Noor sur 2.
--------------------is similar to--------------------
Elwin's Disaster Hogger 0.9119920134544373
Chaque fois que ce serviteur est endommagé, il a une provocation 2/Invoquez 1 Noor sur 2.
Destructeur d'obsidienne 0.8980860114097595
À la fin de votre tour, faites une provocation 1/Invoquez 1 scarabée.
Pierre d'invocation 0.8811841011047363
Chaque fois que vous lancez un sort, invoquez un serviteur aléatoire du même coût.
Image miroir 0.8686900734901428
0 avec provocation/Invoquez 2 serviteurs de 2.
Isera 0.8627046346664429
À la fin de votre tour, ajoutez une carte de rêve à votre main.
#réduction
contribution | production |
---|---|
Celui avec la plus grande similitude avec l'entrée "Hogger" était "Elwin's Disaster Hogger". Comme vous pouvez le voir, il est intéressant que la même carte Hogger ait été sortie avec juste le texte. Les 2ème et 3ème cartes et le texte de la carte sont "Summon \ * \ * \ * \ * when ~ ~", donc il est pris avec une assez grande précision.
terminal
Note de fer Jaguar
Cri: Ajoutez 1 "mine terrestre enterrée" à un emplacement aléatoire sur le deck ennemi. "Mine enterrée" explose lorsqu'elle est tirée, infligeant 10 dégâts.
--------------------is similar to--------------------
Araignée de terre 0.8792235851287842
Ajoutez 3 cartes "Embuscade" à chaque position aléatoire du deck ennemi. Lorsque "Embuscade" est tiré, 4 à votre place/Invoquez 1 Nervian sur 4.
Elise Chercheuse d'étoiles 0.8761336803436279
Cri: Ajoutez une "Carte au singe d'or" à un emplacement aléatoire de votre deck.
Arme destructrice 0.8525710105895996
Au début de votre tour, infligez 2 dégâts à un ennemi aléatoire.
Ombre ancienne 0.8471906185150146
Cri: ajoutez une «malédiction ancienne» à un emplacement aléatoire de votre deck. Si vous piochez "Ancient Curse", vous subirez 7 dégâts.
Gorge Tyrant Mukura 0.8456800580024719
Cri: Ajoutez 2 "bananes" à votre main.
#réduction
contribution | production |
---|---|
Cela a également une fonctionnalité solide telle que "Ajouter ~ \ * \ * \ * \ * à des positions aléatoires sur le deck de l'ennemi. Si \ * \ * \ * \ * est tiré ~ ~." Je vais. "Elise Starseeker" et "Ancient Shade", qui insèrent des cartes à des positions aléatoires sur le jeu, sont également au sommet.
terminal
Route Jaluxus
Criez: Votre héros est détruit et Lord Jaluxus devient votre héros.
--------------------is similar to--------------------
Exécution du chef 0.8202652335166931
Désespéré: Lagunaros, le roi du feu, devient son héros.
Commande 0.8199278712272644
Pendant ce tour, les serviteurs des alliés ne peuvent pas obtenir moins de 1. Dessiner une carte.
Elise Chercheuse d'étoiles 0.8164669275283813
Cri: Ajoutez une "Carte au singe d'or" à un emplacement aléatoire de votre deck.
Matcher de lance de Tasker 0.8136664032936096
Cri: Montrez l'un des sbires de deck de chaque joueur Si votre serviteur coûte plus cher, soignez votre héros de 7.
Mortelle Ichiya 0.8121815323829651
Détruisez un serviteur ennemi aléatoire.
#réduction
contribution | production |
---|---|
"Road Jaluxus" est une carte avec un effet étrange qui change votre héros. Les seules cartes qui ont cet effet sont "Road Jaluxus" et "Executors, the Leading Elder". Dans ce résultat, la similitude entre les deux est élevée, on peut donc dire que les fonctionnalités sont assez bien prises.
Il s'avère que même des textes courts comme des textes de cartes comme Hearthstone peuvent être vectorisés avec succès avec doc2vec. En tant que corpus, j'ai pu obtenir beaucoup de précision avec seulement 922 feuilles. Concernant les paramètres de Doc2Vec, je me suis référé au document présenté dans les références. En passant, je l'ai essayé avec la carte de Yugioh, mais je ne savais pas si c'était similaire parce que je ne connaissais pas Yugioh, alors j'ai arrêté. Je téléchargerai le jeu de sources et de modèles sur Github, donc si vous êtes intéressé, essayez-le. https://github.com/GuiltyMorishita/card2vec
Distributed Representations of Sentences and Documents An Empirical Evaluation of doc2vec with Practical Insights into Document Embedding Generation
Recommended Posts