Aidemy 2020/10/30
Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Cette fois, ce sera le premier article d'extraction de sujet de texte japonais. Ravi de vous rencontrer.
Quoi apprendre cette fois ・ Apprentissage profond dans le traitement du langage naturel ・ Intégration, RNN, LSTM, Softmax, etc.
-L'apprentissage approfondi utilisé dans le traitement du langage naturel comprend la traduction automatique, la synthèse automatique et la réponse automatique aux questions. ・ Dans un tel traitement du langage naturel, l'utilisation d'un modèle de réseau de neurones présente l'avantage que le vecteur de mot (Embedding) peut être appris par la méthode de propagation de retour d'erreur __ tout en considérant le contexte et en maintenant les dimensions. y a-t-il.
Embedding -__ Embedding__ signifie __ "intégré" . C'est le premier processus à effectuer lors de la construction d'un réseau neuronal qui gère les mots. Plus précisément, il s'agit d'un processus d'incorporation du symbole word dans la dimension d (environ 100 à 300) . -Embedding se fait comme __ "model.add (Embedding (argument))" . Les arguments sont les suivants. - Input_dim: Nombre de vocabulaire (type de mot) - Output_dim: La grandeur de la dimension d du mot vecteur -__ Input_length__: Longueur de chaque phrase
RNN -__ RNN__ est un "__recursive neural net __", qui est un réseau de neurones souvent utilisé dans l'apprentissage en profondeur du traitement du langage naturel. __ Excellent pour gérer les chaînes d'entrée (séries de longueur variable) avec une longueur arbitraire __.
LSTM -__ LSTM__ est un type de RNN et a une fonction pour compenser les lacunes de RNN. Puisque RNN est un réseau de neurones profondément dans le sens du temps, il présente l'inconvénient d '"oublier" la valeur saisie au début. Autrement dit, RNN n'est pas bon pour la mémoire à long terme, mais LSTM peut effectuer à la fois la mémoire à court terme et la mémoire à long terme, comme le suggère le nom "LongShortTermMemory".
-LSTM peut également être importé de keras et facilement implémenté. Comme Embedding, il peut être utilisé avec __ "model.add (LSTM ())" . Les arguments sont les suivants. ・ Units: Nombre de dimensions du vecteur d'état caché (environ 100 à 300) - Return_sequences__: "True" sort la séquence de sortie (vecteur d'état caché) pour __toutes les séquences d'entrée __, et "False" sort __ uniquement le vecteur d'état caché au dernier moment T.
BiLSTM -LSTM entre la série d'entrée x de 1 à la fin dans l'ordre, mais inversement, il est également possible de prendre la méthode __ pour entrer dans l'ordre depuis l'arrière. En appliquant cela, une méthode appelée __ "BiLSTM" __ qui entre les informations de __ bidirectionnel __ est souvent utilisée. En japonais, il est appelé __ "réseau neuronal récursif bidirectionnel" __. -L'avantage de BiLSTM est qu'il est possible d'acquérir à la fois des "informations propagées depuis le début" et des "informations propagées depuis l'arrière". -Pour la méthode d'implémentation, utilisez keras __ "model.add (bidirectionnel (argument))" __. Dans le premier argument, __LSTM () __ de la section précédente est stocké tel quel, et dans le second argument, __ "merge_mode" __ spécifie comment connecter les LSTM dans deux directions. -Spécifiez l'un des __ ['sum', 'mul', 'concat', 'ave'] __ comme deuxième argument. sum est connecté en ajoutant des éléments, et mul est connecté en multipliant. concat est combiné et connecté, ave est connecté en moyenne.
-Non limité au langage naturel cette fois, dans l'apprentissage profond qui classe, la fonction __Softmax __ est utilisée dans la couche la plus proche de la couche de sortie du réseau neuronal. Cette fonction a également été utilisée dans "Deep Learning Basics". -Comme je l'ai confirmé lors de "Identification du genre", en utilisant Softmax pour la sortie, la sortie sera telle que le __total de la distribution de probabilité de la sortie de chaque classe est 1. -Dans le passé, il était utilisé comme __ "model.add (Activation (" softmax "))" __ dans __Sequential model , mais " Functional API __" qui décrit le modèle sans utiliser Sequential. Dans le cas de ", écrivez comme" __Activation ('softmax') (x) __ ". Passez __ [taille du lot, nombre de classes] __ à ce x.
Attention
-__ Attention__ signifie __ "mécanisme d'attention" __. Il s'agit d'un mécanisme fréquent dans la traduction __machine et la synthèse automatique __. -Par exemple, pour donner un exemple de réponse automatique à une question, supposons qu'il existe une liste s d'une certaine phrase de question et une liste t de la phrase de réponse correspondante. À ce stade, lorsque vous voulez que la machine fasse __ "déterminer si t est valide comme réponse à s" __, RNN convertit ces instructions en vecteur d'état masqué __ et __ à un moment donné. En calculant la caractéristique de t en tenant compte du vecteur d'état caché de s in, il est possible d'obtenir les informations de t en tenant compte des informations de __s (où faire attention à s) __, de sorte que le jugement ci-dessus est possible. Devenir.
-Lors de l'implémentation de Attention, il ne peut pas être implémenté avec le modèle __Sequential __, utilisez donc "Functional API" vu dans la section précédente. L'API fonctionnelle est compliquée contrairement au modèle séquentiel, qui ajoute simplement une couche, mais __ il est possible de construire le modèle librement. -Construire un modèle avec l'API fonctionnelle avec __ "Modèle (entrées, sorties)" __. Par conséquent, il est nécessaire de créer __ "entrées" et "sorties" à transmettre lors de la construction du modèle à l'avance __. -Pour la création de __inputs __, créez une couche d'entrée avec __ "Input (shape = (statement length,))" __ (OK sans batch_size dans le second argument), et __Embedding Appliquez __ puis faites-le BiLSTM et vous avez terminé. __ Si vous avez plusieurs couches d'entrée, vous pouvez créer les mêmes . - La sortie est créée en implémentant Attention __. Dans ce cas, pour BiLSTM "bilstm1" et "bilstm2" de deux instructions, le produit de la matrice est calculé par "__dot () __", la fonction __Softmax __ lui est appliquée, et la matrice entre this et birstm1. Les données à transmettre à la sortie sont complétées en calculant le produit __ et en le connectant à birstm2 avec "__concatenate () __" pour le former en tant que couche de sortie.
・ Le code spécifique est le suivant
Dropout ・ (Review) Dropout est une méthode pour définir aléatoirement certaines données sur __ "0" __ pour apprendre afin d'éviter le surapprentissage. -Lors de l'utilisation du modèle séquentiel, il peut être utilisé avec __ "model.add (Dropout (ratio)") __, mais lors de l'utilisation de l'API fonctionnelle comme cette fois, __ "Dropout (ratio) (x)" __ Vous pouvez l'utiliser comme ça.
-Dans l'apprentissage profond du traitement du langage naturel, un processus appelé Embedding est d'abord effectué pour convertir les mots en vecteurs. ・ Dans cet apprentissage en profondeur, un modèle appelé RNN est utilisé. Parmi ceux-ci, l'écrasante majorité utilise LSTM, qui possède une excellente mémoire à long terme. De plus, les informations de toute la série d'entrée peuvent être prises en compte en utilisant "BiLSTM" qui applique ce LSTM des deux extrémités des données. -En implémentant Attention au moment de la sortie, les informations sur un vecteur peuvent être extraites après avoir pris en compte les informations sur un autre vecteur. Cette technique est fréquente dans le traitement du langage naturel. -De même, la généralisation des données peut être empêchée en abandonnant la couche de sortie.
Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.
Recommended Posts