[PYTHON] [PyTorch] Introduction à la classification des documents japonais à l'aide de BERT

introduction

Dans cet article, nous allons suivre le processus de mise au point d'un modèle BERT pré-formé à travers la tâche de catégorisation des articles de presse. Il peut être appliqué à n'importe quelle tâche de classification de document japonais en modifiant simplement les données d'entrée.

N'hésitez pas à commenter si vous remarquez des erreurs ou de meilleures façons.

Préparation préalable

Google Colaboratory est utilisé pour la mise en œuvre. Pour plus d'informations sur la configuration et l'utilisation de Google Colaboratory, consultez [cet article](https: // cpp-fu learning.com/python_colaboratory/). Cependant, aucun paramètre spécial n'est requis et si vous avez un compte Google, vous pouvez l'utiliser immédiatement, y compris le GPU, gratuitement. ** Si vous souhaitez utiliser le GPU pour la reproduction, veuillez changer l'accélérateur matériel sur "GPU" à partir de "Runtime" -> "Changer le type d'exécution" et enregistrez-le à l'avance. ** **

Classement des documents par BERT

Nous utiliserons les données publiques corpus d'actualités liveoor. Ces données sont attribuées à chaque article de presse dans l'une des neuf catégories de genre. Nous mettrons en œuvre un modèle de classification des documents par BERT pour les tâches qui entrent dans cette catégorie.

Lire les données

Tout d'abord, téléchargez les données cibles et formatez-les. Pour le traitement de cette partie, je me suis référé à cet article.

#Télécharger le corpus d'actualités de Liveoor
!wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz
!tar zxvf ldcc-20140209.tar.gz
#Création d'un fichier pour stocker les résultats de mise en forme
!echo -e "filename\tarticle"$(for category in $(basename -a `find ./text -type d` | grep -v text | sort); do echo -n "\t"; echo -n $category; done) > ./text/livedoor.tsv
#Magasin par catégorie
!for filename in `basename -a ./text/dokujo-tsushin/dokujo-tsushin-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/dokujo-tsushin/$filename`; echo -e "\t1\t0\t0\t0\t0\t0\t0\t0\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/it-life-hack/it-life-hack-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/it-life-hack/$filename`; echo -e "\t0\t1\t0\t0\t0\t0\t0\t0\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/kaden-channel/kaden-channel-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/kaden-channel/$filename`; echo -e "\t0\t0\t1\t0\t0\t0\t0\t0\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/livedoor-homme/livedoor-homme-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/livedoor-homme/$filename`; echo -e "\t0\t0\t0\t1\t0\t0\t0\t0\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/movie-enter/movie-enter-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/movie-enter/$filename`; echo -e "\t0\t0\t0\t0\t1\t0\t0\t0\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/peachy/peachy-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/peachy/$filename`; echo -e "\t0\t0\t0\t0\t0\t1\t0\t0\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/smax/smax-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/smax/$filename`; echo -e "\t0\t0\t0\t0\t0\t0\t1\t0\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/sports-watch/sports-watch-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/sports-watch/$filename`; echo -e "\t0\t0\t0\t0\t0\t0\t0\t1\t0"; done >> ./text/livedoor.tsv
!for filename in `basename -a ./text/topic-news/topic-news-*`; do echo -n "$filename"; echo -ne "\t"; echo -n `sed -e '1,3d' ./text/topic-news/$filename`; echo -e "\t0\t0\t0\t0\t0\t0\t0\t0\t1"; done >> ./text/livedoor.tsv

Lorsque vous exécutez la commande ci-dessus, un tableau avec 0 ou 1 indicateur indiquant à laquelle des 9 catégories il appartient sera affiché après le nom du fichier et le corps de l'article, `` / text / livingoor.tsv``` Il devrait être fait comme.

#Vérification
!head -10 ./text/livedoor.tsv

production



filename	article	dokujo-tsushin	it-life-hack	kaden-channel	livedoor-homme	movie-enter	peachy	smax	sports-watch	topic-news
dokujo-tsushin-4778030.txt June, qui s'appellera bientôt June Bride. Je pense qu'il y a beaucoup de femmes célibataires qui sont dans un état de «pauvreté de célébration», disant que leur cérémonie n'a pas encore été convoquée. À mesure que le nombre de participants augmentait, il n'était pas rare que de telles demandes soient faites. "J'ai une demande ... Pouvez-vous me faire un discours du représentant d'un ami?" Dans un tel cas, que devrait faire une femme seule? Récemment, si vous effectuez une recherche sur Internet, etc., de nombreux sites d'exemples de phrases pour des discours représentant des amis apparaîtront, donc si vous vous y référez, n'importe qui peut en créer des sûrs. Cependant, Yuri (33 ans) l'a créé en référence à Internet, mais a déclaré: «Je m'inquiétais de savoir si c'était vraiment bon. Puisque je vis seul, personne ne peut me dire ce que je pense, mais je prendrai la peine de demander à d'autres amis. Je me suis demandé si c'était le cas ... », alors je l'ai utilisé comme site de consultation de problèmes sur Internet. Il a posté le texte du discours qu'il a fait là-bas et a envoyé un message disant: "Est-ce que ça va? Veuillez le corriger." "Environ trois personnes l'ont corrigé du jour au lendemain. En passant, il y avait beaucoup d'autres personnes comme ça, et il y avait de nombreux messages sur le site de consultation demandant également des corrections." (Yuri) .. Quand j'ai regardé le site qui m'a été enseigné à titre d'essai, il y avait certainement plus de 1000 messages disant "Veuillez corriger votre discours de mariage". Je ne savais pas qu'il y avait une telle communauté Internet dans l'ombre d'un mariage heureux. Cependant, "je suis toujours contente si je suis prête pour le discours demandé à l'avance. Le plus dégoûtant est le discours surprise!", A déclaré la pauvre célibataire de félicitations qui a déclaré qu'il avait fallu plus de 100 000 célébrations l'année dernière seulement. Kaoru (35 ans) "Je ne suis pas doué pour parler en public. Donc, quand je suis soudainement nominé, je suis confus et je ne peux rien dire. Ensuite, je ne peux pas en profiter du tout même après être tombé dans la haine de soi. Le mérite du discours surprise est qu'il est dans un état de ne pas être préparé, il semble donc amusant de faire dire à Frank ses véritables intentions. Cependant, si vous êtes une personne qui peut bien le gérer, mais si vous n'êtes pas doué pour cela, il y a un grand risque que vous deveniez "boueux" au lieu de "franc". Soit dit en passant, dans le cas d'un modérateur professionnel, il semble qu'il y ait souvent un mot pendant la cérémonie au lieu d'une vraie surprise, "Je vous proposerai plus tard comme discours surprise", mais Kaoru dit: "Combien de minutes il y a C'est impossible à dire! " Le fait est qu'il est important de sélectionner des personnes qui peuvent profiter des surprises. D'un autre côté, M. Yukie (30 ans) a dit: "C'est ennuyeux d'une manière banale, et quand je cherchais des phrases par exemple sur le net, je me suis dit: 'Y a-t-il un tel moyen?'" "Discours". «C'est une façon d'écrire une lettre à l'amie de la mariée et de la lire à haute voix comme à XX. Si tel est le cas, c'est correct de l'écrire un peu franchement, et surtout, on peut la lire sans la mémoriser. Si vous le donnez à un ami, ce sera un mémorial. »(M. Yukie) Je vois, c'est vrai que vous n'avez qu'à le lire, donc même les gens qui ne sont pas doués pour parler en public peuvent ne pas échouer. Même si le protagoniste était les mariés, j'étais nerveux quand il s'agissait de la situation, et j'ai secrètement répété sur le contenu.
dokujo-tsushin-4778031.txt Avant la diffusion des téléphones portables, les téléphones généraux étaient l'outil habituel pour contacter les amoureux. Lorsque vous rompez avec votre amoureux, effacez les coordonnées de l'autre personne dans votre cahier avec des larmes. Ensuite, le bord serait coupé. Cependant, de nos jours, il y a un téléphone portable, il y a un e-mail, et si vous ouvrez Internet, vous pouvez découvrir le dîner de l'autre partie sur le blog. Que pensent les femmes célibataires de la relation avec l'ex-petit ami qui ne peut pas la couper? «J'ai été surprise de recevoir un e-mail de celui qui a rompu il y a cinq ans», a déclaré Naomi (36 ans). «J'ai rompu à cause de sa tricherie, mais maintenant, il semble être célibataire. , J'ai un amoureux qui est sur le point de se fiancer, alors je suis fini. Si je n'avais pas de partenaire, j'aurais peut-être eu un amour de résurrection. N'est-ce pas le bon moment pour une femme célibataire qui a peu de chances de se rencontrer? " A cette époque, Naomi vivait dans la maison de ses parents. S'il n'avait ni e-mail ni téléphone portable, il n'aurait probablement pas pu le contacter. D'un autre côté, Mikako (38 ans) a déclaré: "Il était plus difficile de couper les liens à l'ère des téléphones ordinaires." «Maintenant, parce que je compte sur la mémoire, si j'efface mon numéro de téléphone et mon adresse e-mail, il y a un endroit jusque-là. Si j'essaye de le faire glisser, il sera traîné, si j'essaye de le couper, il sera coupé. Il y a longtemps J'avais l'habitude de mémoriser son numéro de téléphone. Prendre et rendre le combiné ... Il était difficile de couper mes sentiments. »M. Chie (34 ans) est d'accord. "L'information arrive si vous utilisez le réseau d'information, mais vous pouvez la fermer vous-même. Mais je ne pense pas que vous devriez l'isoler de la rupture. La période jusqu'à ce que le cœur soit guéri Je coupe souvent le contact, puis j'envoie des courriels pour revenir à des amitiés. »Par rapport à avant, c'était tout ou rien, maintenant je coupe, je retourne à mes amis et j'ai une amitié avec moi. Il est devenu possible de sélectionner la relation après la séparation, comme la poursuite. C'est douloureux tant qu'il y a encore des lacunes, mais si vous utilisez bien les outils, vous pouvez en bénéficier. Cependant, il y a quelques écueils. Enfin, je voudrais vous présenter l'histoire tohoho de Ritsuko (35 ans). "J'envoie un e-mail à mon ex-petit ami que j'ai rencontré il y a 10 ans. J'écris également des commentaires dans mon journal avec" My Miku "et j'échange les cartes du Nouvel An. L'ex-petit ami est déjà marié et a des enfants. Il y en a deux. Récemment, je suis devenu gros au milieu de ma vie et je me sens comme mon père à la maison. Je suis une bonne personne, mais maintenant que je suis complètement refroidi, pourquoi suis-je si obsédé par lui? Si vous voulez garder les souvenirs de votre amour passé, vous n'aurez peut-être pas besoin de le savoir. »Les souvenirs d'amour sont embellis dans votre cerveau. C'est bien de continuer des amitiés en ligne, mais en même temps, les souvenirs d'un amour faible et triste peuvent être recouverts d'un sentiment de vie et de réalité, alors faites attention à ne pas trop vous connecter. Eh bien, ils se ressemblent. (Towa Kurufu) 1 0 0 0 0 0 0 0 0
dokujo-tsushin-4782522.txt M. Kaori (pseudonyme / 31 ans), qui travaille dans l'industrie de l'édition, se plaint: "Les hommes aiment-ils vraiment le" maquillage "des femmes?" C'est parce que de nombreux artistes publient récemment leurs photos de maquillage sur leurs blogs, qui peuvent devenir des actualités et parler. Depuis le début de cette année, les animateurs qui ont montré "Suppin" sur leur blog sont Yuko Ogura, Natsumi Abe et Morning Musume. Il existe différents genres tels que Reina Tanaka, Maomi Yuuki et Yisa Nakazato qui sont actifs à leur âge. Parce que c'est un blog qui peut envoyer la vie privée en temps réel, chacun publie son maquillage avec un look décontracté. Pour les fans, ce sera un bon service pour avoir un aperçu du vrai visage de leur artiste préféré. Alors, pourquoi avait-elle des doutes sur l'absence de maquillage de la célébrité? «Je sais que c'est de ma faute, mais je ne peux pas vraiment admettre sa beauté parce que j'ai tellement confiance en moi», dit Kaori. "Dans le commentaire," c'est trop mignon! Ou "Pas besoin de se réconcilier!" "C'est un peu compliqué de penser que je publie mes photos de maquillage en prévision de tous les éloges", a-t-il ajouté. N'est-ce pas parce que c'est à l'origine un service de fans, et qu'il est montré "parce que je veux appeler un sujet ou être félicité par des commentaires"? Et, il semble que la femme célibataire regarde juste "Naname". De plus, Yumi (pseudonyme / 32 ans), qui opère chez un fabricant, a déclaré: "Je vais venir à l'illusion du maquillage" des hommes. Si mon visage est beau, je viendrai travailler sans aucun problème. Mais je veux que vous reconnaissiez l'effort que vous faites pour être belle », a-t-il révélé en tant que jeune fille. «Je pense du fond de mon cœur que les jeunes filles adolescentes et au début de la vingtaine se maquillent,« Oh, c'est mignon », mais quand les gens de mon âge se montrent, comparés aux miens. Après avoir vu la belle animatrice Suppin, les femmes célibataires sont blessées sans le savoir. Au fait, qu'en est-il du spectacle sans maquillage de la célébrité et de la réputation réelle des hommes? Yusuke (pseudonyme / 34 ans), qui travaille pour une entreprise de vêtements, a déclaré: "Personnellement, je n'aime pas le visage des femmes, donc je trouve que c'est vraiment mignon quand je regarde le maquillage." D'un autre côté, Toru (pseudonyme / 28 ans) qui travaille dans une entreprise informatique a déclaré: «Cela dépend de la personne, mais je me demande pourquoi je prends la peine de le publier sur mon blog. À l'origine, je veux que le maquillage des femmes ne soit montré qu'aux personnes importantes. "Oh, je viens de me le montrer" (rires), "ont dit les hommes. Il sera diffusé sur un blog qui a le sentiment d'être en plein essor dans le futur. Il semble qu'il y ait des affirmations et des oppositions, mais il est certain que les hommes ont un sens particulier du «maquillage» des femmes. Il peut être nécessaire pour les femmes célibataires de polir leur vrai visage pour le moment où elles montreront leur Kasuppin. 1 0 0 0 0 0 0 0 0
dokujo-tsushin-4788357.txt Le changement dû au vieillissement de la hanche est dit «déflexion → bas → écoulement vers l'intérieur», et le buste est «déformation → pli → écoulement». Le changement de buste a déjà commencé dans les années vingt, et certaines personnes sont devenues «flexibles» dans la vingtaine. Et personne n'est revenu. De plus, en regardant les changements dans chaque partie du corps entre les années 20 et 50, les changements de taille et d'abdomen sont les plus importants, et l'abdomen a la même taille que le buste. Ceci fait partie du contenu du communiqué de presse de l'Institut Wacoal des Sciences Humaines qui s'est tenu en avril, "Découverte de certaines règles concernant le vieillissement corporel (changement de forme corporelle dû au vieillissement)". Il est extrêmement convaincant car il est expliqué avec des photos et des vidéos ainsi que des données qui agrègent et analysent les valeurs numériques des changements séculaires pour un total de 40 000 personnes. Présentation des caractéristiques physiques et du comportement / conscience quotidiens des personnes avec peu de changement de forme corporelle après avoir été amenées à faire face à la réalité. Le contenu principal est de bouger le corps quotidiennement, de vérifier la posture et d'essayer toujours les sous-vêtements pour vérifier l'ajustement. Puis, lors de la table ronde, les résultats de la personne qui a participé à l'expérience de marche à grande enjambée pendant un an ont montré que sa colonne vertébrale était étirée et que sa graisse était perdue. Je n'étais pas épuisé et quand j'ai parlé du contenu à mes connaissances, j'ai entendu diverses opinions et expériences. Il y avait aussi une question, "La personne avec peu de changement dans son corps ne fait-elle pas du sport parce qu'il a été mesuré tout le temps?", Mais cette réponse disait: "Faites attention à votre vie quotidienne plutôt que de faire de l'exercice." J'ai la forte impression que je n'ai pas fait grand-chose au régime. " C'est Yoko qui a dit: "Ma tante a aussi dit cela." Lorsqu'une tante dans la soixantaine est partie en voyage aux sources chaudes avec ses amis, elle était ravie d'avoir été félicitée du fait qu'il y avait peu de changement dans son buste, alors elle lui a demandé comment prendre soin de son buste. "Ma tante porte toujours un soutien-gorge, et je le mesure toujours et l'essaye quand je l'achète. D'un autre côté, mes amis ne portent parfois pas de soutien-gorge à la maison parce que c'est" douloureux "." Depuis qu'elle a entendu cela, Yoko essaie et mesure des sous-vêtements lorsqu'elle les achète. Koko, qui souffrait de maux de dos, a déclaré: "J'ai aussi marché maigre." Un médecin a fait remarquer que mes muscles étaient faibles, alors j'ai arrêté mon vélo jusqu'à la gare et j'ai décidé de faire des allers-retours tous les jours pendant 30 minutes dans chaque sens. En commençant à développer de la force, tout le corps s'est resserré et j'ai réussi à perdre du poids. Un enfant qui disait: «Mais si tu fais du sport, tout ira bien» s'est amélioré en allant dans un club de sport autour de la taille, qui a commencé à être anxieux en raison de conditions insalubres. Je suis content que mes jeans soient d'une taille plus petite. Dans la table ronde, il est dit que "le vieillissement est à sens unique, mais le statu quo peut être maintenu" et "la lutte contre le vieillissement attire l'attention de la communauté médicale, mais la relation entre le maintien de la beauté physique et le maintien de la santé devrait être les deux faces d'une même médaille". C'était. Dans ce cas, il vaut mieux ne pas abandonner la résistance au vieillissement, qui est le changement de forme du corps. Aya Sugimoto a déclaré: "Je ne veux pas retourner à ma jeunesse ou paraître plus jeune. Je veux savoir à quel point je suis belle maintenant." (Bureau M2 / Onomaki) Cliquez ici pour plus de détails 1 0 0 0 0 0 0 0 0
dokujo-tsushin-4788362.txt Les allocations familiales seront versées à partir de juin, mais initialement, elles étaient censées être versées 26 000 yens par enfant et par mois. Cependant, le paiement sera à moitié prix la première année, et il semble que le paiement mensuel de 26 000 yens par enfant sera reporté après 2011. L'autre jour, il a été rapporté que la ville avait rejeté une tentative de demande d'allocation pour enfants pour 554 hommes étrangers qui prétendaient avoir adopté un enfant en Thaïlande, mais il semble que les mauvaises personnes puissent facilement tricher si elles y réfléchissent. Que se passe-t-il avec les allocations familiales pleines de lacunes? Une voix de doute peut être entendue de la femme célibataire qui n'est pas payée. M. Yuri, qui est actuellement célibataire, se plaint qu'elle ne peut pas être satisfaite du paiement de l'uniforme, demandant: «Pourquoi avez-vous besoin d'une allocation pour enfant pour une maison qui est prise en charge dans un jardin d'enfants privé par Benz? "J'ai entendu dire que les allocations familiales imitaient la France, mais en France, les allocations familiales sont appelées" allocations familiales "et il n'y a pas de limite de revenu. Cependant, les allocations familiales sont versées à partir du deuxième enfant jusqu'à l'âge de 20 et 3 ans. Il semble que vous pouvez obtenir une allocation familiale premium des yeux. Si l'allocation pour enfant est destinée à des mesures contre la baisse de la natalité, ne doit-elle pas être versée par la deuxième personne comme en France? C'est étrange de le faire. Bien que l’on ait dit qu’il s’agissait d’une contre-mesure contre la baisse du taux de natalité, aucune voix n’a dit qu’ils accoucheraient en comptant sur les allocations familiales. "En prévision d'une allocation qui pourrait disparaître si le gouvernement change, même si vous vous mariez désormais, vous risquez de ne pas tomber enceinte immédiatement, et l'allocation familiale peut être supprimée lorsque vous accouchez en toute sécurité." Il n'y a aucune possibilité ou rien. Interrogées sur l'utilisation des allocations familiales pour les femmes au foyer avec enfants, de nombreuses personnes ont déclaré qu'elles économiseraient de l'argent pour les futures dépenses d'éducation. À ce propos, «je suis vraiment désolé qu'une famille qui ne pourrait pas le faire même si elle voulait un enfant en supporte le coût. Ce serait bien si c'était vraiment utilisé pour les enfants, mais les parents joueraient. Je ne veux pas que vous dépensiez nos impôts pour les dépenser ou pour les frais de divertissement de vos parents », dit Yuri. Aya Batsuichi a déclaré: "Les couples sans enfants et les célibataires contribueront à élever des enfants qui dirigeront la prochaine génération en travaillant et en payant des impôts. Je pensais que c'était une allocation pour enfants, mais pour les enfants Le montant d'argent qui est censé aller à la maison est réduit, je ne sais pas où il ira, et je ne suis pas convaincu que nos impôts iront aux enfants étrangers à cause du formulaire de demande déguisé. " Je suis en colère. "Nous devrions augmenter les allocations familiales avec la limite de revenu, mais il semble qu'il ne soit populaire que pour les élections de distribuer les allocations familiales de manière égale à tous les ménages. Qu'adviendra-t-il des allocations familiales si l'administration change avec cela? Aya craignait que si l'allocation pour enfant était distribuée telle quelle, les enfants qui recevaient l'allocation pour enfant le seraient à l'avenir sous la forme d'une augmentation d'impôt, mais le gouvernement local criait à des difficultés financières dans le gouvernement local. La voix de la répulsion monte. Que va-t-il se passer? Je veux garder un œil sur les futures allocations familiales. D'ailleurs, cette fois, j'ai posé la question à des célibataires qui n'avaient pas d'enfants, mais beaucoup d'entre eux ont dit qu'ils ne comprenaient pas les «allocations familiales» parce que cela n'avait rien à voir avec eux. Beaucoup de gens ne connaissaient l'assurance soins infirmiers que lorsqu'ils étaient en mesure de prendre soin de leurs parents, mais si un système est mis en place après l'adoption du Parlement, la taxe que nous avons payée sera utilisée. Ça sera fait. Je pense que c'est notre droit de savoir et de se plaindre. N'est-ce pas mieux que d'être indifférent? (Bureau M2 / Setsuko Saeda) 1 0 0 0 0 0 0 0 0
dokujo-tsushin-4788373.txt Par hasard dans une librairie, "Ballerines de lapin"(Librairie Komine Naoko Abo/Écrit par Naoko Minamizuka/Une illustration)Motoko (pharmacien de 27 ans), qui a trouvé le livre d'images, était plein de nostalgie et de joie. «J'apprenais le ballet et je me sentais encouragé en lisant ce livre d'images, alors je l'ai lu plusieurs fois dans la bibliothèque de l'école primaire. Je cherchais une librairie dans le quartier avec ma mère, mais je ne l'ai pas trouvée. … »M. Motoko. "Rabbit's Ballet Shoes" avec une impressionnante couleur rose douce est maintenant affiché dans la chambre de Motoko afin que la couverture soit visible. Masae (40 ans), qui travaille pour une agence de publicité, aime "un chat qui a vécu un million de fois" (Kodansha Yoko Sano)/Écrit par).. C'est un livre que j'ai souvent emprunté à la bibliothèque lorsque j'étais à l'école primaire. "En sixième, les enfants autour de moi lisaient un roman épais, mais je lisais encore" Un chat qui a vécu un million de fois. "Ma mère m'a averti de lire un livre plus décent. On m'a dit que ... Maintenant, je peux dire à ma mère: "Ceci est un livre spécial." À cette époque, je pense que j'étais un enfant et j'ai ressenti diverses choses à partir des images et des histoires. "(M. Masae) ) Beaucoup de femmes sont guéries par les histoires douces et les images douces des livres d'images. Quand j'ai interrogé les femmes autour de moi, il semble que les livres d'images que j'ai achetés après être devenu adulte étaient plus des «livres que j'ai lus dans mon enfance» et des «livres avec des souvenirs spéciaux» que des livres récemment publiés. "Gongitsune" avec une belle image impressionnante (Kaiseisha Niimi Nankichi)/Écrit par、黒井健/Une illustration)Et "Pour acheter Tebukuro" (Kaiseisha Niimi Nankichi/Écrit par、黒井健/Une illustration), "Samugariya no Santa" (Librairie évangélique Raymond Briggs) mettant en vedette un Père Noël légèrement décalé/Écrit par、すがはらひろくに/Traduction)Etc. sont également très populaires. Lorsque vous ouvrez un livre d'images nostalgique, la "sensibilité" de votre enfance que vous avez oubliée va soudainement reprendre vie. Certaines personnes ont découvert le charme des livres d'images depuis qu'ils sont devenus adultes. Naomi (36 ans, travaillant dans un fabricant), qui n'était guère impressionnée par les livres d'images lorsqu'elle était enfant, était attirée par les livres d'images parce qu'elle offrait un cadeau à l'enfant de son amie, "Guritogura" (Librairie du musée de l'Évangile Nakagawa Eko)./Écrit par、おおむらゆりこ/Une illustration)。  「絵も可愛いし、大きなカステラは美味しそうだし、何より『ぐりぐら ぐりぐら』という言い回しに、はまっちゃいました。『ぐりぐら ぐりぐら』ってつぶやくと、ちょっとくらい嫌なことがあっても、どうでもよくなっちゃいます(笑)」(ナオミさん)  読んで癒される絵本だが、最近は、自分で絵本を描いてみたいと思う女性も増えているらしい。大阪で「大人のための絵本講座」を開いているUne illustrationレーターのおおさわまきさん(星未来工房)に、絵本を描く魅力について伺った。  「絵本は目でイメージしその世界に入り込める奥深いものです。文章と絵で構成されているので、いろいろな見方ができるし、たくさんのことを伝えられるのが魅力です。絵本講座を受講した生徒さんたちは、一度絵本を仕上げると『もっと作りたい、楽しい!』と目を輝かせますよ。絵本作りは、年齢関係なく誰にでもできる癒しの世界だと思っています」  絵本作りのコツについてお聞きすると「私が絵本作りの勉強し始めた頃、先生から『難しく考えたらダメだよ』と繰り返し言われました。難しいと思うとどんどん描けなくなるんですよね。だから、自分も含めて、難しくないことからはじめていこうと強く思いました。そして、何よりも童心に戻ることが大切です。子どもは何でも素直に楽しむでしょう。大人も『恥』とか『かっこよく』とか考えないで、遊び感覚で自然に絵本作りに取組むことが大切です」(おおさわさん)。  子どものように素直に描けるようになると、考え方も自然と柔軟になってくるはず。大人という枠組みや常識という枠組みから離れて、自由に空想し、自由に描くことで、心が癒されていくのだろう。  最後に、おおさわさんにお勧め絵本を紹介していただいた。「『ちきゅうになった少年』(フレーバル館 みやざきひろかず/J'adore écrire et dessiner). Pour ceux qui sont occupés et stressés chaque jour, je pense que c'est une expression intéressante du désir de renaître en tant qu'être non humain. C'est un livre pour reposer votre esprit lorsque vous êtes fatigué, que vous avez du mal ou que vous voulez vous échapper. De plus, l'aquarelle est un matériau de peinture qui détend et guérit le cerveau et l'esprit, c'est pourquoi elle est fortement recommandée. "(M. Osawa) Si vous voulez lire un livre d'images mais que vous ne savez pas quel type de livre vous convient, tout d'abord, le livre d'images de la bibliothèque Allez dans le coin et voyez. Vous devriez être capable de trouver vos images et histoires préférées tout en ramassant de nombreux livres. J'aime un livre qui me donne un sentiment positif lorsque je finis de le lire. (Bureau M2 / Haruhi Kanda) ・ Coopération d'entretien-Hoshi Mirai Kobo Osawa Maki 1 0 0 0 0 0 0 0 0
dokujo-tsushin-4788374.txt M. Kanako (30 ans / travaillant dans une société commerciale) qui a changé d'emploi pour la catégorie d'emploi souhaitée l'automne dernier. Je pensais pouvoir obtenir un emploi enrichissant et mener une vie épanouie, mais je souffre de problèmes inattendus. "Les employées déjeunent ensemble dans la salle de pause, mais je suis étonnée que le sujet à ce moment-là porte uniquement sur les rumeurs internes et les mauvais discours. D'après l'histoire des affaires internes, les employés masculins sont classés et les femmes employées dans d'autres succursales Je suis tellement impressionné que je ne manque pas d'histoires tous les jours, comme de mauvais mots. »(M. Kanako) Bien sûr, certaines femmes sortent pour manger dehors, mais les femmes âgées s'en sont plaintes plus tard. , Vous pouvez faire des rumeurs selon lesquelles il n'y a ni racines ni feuilles ... "Je me sens déprimé à l'approche du déjeuner. Quand j'avais la trentaine, je n'avais jamais pensé que je m'inquiéterais pour le déjeuner." (M. Kanako) La seule chose que je pouvais me reposer dans une journée chargée était le déjeuner. Il devrait y avoir beaucoup de gens qui disent. Si vous pouvez avoir un bon service de déjeuner et de déjeuner avec vos amis et avoir une bonne conversation, vous pourrez travailler dur l'après-midi. Cependant, cela ne se déroule souvent pas comme prévu. M. Mutsumi (29 ans, pour des raisons médicales) ne peut être réembauché que par 4 employées dont M. Mutsumi. Le problème est que les trois femmes qui travaillent ensemble depuis longtemps ont des liens étroits. «Comme il n'y a qu'une seule salle de pause, nous mangeons ensemble pour le déjeuner, mais les trois seniors sont trop proches les uns des autres, donc je ne peux pas en parler. Au début, j'écoutais en silence l'histoire, mais progressivement je suis resté. Ça devient de plus en plus difficile ... Maintenant, dès que j'ai fini de manger, je retourne à mon bureau et je lis le magazine. "(M. Mutsumi) Dans cette entreprise, même si une nouvelle employée est embauchée, elle quitte souvent dans un court laps de temps. Voyant M. Mutsumi qui peut passer la pause déjeuner seul, son patron semble s'attendre à ce qu'il puisse travailler pendant longtemps. Eri (27 ans), une employée temporaire, avait l'habitude de penser qu'il était difficile de passer une pause déjeuner seule, mais comme elle est devenue employée temporaire et a connu plusieurs entreprises, elle a déclaré: «Le confort d'une personne». On dit qu'il s'est réveillé. «Parfois, je sors pour manger avec des gens du même département, mais je mange souvent à mon bureau en regardant des magazines. Après cela, je passe du temps à écrire des courriels. C'est très facile car il n'y a pas de lien entre les femmes (rires) »(M. Eri) Selon M. Eri, il y a des entreprises où tout le monde regarde« Lunch Dora »pendant la pause déjeuner. Eri, qui aime le théâtre, s'est beaucoup amusée, mais certaines employées ont dû s'asseoir en premier et tuer le temps dans la salle d'eau chaude. «La façon dont vous passez votre pause déjeuner est assez différente selon l'entreprise. Dans les entreprises qui ont une règle implicite selon laquelle les employées mangent toujours ensemble, elles mangent en regardant silencieusement leur téléphone portable. Même s'il y a 7 à 8 personnes, comme scène Cela a été assez pénible. De plus, certaines entreprises affirment que la plus vieille employée aime parler et que tout le monde doit l'écouter pendant la pause déjeuner. Il y en avait. »(M. Eri) Quand j'étais à l'école primaire, avant l'excursion, des promesses ont été échangées dans la classe:« ○○ -chan, déjeunons ensemble ». Je pense toujours que j'étais ravi et j'attendais que mon ami soit OK. L'enseignant s'inquiétait pour l'enfant timide et il a dit à l'élève responsable: «Veuillez inviter XX à midi» ou «Mangeons ensemble cette fois». …. La nièce qui venait juste d'entrer au lycée a dit joyeusement: "Je suis contente de m'être fait des amis pour déjeuner tout de suite." Peu importe le nombre de fois que vous passez votre pause déjeuner, qui et où vous passez votre déjeuner est un gros problème. Soit dit en passant, alors que le nombre de bureaux non-fumeurs augmente, la façon dont les fumeurs passent leurs pauses déjeuner change également. À l'endroit où travaille ma connaissance, il n'y a plus de place pour fumer dans le bâtiment à partir de ce printemps, je n'ai donc pas d'autre choix que d'aller à la zone fumeurs de la gare la plus proche pour fumer. "Je ne peux pas aller dans un café où je peux fumer tous les jours juste pour fumer, et quand je fume à l'intérieur, l'odeur de la cigarette imprègne mes vêtements, alors je suis reconnaissant pour l'espace fumeur extérieur de la gare maintenant." connaissance. La pause déjeuner un jour de pluie semble déprimante compte tenu du chemin vers la gare. (Bureau M2 / Haruhi Kanda) 1 0 0 0 0 0 0 0 0
dokujo-tsushin-4788388.txt Il y a une femme célibataire qui hésite à se marier en disant: "Je dois travailler parce que son revenu est bas, et je pense que c'est normal de se marier un peu plus." Elle veut quitter son emploi tout de suite si elle peut vivre de ses seuls revenus. En d'autres termes, il voulait être une femme au foyer à plein temps, mais lorsqu'il a entendu son revenu annuel, il a incliné la tête. Est-il vraiment impossible de vivre avec cette somme d'argent? À l'époque où il y avait beaucoup de femmes au foyer à plein temps, il n'y avait pas de lieu de travail pour les femmes au foyer, et il y avait de nombreuses familles qui ne vivaient que des revenus de leur mari, même si elles se sont répandues ce mois-ci également. Cependant, même si le revenu de mon mari a diminué en raison de la récession, il va également manger au restaurant, acheter des produits de marque et voyager à l'étranger, même si ce voyage est bon marché. N'est-ce pas vraiment extravagant par rapport à l'ancien temps où vous pouviez simplement le manger? Kiyoko, une femme au foyer de 56 ans à temps plein avec deux enfants adultes, a déclaré: «Maintenant, les femmes au foyer à plein temps seraient des célébrités, mais si je n'ai jamais possédé un produit de marque, je voyagerai à l'étranger avec ma famille. Je n'y suis jamais allé. Les revenus de mon mari ne suffisent pas, mais si je n'ai pas le luxe, j'ai réussi à le faire tous les mois. " Quand un enfant est entré à l'école primaire, certaines femmes au foyer sont allées à la partie pour payer l'école de cram, mais la famille de Kiyoko n'est pas du tout allée à l'école de cram en raison de la politique de son mari, son frère nageait et sa sœur écrivait. Il semble qu'il ne l'a laissé aller qu'à une leçon. «Il semblait difficile pour une famille d'assister à un examen privé de lycée. J'ai été surpris d'apprendre que le coût d'une école privée était de 50 000 yens par mois. Je les ai envoyés dans une école privée et c'était énorme après cela. Je pensais qu'il serait difficile de dépenser beaucoup d'argent pour l'éducation. »La fille aînée de Kiseko s'est inscrite dans une université privée pour femmes, mais certains de ses amis qui ont réussi à sortir du collège et du lycée étaient des camarades de classe du primaire. «Je ne suis pas sûr de la nécessité d'une éducation intégrée au collège et au lycée, mais après tout, si vous allez dans la même université, vous n'avez pas à payer de frais de scolarité pour sortir du collège», dit Kiyoko. Il y a des femmes au foyer qui ont un but de travailler et de travailler pour elles-mêmes, mais il y a aussi des femmes au foyer qui travaillent pour améliorer leur niveau de vie en allant à l'étranger avec leur famille, en mangeant au restaurant, etc. Certaines femmes au foyer achètent elles-mêmes des produits de marque, mais le but principal de leur travail est de payer les études de leurs enfants. On dit que les frais de scolarité coûtent généralement plus de 10 millions de yens de la naissance d'un enfant à l'obtention du diplôme universitaire. Le privé de la maternelle à l'université coûte plus de 20 millions de yens. Ensuite, il faut travailler pour l'éducation, mais pourquoi passer de la maternelle au privé? «Parce que je veux donner à mon enfant une formation dont je puisse être fière.» Une enfant, mère d'un enfant qui souhaite entrer dans une école maternelle privée, dit qu'être fière est les valeurs de sa mère et que son enfant est comparé aux autres enfants. Il peut y avoir l'impression de la mère elle-même qu'elle fait quelque chose de spécial. Si vous envoyez votre enfant dans une école maternelle privée ou si vous l'habillez avec une marque, votre mère devra porter les vêtements et le sac appropriés. Si vous voulez vivre comme ça, mais que vous ne pouvez pas le faire avec le revenu de votre mari, vous pouvez le supporter. Si vous ne pouvez pas le supporter, vous pouvez travailler. Mais si le but du travail est pour les enfants, alors nous devrions penser à ce qui est vraiment heureux pour eux. Dans le cœur des femmes qui se plaignaient que son revenu était bas ou que son mari ne gagnait pas assez, j'ai l'impression qu'il cherchait une vie qui osait vouloir quelque chose dont il n'avait pas besoin. Il peut être amélioré en rivalisant avec les gens, mais je ne pense pas que ce soit comparable ou en concurrence avec le bonheur à la maison. M. Kiyoko a mentionné ci-dessus, elle a dit qu'elle était heureuse d'avoir une mère qui l'attendait toujours à son retour de l'école. «Je n'avais ni les compétences ni les qualifications, donc je vivais simplement à la maison et économisais de l'argent, mais j'aimais passer du temps avec mes enfants.» Kiyoko a dit qu'elle était reconnaissante à son mari de la nourrir. Cela avait l'air frais. Il y a des choses que vous pouvez obtenir en travaillant, mais il y a aussi des choses que vous pouvez obtenir en gagnant du temps. Si vous pensez que son revenu est faible, pourquoi ne pas essayer de vous souvenir de l'astuce consistant à joindre les deux bouts? Le mariage est quelque chose que vous pouvez faire dans la vraie vie plutôt que d'y penser. (Bureau M2 / Setsuko Saeda) 1 0 0 0 0 0 0 0 0
dokujo-tsushin-4791665.txt Dans la saison à venir, l'ennemi naturel de votre peau est "l'ultraviolet". La société de marketing Trenders Co., Ltd. a mené une enquête de sensibilisation sur les «soins aux UV» pour les femmes dans la vingtaine et la trentaine, 99%A répondu que "le soin UV est nécessaire en sortant". Il s'avère que les soins UV sont désormais monnaie courante chez les femmes. Les soins UV ne peuvent pas être négligés même pour une femme célibataire qui vise l'anti-âge. Lorsqu'on lui a demandé: «Quel genre de scène vous souciez-vous des rayons ultraviolets dans une journée?», La question la plus fréquemment posée était «lors des déplacements», et plus de la moitié y a répondu. En ce qui concerne le "fuseau horaire où les rayons UV sont un problème", le plus courant était "12h00 à 15h00", soit 83%.. Ensuite, «9h00 à 12h00» est 67%, "~ 9 heures"(43%)Il s'avère que les femmes qui travaillent sont conscientes des soins UV pendant les heures du matin. En fait, 87 font des «soins UV le matin»%"Le temps de trajet du matin est le plus exposé aux rayons ultraviolets. (36 ans, conception de publicité immobilière)" "Je ne le manque pas car je prends un coup de soleil en faisant le trajet. (29 ans, société commerciale comptable)." Le soin "Morning UV" est indispensable pour éviter les coups de soleil et les taches. En tant que méthode de soin UV spécifique, la méthode la plus courante était «l'application d'un écran solaire», soit 92 au total.%Répondu. Ensuite, "Parasol"(59%),"chapeau"(39%)Cela continue avec. La «crème solaire», qui s'applique facilement et possède une bonne protection UV, a gagné le soutien des femmes. En réponse à la question "Combien de fois par jour appliquez-vous de nouveau la crème solaire?", En moyenne, "0".Il est clair qu'il est repeint environ une fois par jour, "94 fois". Bien sûr, quand je transpire beaucoup, j'ai peur que l'effet diminue sans le savoir, alors je le réapplique plusieurs fois, mais pour une femme seule qui est occupée tous les jours, même ce moment est regrettable. De plus, je suis préoccupé par le fardeau sur ma peau. Aussi, selon la question «Que recherchez-vous dans un écran solaire?», «Effet écran solaire» (93)%), À côté de la réponse qui est l'effet du moût, "moins de charge sur la peau"(88%), "Pas collant"(73%)Il y a beaucoup d'opinions, et il semble que «être gentil avec la peau» est important, pas seulement être capable de faire des soins UV. La nouvelle crème solaire «Anessa» est recommandée pour les femmes qui souhaitent valoriser à la fois le soin UV et la douceur de la peau. Non seulement il bloque tous les rayons ultraviolets sur le sol, mais il offre également une sensation de douceur sans le caractère collant et le blanchiment qui ont été communs avec les écrans solaires. Si vous êtes une femme célibataire qui n'a pas utilisé de crème solaire récemment, disant "Je ne veux pas être un fardeau pour ma peau" tout en ressentant les rayons ultraviolets sur ma peau, pourquoi ne pas essayer? Cliquez ici pour plus de détails ・ Anessa-Shiseido 1 0 0 0 0 0 0 0 0

