[PYTHON] Calcul de similarité entre les épisodes précurseurs à l'aide de la chronologie en direct et du modèle de sujet

Cet article est l'article du 18e jour du Precure Advent Calendar 2015. Nous sommes le 19 décembre aujourd'hui, mais je crois que tous ceux qui aiment Precure me pardonneront avec un cœur plus large que la mer!

Cet article et cette expérience sont destinés à être WIP.

Introduction Je veux calculer la similitude entre cette histoire et cette histoire dans cet anime, ou je veux me regrouper entre des histoires similaires. Quel genre de moyens existe-t-il dans un tel cas? Une façon de faire est d'utiliser la chronologie en direct de Twitter. Étant donné que la chronologie en direct permet au spectateur de tweeter la situation et les impressions tout en regardant l'animation, elle peut être considérée comme un document qui explique l'animation dans une correspondance individuelle avec l'épisode de l'animation. Ce document = la similitude entre les chronologies d'animation en direct peut être utilisé comme un indice de la similitude entre les épisodes.

Cette fois, j'aimerais calculer la similitude entre chaque épisode de Go! Princess Precure avec cette politique. Plus précisément, calculons la similitude entre les chronologies en direct de chaque histoire à l'aide de LDA (Latent Dirichlet Allocation), qui est l'un des modèles de sujet.

Outils à utiliser, etc.

Les données

