Parte 7 Procesamiento de los Lenguajes Naturales
7.1 NLP
7.1.1 Intuición del Procesamieto de los Lenguajes Naturales
Exercise 7.1
¿Por qué el modelo de Bag of Words reemplaza todas las letras mayúsculas por minúsculas?Muchos lenguajes de programación, en particular Python y R, tratan las mayúsculas y minúsculas como símbolos completamente diferentes. Entonces, si no convertimos todo a minúsculas, debemos tener en cuenta que algunas palabras pueden contener letras en mayúscula e incluir código adicional para ellas. Es mucho más sencillo reemplazar todas las mayúsculas por minúsculas.
Exercise 7.2
¿Qué es la sparsity (escasez)?La escasez ocurre cuando tiene muchos ceros en la matriz (por lo tanto, se llama matriz dispersa). Entonces, cuando reducimos la dispersión, eso significa que reducimos la proporción de ceros en la matriz.
7.1.2 Natural Language Processing en Python
Exercise 7.3
¿Podrías explicar qué significa elquoting = 3
?
quoting = 3
ignorará las comillas dobles en los textos. El número de observaciones en el conjunto de datos no coincide con el número de textos debido a una anomalía de división con las comillas dobles. El problema potencial es que si tienes comillas dobles en un string, este string puede separarse accidentalmente y considerarse como otra entrada sin resultado. Entonces, para asegurarnos de evitar este tipo de situaciónes, ignoramos las comillas dobles usando quoting = 3
.
Exercise 7.4
¿Cómo podemos descargar todo el material NLTK de una sola vez?Para descargar todo el material en NLTK de una sola vez, debemos abrir una terminal y ejecutar:
pip install -U nltk
Exercise 7.5
¿Podrías explicar qué esPorterStemmer()
?
PorterStemmer()
aplica el stemming para obtener las raíces de las palabras de tus textos. Entonces, por ejemplo, “amado” se convertirá en “amor” después de la derivación.
Exercise 7.6
¿Cómo se puede hacer NLP en español u otros idiomas?Comprueba primero si hay algunas clases de NLP específicas para tu propio idioma, como es el caso del español, por ejemplo:
from nltk.stem.snowball import SpanishStemmer
stemmer = SpanishStemmer()
y para las stop words, incluye además esto en su código:
set(stopwords.words('spanish'))
Exercise 7.7
¿Por qué cambiamos las reseñas de listas de palabras a strings?Esto es debido a que el método fit_transform()
de la clase CountVectorizer()
solamente funciona con strings.
Exercise 7.8
¿Cuál es la diferencia entre “TF-IDF” y “CountVectorizer”?La diferencia es que TF-IDF aplica la normalización, a diferencia de CountVectorizer. De lo contrario, es lo mismo, si introducimos el parámetro normalizer = None
, entonces es muy similar. \
Para usar TF-IDF, es lo mismo que para las otras técnicas de NLP, solo importa la clase que quieras usar (digamos TfidfVectorizer de sklearn.feature_extraction.text
), luego crea un objeto de esta clase e introduce los parámetros deseas para preprocesar tus textos.
Exercise 7.9
¿Por qué eliminamos “NO”, dado que “La corteza es buena” no es lo mismo que “La corteza no es buena”?También funciona al revés: “La corteza es mala” no es lo mismo que “La corteza no es mala”. Por lo tanto, esto no se suele tener en cuenta. Por lo tanto, creemos / esperamos que, en promedio, el número de errores cometidos en los conceptos causados por este cambio sea pequeño en comparación.
Exercise 7.10
Una vez que hayamos terminado con la limpieza y obtenido nuestro modelo de bolsa de palabras, ¿por qué elaboramos un modelo de clasificación?Estamos clasificando las valoraciones para predecir el resultado de las nuevas valoraciones, exactamente como el análisis de sentimientos. Solo que para hacer estas predicciones en las mejores condiciones, primero debemos aplicar el modelo de la bolsa de palabras. Eso preparará los datos en un formato correcto para que se ajusten al clasificador.
Exercise 7.11
¿Qué modelo parece ser la mejor solución para el desafío de la tarea final?Definitivamente Naive Bayes, que por cierto generalmente se recomienda probar el primero de todos cuando se hace el procesamiento del lenguaje natural.
7.1.3 Natural Language Processing in R
Exercise 7.12
¿Por qué eliminamos los signos de puntuación del texto? Al principio, parece que no contienen información. Pero, ¿por qué no dejamos que el algoritmo de clasificación decida?Por lo general, es un balance entre dimensionalidad e información. Eliminamos la puntuación para que el conjunto de datos sea más manejable con menos dimensiones. Además, la puntuación no contiene tanta información discriminatoria como las palabras en los procesos de clasificación habituales. A través de la experiencia, la validación cruzada ha apuntado a eliminar la puntuación con un mejor rendimiento. Sin embargo, sí, podríamos dejar que el algoritmo de clasificación decida. Quizás algunos conjuntos de datos funcionen mejor con la puntuación, pero como regla general, es mejor evitar los signos de puntuación.
Exercise 7.13
La frase “la corteza no es buena” se está transformando en “la corteza es buena” después de eliminar palabras irrelevantes. La valoración está cambiando a positiva de negativa. ¿Puedes aclarar cómo afectará esto al aprendizaje y la predicción?La palabra “no” no es tan útil como parece. Consideremoss las siguientes 2 valoraciones:
- “Yo no pedí pasta. El pan era bueno”.
- “Pedí pasta. Su pan no era bueno”.
Desde el enfoque de “bolsa de palabras” son lo mismo, aunque su significado es muy diferente.
Por lo general, cuando las personas quieren incluir “no” en una oración, también pueden hacerlo reemplazando la siguiente palabra con un antónimo y eliminan la negación.
Exercise 7.14
¿Existe alguna forma o recursos a través de los cuales se pueda echar un vistazo a la lista de palabras no relevantes?Puedes verlos si introduces en R el siguiente comando:
library(tm)
stopwords("english")
Exercise 7.15
¿Cuál sería otra técnica además de la matriz de confusión y la curva CAP para evaluar la eficacia del modelo de NLP?Otra técnica interesante es la validación cruzada de k-Fold, que veremos en la Parte 10 - Selección de modelos.