Ensuite, lisez-le comme une trame de données et divisez-le en données d'entraînement, données de vérification et données d'évaluation.

import pandas as pd
from sklearn.model_selection import train_test_split
from tabulate import tabulate

#Lire les données
df = pd.read_csv('./text/livedoor.tsv', sep='\t')

#Répartition des données
categories = ['dokujo-tsushin', 'it-life-hack', 'kaden-channel', 'livedoor-homme', 'movie-enter', 'peachy', 'smax', 'sports-watch', 'topic-news']
train, valid_test = train_test_split(df, test_size=0.2, shuffle=True, random_state=123, stratify=df[categories])
valid, test = train_test_split(valid_test, test_size=0.5, shuffle=True, random_state=123, stratify=valid_test[categories])
train.reset_index(drop=True, inplace=True)
valid.reset_index(drop=True, inplace=True)
test.reset_index(drop=True, inplace=True)

#Confirmation du nombre de cas
table = [['train'] + [train[category].sum() for category in categories],
         ['valid'] + [valid[category].sum() for category in categories],
         ['test'] + [test[category].sum() for category in categories]]
headers = ['data'] + categories
print(tabulate(table, headers, tablefmt='grid'))

production


+--------+------------------+----------------+-----------------+------------------+---------------+----------+--------+----------------+--------------+
| data   |   dokujo-tsushin |   it-life-hack |   kaden-channel |   livedoor-homme |   movie-enter |   peachy |   smax |   sports-watch |   topic-news |
+========+==================+================+=================+==================+===============+==========+========+================+==============+
| train  |              696 |            696 |             691 |              409 |           696 |      673 |    696 |            720 |          616 |
+--------+------------------+----------------+-----------------+------------------+---------------+----------+--------+----------------+--------------+
| valid  |               87 |             87 |              87 |               51 |            87 |       84 |     87 |             90 |           77 |
+--------+------------------+----------------+-----------------+------------------+---------------+----------+--------+----------------+--------------+
| test   |               87 |             87 |              86 |               51 |            87 |       85 |     87 |             90 |           77 |
+--------+------------------+----------------+-----------------+------------------+---------------+----------+--------+----------------+--------------+

