Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Vivimos en un mundo cada vez más lleno de asistentes digitales que nos permiten conectar con otras personas, así como con vastos recursos de información. Parte del atractivo de estos dispositivos inteligentes es que no se limitan a transmitir información; hasta cierto punto, también la comprenden, facilitando la interacción humana a alto nivel al agregar, filtrar y resumir montones de datos en una forma fácilmente digerible. Aplicaciones como la traducción automática, los sistemas de preguntas y respuestas, la transcripción de voz, el resumen de textos y los chatbots se están convirtiendo en parte integrante de nuestras vidas informáticas.
Si has cogido este libro, es probable que estés tan entusiasmado como nosotros por las posibilidades de incluir componentes de comprensión del lenguaje natural en una gama más amplia de aplicaciones y software. Los componentes de comprensión del lenguaje se basan en un marco moderno de análisis de textos: un conjunto de técnicas y métodos que combinan la manipulación de cadenas, los recursos léxicos, la lingüística computacional y los algoritmos de aprendizaje automático que convierten los datos del lenguaje en una forma comprensible para la máquina y viceversa. Sin embargo, antes de empezar a hablar de estos métodos y técnicas, es importante identificar los retos y oportunidades de este marco y abordar la cuestión de por qué está ocurriendo esto ahora.
El típico graduado de secundaria estadounidense ha memorizado unas 60.000 palabras y miles de conceptos gramaticales, lo suficiente para comunicarse en un contexto profesional. Aunque esto pueda parecer mucho, considera lo trivial que sería escribir un breve script en Python para acceder rápidamente a la definición, etimología y uso de cualquier término de un diccionario en línea. De hecho, la variedad de conceptos lingüísticos que un estadounidense medio utiliza en la práctica diaria representa apenas una décima parte de los recogidos en el diccionario Oxford, y sólo el 5% de los reconocidos actualmente por Google.
Y, sin embargo, el acceso instantáneo a reglas y definiciones es claramente insuficiente para el análisis de textos. Si lo fuera, Siri y Alexa nos entenderían perfectamente, Google nos devolvería sólo un puñado de resultados de búsqueda y podríamos chatear instantáneamente con cualquier persona del mundo en cualquier idioma. ¿Por qué existe tal disparidad entre las versiones informáticas de tareas que los humanos pueden realizar con fluidez desde una edad muy temprana, mucho antes de que hayan acumulado una fracción del vocabulario que poseerán de adultos? Está claro que el lenguaje natural requiere algo más que la mera memorización; por ello, las técnicas informáticas deterministas no son suficientes.
Retos computacionales del lenguaje natural
En lugar de estar definidas por reglas, las lenguas naturales se definen por el uso y deben someterse a ingeniería inversa para poder ser computadas. En gran medida, somos capaces de decidir qué significan las palabras que utilizamos, aunque esta creación de significados es necesariamente colaborativa. Extender "cangrejo" de un animal marino a una persona con una disposición agria o una forma específica de movimiento lateral requiere que tanto el hablante/autor como el oyente/lector se pongan de acuerdo sobre el significado para que se produzca la comunicación. Por tanto, el lenguaje suele estar limitado por la comunidad y la región: a menudo es mucho más fácil llegar a un acuerdo sobre el significado con personas que viven experiencias similares a las nuestras.
A diferencia de los lenguajes formales, que son necesariamente específicos de un dominio, los lenguajes naturales son de propósito general y universales. Utilizamos la misma palabra para pedir marisco para comer, escribir un poema sobre un descontento y discutir sobre nebulosas astronómicas. Para captar el alcance de la expresión a través de una variedad de discursos, el lenguaje debe ser redundante. La redundancia presenta un reto: puesto que no podemos (y no lo hacemos) especificar un símbolo literal para cada asociación, todo símbolo es ambiguo por defecto. La ambigüedad léxica y estructural es el principal logro del lenguaje humano; la ambigüedad no sólo nos da la capacidad de crear nuevas ideas, sino que también permite que personas con experiencias diversas se comuniquen, a través de fronteras y culturas, a pesar de la casi certeza de malentendidos ocasionales.
Datos lingüísticos: Fichas y Palabras
Para aprovechar plenamente los datos codificados en el lenguaje, debemos volver a entrenar nuestra mente para pensar en el lenguaje no como algo intuitivo y natural, sino como algo arbitrario y ambiguo. La unidad de análisis del texto es el token, una cadena de bytes codificados que representan el texto. Por el contrario, las palabras son símbolos representativos de un significado, que asignan una construcción textual o verbal a un componente sonoro y visual. Los tokens no son palabras (aunque nos resulte difícil mirar los tokens y no ver palabras). Considera el token "crab"
, que se muestra en la Figura P-1. Este token representa el sentido de la palabra cangrejo-n1 -la primera definición del uso sustantivo del token, un crustáceo que puede ser alimento, vive cerca de un océano y tiene pinzas que pueden pellizcar.
Todas estas otras ideas están unidas de algún modo a este símbolo, y sin embargo el símbolo es totalmente arbitrario; una cartografía similar para un lector griego tendrá connotaciones ligeramente diferentes, pero mantendrá el mismo significado. Esto se debe a que las palabras no tienen un significado fijo y universal independiente de contextos como la cultura y la lengua. Los lectores de inglés están acostumbrados a formas de palabras adaptables que pueden prefijarse y sufijarse para cambiar el tiempo verbal, el género, etc. Los lectores chinos, en cambio, reconocen muchos caracteres pictográficos cuyo orden decide el significado.
La redundancia, la ambigüedad y la perspectiva hacen que las lenguas naturales sean dinámicas, evolucionando rápidamente para abarcar la experiencia humana actual. Hoy no pestañearíamos ante la idea de que pudiera haber un estudio lingüístico de los emoticonos lo suficientemente completo como para traducir Moby Dick.1 Aunque pudiéramos llegar sistemáticamente a una gramática que definiera cómo funcionan los emoticonos, para cuando terminemos, el lenguaje habrá evolucionado, ¡incluso el lenguaje de los emoticonos! Por ejemplo, desde que empezamos a escribir este libro, el símbolo emoji de una pistola(🔫) ha pasado de ser un arma a ser un juguete (al menos cuando se representa en un smartphone), lo que refleja un cambio cultural en cómo percibimos el uso de ese símbolo.
No es sólo la inclusión de nuevos símbolos y estructuras lo que adapta el lenguaje, sino también la inclusión de nuevas definiciones, contextos y usos. El término "pila" ha cambiado de significado como resultado de la era electrónica para significar un depósito para convertir la energía química en electricidad. Sin embargo, según el Visor Ngram de Google Books2 "batería" gozaba de mucho más uso, significando también un conjunto conectado de máquinas o un emplazamiento fortificado para cañones pesados durante la última parte del sigloXIX y principios delXX. El lenguaje se entiende en su contexto, que va más allá del texto que lo rodea para incluir también la época. Identificar y reconocer claramente el significado de las palabras requiere más cálculo que simplemente buscar una entrada en un diccionario.
Entra en el aprendizaje automático
Las mismas cualidades que hacen del lenguaje natural una herramienta tan rica para la comunicación humana también dificultan su análisis mediante reglas deterministas. La flexibilidad que empleamos los humanos en la interpretación es la razón por la que, con unas escasas 60.000 representaciones simbólicas, podemos superar con creces a los ordenadores en lo que se refiere a la comprensión instantánea del lenguaje. Por tanto, en un entorno de software, necesitamos técnicas informáticas que sean igual de difusas y flexibles, por lo que el estado actual de la técnica para el análisis de textos son las técnicas estadísticas de aprendizaje automático. Aunque las aplicaciones que realizan el procesamiento del lenguaje natural existen desde hace varias décadas, la adición del aprendizaje automático permite un grado de flexibilidad y capacidad de respuesta que no sería posible de otro modo.
El objetivo del aprendizaje automático es ajustar los datos existentes a algún modelo, creando una representación del mundo real que sea capaz de tomar decisiones o generar predicciones sobre nuevos datos basándose en patrones descubiertos. En la práctica, esto se hace seleccionando una familia de modelos que determine la relación entre los datos de destino y los de entrada, especificando una forma que incluya parámetros y características, y utilizando después algún procedimiento de optimización para minimizar el error del modelo sobre los datos de entrenamiento. El modelo ajustado puede introducirse ahora en nuevos datos sobre los que hará una predicción, devolviendo etiquetas, probabilidades, pertenencia o valores basados en la forma del modelo. El reto consiste en encontrar un equilibrio entre ser capaz de aprender con precisión los patrones de los datos conocidos y ser capaz de generalizar para que el modelo funcione bien en ejemplos que nunca ha visto antes.
Muchas aplicaciones de software con conciencia lingüística se componen no sólo de un único modelo entrenado por la máquina, sino de un rico tapiz de modelos que interactúan y se influyen mutuamente. Los modelos también pueden reentrenarse con nuevos datos, dirigirse a nuevos espacios de decisión e incluso personalizarse por usuario, de modo que puedan seguir desarrollándose a medida que encuentran nueva información y que los distintos aspectos de la aplicación cambian con el tiempo. Bajo el capó de la aplicación, los modelos competidores pueden clasificarse, envejecer y, finalmente, perecer. Esto significa que las aplicaciones de aprendizaje automático implementan ciclos de vida que pueden seguir el ritmo del dinamismo y la regionalidad asociados al lenguaje con un flujo de trabajo rutinario de mantenimiento y monitoreo.
Herramientas para el análisis de textos
Dado que las técnicas de análisis de texto son principalmente aprendizaje automático aplicado, es necesario un lenguaje que disponga de ricas bibliotecas de cálculo científico y numérico. Cuando se trata de herramientas para realizar aprendizaje automático sobre texto, Python dispone de un potente conjunto que incluye Scikit-Learn, NLTK, Gensim, spaCy, NetworkX y Yellowbrick.
-
Scikit-Learn es una extensión de SciPy (Scientific Python) que proporciona una API para el aprendizaje automático generalizado. Construido sobre Cython para incluir bibliotecas C de alto rendimiento como LAPACK, LibSVM, Boost y otras, Scikit-Learn combina un alto rendimiento con la facilidad de uso para analizar conjuntos de datos de tamaño pequeño y mediano. De código abierto y utilizable comercialmente, proporciona una interfaz única para muchos modelos de regresión, clasificación, agrupación y reducción dimensional, junto con utilidades para la validación cruzada y el ajuste de hiperparámetros.
-
NLTK, el Kit de Herramientas de Lenguaje Natural, es un recurso "con pilas incluidas" para la PNL escrito en Python por expertos del mundo académico. Originalmente una herramienta pedagógica para la enseñanza de la PNL, contiene corpus, recursos léxicos, gramáticas, algoritmos de procesamiento del lenguaje y modelos preentrenados que permiten a los programadores de Python iniciarse rápidamente en el procesamiento de datos de texto en diversos idiomas.
-
Gensim es una biblioteca robusta, eficiente y sin complicaciones que se centra en el modelado semántico no supervisado de texto. Diseñada originalmente para encontrar similitudes entre documentos (generar similitudes), ahora expone métodos de modelado temático para técnicas semánticas latentes, e incluye otras bibliotecas no supervisadas como word2vec.
-
spaCy proporciona procesamiento lingüístico de nivel de producción implementando el estado del arte académico en una API sencilla y fácil de usar. En particular, spaCy se centra en el preprocesamiento de texto para el aprendizaje profundo o para construir sistemas de extracción de información o de comprensión del lenguaje natural sobre grandes volúmenes de texto.
-
NetworkX es un completo paquete de análisis de grafos para generar, serializar, analizar y manipular grafos complejos. Aunque no es específicamente una biblioteca de aprendizaje automático o de análisis de texto, las estructuras de datos de grafos son capaces de codificar relaciones complejas que los algoritmos de grafos pueden recorrer o a las que pueden encontrar significado, y por tanto es una parte fundamental del conjunto de herramientas de análisis de texto.
-
Yellowbrick es un conjunto de herramientas de diagnóstico visual para el análisis y la interpretación de flujos de trabajo de aprendizaje automático. Al ampliar la API de Scikit-Learn, Yellowbrick proporciona visualizaciones intuitivas y comprensibles de la selección de características, el modelado y el ajuste de hiperparámetros, dirigiendo el proceso de selección de modelos para encontrar los modelos más eficaces de los datos de texto.
Qué esperar de este libro
En este libro, nos centramos en el aprendizaje automático aplicado para el análisis de texto utilizando las bibliotecas de Python que acabamos de describir. La naturaleza aplicada del libro significa que no nos centramos en la naturaleza académica de los modelos lingüísticos o estadísticos, sino en cómo ser eficaces en la implementación de modelos entrenados en texto dentro de una aplicación de software.
El modelo de análisis de texto que proponemos está directamente relacionado con el flujo de trabajo del aprendizaje automático: un proceso de búsqueda para encontrar un modelo compuesto por características, un algoritmo y unos hiperparámetros que funcione mejor con los datos de entrenamiento para producir estimaciones sobre datos desconocidos. Este flujo de trabajo comienza con la construcción y gestión de un conjunto de datos de entrenamiento, denominado corpus en el análisis de textos. A continuación, exploraremos metodologías de extracción de características y preprocesamiento para componer el texto como datos numéricos que el aprendizaje automático pueda comprender. Con algunas características básicas en la mano, exploramos técnicas de clasificación y agrupación en clusters sobre texto, con lo que concluyen los primeros capítulos del libro.
Los últimos capítulos se centran en ampliar los modelos con características más ricas para crear aplicaciones conscientes del texto. Empezamos explorando cómo se puede incorporar el contexto como características, y luego pasamos a una interpretación visual del texto para dirigir el proceso de selección de modelos. A continuación, examinamos cómo analizar relaciones complejas extraídas del texto mediante técnicas de análisis de grafos. A continuación, cambiamos de enfoque para explorar los agentes conversacionales y profundizar en el análisis sintáctico y semántico del texto. Concluimos el libro con un debate práctico sobre el escalado del análisis de texto con multiprocesamiento y Spark, y por último, exploramos la siguiente fase del análisis de texto: el aprendizaje profundo.
A quién va dirigido este libro
Este libro está dirigido a programadores de Python interesados en aplicar el procesamiento del lenguaje natural y el aprendizaje automático a su conjunto de herramientas de desarrollo de software. No presuponemos ninguna formación académica especial ni conocimientos matemáticos de nuestros lectores, y en su lugar nos centramos en herramientas y técnicas más que en largas explicaciones. En este libro analizamos principalmente la lengua inglesa, por lo que son útiles los conocimientos gramaticales básicos, como la relación entre sustantivos, verbos, adverbios y adjetivos. Los lectores que sean completamente nuevos en el aprendizaje automático y la lingüística, pero que tengan conocimientos sólidos de programación en Python, no se sentirán abrumados por los conceptos que presentamos.
Ejemplos de código y repositorio GitHub
Los ejemplos de código que aparecen en este libro pretenden ser descriptivos de cómo implementar código Python para ejecutar tareas concretas. Como están dirigidos a los lectores, son concisos, y a menudo omiten declaraciones clave necesarias durante la ejecución; por ejemplo, import
declaraciones de la biblioteca estándar. Además, suelen basarse en código de otras partes del libro o del capítulo y, en ocasiones, en fragmentos de código que deben modificarse ligeramente para que funcionen en el nuevo contexto. Por ejemplo, podemos definir una clase como sigue:
class
Thing
(
object
):
def
__init__
(
self
,
arg
):
self
.
property
=
arg
Esta definición de clase sirve para describir las propiedades básicas de la clase y establece la estructura de una conversación más amplia sobre los detalles de implementación. Más adelante podremos añadir métodos a la clase como se indica a continuación:
...
def
method
(
self
,
*
args
,
**
kwargs
):
return
self
.
property
Fíjate en la elipsis de la parte superior del fragmento, que indica que es una continuación de la definición de clase del fragmento anterior. Esto significa que copiar y pegar simplemente fragmentos de ejemplo puede no funcionar. Y lo que es más importante, el código también está diseñado para operar con datos que deben almacenarse en el disco en una ubicación legible por el programa Python en ejecución. Hemos intentado ser lo más generales posible, pero no podemos tener en cuenta todos los sistemas operativos o fuentes de datos.
Para ayudar a nuestros lectores que quieran ejecutar los ejemplos de este libro, hemos implementado ejemplos completos y ejecutables en nuestro repositorio de GitHub. Estos ejemplos pueden variar ligeramente respecto al texto, pero deberían poder ejecutarse fácilmente con Python 3 en cualquier sistema. Ten en cuenta también que el repositorio se mantiene actualizado; consulta el LÉEME para encontrar cualquier cambio que se haya producido. Por supuesto, puedes bifurcar el repositorio y modificar el código para ejecutarlo en tu propio entorno, ¡algo que te animamos encarecidamente a hacer!
Convenciones utilizadas en este libro
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
-
Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivo y extensiones de archivo.
Constant width
-
Se utiliza en los listados de programas, así como dentro de los párrafos para referirse a elementos del programa como nombres de variables o funciones, bases de datos, tipos de datos, variables de entorno, sentencias y palabras clave.
Constant width bold
-
Muestra comandos u otros textos que deben ser tecleados literalmente por el usuario.
Constant width italic
-
Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.
Consejo
Este elemento significa un consejo o sugerencia.
Nota
Este elemento significa una nota general.
Advertencia
Este elemento indica una advertencia o precaución.
Utilizar ejemplos de código
El material complementario (ejemplos de código, ejercicios, etc.) se puede descargar en https://github.com/foxbook/atap.
Este libro está aquí para ayudarte a hacer tu trabajo. En general, si se ofrece código de ejemplo con este libro, puedes utilizarlo en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedirnos permiso, a menos que estés reproduciendo una parte importante del código. Por ejemplo, escribir un programa que utilice varios trozos de código de este libro no requiere permiso. Vender o distribuir un CD-ROM de ejemplos de los libros de O'Reilly sí requiere permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere permiso. Incorporar una cantidad significativa de código de ejemplo de este libro en la documentación de tu producto sí requiere permiso.
Agradecemos, pero no exigimos, la atribución. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Applied Text Analysis with Python por Benjamin Bengfort, Rebecca Bilbro y Tony Ojeda (O'Reilly). 978-1-491-96304-3."
El BibTex de este libro es el siguiente:
@book{
title ={
Applied{{
Text Analysis}}
with{{
Python}}}
, subtitle ={
Enabling Language Aware{{
Data Products}}}
, shorttitle ={
Applied{{
Text Analysis}}
with{{
Python}}}
, publisher ={{
O'Reilly Media, Inc.}}
, author ={
Bengfort, Benjamin and Bilbro, Rebecca and Ojeda, Tony}
, month = jun, year ={
2018}
}
Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.
Safari O'Reilly
Nota
Safari (antes Safari Books Online) es una plataforma de formación y referencia basada en membresías para empresas, administraciones públicas, educadores y particulares.
Los miembros tienen acceso a miles de libros, vídeos de formación, rutas de aprendizaje, tutoriales interactivos y listas de reproducción de más de 250 editoriales, como O'Reilly Media, Harvard Business Review, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Adobe, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, Jones & Bartlett y Course Technology, entre otras. Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett y Course Technology, entre otras.
Para más información, visita http://oreilly.com/safari.
Cómo contactar con nosotros
Dirige tus comentarios y preguntas sobre este libro a la editorial:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-998-9938 (en Estados Unidos o Canadá)
- 707-829-0515 (internacional o local)
- 707-829-0104 (fax)
Tenemos una página web para este libro, donde se enumeran erratas, ejemplos y cualquier información adicional. Puedes acceder a esta página en http://bit.ly/applied-text-analysis-with-python.
Para hacer comentarios o preguntas técnicas sobre este libro, envía un correo electrónico a bookquestions@oreilly.com.
Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.
Encuéntranos en Facebook: http://facebook.com/oreilly
Síguenos en Twitter: http://twitter.com/oreillymedia
Míranos en YouTube: http://www.youtube.com/oreillymedia
Agradecimientos
Nos gustaría dar las gracias a nuestros revisores técnicos por el tiempo y el compromiso que dedicaron a nuestros primeros borradores y por los comentarios que nos proporcionaron, que dieron una forma espectacular al libro. Dan Chudnov y Darren Cook nos proporcionaron excelentes comentarios técnicos que nos ayudaron a mantener el rumbo, y Nicole Donnelly nos aportó una perspectiva que nos permitió adaptar el contenido a nuestros lectores. También nos gustaría dar las gracias a Lev Konstantinovskiy y Kostas Xirogiannopoulos, que nos proporcionaron comentarios académicos para garantizar que nuestro debate fuera el más avanzado.
A nuestra siempre sonriente e infaliblemente alentadora editora, Nicole Tache, no podemos decirle suficientes cosas buenas. Ha guiado este proyecto desde el principio y ha creído en nosotros incluso cuando la línea de meta parecía alejarse. Su compromiso con nosotros y con nuestro proceso de escritura, sus valiosos comentarios y consejos, y sus oportunas sugerencias son la razón de ser de este libro.
A nuestros amigos y familiares, no podríamos hacer nuestro trabajo sin vuestro apoyo y ánimo. A nuestros padres, Randy y Lily, Carla y Griff, y Tony y Teresa; nos habéis inculcado las mentes creativas, la ética de trabajo, la capacidad técnica y el amor por el aprendizaje que han hecho posible este libro. A nuestros cónyuges, Jacquelyn, Jeff y Nikki; vuestra firme determinación incluso ante los plazos incumplidos y las noches y fines de semana escribiendo hasta tarde significa el mundo para nosotros. Y por último, a nuestros hijos, Irena, Henry, Oscar y Baby Ojeda, esperamos que algún día encuentren este libro y piensen "Vaya, nuestros padres escribieron libros sobre cuando los ordenadores no podían hablar como una persona normal... ¿qué edad tienen?".
1 Fred Benenson, Emoji Dick, (2013) http://bit.ly/2GKft1n
2 Google, Google Books Ngram Viewer, (2013) http://bit.ly/2GNlKtk
Get Análisis de Texto Aplicado con Python now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.