Análisis de técnicas de clasificación de texto en datos de Youtube

El proceso

La Clasificación de Texto es un problema clásico que el Procesamiento del Lenguaje Natural (NLP) pretende resolver y que se refiere a analizar los contenidos del texto sin procesar y decidir a qué categoría pertenece. Es similar a alguien que lee un libro de Robin Sharma y lo clasifica como ‘basura’. Tiene amplias aplicaciones, como análisis de sentimientos, etiquetado de temas, detección de spam y detección de intenciones.
Hoy, realizaremos una tarea bastante simple para clasificar un video en diferentes clases en función de su título y descripción utilizando diferentes técnicas (Naive Bayes, Support Vector Machines, Adaboost y LSTM) y analizando su rendimiento. Estas clases se eligen para ser (pero no se limitan a):

  • blogs de viajes
  • Ciencia y Tecnología
  • Alimento
  • Fabricación
  • Historia
  • Arte y música

Sin más preámbulos, como diría un padre de mediana edad que recién se inicia en la jardinería: ‘¡Ensuciémonos las manos!’.

Reuniendo datos

Cuando trabajo en un problema de aprendizaje automático personalizado como este, me resulta muy útil, si no simplemente satisfactorio, recopilar mis propios datos. Para este problema, necesito algunos metadatos sobre videos que pertenecen a diferentes categorías. Si eres un tipo un poco idiota, te invito a recopilar manualmente los datos y construir el conjunto de datos. Yo, sin embargo, no lo soy, así que usaré la API de Youtube v3. Fue creado por el mismo Google para interactuar con Youtube a través de un código específico para programadores como nosotros. Dirígete a la Consola para desarrolladores de Google, Cree un proyecto de muestra y comience. La razón por la que elegí ir con esto fue que necesitaba recolectar miles de muestras, lo que no encontré posible usando ninguna otra técnica.

Nota: la API de Youtube, como cualquier otra API que ofrece Google, funciona con un sistema de cuotas. Cada correo electrónico se proporciona con una cuota establecida por día/mes según el plan que elija. En el plan gratuito que tenía, solo podía hacer solicitudes a Youtube alrededor de 2000 veces, lo que planteaba un pequeño problema, pero lo superé usando varias cuentas de correo electrónico.

La documentación de la API es bastante sencilla y, después de usar más de 8 cuentas de correo electrónico para compensar la cuota requerida, recopilé los siguientes datos y los almacené en un archivo .csv. Si desea utilizar este conjunto de datos para sus propios proyectos, puede descargarlo aquí.

Nota: Eres libre de explorar una técnica conocida como Web Scraping, que se utiliza para extraer datos de sitios web. Python tiene una hermosa biblioteca llamada BeautifulSoup para el mismo propósito. Sin embargo, descubrí que en el caso de extraer datos de los resultados de búsqueda de Youtube, solo devuelve 25 resultados para una consulta de búsqueda. Esto fue un factor decisivo para mí, ya que necesito muchas muestras para crear un modelo preciso, y esto simplemente no iba a ser suficiente.

Limpieza y preprocesamiento de datos

El primer paso de mi proceso de preprocesamiento de datos es manejar los datos que faltan. Dado que se supone que los valores faltantes son datos de texto, no hay forma de imputarlos, por lo que la única opción es eliminarlos. Afortunadamente, solo existen 334 valores faltantes de 9999 muestras totales, por lo que no afectaría el rendimiento del modelo durante el entrenamiento. La columna ‘Id. de video’ no es realmente útil para nuestro análisis predictivo y, por lo tanto, no se elegiría como parte del conjunto de entrenamiento final, por lo que no tenemos pasos de preprocesamiento para ella.

