Qual Pokémon Você Deve Comer no Seu Jantar: Uma Abordagem com Machine Learning
English version here.
Neste projeto, iremos descobrir se os processos e técnicas mais comuns de Machine Learning são suficientes para determinar quais dos 898 Pokémons que aparecem até a 8ª geração dos jogos são comestíveis.
No mundo de Pokémon, existe uma abundância de criaturas e certamente nem todas são capturadas e treinadas para batalhas. Algumas destas mantêm-se selvagens, se tornam bombeiros, ou ainda, figuras paternas para protagonistas de 10 anos. Mas essa é toda a extensão de seu uso no universo Pokémon?
Pokémons são essencialmente feitos de carne ou plantas, isso quando não são feitos de pedra, metal, lama ou lixo. Separando o joio do trigo, podemos supor que como existem apenas pokémons e humanos, e nem todos os humanos desse mundo são veganos, logo pokémons feitos de carne são usados como rebanho e os feitos de planta como plantações, de uma forma ou de outra. Uma vez que neste universo há a necessidade de transformar pokémons em comida, podemos classificá-los em comestíveis ou não-comestíveis.
Antes de determinar quais pokémons ficam debaixo da mesa de jantar esperando por ração e quais ficam em cima da mesa com uma maçã na boca, por favor, vamos evitar falar da ética de comer pokémons? Se você pega o ovo da bolsa de uma Chansey e frita enquanto ela assiste, qual a moral disso? Com certeza esse projeto não quer chegar nem perto de abordar isso, mesmo o sabor desses ovos sendo extensivamente discutidos em várias entradas da Pokédex. No máximo iremos abordar se os humanos do mundo Pokémon acham regionalmente aceito comer determinados pokémon, como no caso do Farfetch’d, que em Galar não são apreciados como iguarias, diferente do resto do mundo que ama um peito de Farfetch’d preparado com o alho-poró que ele carrega.
Para fazer uma análise de Deep Learning, queremos um vetor com dados relevantes de várias partes do jogos da franquia principal de Pokémon, como a pokédex e falas nos animes e mangás da série.
Falando em Pokédex, usando as entradas dela, podemos analisar se alguns pokémons servem de alimento para humanos e outros pokémon. Para uma investigação destas entradas, faremos uma raspagem dos dados da Bulbapedia, uma poderosa Wiki sobre os monstros de bolso. Detalhes dessa raspagem estão aqui.
Após o devido tratamento destes dados, visível aqui, faremos uma análise de sentimento usando Processamento de Linguagem Natural, o NLP, onde o sentimento em questão não chega a dizer se uma barbatana pode ser consumida a ponto do pokémon ser vítima de pesca excessiva (Sharpedo – Pokémon Moon), mas é bom o suficiente para dizer se o pokémon é apto para consumo.
Para que uma substância seja comestível, em suma, são levados em consideração vários fatores. Como primeiro ponto, a referida substância não pode ser tóxica ou prejudicial. Por outro lado, deve satisfazer as necessidades nutricionais (fornecendo energia ao corpo), sociais (fazendo parte da cultura) e psicológicas (seu consumo proporciona gratificação), já que certas substâncias podem ser nutritivas, mas negativas ao nível social ou psicológico. Temos aí nossas quatro primeiras coordenadas do vetor.
Através do NLP, vamos extrair as palavras-chave de cada conjunto de entradas do pokémon, dar uma nota para cada uma destas palavras usando o método de Frequência do Termo-Inverso da Frequência nos Documentos, o TF-IDF.
Após fazermos nuvens de palavras para cada pokémon, faremos uma lista manual de termos relevantes a cada fator (toxicidade, nutritividade, cultura e psicologia), pegamos a nota que o TF-IDF gera e somamos, formando assim os quatros Índices de Comestibilidade, que determinam o quanto a Pokédex fala sobre os fatores de comestibilidade. Os detalhes desse processamento estão aqui.
Mas isso por si só não é suficiente para determinar qual pokémon vai sair do seu computador e ir para a frigideira. Precisamos de mais coordenadas para o vetor. E uma dica para essa informação vem da própria Chansey botando ovos tão deliciosos que são devorados com avidez, mesmo por pessoas que perderam o apetite. (Pokémon Emerald). Pokémons são ovíparos, sem exceção. E eles são classificados em 15 grupos bem definidos, que dão uma direção sobre a aparência e a biologia de cada pokémon em cada grupo. Com essa classificação, temos mais duas variáveis para o nosso vetor, pois os pokémons têm um ou dois grupos de ovo.
Vamos incluir também dados técnicos dos jogos. A base de amizade, uma variável que determina o quão amigo do treinador o pokémon é, a base do HP, que tem correlação com quanto o pokémon é proteico e o peso dele, um indicativo de que o pokémon pode produzir muito ou pouco alimento e por último e não menos importante, os tipos do pokémon.
Assim, nosso vetor terá 11 coordenadas e será formado da seguinte maneira:
(índice de toxicidade, índice de nutritividade, índice de cultura, índice de psicologia, grupo de ovo 1, grupo de ovo 2, base de amizade, base de HP, peso, tipo 1, tipo 2)
Agora temos tudo para a máquina fazer sua mágica! Usaremos a API Keras da plataforma Tensorflow.
Para que a máquina aprenda, ela precisa de conhecer alguns pokémons que já sabemos se são ou não comestíveis. Os artigos “Pokémon food”[2] e “15 Confirmed Pokemon That Humans Eat”[4] dão informações valiosas nessa busca. A lista de comestíveis vem diretamente desses artigos, somados com pré e pós evoluções. Para montar a lista de pokémons não-comestíveis, escolhi pokémons evidentemente inorgânicos, como pedras e fantasmas, pokémons super inteligentes e pokémons confirmados pelos artigos acima como não-comestíveis.
Assim, temos as seguintes listas:
Comestíveis:
Shuckle, Krabby, Kingler, Arrokuda, Barraskewda, Gabite, Garchomp, Appletun, Flapple, Slowpoke, Chansey, Blissey, Farfetch’d, Cherubi, Cherrim, Carvanha, Sharpedo, Crabrawler , Crabominable, Mareep, Flaaffy, Ampharos, Clauncher, Crawdaunt, Basculin, Seadra, Miltank, Grotle , Tauros, Snover, Tropius, Paras, Parasect, Skiddo, Combee, Vespiquen, Octillery, Ribombee, Goldeen , Seaking.
Não-Comestíveis:
Porygon, Porygon2, Porygon-Z, Abra, Kadabra, Alakazam, Geodude, Graveler, Golem, Grimer, Muk, Gastly, Haunter, Gengar, Mr. Mime, Mime Jr., Mr. Rime, Ditto, Houndour, Houndoom, Suicune, Arceus, Trubbish, Garbodor, Slugma, Magcargo, Rotom, Toxel, Toxtricity, Magikarp, Gyarados, Meowth, Persian, Perrserker, Slowking.
Conclusões
Com os 75 pokémons dessa lista em mãos, podemos treinar e testar nosso modelo, que está todo detalhado aqui.
Definindo a comestibilidade de apenas 8,3% dos pokémons até a oitava geração, conseguimos prever bem quais são suculentos e sem veneno para fazer um banquete, com a acurácia do nosso modelo atingindo 70%.
E assim voilà! Com vocês os 898 pokémons separados por comestibilidade, usando deep learning.
Comestíveis:
Bulbasaur, Ivysaur, Venusaur, Charmander, Charmeleon, Charizard, Squirtle, Wartortle, Blastoise, Caterpie, Metapod, Butterfree, Weedle, Kakuna, Beedrill, Pidgey, Pidgeotto, Pidgeot, Rattata, Raticate, Spearow, Fearow, Ekans, Arbok, Pikachu, Raichu, Sandshrew, Nidoran♀, Nidorina, Nidoqueen, Nidoran♂, Nidorino, Nidoking, Clefairy, Clefable, Vulpix, Ninetales, Jigglypuff, Wigglytuff, Zubat, Golbat, Oddish, Gloom, Vileplume, Paras, Parasect, Venonat, Venomoth, Psyduck, Golduck, Growlithe, Arcanine, Poliwag, Poliwhirl, Poliwrath, Machoke, Machamp, Bellsprout, Weepinbell, Victreebel, Tentacruel, Ponyta, Rapidash, Slowpoke, Slowbro, Magnemite, Farfetch’d, Doduo, Dodrio, Seel, Dewgong, Shellder, Hypno, Krabby, Kingler, Electrode, Exeggcute, Exeggutor, Cubone, Marowak, Lickitung, Koffing, Rhyhorn, Rhydon, Chansey, Tangela, Kangaskhan, Horsea, Seadra, Goldeen, Seaking, Starmie, Scyther, Magmar, Pinsir, Tauros, Lapras, Eevee, Vaporeon, Jolteon, Flareon, Omastar, Aerodactyl, Zapdos, Moltres, Mew, Chikorita, Bayleef, Meganium, Cyndaquil, Quilava, Typhlosion, Totodile, Croconaw, Feraligatr, Sentret, Furret, Hoothoot, Noctowl, Ledyba, Ledian, Spinarak, Ariados, Crobat, Chinchou, Lanturn, Igglybuff, Togetic, Natu, Xatu, Mareep, Flaaffy, Ampharos, Bellossom, Marill, Azumarill, Politoed, Hoppip, Skiploom, Jumpluff, Aipom, Sunkern, Sunflora, Yanma, Wooper, Quagsire, Wobbuffet, Girafarig, Pineco, Forretress, Dunsparce, Gligar, Snubbull, Granbull, Qwilfish, Scizor, Shuckle, Heracross, Teddiursa, Ursaring, Corsola, Remoraid, Octillery, Delibird, Kingdra, Donphan, Stantler, Smeargle, Magby, Miltank, Blissey, Entei, Larvitar, Celebi, Treecko, Grovyle, Sceptile, Torchic, Combusken, Blaziken, Mudkip, Marshtomp, Swampert, Zigzagoon, Linoone, Wurmple, Silcoon, Beautifly, Cascoon, Dustox, Lotad, Lombre, Ludicolo, Seedot, Nuzleaf, Shiftry, Taillow, Swellow, Wingull, Pelipper, Surskit, Masquerain, Shroomish, Breloom, Slakoth, Vigoroth, Slaking, Nincada, Ninjask, Whismur, Loudred, Exploud, Makuhita, Hariyama, Azurill, Skitty, Delcatty, Electrike, Plusle, Minun, Volbeat, Illumise, Roselia, Gulpin, Swalot, Carvanha, Sharpedo, Wailmer, Numel, Torkoal, Grumpig, Spinda, Trapinch, Vibrava, Flygon, Cacnea, Cacturne, Swablu, Altaria, Zangoose, Seviper, Lunatone, Solrock, Barboach, Whiscash, Corphish, Crawdaunt, Claydol, Milotic, Castform, Kecleon, Tropius, Snorunt, Sealeo, Walrein, Huntail, Gorebyss, Relicanth, Luvdisc, Shelgon, Salamence, Latias, Jirachi, Turtwig, Grotle, Chimchar, Monferno, Infernape, Piplup, Prinplup, Empoleon, Starly, Staravia, Staraptor, Bidoof, Bibarel, Kricketot, Kricketune, Shinx, Luxio, Luxray, Budew, Roserade, Rampardos, Burmy, Wormadam, Mothim, Combee, Vespiquen, Pachirisu, Buizel, Floatzel, Cherubi, Cherrim, Shellos, Gastrodon, Ambipom, Drifloon, Drifblim, Buneary, Lopunny, Glameow, Purugly, Stunky, Skuntank, Happiny, Chatot, Gabite, Garchomp, Munchlax, Lucario, Hippopotas, Skorupi, Drapion, Croagunk, Toxicroak, Carnivine, Finneon, Lumineon, Mantyke, Snover, Abomasnow, Lickilicky, Tangrowth, Electivire, Magmortar, Togekiss, Yanmega, Leafeon, Gliscor, Gallade, Froslass, Uxie, Mesprit, Azelf, Cresselia, Phione, Manaphy, Shaymin, Victini, Snivy, Servine, Serperior, Tepig, Pignite, Emboar, Oshawott, Dewott, Samurott, Patrat, Watchog, Lillipup, Herdier, Stoutland, Pansage, Simisage, Pansear, Simisear, Panpour, Simipour, Pidove, Tranquill, Unfezant, Blitzle, Zebstrika, Boldore, Woobat, Swoobat, Drilbur, Excadrill, Audino, Timburr, Conkeldurr, Tympole, Palpitoad, Seismitoad, Sewaddle, Swadloon, Leavanny, Venipede, Whirlipede, Cottonee, Whimsicott, Petilil, Lilligant, Basculin, Sandile, Krokorok, Krookodile, Darumaka, Darmanitan, Maractus, Dwebble, Sigilyph, Tirtouga, Carracosta, Archen, Archeops, Minccino, Cinccino, Ducklett, Swanna, Deerling, Sawsbuck, Emolga, Karrablast, Escavalier, Foongus, Amoonguss, Frillish, Jellicent, Alomomola, Joltik, Galvantula, Ferroseed, Ferrothorn, Eelektross, Haxorus, Shelmet, Accelgor, Stunfisk, Mienfoo, Mienshao, Druddigon, Golett, Bouffalant, Rufflet, Braviary, Heatmor, Durant, Hydreigon, Larvesta, Volcarona, Thundurus, Landorus, Keldeo, Meloetta, Genesect, Chespin, Quilladin, Chesnaught, Fennekin, Braixen, Delphox, Froakie, Frogadier, Greninja, Bunnelby, Diggersby, Fletchling, Fletchinder, Talonflame, Scatterbug, Spewpa, Vivillon, Litleo, Pyroar, Flabébé, Floette, Florges, Skiddo, Gogoat, Pancham, Pangoro, Furfrou, Espurr, Meowstic, Spritzee, Aromatisse, Swirlix, Slurpuff, Inkay, Malamar, Barbaracle, Skrelp, Dragalge, Clauncher, Clawitzer, Helioptile, Heliolisk, Tyrunt, Amaura, Aurorus, Sylveon, Hawlucha, Dedenne, Carbink, Goodra, Noivern, Hoopa, Volcanion, Rowlet, Dartrix, Decidueye, Litten, Torracat, Incineroar, Popplio, Brionne, Primarina, Pikipek, Trumbeak, Toucannon, Yungoos, Gumshoos, Grubbin, Charjabug, Vikavolt, Crabrawler, Crabominable, Oricorio, Cutiefly, Ribombee, Wishiwashi, Mareanie, Toxapex, Mudbray, Dewpider, Araquanid, Fomantis, Lurantis, Morelull, Shiinotic, Salandit, Salazzle, Stufful, Bewear, Bounsweet, Steenee, Tsareena, Comfey, Oranguru, Passimian, Wimpod, Golisopod, Pyukumuku, Silvally, Komala, Togedemaru, Bruxish, Kommo-o, Tapu Koko, Tapu Bulu, Tapu Fini, Lunala, Pheromosa, Kartana, Blacephalon, Grookey, Thwackey, Rillaboom, Scorbunny, Raboot, Cinderace, Sobble, Drizzile, Inteleon, Skwovet, Greedent, Blipbug, Dottler, Orbeetle, Gossifleur, Eldegoss, Wooloo, Dubwool, Chewtle, Drednaw, Yamper, Carkol, Applin, Flapple, Appletun, Silicobra, Sandaconda, Arrokuda, Barraskewda, Sizzlipede, Centiskorch, Clobbopus, Grapploct, Polteageist, Morgrem, Grimmsnarl, Cursola, Sirfetch’d, Runerigus, Milcery, Alcremie, Falinks, Pincurchin, Eiscue, Indeedee, Morpeko, Cufant, Dracozolt, Arctozolt, Arctovish, Duraludon, Urshifu, Regieleki, Regidrago, Calyrex.
Não-Comestíveis:
Sandslash, Diglett, Dugtrio, Meowth, Persian, Mankey, Primeape, Abra, Kadabra, Alakazam, Machop, Tentacool, Geodude, Graveler, Golem, Magneton, Grimer, Muk, Cloyster, Gastly, Haunter, Gengar, Onix, Drowzee, Voltorb, Hitmonlee, Hitmonchan, Weezing, Staryu, Mr. Mime, Jynx, Electabuzz, Magikarp, Gyarados, Ditto, Porygon, Omanyte, Kabuto, Kabutops, Snorlax, Articuno, Dratini, Dragonair, Dragonite, Mewtwo, Pichu, Cleffa, Togepi, Sudowoodo, Espeon, Umbreon, Murkrow, Slowking, Misdreavus, Unown, Steelix, Sneasel, Slugma, Magcargo, Swinub, Piloswine, Mantine, Skarmory, Houndour, Houndoom, Phanpy, Porygon2, Tyrogue, Hitmontop, Smoochum, Elekid, Raikou, Suicune, Pupitar, Tyranitar, Lugia, Ho-Oh, Poochyena, Mightyena, Ralts, Kirlia, Gardevoir, Shedinja, Nosepass, Sableye, Mawile, Aron, Lairon, Aggron, Meditite, Medicham, Manectric, Wailord, Camerupt, Spoink, Baltoy, Lileep, Cradily, Anorith, Armaldo, Feebas, Shuppet, Banette, Duskull, Dusclops, Chimecho, Absol, Wynaut, Glalie, Spheal, Clamperl, Bagon, Beldum, Metang, Metagross, Regirock, Regice, Registeel, Latios, Kyogre, Groudon, Rayquaza, Deoxys, Torterra, Cranidos, Shieldon, Bastiodon, Mismagius, Honchkrow, Chingling, Bronzor, Bronzong, Bonsly, Mime Jr., Spiritomb, Gible, Riolu, Hippowdon, Weavile, Magnezone, Rhyperior, Glaceon, Mamoswine, Porygon-Z, Probopass, Dusknoir, Rotom, Dialga, Palkia, Heatran, Regigigas, Giratina, Darkrai, Arceus, Purrloin, Liepard, Munna, Musharna, Roggenrola, Gigalith, Gurdurr, Throh, Sawk, Scolipede, Crustle, Scraggy, Scrafty, Yamask, Cofagrigus, Trubbish, Garbodor, Zorua, Zoroark, Gothita, Gothorita, Gothitelle, Solosis, Duosion, Reuniclus, Vanillite, Vanillish, Vanilluxe, Klink, Klang, Klinklang, Tynamo, Eelektrik, Elgyem, Beheeyem, Litwick, Lampent, Chandelure, Axew, Fraxure, Cubchoo, Beartic, Cryogonal, Golurk, Pawniard, Bisharp, Vullaby, Mandibuzz, Deino, Zweilous, Cobalion, Terrakion, Virizion, Tornadus, Reshiram, Zekrom, Kyurem, Honedge, Doublade, Aegislash, Binacle, Tyrantrum, Goomy, Sliggoo, Klefki, Phantump, Trevenant, Pumpkaboo, Gourgeist, Bergmite, Avalugg, Noibat, Xerneas, Yveltal, Zygarde, Diancie, Rockruff, Lycanroc, Mudsdale, Sandygast, Palossand, Type: Null, Minior, Turtonator, Mimikyu, Drampa, Dhelmise, Jangmo-o, Hakamo-o, Tapu Lele, Cosmog, Cosmoem, Solgaleo, Nihilego, Buzzwole, Xurkitree, Celesteela, Guzzlord, Necrozma, Magearna, Marshadow, Poipole, Naganadel, Stakataka, Zeraora, Meltan, Melmetal, Rookidee, Corvisquire, Corviknight, Nickit, Thievul, Boltund, Rolycoly, Coalossal, Cramorant, Toxel, Toxtricity, Sinistea, Hatenna, Hattrem, Hatterene, Impidimp, Obstagoon, Perrserker, Mr. Rime, Snom, Frosmoth, Stonjourner, Copperajah, Dracovish, Dreepy, Drakloak, Dragapult, Zacian, Zamazenta, Eternatus, Kubfu, Zarude, Glastrier, Spectrier.
Referências
- https://m.bulbapedia.bulbagarden.net
- https://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_food
- https://conceito.de/comestivel
- https://www.thegamer.com/pokemon-humans-eat-confirmed/
- https://www.polygon.com/videos/2020/12/28/22195388/pokemon-edibility-unraveled
- https://modernfarmer.com/2014/05/food-politics-pokemon/
- https://www.kaggle.com/mariotormo/complete-pokemon-dataset-updated-090420/discussion/195347
- https://www.gamespot.com/gallery/do-people-eat-pokemon-13-examples-from-the-anime-o/2900-2769/#1
Find me in more places! My linktree.