Tabla de contenido:
- Introducción a la Biblioteca Tensor de Torch
- Gráficos de cálculo y diferenciación automática
- Bloques de construcción de aprendizaje profundo: mapas afines, no linealidades y objetivos
- Optimización y entrenamiento
- Creación de componentes de red en Pytorch
- Ejemplo: Clasificador de texto de la bolsa de regresión logística
- INCREGOS DE PALABRAS: codificación de semántica léxica
- Ejemplo: modelado de idiomas N-gram
- Ejercicio: bolsa continua de palabras para aprender incrustaciones de palabras
- Modelado de secuencia y redes de memoria a largo plazo
- Ejemplo: un LSTM para el etiquetado de parte del voz
- Ejercicio: Aumento del etiquetador LSTM con características a nivel de personaje
- Avanzado: kits de herramientas dinámicas, programación dinámica y el bilstm-CRF
- Ejemplo: campo aleatorio condicional de BI-LSTM para reconocimiento de entidad nombrada
- Ejercicio: una nueva función de pérdida para el etiquetado discriminativo
¿Qué es este tutorial?
Estoy escribiendo este tutorial porque, aunque hay muchos otros tutoriales por ahí, todos parecen tener uno de los tres problemas:
- Tienen mucho contenido en la visión por computadora y las redes de convivir, lo cual es irrelevante para la mayoría de las PNL (aunque las redes de convivir se han aplicado de manera genial a problemas de PNL).
- Pytorch es nuevo, y muchos aprendizaje profundo para los tutoriales de PNL se encuentran en marcos más antiguos, y generalmente no en marcos dinámicos como Pytorch, que tienen un sabor totalmente diferente.
- Los ejemplos no van más allá de los modelos de lenguaje RNN y muestran las cosas increíbles que puede hacer al intentar hacer una predicción de la estructura lingusítica. Creo que este es un problema, porque los gráficos dinámicos de Pytorch hacen que la estructura predicen una de sus mayores fortalezas.
Específicamente, estoy escribiendo este tutorial para una clase de procesamiento de lenguaje natural en Georgia Tech, para facilitar un conjunto de problemas que escribí para la clase sobre el análisis de transición profunda. El conjunto de problemas utiliza algunas técnicas avanzadas. La intención de este tutorial es cubrir los conceptos básicos, para que los estudiantes puedan centrarse en los aspectos más desafiantes del conjunto de problemas. El objetivo es comenzar con lo básico y avanzar a la predicción de la estructura lingüística, que creo que está casi completamente ausente en otros tutoriales de Pytorch. Los conceptos básicos generales de aprendizaje profundo tienen exposiciones cortas. Temas más específicos de la PNL recibieron discusiones más profundas, aunque me he referido a otras fuentes cuando sentí que una descripción completa reinventaría la rueda y ocuparía demasiado espacio.
Conjunto de problemas de análisis de dependencia
Como se mencionó anteriormente, aquí está el conjunto de problemas que pasa por la implementación de un analizador de dependencia de alto rendimiento en Pytorch. Quería agregar un enlace aquí ya que podría ser útil, siempre que ignore las cosas que eran específicas de la clase. Algunas notas:
- Hay mucho código, por lo que el comienzo del conjunto de problemas fue principalmente para familiarizar a las personas con la forma en que mi código representaba los datos relevantes y las interfaces que necesita usar. El resto del conjunto de problemas en realidad está implementando componentes para el analizador. Como no habíamos hecho un aprendizaje profundo en la clase antes, intenté proporcionar una enorme cantidad de comentarios y sugerencias al escribirlo.
- Hay una prueba unitaria para cada entrega, que puede ejecutar con nosetests.
- Dado que usamos este problema establecido en la clase, no publique publicaciones de soluciones.
- El mismo repositorio tiene algunas notas que incluyen una sección sobre el análisis de dependencia de reducción de cambio, si está buscando una fuente escrita para complementar el conjunto de problemas.
- El enlace anterior podría no funcionar si se elimina al comienzo de un nuevo semestre.
Referencias:
- Aprendí mucho sobre la predicción de la estructura profunda en EMNLP 2016 de este tutorial sobre Dynet, dado por Chris Dyer y Graham Neubig de CMU y Yoav Goldberg de la Universidad Bar Ilan. Dynet es un gran paquete, especialmente si desea usar C ++ y evitar la escritura dinámica. El ejercicio final de BILSTM CRF y el ejercicio de características a nivel de personaje son cosas que aprendí de este tutorial.
- Un gran libro sobre predicción de estructura es la predicción de estructura lingüística de Noah Smith. No usa el aprendizaje profundo, pero eso está bien.
- El mejor libro de aprendizaje profundo que conozco es el aprendizaje profundo, que es por algunos contribuyentes importantes al campo y muy integral, aunque no hay un enfoque NLP. Es gratis en línea, pero vale la pena tener en su estante.
Ceremonias:
Hay algunos ejercicios en el tutorial, que deben implementar un modelo popular (CBOW) o aumentar uno de mis modelos. El ejercicio de características a nivel de personaje especialmente no trivial, pero muy útil (no puedo citar los números exactos, pero he ejecutado el experimento antes y, por lo general, las características a nivel de personaje aumentan la precisión del 2-3%). Como no son ejercicios simples, pronto los implementaré yo mismo y los agregaré al repositorio.
Sugerencias:
Abra un problema de GitHub si encuentra algún error o cree que hay un modelo particular que sería útil agregar.