Se préparer à l'apprentissage

Installez la bibliothèque de transformateurs pour utiliser le modèle BERT. Grâce aux transformateurs, de nombreux modèles pré-formés en plus de BERT peuvent être utilisés très facilement avec un code court.

!pip install transformers

De plus, installez MeCab pour l'analyse morphologique. Ceci est appelé et utilisé par les transformateurs dans le processus.

!apt install mecab libmecab-dev mecab-ipadic-utf8
!pip install mecab-python3

Importez les bibliothèques nécessaires pour entraîner et évaluer votre modèle.

import numpy as np
import transformers
from transformers import BertJapaneseTokenizer, BertModel
import torch
from torch.utils.data import Dataset, DataLoader
from torch import optim
from torch import cuda
import time
from matplotlib import pyplot as plt

Ensuite, spécifiez le modèle BERT pré-appris japonais à utiliser cette fois. Actuellement, les transformateurs peuvent utiliser quatre types de modèles publiés par le laboratoire Inui-Suzuki de l'Université de Tohoku. Ici, je vais essayer `` bert-base-japanese-whole-word-masking ''.

#Désigner un modèle pré-formé
pretrained = 'cl-tohoku/bert-base-japanese-whole-word-masking'

Ensuite, façonnez les données sous une forme qui peut être entrée dans le modèle. Tout d'abord, définissez une classe pour créer un ensemble de données '' qui contient le vecteur de fonction et le vecteur d'étiquette ensemble, ce qui est souvent utilisé dans PyTorch. En passant tokenizer '' à cette classe, il est possible d'effectuer un traitement tel qu'une analyse morphologique sur le texte d'entrée, de le remplir à la longueur de série maximale spécifiée, puis de le convertir en ID de mot. .. Cependant, comme le tokenizer '' lui-même, dans lequel tout le traitement est écrit pour BERT, sera obtenu plus tard via les transcripteurs, ce qui est nécessaire dans la classe est le traitement et le résultat à transmettre au tokenizer ''. Ce n'est que le processus de réception.