--2015 / 2/1 (Episode 1) ~ 2015/12/13 (Episode 44) Chronologie en direct Go! Princess Precure sur Twitter (37 épisodes au total car il arrive parfois que l'enregistrement de la chronologie ait échoué )

Les 20 premiers mots apparaissant dans ces cas sont les suivants.

Kirara 31344
Bonjour 25404
Personne 21358
Bon 19218
M. 19092
Dream 17395
Minami 17061
Haruharu 15956
Temps 15824
Towa 14579
Kanata 14426
Yui 13961
Fermer 13844
Mignon 13311
Fermer 13049
Puff 11786
Devenir 11757
Relooking 10679
Voir 10342
Twinkle 9483

Glitter fort. Les deux mots «précure» et «princesse» sont à l'origine au-dessus de Kirara.

Expérience

À propos de LDA

L'explication correcte de LDA est impossible pour moi maintenant. Mais vous avez Google.

Expliquant LDA jusqu'à l'explication des termes, LDA déduit des sujets potentiels à partir de la documentation. Par exemple, dans le cas d'articles d'actualité, ce sujet correspond intuitivement à des catégories telles que «politique», «sports» et «art». La LDA suppose qu'un document contient potentiellement un certain pourcentage de chaque sujet et représente le document comme une distribution stochastique de sujets. Autrement dit, un document a 80% de chances de parler de politique, 15% d'art, 3% de sport, etc. Je vais. De plus, dans LDA, chaque sujet correspond à la distribution des probabilités d'occurrence de mot. En d'autres termes, dans le thème «politique», «Obama» apparaît avec une probabilité de 7%, «Trump» avec une probabilité de 5%, «Abe» avec une probabilité de 3%, etc.

J'expliquerai le flux à partir d'ici en le remplaçant par la chronologie en direct precure. Une chronologie précise en direct pour un épisode est un long document qui décrit cet épisode. Dans Precure, il y a des moments qui se concentrent sur un personnage spécifique, comme les scènes et les moments en gros plan de Haruno Haruka, appelés "temps de Haruka". À partir de maintenant, nous supposerons que ces «temps Haruka» et «temps Kirara» sont des sujets potentiels qui existent dans la chronologie en direct précure. J'ai écrit qu'un sujet est la probabilité qu'un mot apparaisse. Dans le cas de Go! Princess Pretty Cure, le sujet «Kirara» aura une forte probabilité d'apparaître dans des mots tels que «scintillement», «beignet» et «mode».

Tout d'abord, analysons l'intégralité de la chronologie en direct de 37 Go! Princess Precure et calculons les sujets existants. Ensuite, dans le sujet que j'ai trouvé, j'ai calculé combien chaque fois était "Kirara times", "Haruka times", ... ou "Times qui n'appartiennent à personne". Je vais continuer.

Je l'ai écrit pendant longtemps, mais le fait est que dans le calcul de la similitude entre les chronologies en direct, "Haruka times", "Minami times", "Kirara times", "Towa times", "Who's" Il est utilisé comme une technologie de compression de dimension, qui est un petit index intuitif appelé "le temps qui n'est pas une chose".

L'implémentation LDA utilise une bibliothèque Python appelée gensim.

Extraire les sujets

Comme mentionné précédemment, lorsque LDA donne un ensemble de documents, il déduit les sujets qui existent dans l'ensemble de documents. Vous devez définir vous-même le nombre de sujets. Nous allons définir le nombre de sujets à 5 en supposant un sujet pour chacun des quatre Go! Princess Precure et un sujet qui n'appartient à aucun autre Precure. (Temps Haruka, temps Minami, temps Kirara, temps Towa, en supposant des temps qui n'appartiennent à personne)

Les sujets déduits en conséquence sont les suivants. Le «nombre * mot» est la probabilité qu'un mot apparaisse dans le sujet mentionné ci-dessus.

topic #0 (0.200): 0.009*Bonne journée+ 0.007*Towa+ 0.007*Homme+ 0.006*m+ 0.006*Yui+ 0.005*Bien+ 0.005*Clé+ 0.005*Transformer+ 0.005*rêver+ 0.005*Écarlate
topic #1 (0.200): 0.009*Yui+ 0.008*proche+ 0.007*Kanata+ 0.007*Haruharu+ 0.007*rêver+ 0.006*Fois+ 0.006*Bien+ 0.005*Sud+ 0.005*Homme+ 0.005*désespoir
topic #2 (0.200): 0.020*Kirara+ 0.010*Bonne journée+ 0.006*Homme+ 0.006*Bien+ 0.006*Haruharu+ 0.005*rêver+ 0.005*scintillement+ 0.005*proche+ 0.005*Fois+ 0.005*mignonne
topic #3 (0.200): 0.014*Sud+ 0.007*Haruharu+ 0.007*Bonne journée+ 0.006*Bien+ 0.006*Kirara+ 0.005*proche+ 0.005*Homme+ 0.005*Kanata+ 0.005*かわBien+ 0.004*m
topic #4 (0.200): 0.010*m+ 0.009*Kanata+ 0.008*Towa+ 0.008*fermer+ 0.007*Homme+ 0.006*Fois+ 0.006*Bonne journée+ 0.005*Bien+ 0.005*rêver+ 0.005*Sud

C'est plus comme ça que ce à quoi je m'attendais. C'est surprenant que Yui-chan soit apparu fortement, mais plus je regardais la chronologie en direct, plus je me sentais. «Haruka», «Minami», «Kirara» et «Towa» n'ont pas été décidés comme étant les ingrédients maximum, mais il n'y avait pas de honte.

Degré de similitude

Calculez la similitude cosinus entre les documents, en traitant chaque document comme une caractéristique de chaque document (c'est-à-dire en traitant chaque document comme un vecteur à 5 dimensions composé des 5 sujets ci-dessus). Ensuite, les similitudes suivantes peuvent être obtenues.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 19 21 22 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
1 0.315802 0.0 0.0 0.0 0.148118 0.0 0.0 0.0 0.997047 0.108117 0.0 0.0 0.0 0.0 0.0 0.0 0.998236 0.0 1.0 1.0 1.0 0.345272 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 0.116513 0.116513 0.116513 0.854927 0.151135 0.116513 0.472356 0.323976 0.149502 0.116513 0.141464 0.116513 0.116513 0.819519 0.814538 0.363768 0.814538 0.315962 0.315962 0.315962 0.109093 0.245021 0.0 0.814538 0.820534 0.814478 0.544964 0.472356 0.0 0.00903815 0.814489 0.0 0.143125 0.154445 0.816244
3 1.0 1.0 0.024152 0.0881911 1.0 0.0 0.0767926 0.989938 1.0 0.999529 1.0 1.0 0.0523216 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.671438 0.0 0.0 0.214036 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.99927 0.998638 0.0154795
4 1.0 0.024152 0.0881911 1.0 0.0 0.0767926 0.989938 1.0 0.999529 1.0 1.0 0.0523216 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.671438 0.0 0.0 0.214036 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.99927 0.998638 0.0154795
5 0.024152 0.0881911 1.0 0.0 0.0767926 0.989938 1.0 0.999529 1.0 1.0 0.0523216 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.671438 0.0 0.0 0.214036 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.99927 0.998638 0.0154795
6 0.00218089 0.0247291 0.0 0.147387 0.0402567 0.0247291 0.055079 0.0247291 0.0247291 0.988927 0.988987 0.204383 0.988987 0.145919 0.145919 0.145919 0.0503817 0.219115 0.0 0.988987 0.971281 0.988914 0.0905681 0.0 0.0 0.0109738 0.988928 0.0 0.0571255 0.0709432 0.989252
7 0.0877574 0.299502 0.00673912 0.1736 0.0877574 0.0877161 0.0877574 0.0877574 0.00459161 0.0 0.0 0.0 0.0 0.0 0.0 0.891625 0.735559 0.950051 0.0 0.0307165 0.0115478 0.298243 0.299502 0.950051 0.949993 0.0104241 0.950051 0.106319 0.109628 0.00135845
8 0.0 0.0767926 0.989938 1.0 0.999529 1.0 1.0 0.0523216 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.671438 0.0 0.0 0.214036 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.99927 0.998638 0.0154795
9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.995798 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
10 0.182712 0.0756657 0.07563 0.0756657 0.0756657 0.00395895 0.0 0.995374 0.0 0.997133 0.997133 0.997133 0.344283 0.0508048 0.0 0.0 0.0161952 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0756105 0.0755626 0.00117127
11 0.989787 0.98932 0.989787 0.989787 0.0517872 0.0 0.112216 0.0 0.112415 0.112415 0.112415 0.121087 0.727015 0.087664 0.0 0.212951 0.00106555 0.0 0.0 0.087664 0.0876586 0.00096186 0.087664 0.990783 0.990468 0.0153215
12 0.999529 1.0 1.0 0.0523216 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.671438 0.0 0.0 0.214036 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.99927 0.998638 0.0154795
13 0.999397 0.999397 0.0869591 0.0347166 0.00206131 0.0347166 0.0 0.0 0.0 0.0 0.678142 0.0 0.0347166 0.247816 0.034714 0.00317923 0.0 0.0 0.000385217 0.0347145 0.0 0.999806 0.999659 0.0501827
14 1.0 0.0523216 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.671438 0.0 0.0 0.214036 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.99927 0.998638 0.0154795
17 0.0523216 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.671438 0.0 0.0 0.214036 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.99927 0.998638 0.0154795
19 0.998682 0.059297 0.998682 0.0 0.0 0.0 0.0 0.238963 0.0 0.998682 0.986444 0.998608 0.0914558 0.0 0.0 0.0110814 0.998621 0.0 0.0840274 0.0979639 0.999357
21 0.0593753 1.0 0.0 0.0 0.0 0.0 0.204766 0.0 1.0 0.976745 0.999926 0.0915765 0.0 0.0 0.011096 0.99994 0.0 0.0327753 0.0467628 0.99988
22 0.0611948 0.998126 0.998126 0.998126 0.344625 0.0125306 0.0 0.0611948 0.0597717 0.0611903 0.00560401 0.0 0.0 0.000679021 0.0611911 0.0 0.00200568 0.00286164 0.0611875
26 0.0 0.0 0.0 0.0 0.204766 0.0 1.0 0.976745 0.999926 0.0915765 0.0 0.0 0.011096 0.99994 0.0 0.0327753 0.0467628 0.99988
27 1.0 1.0 0.345272 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
28 1.0 0.345272 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
29 0.345272 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
30 0.668285 0.938327 0.0 0.0117859 0.0114053 0.0 0.0 0.938327 0.938269 0.0102954 0.938327 0.0183955 0.0217185 0.0
31 0.711055 0.208365 0.356187 0.216992 0.0190813 0.0 0.711055 0.713323 0.216154 0.711055 0.691833 0.696841 0.218735
32 0.0 0.0125606 0.012155 0.0 0.0 1.0 0.999938 0.0109721 1.0 0.0196045 0.023146 0.0
33 0.976745 0.999926 0.0915765 0.0 0.0 0.011096 0.99994 0.0 0.0327753 0.0467628 0.99988
34 0.976811 0.0894461 0.0 0.0120418 0.0228789 0.97681 0.0120418 0.246198 0.259767 0.979934
35 0.0915719 0.0 0.0101176 0.0212125 1.0 0.0101176 0.032972 0.0469946 0.999829
36 0.995697 0.0 0.0010282 0.0926584 0.0 0.00303709 0.00433322 0.0926529
37 0.0 0.0 0.0 0.0 0.0 0.0 0.0
38 0.999938 0.0109721 1.0 0.0196045 0.023146 0.0
39 0.0226113 0.999932 0.0199847 0.0236888 0.0116392
40 0.0120332 0.0330089 0.0470379 0.999808
41 0.0196045 0.023146 0.0
42 0.999905 0.0490662
43 0.0620762

Cela peut être subtil. N'est-ce pas trop pic comme 0.0 ou 0.99?

Essayez de dessiner un réseau

Dessinons un réseau entre les documents en utilisant la similitude ci-dessus. Ici, nous allons créer un bord dans le graphique dynamique en créant un bord entre les documents avec une similitude de 0,99 ou plus. De plus, chaque nœud est étiqueté "Haruka times", "Minami times", "Kirara times", "Towa times" et "Other times" à ma discrétion, et est respectivement rose, bleu, jaune, rouge et blanc. Je l'ai colorée. Ce serait bien si les temps des mêmes personnes étaient proches les uns des autres en termes de réseau.

La bibliothèque Python igraph est utilisée pour construire et dessiner le réseau.

graph_kk.png

Je suis content que la cohésion jaune et blanche semble forte. Cependant, les autres ne sont ni clairs ni subtils. "Kirara" apparaît fréquemment, et le sujet Kirara peut apparaître plus fortement que d'autres.

Conclusion

** Résultats subtils. ~ Terminé ~ ** Voici les raisons possibles pour lesquelles les résultats ne sont pas bons.

Cette expérience en elle-même n'est pas un bon résultat, mais je pense personnellement que la politique de "deviner les épisodes d'anime à partir de la chronologie de l'animation en direct" est intéressante (c'est parce qu'il y a déjà des recherches sur le sport). Ce n'est pas nouveau). Tout en passant en revue les résultats de cette période, je continuerai à faire quelque chose ici.

Recommended Posts

Calcul de similarité entre les épisodes précurseurs à l'aide de la chronologie en direct et du modèle de sujet
Calcul de la similitude entre les phrases à l'aide de Word2Vec (version simplifiée)
Calcul de l'odométrie à l'aide de CNN et estimation de la profondeur Partie 2 (CNN SLAM # 2)
Calcul de similitude par MinHash
Calcul d'estimation / prédiction au Lasso et Ridge du modèle linéaire généralisé