Table des matières:
- Introduction à la bibliothèque du tenseur de Torch
- Graphiques de calcul et différenciation automatique
- Blocs constitutifs de Deep Learning: Cartes affine, non-linéarités et objectifs
- Optimisation et formation
- Création de composants réseau à Pytorch
- Exemple: Classificateur de texte logistique de régression de la régression des mots
- Incorporation de mots: codage de sémantique lexicale
- Exemple: modélisation de la langue n-gram
- Exercice: sac de mots continu pour apprendre les incorporations de mots
- Modélisation de séquence et réseaux de mémoire à terme long-short
- Exemple: un LSTM pour le marquage d'une partie du discours
- Exercice: augmenter le Tagger LSTM avec des fonctionnalités au niveau du personnage
- Avancé: boîtes à outils dynamiques, programmation dynamique et Bilstm-CRF
- Exemple: champ aléatoire conditionnel bi-lstm pour la reconnaissance de l'entité nommée
- Exercice: une nouvelle fonction de perte pour le marquage discriminant
Quel est ce tutoriel?
J'écris ce tutoriel parce que, bien qu'il existe de nombreux autres tutoriels, ils semblent tous avoir l'un des trois problèmes:
- Ils ont beaucoup de contenu sur la vision par ordinateur et les filets convaincants, ce qui n'est pas pertinent pour la plupart des PNL (bien que des filets convaincants aient été appliqués de manière intéressante aux problèmes de PNL).
- Pytorch est neuf, et tant d'apprentissage en profondeur pour les tutoriels NLP sont dans des cadres plus anciens, et généralement pas dans des cadres dynamiques comme Pytorch, qui ont une saveur totalement différente.
- Les exemples ne vont pas au-delà des modèles de langue RNN et montrent les choses impressionnantes que vous pouvez faire lorsque vous essayez de faire la prédiction de la structure lingusitique. Je pense que c'est un problème, car les graphiques dynamiques de Pytorch font de la prédiction de la structure l'une de ses plus grandes forces.
Plus précisément, j'écris ce tutoriel pour un cours de traitement du langage naturel à Georgia Tech, pour faciliter un ensemble de problèmes que j'ai écrit pour la classe sur l'analyse en transition profonde. L'ensemble de problèmes utilise certaines techniques avancées. L'intention de ce tutoriel est de couvrir les bases, afin que les étudiants puissent se concentrer sur les aspects les plus difficiles de l'ensemble de problèmes. L'objectif est de commencer par les bases et de passer à la prédiction de la structure linguistique, qui, selon moi, est presque complètement absente dans d'autres tutoriels Pytorch. Les bases générales d'apprentissage en profondeur ont de courtes expositions. Les sujets plus spécifiques à la PNL ont reçu plus de discussions approfondies, bien que j'aie fait référence à d'autres sources lorsque j'ai senti qu'une description complète réinventerait la roue et prendrait trop de place.
Ensemble de problèmes d'analyse de dépendance
Comme mentionné ci-dessus, voici l'ensemble de problèmes qui passe par la mise en œuvre d'un analyseur de dépendance hautement performant dans Pytorch. Je voulais ajouter un lien ici car il pourrait être utile, à condition d'ignorer les choses qui étaient spécifiques à la classe. Quelques notes:
- Il y a beaucoup de code, donc le début de l'ensemble de problèmes consistait principalement à familiariser les gens avec la façon dont mon code représentait les données pertinentes et les interfaces que vous devez utiliser. Le reste de l'ensemble de problèmes est en réalité des composants pour l'analyseur. Comme nous n'avions jamais fait d'apprentissage en profondeur dans la classe auparavant, j'ai essayé de fournir une énorme quantité de commentaires et d'indices lors de l'écriture.
- Il y a un test unitaire pour chaque livrable, que vous pouvez exécuter avec des Nosetests.
- Étant donné que nous utilisons ce problème défini dans la classe, veuillez ne pas publier publiquement les solutions.
- Le même référentiel a quelques notes qui incluent une section sur l'analyse de dépendance à la réduction de changement de vitesse, si vous recherchez une source écrite pour compléter l'ensemble de problèmes.
- Le lien ci-dessus peut ne pas fonctionner s'il est retiré au début d'un nouveau semestre.
Références:
- J'ai beaucoup appris sur la prédiction de la structure profonde à EMNLP 2016 à partir de ce tutoriel sur Dynet, donné par Chris Dyer et Graham Neubig de CMU et Yoav Goldberg de l'Université Bar Ilan. Dynet est un excellent package, surtout si vous souhaitez utiliser C ++ et éviter le typage dynamique. Le dernier exercice BILSTM CRF et l'exercice des caractéristiques des personnages sont des choses que j'ai apprises de ce tutoriel.
- Un grand livre sur la prédiction de la structure est la prédiction de la structure linguistique par Noah Smith. Il n'utilise pas d'apprentissage en profondeur, mais c'est OK.
- Le meilleur livre d'apprentissage en profondeur que je connais est l'apprentissage en profondeur, qui est par certains contributeurs majeurs au domaine et très complets, bien qu'il n'y ait pas de concentration par la PNL. Il est gratuit en ligne, mais vaut la peine d'avoir sur votre étagère.
Exercices:
Il y a quelques exercices dans le tutoriel, qui sont soit pour mettre en œuvre un modèle populaire (CBOW), soit augmenter l'un de mes modèles. L'exercice des caractéristiques au niveau du personnage est en particulier très non trivial, mais très utile (je ne peux pas citer les nombres exacts, mais j'ai exécuté l'expérience avant et généralement les caractéristiques au niveau du caractère augmentent la précision de 2 à 3%). Comme ils ne sont pas des exercices simples, je les implémenterai bientôt et les ajouterai au dépôt.
Suggestions:
Veuillez ouvrir un problème GitHub si vous trouvez des erreurs ou si vous pensez qu'il existe un modèle particulier qui serait utile à ajouter.