#Définition de l'ensemble de données
class CreateDataset(Dataset):
  def __init__(self, X, y, tokenizer, max_len):
    self.X = X
    self.y = y
    self.tokenizer = tokenizer
    self.max_len = max_len

  def __len__(self):  # len(Dataset)Spécifiez la valeur à renvoyer avec
    return len(self.y)

  def __getitem__(self, index):  # Dataset[index]Spécifiez la valeur à renvoyer avec
    text = self.X[index]
    inputs = self.tokenizer.encode_plus(
      text,
      add_special_tokens=True,
      max_length=self.max_len,
      pad_to_max_length=True
    )
    ids = inputs['input_ids']
    mask = inputs['attention_mask']

    return {
      'ids': torch.LongTensor(ids),
      'mask': torch.LongTensor(mask),
      'labels': torch.Tensor(self.y[index])
    }

Créez un ensemble de données '' en utilisant ce qui précède. L'un des arguments, MAX_LEN '', représente la longueur maximale de la série, les instructions plus longues sont coupées et les instructions plus courtes sont complétées pour s'aligner sur cette longueur. À l'origine, jusqu'à 512 peuvent être spécifiés dans BERT, mais cette fois, 128 est spécifié en raison de restrictions de mémoire.

#Spécification de la longueur maximale de la série
MAX_LEN = 128

