Este repositorio contiene un curso en línea , así como su moderno marco web de código abierto. En el curso, aprenderá cómo usar Spacy para construir sistemas avanzados de comprensión del lenguaje natural, utilizando enfoques de aprendizaje automático y basados en reglas. El front-end funciona con Gatsby, revel.js y plyr, y la ejecución del código de fondo usa aglutinante? Todo es de código abierto y publicado bajo la licencia MIT (código y marco) y CC BY-NC (Spacy Course Materials).
Este curso está destinado principalmente al autoestudio . Sí, puede hacer trampa: todas las soluciones están en este repositorio, no hay penalización por hacer clic en "Mostrar sugerencias" o "Show Solution", y puede marcar un ejercicio como se hace cuando cree que está hecho.
| Idioma | Ejemplos de texto 1 | Fuente | Autores |
|---|---|---|---|
| Inglés | Inglés | chapters/en , exercises/en | @ines |
| Alemán | Alemán | chapters/de , exercises/de | @ines, @jette16 |
| Español | Español | chapters/es , exercises/es | @mariacamilagl, @Damian-Romero |
| Francés | Francés | chapters/fr , exercises/fr | @datakime |
| japonés | japonés | chapters/ja , exercises/ja | @tamuhey, @Hiroshi-Matsuda-rit, @icoxfog417, @akirakubo, @bosque1988, @ao9mame, @matsurih, @hiromuhota, @mei28, @polm |
| Chino | Chino | chapters/zh , exercises/zh | @Crownpku |
| portugués | Inglés | chapters/pt , exercises/pt | @Cristianasp |
Si ves un error, ¡siempre aprecio las solicitudes de extracción!
1. Este es el lenguaje utilizado para los ejemplos de texto y los recursos utilizados en los ejercicios. Por ejemplo, la versión alemana del curso también utiliza ejemplos y modelos de texto alemanes. No siempre es posible traducir todos los ejemplos de código, por lo que algunas traducciones aún pueden usar y analizar el texto en inglés como parte del curso.
Originalmente desarrollé el contenido para Datacamp, pero quería hacer una versión gratuita para ponerla a disposición de más personas, por lo que no tiene que registrarse en su servicio. Como proyecto de fin de semana, terminé reuniendo mi propia pequeña aplicación para presentar los ejercicios y el contenido de una manera divertida e interactiva.
¡Probablemente, sí! Si ha estado buscando una forma de bricolaje de publicar sus materiales, espero que mi pequeño marco pueda ser útil. Debido a que muchas personas expresaron interés en esto, reuní algunos repositorios de inicio que puedes bifurcar y adaptar:
ines/course-starter-pythonines/course-starter-r La fuente de la aplicación, los componentes de la interfaz de usuario y el marco de Gatsby para la creación de cursos interactivos tienen licencia como MIT, como casi todo mi software de código abierto. Los materiales del curso mismos (diapositivas y capítulos) tienen licencia bajo CC BY-NC. Esto significa que puede usarlos libremente, simplemente no puede ganar dinero con ellos.
Primero, muchas gracias, ¿esto es realmente genial y valioso para la comunidad? He intentado configurar la estructura del curso para que sea fácil agregar diferentes idiomas: los archivos específicos del idioma se organizan en directorios en exercises y chapters , y otros textos específicos del idioma están disponibles en locale.json . Si desea contribuir, hay dos formas diferentes de involucrarse:
Iniciar un proyecto de traducción comunitaria. Esta es la forma más fácil y sin ataduras. Puede desembolsar el repositorio, copiar la versión en inglés, cambiar el código de idioma, comenzar a traducir e invitar a otros a contribuir (si lo desea). Si está buscando contribuyentes, no dude en abrir un problema aquí o etiquetar @spacy_io en Twitter para que podamos ayudar a correr la voz. También estamos felices de responder a sus preguntas sobre el rastreador de problemas.
Haznos una oferta. Estamos abiertos a las traducciones de puesta en marcha para diferentes idiomas, por lo que si está interesado, envíenos un correo electrónico a [email protected] e incluya su oferta, horario estimado y un poco sobre usted y sus antecedentes (y cualquier trabajo técnico de escritura o traducción que haya realizado en el pasado, si está disponible). No importa dónde se encuentre, pero debería poder emitir facturas como un profesional independiente o similar, dependiendo de su país.
De nuevo, gracias, esto es súper genial! Si bien los videos ingleses y alemanes también incluyen una grabación de video, no es un requisito y estaríamos encantados de proporcionar una pista de audio junto con las diapositivas. Nos ocuparíamos del posprocesamiento y la edición de video, por lo que todo lo que necesitamos es la grabación de audio. Si se siente cómodo grabando usted mismo leyendo las notas de diapositivas en su idioma, envíenos un correo electrónico a [email protected] e haga una oferta e incluya un poco sobre usted y el trabajo similar que ha realizado en el pasado, si está disponible.
Para iniciar el servidor de desarrollo local, instale Gatsby y luego todas las demás dependencias, luego use npm run dev para iniciar el servidor de desarrollo. Asegúrese de tener al menos el nodo 10.15 instalado.
npm install -g gatsby-cli # Install Gatsby globally
npm install # Install dependencies
npm run dev # Run the development server Si se ejecuta con Docker, simplemente ejecute make build y luego make gatsby-dev
Al construir el sitio, Gatsby buscará archivos .py y pondrá su contenido a disposición de la consulta a través de GraphQL. Esto nos permite usar el código sin procesar dentro de la aplicación. Debajo del capó, la aplicación usa Binder para servir una imagen con las dependencias del paquete, incluidos los modelos Spacy. Al llamar a JupyterLab, podemos ejecutar código usando el kernel activo. Esto le permite editar el código en el navegador y ver los resultados en vivo. También vea mi repositorio juniper para obtener más detalles sobre la implementación.
Para validar el código cuando el usuario presenta "enviar", actualmente estoy usando un truco ligeramente hacky. Dado que el código de Python se envía de vuelta al núcleo como una cadena, podemos manipularlo y agregar pruebas, por ejemplo, el ejercicio exc_01_02_01.py se validará usando test_01_02_01.py (si está disponible). El código de usuario y la prueba se combinan utilizando una plantilla de cadena. Por el momento, la testTemplate en el meta.json se ve así:
from wasabi import msg
__msg__ = msg
__solution__ = """${solution}"""
${solution}
${test}
try:
test()
except AssertionError as e:
__msg__.fail(e)
Si está presente, ${solution} se reemplazará con el valor de cadena del código de usuario enviado. En este caso, lo insertamos dos veces: una vez como una cadena, por lo que podemos verificar si el envío incluye algo y una vez como el código, para que podamos ejecutarlo y verificar los objetos que crea. ${test} se reemplaza por el contenido del archivo de prueba. También estoy haciendo que la impresora de wasabi esté disponible como __msg__ , por lo que podemos imprimir fácilmente mensajes bonitos en las pruebas. Finalmente, las verificaciones de bloques try / accept si la función de prueba plantea un AssertionError y, de ser así, muestra el mensaje de error. Esto también oculta el rastreo de error completo (que puede filtrar fácilmente las respuestas correctas).
Un archivo de prueba podría verse así:
def test ():
assert "spacy.load" in __solution__ , "Are you calling spacy.load?"
assert nlp . meta [ "lang" ] == "en" , "Are you loading the correct model?"
assert nlp . meta [ "name" ] == "core_web_sm" , "Are you loading the correct model?"
assert "nlp(text)" in __solution__ , "Are you processing the text correctly?"
assert "print(doc.text)" in __solution__ , "Are you printing the Doc's text?"
__msg__ . good (
"Well done! Now that you've practiced loading models, let's look at "
"some of their predictions."
)Con este enfoque, no siempre es posible validar la entrada perfectamente: hay demasiadas opciones y queremos evitar falsos positivos.
Las pruebas automatizadas se aseguran de que el código de solución proporcionado sea compatible con el archivo de prueba que se utiliza para validar los envíos. El suite de prueba está alimentado por el marco pytest y los archivos de prueba ejecutables se generan automáticamente en un directorio __tests__ antes de que comience la sesión de prueba. Consulte el conftest.py para obtener detalles de implementación.
# Install requirements
pip install -r binder/requirements.txt
# Run the tests (will generate the files automatically)
python -m pytest __tests__ Si se ejecuta con Docker, simplemente ejecute make build y luego make pytest
├── binder
| └── requirements.txt # Python dependency requirements for Binder
├── chapters # chapters, grouped by language
| ├── en # English chapters, one Markdown file per language
| | └── slides # English slides, one Markdown file per presentation
| └── ... # other languages
├── exercises # code files, tests and assets for exercises
| ├── en # English exercises, solutions, tests and data
| └── ... # other languages
├── public # compiled site
├── src # Gatsby/React source, independent from content
├── static # static assets like images, available in slides/chapters
├── locale.json # translations of meta and UI text
├── meta.json # course metadata
└── theme.sass # UI theme colors and settings El requirements.txt en el repositorio define los paquetes que se instalan al construirlo con aglutinante. Para este curso, estoy usando el repositorio de origen como repositorio de la carpeta, ya que permite mantener todo en un solo lugar. También permite que los ejercicios sean referir y cargar otros archivos (por ejemplo, JSON), que se copiarán en el entorno de Python. Sin embargo, construyo la carpeta a partir de una binder de rama, que solo actualizo si los archivos relevantes de Binder cambian. De lo contrario, cada actualización al master activaría una reconstrucción de la imagen.
Puede especificar la configuración de aglutinante como Repo, Branch y Kernel Tipo en la sección "juniper" del meta.json . Recomiendo ejecutar la primera compilación a través de la interfaz en el sitio web de Binder, ya que esto le brinda un registro detallado de compilación y comentarios sobre si todo funcionó como se esperaba. Ingrese la URL de su repositorio, haga clic en "Iniciar" y espere a que instale las dependencias y cree la imagen.

