Este repositorio contiene implementaciones de algunos de los documentos más importantes para la respuesta a las preguntas. Las implementaciones son en forma de tutoriales y son aproximadamente anotaciones de dichos documentos. Este repositorio podría ser útil para aquellos que conocen los conceptos básicos del aprendizaje profundo y la PNL, quieren comenzar a leer artículos ligeramente complejos y ver cómo se implementan. Este repositorio también asume cierta familiaridad con los conceptos básicos de Pytorch, aunque he hecho todo lo posible para desglosar todo en términos simples.
La respuesta a las preguntas es una tarea importante basada en la que se puede juzgar la inteligencia de los sistemas de PNL y la IA en general. Un sistema de control de calidad recibe un párrafo o contexto corto sobre algún tema y se le hace algunas preguntas basadas en el pasaje. Las respuestas a estas preguntas son tramos del contexto, es decir, están directamente disponibles en el pasaje. Para entrenar tales modelos, utilizamos el conjunto de datos de escuadrón.
El cuaderno llamado "Pipeline de preprocesamiento de NLP para QA" contiene todo el código de preprocesamiento que he escrito. El código de preprocesamiento no utiliza ninguna biblioteca de alto nivel y he escrito todas las funciones desde cero. Solo usa Spacy para la tokenización. Las funciones implementadas aquí son comunes a muchas tareas de PNL y, por lo tanto, podrían ser útiles para alguien que recién comienza. Por ejemplo: crear vocabularios, matrices de peso para incrustaciones previas al petróleo, conjuntos de datos/dataloaders, etc. En retrospectiva, el uso de una biblioteca de alto nivel como TorchText habría sido una mejor idea y actualmente estoy trabajando en el mismo.
Todos los cuadernos se basan en este enfoque. En última instancia, construir redes neuronales se trata de trabajar con tensores. Conocer la forma y el contenido de cada tensor es algo que he encontrado muy útil mientras aprendí. Por lo tanto, después de cada línea de código, he comentado la forma del tensor y los cambios que ocurren debido a las transformaciones en el código. Esto hace que el proceso de comprender lo que está sucediendo en las redes neuronales sean más intuitivas.
No tengo un acceso ilimitado a las GPU más rápidas. Los modelos a continuación han sido entrenados alquilando GPU en Vast.ai. Usé GTX 1080 Ti para la mayoría de mis experimentos.
En el primer cuaderno, implementamos un modelo relativamente simple que involucra LSTM de múltiples capas y atención bilineal. Los detalles y la intuición de cada capa/componente se explican antes de saltar al código. Este modelo es muy similar al discutido en este documento y también tiene los mismos primeros autores: Danqi Chen. El segundo modelo también se conoce como el "lector atento". El modelo implementado en el cuaderno es una versión ligeramente avanzada de esto. Los resultados en el conjunto de desarrollo obtenido son:
| Épocas | Em | F1 |
|---|---|---|
| 5 | 56.4 | 68.2 |
Estaré entrenando más esto para mejorar los resultados y lo actualizaré pronto.
A continuación, pasamos a un papel un poco más complejo. Este documento mejora los resultados obtenidos por el artículo anterior. El modelo implementado aquí, a diferencia de los anteriores, es una arquitectura jerárquica de varias etapas que representa el contexto y la consulta en múltiples niveles de granularidad. Este documento también implica recurrencia, ya que utiliza ampliamente LSTM y un mecanismo de atención sin memoria que es de naturaleza bidireccional. Este cuaderno analiza en detalle sobre algunas técnicas importantes de PNL como las integridades de los personajes , las redes de carreteras, entre otros. Resultados en el conjunto de dev:
| Épocas | Em | F1 |
|---|---|---|
| 5 | 60.4 | 70.1 |
Finalmente, nos alejamos de la recurrencia y solo usamos la autoatención y las convoluciones. Este artículo se inspira en "La atención es todo lo que necesitas". La motivación clave detrás del diseño del modelo es: la convolución captura la estructura local del texto, mientras que la autoatención aprende la interacción global entre cada par de palabras. Este tutorial explica temas como la autoatación y las convoluciones separables en profundidad . Resultados en el conjunto de dev:
| Épocas | Em | F1 |
|---|---|---|
| 3 | * | 36.6 |
Actualmente estoy entrenando este modelo. Actualmente tengo poco tiempo y no tengo acceso a GPU más rápidas. Entrenar esto para 1 época toma alrededor de 1 hora en GTX 1080 TI.
No soy un experto. Mi motivo principal detrás de este proyecto era aprender sobre un dominio de PNL. Si encuentra algún error conceptual o tonto, crea un problema y haré todo lo posible para rectificarlos rápidamente. Otras contribuciones también son bienvenidas. Si capacita cualquier modelo y obtiene resultados mejorados, haga un PR. Si está interesado en implementar más artículos en este dominio y desea agregarlos a este repositorio, estaría encantado de ayudar. Aunque actualmente tengo poco tiempo, mantendré activamente este repositorio.