#Obtenir un tokenizer
tokenizer = BertJapaneseTokenizer.from_pretrained(pretrained)

#Créer un jeu de données
dataset_train = CreateDataset(train['article'], train[categories].values, tokenizer, MAX_LEN)
dataset_valid = CreateDataset(valid['article'], valid[categories].values, tokenizer, MAX_LEN)
dataset_test = CreateDataset(test['article'], test[categories].values, tokenizer, MAX_LEN)

for var in dataset_train[0]:
  print(f'{var}: {dataset_train[0][var]}')

production


ids: tensor([    2,  5563,  3826,     7,     9,     6,  5233,  2110,    10,  4621,
           49,  1197,    64,    14, 10266,     7,  3441,  1876,    26,    62,
            8,    70,   825,     6,  9749,    70,  3826,     7,  1876,    15,
           16,  7719,  1549,  4621,    11,  1800,    15,    16,  6629,    45,
           28,   392,     8,  5880,     7,  1800,    34,  1559,    14,    31,
          947,     6,  8806,    16,  6629,    13,  1755,  3002,  4621,    11,
         1942,     7,  9626,   392,   124,     7,   139,     8, 25035,  4021,
          489,  7446,   143, 16430, 13901,  1993,    49,  8365,  2496, 12084,
           40,  5880,  1800,  9749,  1876,    15,    16,  7719,  1549,  4621,
           14,     6,  5563,  3826,     5,  4314,  5233,  2110,    10,   120,
         4118,     7,  1876,    26,    20,    16,    33,   344,     9,     6,
        10843,   329, 11426,    11,  1943,    10,    72,     7, 10485,     7,
         1876,    26,    62, 26813,  7004,    11, 20718,     3])