Hay 2 columnas de importancia aquí, a saber: Título y Descripción, pero son textos sin procesar sin procesar. Por lo tanto, para filtrar el ruido, seguiremos un enfoque muy común para limpiar el texto de estas 2 columnas. Este enfoque se divide en los siguientes pasos:

  1. Convertir a minúsculas: Este paso se realiza porque las mayúsculas no hacen diferencia en la importancia semántica de la palabra. P.ej. ‘Viaje’ y ‘viaje’ deben tratarse como lo mismo.
  2. Eliminar valores numéricos y puntuaciones: Los valores numéricos y los caracteres especiales usados ​​en la puntuación ($,! etc.) no contribuyen a determinar la clase correcta
  3. Eliminación de espacios en blanco adicionales: De modo que cada palabra esté separada por un solo espacio en blanco, de lo contrario, podría haber problemas durante la tokenización.
  4. Tokenización en palabras: Esto se refiere a dividir una cadena de texto en una lista de ‘tokens’, donde cada token es una palabra. Por ejemplo, la oración ‘Tengo enormes bíceps’ se convertirá en [‘I’, ‘have’, ‘huge’, ‘biceps’].
  5. Eliminación de palabras no alfabéticas y ‘Palabras vacías’: Las ‘palabras vacías’ se refieren a palabras como and, the, is, etc., que son palabras importantes cuando aprendemos a construir oraciones, pero que no nos sirven para el análisis predictivo.
  6. Lematización: La lematización es una técnica bastante radical que convierte palabras similares a su significado base. Por ejemplo, las palabras ‘volar’ y ‘voló’ se convertirán en su significado más simple, ‘volar’.

“El texto está limpio ahora, ¡hurra! ¡Vamos a abrir una botella de champán para celebrarlo!”. No aún no. Aunque las computadoras de hoy pueden resolver los problemas del mundo y jugar videojuegos hiperrealistas, todavía son máquinas que no entienden nuestro idioma. Por lo tanto, no podemos alimentar nuestros datos de texto tal como están a nuestros modelos de aprendizaje automático, sin importar cuán limpios estén. Por lo tanto, necesitamos convertirlos en funciones basadas en números de modo que la computadora pueda construir un modelo matemático como solución. Esto constituye el paso de preprocesamiento de datos.

Dado que la variable de salida (‘Categoría’) también es de naturaleza categórica, necesitamos codificar cada clase como un número. Esto se llama codificación de etiquetas.
Finalmente, prestemos atención a la información principal de cada muestra: los datos de texto sin procesar. Para extraer datos del texto como características y representarlos en un formato numérico, un enfoque muy común es vectorizar a ellos. La biblioteca Scikit-learn contiene el ‘TF-IDFVectorizer’ para este mismo propósito. TF-FDI(Frecuencia de término-Frecuencia de documento inversa) calcula la frecuencia de cada palabra dentro y en varios documentos para identificar la importancia de cada palabra.

Análisis de datos y exploración de características

Como un paso adicional, he decidido mostrar la distribución de clases para comprobar si hay un número de muestras desequilibrado.

Además, quería comprobar si las funciones extraídas mediante la vectorización TF-IDF tenían algún sentido, por lo que decidí encontrar los unigramas y bigramas más correlacionados para cada clase utilizando las funciones Títulos y Descripción.

