Ce référentiel contient des implémentations de certains des articles les plus importants pour la réponse aux questions. Les implémentations se présentent sous la forme de tutoriels et sont à peu près annotations desdits articles. Ce référentiel pourrait être utile pour ceux qui connaissent les bases de l'apprentissage en profondeur et de la PNL, veulent commencer par la lecture des articles légèrement complexes et voir comment ils sont mis en œuvre. Ce référentiel suppose également une certaine familiarité avec les bases de Pytorch, bien que j'aie fait de mon mieux pour tout décomposer en termes simples.
La réponse aux questions est une tâche importante en fonction de laquelle l'intelligence des systèmes PNL et de l'IA en général peut être jugée. Un système QA reçoit un court paragraphe ou un contexte sur un sujet et est posé certaines questions en fonction du passage. Les réponses à ces questions sont des travées du contexte, c'est-à-dire qu'ils sont directement disponibles dans le passage. Pour former de tels modèles, nous utilisons l'ensemble de données d'escouade.
Le cahier nommé "Pipeline de prétraitement NLP pour QA" contient tout le code de prétraitement que j'ai écrit. Le code de prétraitement n'utilise aucune bibliothèque de haut niveau et j'ai écrit toutes les fonctions à partir de zéro. Il n'utilise que Spacy pour la tokenisation. Les fonctions implémentées ici sont communes à de nombreuses tâches PNL et pourraient donc être utiles pour quelqu'un qui commence. Par exemple: créer des vocabulaires, des matrices de poids pour les incorporations pré-étirées, les ensembles de données / dataloaders, etc. avec le recul, en utilisant une bibliothèque de haut niveau comme TorchText aurait été une meilleure idée et je travaille actuellement sur la même chose.
Tous les ordinateurs portables sont basés sur cette approche. En fin de compte, la construction de filets neuronaux consiste à travailler avec les tenseurs. Connaître la forme et le contenu de chaque tenseur est quelque chose que j'ai trouvé très utile pendant l'apprentissage. Par conséquent, après chaque ligne de code, j'ai commenté la forme du tenseur et les modifications qui se produisent en raison des transformations du code. Cela rend le processus de compréhension de ce qui se passe dans les réseaux neuronaux plus intuitifs.
Je n'ai pas d'accès illimité à des GPU plus rapides. Les modèles ci-dessous ont été formés en louant des GPU sur Vast.ai. J'ai utilisé GTX 1080 Ti pour la majorité de mes expériences.
Dans le premier cahier, nous implémentons un modèle relativement simple qui implique des LSTM multicouches et une attention bilinéaire. Les détails et l'intuition de chaque couche / composant sont expliqués avant de sauter dans le code. Ce modèle est très similaire à celui discuté dans cet article et a également les mêmes premiers auteurs: Danqi Chen. Le deuxième modèle est également connu sous le nom de "STANFOR ATTENTIF READER". Le modèle implémenté dans le cahier en est une version légèrement avancée. Les résultats sur le jeu de développement obtenus sont:
| Époques | Em | F1 |
|---|---|---|
| 5 | 56.4 | 68.2 |
Je vais former cela davantage pour améliorer les résultats et le mettrai à jour bientôt.
Ensuite, nous passons à un papier un peu plus complexe. Cet article améliore les résultats obtenus par l'article précédent. Le modèle implémenté ici contrairement aux précédents est une architecture hiérarchique à plusieurs étapes qui représente le contexte et la requête à plusieurs niveaux de granularité. Cet article implique également une récidive car elle utilise largement les LSTM et un mécanisme d'attention sans mémoire qui est de nature bidirectionnelle. Ce carnet discute en détail de certaines techniques de PNL importantes comme les intégres de personnages , les réseaux routiers entre autres. Résultats sur le jeu de développement:
| Époques | Em | F1 |
|---|---|---|
| 5 | 60.4 | 70.1 |
Enfin, nous nous éloignons de la récidive et n'utilisons que l'auto-atténuer et les convolutions. Cet article s'inspire de "l'attention est tout ce dont vous avez besoin". La principale motivation derrière la conception du modèle est: Convolution capture la structure locale du texte, tandis que l'administration de soi apprend l'interaction globale entre chaque paire de mots. Ce didacticiel explique des sujets comme l'auto-assertion et les convolutions séparables du sens de la profondeur . Résultats sur le jeu de développement:
| Époques | Em | F1 |
|---|---|---|
| 3 | * | 36.6 |
Je forment actuellement ce modèle. Je manque actuellement de temps et je n'ai pas accès à des GPU plus rapides. L'entraînement pour 1 époque prend environ 1 heure sur GTX 1080 Ti.
Je ne suis pas un expert. Mon principal motif derrière ce projet était de découvrir un domaine PNL. Si vous trouvez une erreur conceptuelle ou idiote, veuillez créer un problème et je ferai de mon mieux pour les rectifier rapidement. D'autres contributions sont également les bienvenues. Si vous entraînez un modèle et obtenez des résultats améliorés, veuillez créer un PR. Si vous souhaitez implémenter plus d'articles dans ce domaine et que vous souhaitez les ajouter à ce référentiel, je serais heureux de vous aider. Bien que je manque actuellement de temps, je maintiendrai activement ce référentiel.