mask: tensor([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        1, 1, 1, 1, 1, 1, 1, 1])
labels: tensor([0., 1., 0., 0., 0., 0., 0., 0., 0.])

Les informations de la première phrase sont sorties. Vous pouvez voir que la chaîne d'entrée a été convertie en une série d'ID en tant que ids. Dans BERT, des délimiteurs spéciaux [CLS] et [SEP] sont insérés au début et à la fin de la phrase originale pendant le processus de conversion, ils sont donc également 2 '' et 3 ''. Inclus dans la série comme `. Les étiquettes de réponse correctes sont également conservées dans un format unique en tant que étiquettes ''. Aussi, gardez le masque qui représente la position de remplissage afin qu'il puisse être passé au modèle avec les `` aides pendant l'entraînement.

Ensuite, définissez le réseau. En utilisant des transfomères, toute la partie BERT peut être exprimée par `` BertModel ''. Ensuite, définissez une suppression qui reçoit le vecteur de sortie BERT et une couche entièrement connectée pour accueillir la tâche de classification et vous avez terminé.

#Définition du modèle de classification BERT
class BERTClass(torch.nn.Module):
  def __init__(self, pretrained, drop_rate, otuput_size):
    super().__init__()
    self.bert = BertModel.from_pretrained(pretrained)
    self.drop = torch.nn.Dropout(drop_rate)
    self.fc = torch.nn.Linear(768, otuput_size)  #Spécifiez 768 dimensions en fonction de la sortie de BERT
    
  def forward(self, ids, mask):
    _, out = self.bert(ids, attention_mask=mask)
    out = self.fc(self.drop(out))
    return out

Apprendre le modèle de classification BERT

Maintenant que vous avez un réseau avec Dataset '', il est temps de créer votre boucle d'apprentissage habituelle. Ici, une série de flux est définie comme une fonction train_model ''. Pour connaître la signification des composants qui apparaissent, consultez le flux du problème dans l'article [Language Processing 100 Knock 2020] Chapitre 8: Neural Net. Veuillez vous référer à l'explication avec elle.

def calculate_loss_and_accuracy(model, loader, device, criterion=None):
  """Calculer le taux de perte / réponse correcte"""
  model.eval()
  loss = 0.0
  total = 0
  correct = 0
  with torch.no_grad():
    for data in loader:
      #Spécification de l'appareil
      ids = data['ids'].to(device)
      mask = data['mask'].to(device)
      labels = data['labels'].to(device)

      #Propagation vers l'avant
      outputs = model.forward(ids, mask)

      #Calcul des pertes
      if criterion != None:
        loss += criterion(outputs, labels).item()

      #Calcul du taux de réponse correct
      pred = torch.argmax(outputs, dim=-1).cpu().numpy() #Tableau d'étiquettes prévu pour la longueur de la taille du lot
      labels = torch.argmax(labels, dim=-1).cpu().numpy()  #Tableau d'étiquettes correct de la taille du lot
      total += len(labels)
      correct += (pred == labels).sum().item()
      
  return loss / len(loader), correct / total
  

def train_model(dataset_train, dataset_valid, batch_size, model, criterion, optimizer, num_epochs, device=None):
  """Exécute la formation du modèle et renvoie un journal du taux de perte / réponse correcte"""
  #Spécification de l'appareil
  model.to(device)

  #Créer un chargeur de données
  dataloader_train = DataLoader(dataset_train, batch_size=batch_size, shuffle=True)
  dataloader_valid = DataLoader(dataset_valid, batch_size=len(dataset_valid), shuffle=False)

  #Apprentissage
  log_train = []
  log_valid = []
  for epoch in range(num_epochs):
    #Heure de début d'enregistrement
    s_time = time.time()

    #Mettre en mode entraînement
    model.train()
    for data in dataloader_train:
      #Spécification de l'appareil
      ids = data['ids'].to(device)
      mask = data['mask'].to(device)
      labels = data['labels'].to(device)

      #Initialiser le dégradé à zéro
      optimizer.zero_grad()

      #Propagation vers l'avant+Erreur de propagation de retour+Mise à jour du poids
      outputs = model.forward(ids, mask)
      loss = criterion(outputs, labels)
      loss.backward()
      optimizer.step()
      
    #Calcul de la perte et taux de réponse correcte
    loss_train, acc_train = calculate_loss_and_accuracy(model, dataloader_train, device, criterion=criterion)
    loss_valid, acc_valid = calculate_loss_and_accuracy(model, dataloader_valid, device, criterion=criterion)
    log_train.append([loss_train, acc_train])
    log_valid.append([loss_valid, acc_valid])

    #Enregistrer le point de contrôle
    torch.save({'epoch': epoch, 'model_state_dict': model.state_dict(), 'optimizer_state_dict': optimizer.state_dict()}, f'checkpoint{epoch + 1}.pt')

    #Enregistrer l'heure de fin
    e_time = time.time()

    #Journal de sortie
    print(f'epoch: {epoch + 1}, loss_train: {loss_train:.4f}, accuracy_train: {acc_train:.4f}, loss_valid: {loss_valid:.4f}, accuracy_valid: {acc_valid:.4f}, {(e_time - s_time):.4f}sec') 

  return {'train': log_train, 'valid': log_valid}

Définissez les paramètres et effectuez un réglage fin.

#Paramètres des paramètres
DROP_RATE = 0.4
OUTPUT_SIZE = 9
BATCH_SIZE = 16
NUM_EPOCHS = 4
LEARNING_RATE = 2e-5

#Définition du modèle
model = BERTClass(pretrained, DROP_RATE, OUTPUT_SIZE)

#Définition de la fonction de perte
criterion = torch.nn.BCEWithLogitsLoss()

#Définition de l'optimiseur
optimizer = torch.optim.AdamW(params=model.parameters(), lr=LEARNING_RATE)

#Spécification de l'appareil
device = 'cuda' if cuda.is_available() else 'cpu'

#Apprentissage de modèle
log = train_model(dataset_train, dataset_valid, BATCH_SIZE, model, criterion, optimizer, NUM_EPOCHS, device=device)

production


epoch: 1, loss_train: 0.0976, accuracy_train: 0.8978, loss_valid: 0.1122, accuracy_valid: 0.8575, 405.6795sec
epoch: 2, loss_train: 0.0468, accuracy_train: 0.9622, loss_valid: 0.0802, accuracy_valid: 0.8942, 405.0562sec
epoch: 3, loss_train: 0.0264, accuracy_train: 0.9822, loss_valid: 0.0688, accuracy_valid: 0.9077, 407.3759sec
epoch: 4, loss_train: 0.0164, accuracy_train: 0.9907, loss_valid: 0.0708, accuracy_valid: 0.9050, 407.4937sec

Vérifiez le résultat.

#Visualisation du journal
x_axis = [x for x in range(1, len(log['train']) + 1)]
fig, ax = plt.subplots(1, 2, figsize=(15, 5))
ax[0].plot(x_axis, np.array(log['train']).T[0], label='train')
ax[0].plot(x_axis, np.array(log['valid']).T[0], label='valid')
ax[0].set_xlabel('epoch')
ax[0].set_ylabel('loss')
ax[0].legend()
ax[1].plot(x_axis, np.array(log['train']).T[1], label='train')
ax[1].plot(x_axis, np.array(log['valid']).T[1], label='valid')
ax[1].set_xlabel('epoch')
ax[1].set_ylabel('accuracy')
ax[1].legend()
plt.show()

bert-ja.png

#Calcul du taux de réponse correcte
dataloader_train = DataLoader(dataset_train, batch_size=1, shuffle=False)
dataloader_valid = DataLoader(dataset_valid, batch_size=1, shuffle=False)
dataloader_test = DataLoader(dataset_test, batch_size=1, shuffle=False)

print(f'Taux de réponse correct (données d'apprentissage):{calculate_loss_and_accuracy(model, dataloader_train, device)[1]:.3f}')
print(f'Taux de réponse correct (données de vérification):{calculate_loss_and_accuracy(model, dataloader_valid, device)[1]:.3f}')
print(f'Taux de réponse correct (données d'évaluation):{calculate_loss_and_accuracy(model, dataloader_test, device)[1]:.3f}')

production


Taux de réponse correct (données d'apprentissage): 0.991
Taux de réponse correct (données de vérification): 0.905
Taux de réponse correct (données d'évaluation): 0.904

Le taux de réponse correcte était d'environ 90% dans les données d'évaluation.

Normalement, je pense que c'est souvent le cas que des paramètres tels que la fixation ou non des poids pour chaque couche de BERT et le taux d'apprentissage sont ajustés tout en vérifiant l'exactitude des données de vérification.

en conclusion

Cette fois, les paramètres ont été fixés, mais la précision était relativement élevée et le résultat a montré la force du pré-apprentissage. En utilisant la bibliothèque de transformateurs pour la mise en œuvre, il suffit de préparer uniquement les pièces utilisées dans le réseau neuronal conventionnel. Veuillez l'essayer avec diverses données.

référence

transformers BERT (officiel) BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, Devlin, J. et al. (2018) (Article original) [Language processing 100 knock 2020] Résumé des exemples de réponses par Python

Recommended Posts

[PyTorch] Introduction à la classification des documents japonais à l'aide de BERT
[PyTorch] Introduction à la classification de documents à l'aide de BERT
Introduction à Lightning Pytorch
[PyTorch] Comment utiliser BERT - Réglage fin des modèles pré-entraînés japonais pour résoudre les problèmes de classification
J'ai essayé d'implémenter la classification des phrases et la visualisation de l'attention par le japonais BERT avec PyTorch
J'ai essayé de comparer la précision de la classification des phrases BERT japonaises et japonaises Distil BERT avec PyTorch et introduction de la technique d'amélioration de la précision BERT
Introduction à PyTorch (1) Différenciation automatique
Introduction à discord.py (3) Utilisation de la voix
Introduction à la modélisation bayésienne à l'aide de la traduction japonaise pymc3 de modélisation bayésienne en Python (chapitre 0-2)
[Détails (?)] Introduction au pytorch ~ CNN de CIFAR10 ~
[PyTorch] Génération de phrases japonaises à l'aide de Transformer
Classification des documents avec texte toch de PyTorch
[Introduction à Pytorch] J'ai joué avec sinGAN ♬
Créez rapidement des données de classification de documents à l'aide de NLTK
Introduction à la simulation d'événements discrets à l'aide de Python # 2
Introduction à Tornado (3): Développement à l'aide de modèles [Pratique]
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
Apprendre la catégorisation de documents japonais avec spaCy / GiNZA (échec)
[Super introduction à l'apprentissage automatique] Découvrez les didacticiels Pytorch
[Introduction à cx_Oracle] (5e) Gestion des données japonaises
Introduction à Tornado (2): Introduction au développement à l'aide de modèles - Génération de pages dynamiques -
Introduction à Scapy ② (transmission ICMP, HTTP (TCP) avec Scapy)
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Introduction à Tkinter 1: Introduction
Introduction à PyQt
Introduction à Scrapy (2)
[Linux] Introduction à Linux
Introduction à Scrapy (4)
Introduction à discord.py (2)
[Explication de la mise en œuvre] Comment utiliser la version japonaise de BERT dans Google Colaboratory (PyTorch)
Tutoriel [PyTorch] (version japonaise) ④ ~ FORMATION D'UN CLASSIFICATEUR (classification d'images) ~
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
[Introduction à Python] Comment arrêter la boucle en utilisant break?
[Introduction à RasPi4] Construction de l'environnement; OpenCV / Tensorflow, entrée japonaise ♪
[Introduction à cx_Oracle] (13e) Connexion utilisant le pool de connexions (côté client)
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-