Los capítulos se colocan en /chapters y son archivos de Markdown que consisten en componentes <exercise> . Se convertirán en páginas, por ejemplo /chapter1 . En su bloque de frontmatter en la parte superior del archivo, deben especificar type: chapter , así como el siguiente meta:
---
title : The chapter title
description : The chapter description
prev : /chapter1 # exact path to previous chapter or null to not show a link
next : /chapter3 # exact path to next chapter or null to not show a link
id : 2 # unique identifier for chapter
type : chapter # important: this creates a standalone page from the chapter
---
Las diapositivas se colocan en /slides y son archivos de Markdown que consisten en contenido de diapositivas, separadas por --- . Deben especificar el siguiente bloque de frontmatter en la parte superior del archivo:
---
type : slides
---
La primera y última diapositiva usa un diseño especial y mostrará el titular en el centro de la diapositiva. Las notas del altavoz (en este caso, el script) se pueden agregar al final de una diapositiva, prefijadas por Notes: . Luego se mostrarán a la derecha al lado de las diapositivas. Aquí hay un archivo de diapositivas de ejemplo:
---
type : slide
---
# Processing pipelines
Notes: This is a slide deck about processing pipelines.
---
# Next slide
- Some bullet points here
- And another bullet point
< img src = " /image.jpg " alt = " An image located in /static " />Cuando use elementos personalizados, asegúrese de colocar una nueva línea entre las etiquetas de apertura/cierre y los niños. De lo contrario, el contenido de Markdown puede no representar correctamente.
<exercise>Contenedor de un solo ejercicio.
| Argumento | Tipo | Descripción |
|---|---|---|
id | número / cadena | ID de ejercicio único dentro del capítulo. |
title | cadena | Título del ejercicio. |
type | cadena | Tipo opcional. "slides" hace que el contenedor sea más amplio y agrega icono. |
| niños | - | El contenido del ejercicio. |
< exercise id = " 1 " title = " Introduction to spaCy " >
Content goes here...
</ exercise ><codeblock>| Argumento | Tipo | Descripción |
|---|---|---|
id | número / cadena | Identificador único del ejercicio del código. |
source | cadena | Nombre del archivo fuente (sin extensión del archivo). El valor predeterminado a exc_${id} si no está configurado. |
solution | cadena | Nombre del archivo de solución (sin extensión del archivo). El valor predeterminado es solution_${id} si no está configurado. |
test | cadena | Nombre del archivo de prueba (sin extensión del archivo). El valor predeterminado se test_${id} si no está configurado. |
| niños | cadena | Sugerencias opcionales que se muestran cuando el usuario hace clic en "Mostrar sugerencias". |
< codeblock id = " 02_03 " >
This is a hint!
</ codeblock ><slides>Contenedor para mostrar las diapositivas de manera interactiva utilizando revel.js y un archivo de markdown.
| Argumento | Tipo | Descripción |
|---|---|---|
source | cadena | Nombre del archivo de diapositivas (sin extensión del archivo). |
< slides source = " chapter1_01_introduction-to-spacy " >
</ slides ><choice>Contenedor para cuestión de opción múltiple.
| Argumento | Tipo | Descripción |
|---|---|---|
id | cadena / número | ID único opcional. Se puede usar si hay más de una pregunta de elección en un ejercicio. |
| niños | nodos | Solo componentes <opt> para las opciones. |
< choice >
< opt text = " Option one " >You have selected option one! This is not good.</ opt >
< opt text = " Option two " correct = " true " >Yay! </ opt >
</ choice ><opt>Una opción de opción múltiple.
| Argumento | Tipo | Descripción |
|---|---|---|
text | cadena | El texto de la opción se mostrará. Admite HTML en línea. |
correct | cadena | "true" si la opción es la respuesta correcta. |
| niños | cadena | El texto se mostrará si se selecciona la opción (explicando por qué es correcto o incorrecto). |