# USING TITLE FEATURES
# 'art and music':
Most correlated unigrams:
------------------------------
. paint
. official
. music
. art
. theatre
Most correlated bigrams:
------------------------------
. capitol theatre
. musical theatre
. work theatre
. official music
. music video
# 'food':
Most correlated unigrams:
------------------------------
. foods
. eat
. snack
. cook
. food
Most correlated bigrams:
------------------------------
. healthy snack
. snack amp
. taste test
. kid try
. street food
# 'history':
Most correlated unigrams:
------------------------------
. discoveries
. archaeological
. archaeology
. history
. anthropology
Most correlated bigrams:
------------------------------
. history channel
. rap battle
. epic rap
. battle history
. archaeological discoveries
# 'manufacturing':
Most correlated unigrams:
------------------------------
. business
. printer
. process
. print
. manufacture
Most correlated bigrams:
------------------------------
. manufacture plant
. lean manufacture
. additive manufacture
. manufacture business
. manufacture process
# 'science and technology':
Most correlated unigrams:
------------------------------
. compute
. computers
. science
. computer
. technology
Most correlated bigrams:
------------------------------
. science amp
. amp technology
. primitive technology
. computer science
. science technology
# 'travel':
Most correlated unigrams:
------------------------------
. blogger
. vlog
. travellers
. blog
. travel
Most correlated bigrams:
------------------------------
. viewfinder travel
. travel blogger
. tip travel
. travel vlog
. travel blog
# USING DESCRIPTION FEATURES
# 'art and music':
Most correlated unigrams:
------------------------------
. official
. paint
. music
. art
. theatre
Most correlated bigrams:
------------------------------
. capitol theatre
. click listen
. production connexion
. official music
. music video
# 'food':
Most correlated unigrams:
------------------------------
. foods
. eat
. snack
. cook
. food
Most correlated bigrams:
------------------------------
. special offer
. hiho special
. come play
. sponsor series
. street food
# 'history':
Most correlated unigrams:
------------------------------
. discoveries
. archaeological
. history
. archaeology
. anthropology
Most correlated bigrams:
------------------------------
. episode epic
. epic rap
. battle history
. rap battle
. archaeological discoveries
# 'manufacturing':
Most correlated unigrams:
------------------------------
. factory
. printer
. process
. print
. manufacture
Most correlated bigrams:
------------------------------
. process make
. lean manufacture
. additive manufacture
. manufacture business
. manufacture process
# 'science and technology':
Most correlated unigrams:
------------------------------
. quantum
. computers
. science
. computer
. technology
Most correlated bigrams:
------------------------------
. quantum computers
. primitive technology
. quantum compute
. computer science
. science technology
# 'travel':
Most correlated unigrams:
------------------------------
. vlog
. travellers
. trip
. blog
. travel
Most correlated bigrams:
------------------------------
. tip travel
. start travel
. expedia viewfinder
. travel blogger
. travel blog

Modelado y Entrenamiento

Los cuatro modelos que estaremos analizando son:

  • Clasificador bayesiano ingenuo
  • Máquinas de vectores soporte
  • Clasificador Adaboost
  • LSTM

El conjunto de datos se divide en conjuntos de entrenamiento y prueba con una proporción de división de 8:2. Las características para Título y Descripción se calculan de forma independiente y luego se concatenan para construir una matriz de características final. Esto se usa para entrenar a los clasificadores (excepto LSTM).

Para usar LSTM, el paso de preprocesamiento de datos es bastante diferente al que se mencionó anteriormente. Aquí está el proceso para eso:

  1. Combine el título y la descripción de cada muestra en una sola oración
  2. Tokenize la oración combinada en secuencias rellenadas: Cada oración se convierte en una lista de tokens, a cada token se le asigna una identificación numérica y luego cada secuencia tiene la misma longitud rellenando secuencias más cortas y truncando secuencias más largas.
  3. Codificación One-Hot de la variable ‘Categoría’

Las curvas de aprendizaje para el LSTM se dan a continuación:


Análisis del rendimiento

Las siguientes son las curvas de recuperación de precisión para todos los diferentes clasificadores. Para obtener métricas adicionales, consulte la Código completo en Github.




La clasificación de cada clasificador como se observa en nuestro proyecto es la siguiente:

LSTM > SVM > Naive Bayes > AdaBoost

Los LSTM han mostrado un rendimiento estelar en múltiples tareas en el procesamiento del lenguaje natural, incluida esta. La presencia de múltiples ‘puertas’ en LSTM les permite aprender dependencias a largo plazo en secuencias. ¡10 puntos para Deep Learning!
Los SVM son clasificadores muy robustos que hacen todo lo posible para encontrar interacciones entre nuestras funciones extraídas, pero las interacciones aprendidas no están a la par con los LSTM. Naive Bayes Classifier, por otro lado, considera las funciones como independientes, por lo que funciona un poco peor que las SVM, ya que no tiene en cuenta ninguna interacción entre las diferentes funciones.
El clasificador AdaBoost es bastante sensible a la elección de los hiperparámetros y, como he usado el modelo predeterminado, no tiene los parámetros más óptimos, lo que podría ser la razón del bajo rendimiento.

Pensamientos finales

Espero que esto haya sido tan informativo para usted como lo ha sido para mí. El código completo se puede encontrar en mi Github.

Chao

Similar Posts

Leave a Reply

Your email address will not be published.