La clasificación de documentos es un problema recurrente en diversos campos de las ciencias de la computacion. Basicamente el problema radica en la tarea de etiquetar un documento en una o más clases, de acuerdo a algun criterio prestablecido; por ejemplo el contenido y o temática del mismo. Esta clasificación puede ser desarrollada de manera algorítmica al abordarse la problemática con herramientas de mínera de texto, o en su defecto de manera manual, cuando los volumenes de información son acotados.
Como proyecto semestral, se ha propuesto el abordar este problema en el contexto de la categorización de peliculas en base su guión. Es decir, se pretende el entrenamiento de diversas alternativas de clasificación para comprobar la factibilidad de desarrollar esta tarea con ciertos niveles de performance, discutidos de manera posterior en este trabajo.
En relación a la motivación del trabajo, junto con la predilección de los integrantes del equipo por las diferentes expresiones del séptimo arte, parte de este interés también se debe; a la curiosidad de de saber si es posible clasificar una película en su correcto género a partir de su "script", e al aplicar algoritmos de minería de texto, tanto en la transformación del los datos, como en la extracción de "conocimiento" de los mismos. Adicionalmente, se tenía la creencia que en los elementos determinantes en la clasificación, podían ser a su vez buenas variables explicativas de la popularidad de las mismas, aspecto que habría sido interesante testear.
Las hipótesis del proyecto, se encuetran relacionadas en gran medida con la motivación del mismo. Estas son recogidas en las siguientes tres proposiciones:
No obstante, en términos de poner a prueba estas hipótesis, solo se abordaría la primera de ellas, cuyo prueba y resulatdos son el principal tema de este trabajo.
Finalemente, en términos de aplicaciones del proyecto presentado, la primera de ellas corresponde de manera directa al uso que pueda darse a la clasifación de guiones de peliculas, por ejemplo un estudio que debe evaluar muchos guiones antes de poder tomar una decisión, situación en la que la clasificación podría plantearse como un paso previo a la lecctura de los mismos. Por otra parte, se eculubra que la comprensión del contenido del filme, podría ser un elemento interesante de evaluar dentro de sistemas de recomendación, aún cuando esta proposición cae fuera de los alcances del proyecto. Por último, se cuentan todas las extrapolaciones que puedan hacerse del problema propuesto, para otros campos que requieran de la clasificación de documentos extensos (Libros, tesis, noticias, etc).
Los datos a utilizar corresponden a los guiones de las películas, que fueron obtenidos vía scraping desde IMSDb (The Internet Movie Script Database), y a la metadata disponible de cada una, obtenida por medio de la API de OMDb (The Open Movie Database). Del total de películas disponibles en IMSDb se extrajeron 1021 guiones en texto plano, para luego realizar los requests correspondientes a OMDb. Los guiones restantes sólo están disponibles en formato PDF, lo que dificulta su manipulación, por lo que no fueron considerados en este primer acercamiento, aunque no se descarta a futuro extraer el texto directamente o utilizar OCR en el caso de los documentos escaneados.
Respecto a la estructura de la metadata de cada filme incorporado en el data set a través de la obtención de su guión, se presenta un ejemplo de la misma:
{ "Awards":"Won 1 Oscar. Another 19 wins & 18 nominations.", "Cast":["Mark Hamill", "Harrison Ford", "Carrie Fisher", "Billy Dee Williams"], "DVD":"21 Sep 2004", "Director":"Irvin Kershner", "Genre-List":["Action", "Adventure", "Fantasy"], "Main-Genre":"Action", "Rated":"PG", "Stopwords":["Leia", "Vader", "R2D2", "Creature", "Ben", "Solo", "voice", "Landos", "Chewbacca", "Ugnaught", "Kenobi", "Chief", "Fett", "Yoda", "C3PO", "Darth", "Snow", "Aide", "Calrissian", "Emperor", "Skywalker", "Luke", "Lando", "ObiWan", "Princess", "Boba", "Han"], "Title":"Star Wars: Episode V - The Empire Strikes Back", "Year":"1980", "file":"Star Wars: The Empire Strikes Back", "imdbID":"tt0080684", "imdbRating":"8.8", "tomatoUserRating":"4.1" }
La información obtenida desde OMDb corresponde a una respuesta en formato JSON con ~35 atributos, que van desde el título hasta la fecha de estreno en DVD. De éstos se seleccionó un subconjunto de 8 atributos relevantes a la temática del proyecto: Título, Año, Actores, Directores, Géneros, Premios, User Score (RottenTomatoes) y Clasificación. De estos atributos, el más importante son los Géneros, los cuales serán utilizados para etiquetar los guiones recopilados.
Los guiones de las películas están escritos en texto plano, utilizando _whitespace_ para darles formato. En su mayoría siguen una estructura estándar, escribiendo palabras clave con mayúsculas, centrando diálogos, etc., lo cual es aprovechado a la hora de limpiar el texto. A continuación se presenta el fragmento de uno de los guiones considerados en el data set.
INT. GANTRY - OUTSIDE CONTROL ROOM - REACTOR SHAFT
VADER
There is no escape. Don't make
me destroy you. You do not yet
realize your importance. You
have only begun to discover your
power. Join me and I will complete
your training. With our combined
strength, we can end this destructive
conflict and bring order to the
galaxy.
LUKE
I'll never join you!
VADER
If you only knew the power of the
dark side. Obi-Wan never told
you what happened to your father.
LUKE
He told me enough! It was you
who killed him.
VADER
No. I am your father.
Shocked, Luke looks at Vader in utter disbelief.
LUKE
No. No. That's not true!
That's impossible!
VADER
Search your feelings. You know
it to be true.
LUKE
No! No! No!
VADER
Luke. You can destroy the Emperor.
He has foreseen this. It is your
destiny. Join me, and together
we can rule the galaxy as father
and son. Come with me. It is the
only way.
El fragmento en cuestión corresponde a una de las escenas más icónicas de la saga de ciencia ficción y acción "Star Wars", en este pueden observarse los personajes destacados con mayúsculas y la descripcción de la locación de la escena en el mismo formato. Además, se aprecia las acotaciones correspondientes a las acciones no verbales de los personajes.
Dada la naturaleza de los datos, existe un vocabulario común utilizado por todos los guiones, particularmente a la hora de describir las escenas. Además, cada película tiene su propio conjunto de personajes cuyos nombres también se repiten en toda la extensión del guión, ya que en cada línea de diálogo aparece el nombre del personaje que está hablando, además de ser nombrados constantemente en las acotaciones y en los mismos diálogos. Es por esto que la limpieza de los datos se centró principalmente en la eliminación de estos términos que, si bien aportan información posiblemente relevante a la hora de clasificar, en general sólo introducen ruido e incrementan las probabilidades de producir un overfitting. Las palabras a eliminar son:
Las películas se clasifican en 24 géneros, cada una perteneciendo por lo menos a uno de ellos. Para el etiquetado se escogió el Género Principal de la película, determiando por el primer elemento del arreglo de Géneros entregado por la API de OMDb.
La distribución de las películas dentro de estas 24 categorías se puede ver en la siguiente figura:
Debido a la gran diferencia en la representatividad de las clases, se decidió reducirlas a las 7 con mayor representación: Acción, Aventura, Animación, Comedia, Crimen, Drama y Horror. Para aquellas películas donde el Género Principal no corresponde a ninguno de los seleccionados se utilizó como género principal el género siguiente en orden de importancia dado por la lista de Géneros. Las películas que no tienen ninguno de los géneros seleccionados dentro de su lista de Géneros, principalmente Documentales o Biografías, fueron simplemente descartadas y eliminadas del dataset.
La distribución final de las películas dentro de las 7 categorías es la siguiente:
Respecto a los resultados preliminares de la exploración de los palabras en los guiones, en términos de extensión estos pueden ser descritos de acuerdo a una distribución que basandose en su desripcción gráfica puede ser considerada normal.
A continuación se muestran una serie de Wordclouds ilustrando las palabras más frecuentes dentro de los guiones de cada género, y cómo van cambiando al cambiar el método utilizado (tf o tf-idf) o al ir eliminando palabras (stopwords, pseudo-stopwords y nombres de personajes). Para efectos de ejemplificar como el preprocesamiento influye sobre la representación de los datos, para dos de los géneros se muestra la evolción sobre la frecuencia de las palabras a medida que este proceso se refina.
Como resultado de la vectorización por género de los términos en los diferentes documentos para la categoría "Action" se obtiene:
Representación Term Frequency
Representación Term Frequency Inverse Document Frequency
Como resultado de la vectorización por género de los términos en los diferentes documentos y eliminando stopwords en base a lista predefinida para el idioma inglés del objetos Vectorizer de sklearn para la categoría "Action" se obtiene:
Representación Term Frequency
Representación Term Frequency Inverse Document Frequency
Como resultado de la vectorización por género de los términos en los diferentes documentos y eliminando stopwords en base a lista predefinida para el idioma inglés del objetos Vectorizer de sklearn, además de incluir una lista de otras palabras a excluir en base a los resultados previos se obtiene para la categoría "Action":
Representación Term Frequency
Representación Term Frequency Inverse Document Frequency
Finalmente, como resultado de la vectorización por género de los términos en los diferentes documentos y eliminando stopwords en base a lista predefinida para el idioma inglés, incluir una lista de otras palabras a excluir en base a resultados previos e incorporar un filtrado por los nombres de los personajes de cade pelicula, se obtiene para la categoría "Action":
Representación Term Frequency
Representación Term Frequency Inverse Document Frequency
De las gráficas word cloud antes descritas, se pueden establecer ciertas conclusiones respecto al dataset y a cómo se distribuyen en frequencia los diferentes términos en sus respectivos géneros. Destaca el hecho de que nombres de personajes y acotaciones referidas a contextos de las escenas son muy frecuentes y dada su especificidad a cada pelicula en particular, al momento de entrenar un clasificador ensuciarían los resultados. Es por este motivo que el preprocesamiento final contemplaría el obtener la lista de personajes de cada filme en el data set (IMDb), y junto a los procedimientos estándar de limpieza de texto serían eliminados de la data.
A modo de aproximación al problema propuesto, se contemplaría el entrenamiento de diversos clasificadores para responder a la interrogante de si es posible clasificar películas en su género de acuerdo a su script. Para ello se dividirían los datos en un conjunto de entrenamiento y otro de prueba. Luego se desarrollaría la siguiente metodología:
Para desarrollar el entrenamiento de los distintos modelos de clasificación propuestos, se probarían cinco modelos de clasificación. Para ello se emplearía cross validation (k-folds). Este procedimiento sería efectuado sobre un set de entrenamiento obtenido al separar el data set original en dos partes, manteniendo la proporción de las clases en cada uno de ellos. Esto para que una vez ajustado los hiperparámetros considerados y seleccionado los mejores modelos, estos se probasen sobre el set de entrenamiento. A continuación se muestran los resultados de la validación y los respectivos intervalos de confianza para cada clasificador probado. Nótese que para la construcción del intervalo se emplearía una distribución t-student dado que el tamaño de la muestra resultante de cross validation resulta muy pequeño para aproximarlo por una distribución normal.
Classifier | Mean | Standar Deviation | Confidence Interval |
---|---|---|---|
KNN | 0.4466 | 0.055 | [ 0.4151 0.4781] |
Base | 0.2145 | 0.0389 | [ 0.1922 0.2368] |
MNB | 0.5157 | 0.0571 | [ 0.4829 0.5484] |
SVM | 0.5895 | 0.0775 | [ 0.545 0.6339] |
Logistic Regression | 0.5844 | 0.0686 | [ 0.5451 0.6238] |
Classifier | Mean | Standar Deviation | Confidence Interval |
---|---|---|---|
KNN | 0.3842 | 0.088 | [ 0.3338 0.4346] |
Base | 0.1899 | 0.0785 | [ 0.1449 0.2349] |
MNB | 0.4221 | 0.043 | [ 0.3974 0.4468] |
SVM | 0.522 | 0.0542 | [ 0.4909 0.553 ] |
Logistic Regression | 0.4844 | 0.0531 | [ 0.4539 0.5149] |
Classifier | Mean | Standar Deviation | Confidence Interval |
---|---|---|---|
KNN | 0.2787 | 0.0986 | [ 0.2222 0.3352] |
Base | 0.1439 | 0.0546 | [ 0.1126 0.1752] |
MNB | 0.2716 | 0.0588 | [ 0.238 0.3053] |
SVM | 0.4814 | 0.1084 | [ 0.4192 0.5435] |
Logistic Regression | 0.4936 | 0.1208 | [ 0.4244 0.5628] |
Classifier | Mean | Standar Deviation | Confidence Interval |
---|---|---|---|
KNN | 0.2613 | 0.0675 | [ 0.2226 0.3 ] |
Base | 0.1688 | 0.0495 | [ 0.1405 0.1972] |
MNB | 0.1531 | 0.0302 | [ 0.1358 0.1704] |
SVM | 0.2587 | 0.0648 | [ 0.2216 0.2958] |
Logistic Regression | 0.2275 | 0.0548 | [ 0.1961 0.2589] |
Classifier | Mean | Standar Deviation | Confidence Interval |
---|---|---|---|
KNN | 0.3138 | 0.0772 | [ 0.2695 0.358 ] |
Base | 0.1355 | 0.0591 | [ 0.1016 0.1694] |
MNB | 0.323 | 0.0409 | [ 0.2996 0.3464] |
SVM | 0.4503 | 0.0987 | [ 0.3937 0.5069] |
Logistic Regression | 0.4729 | 0.1086 | [ 0.4107 0.5351] |
Classifier | Mean | Standar Deviation | Confidence Interval |
---|---|---|---|
KNN | 0.2862 | 0.0556 | [ 0.2543 0.3181] |
Base | 0.1265 | 0.0471 | [ 0.0995 0.1535] |
MNB | 0.2651 | 0.03 | [ 0.2479 0.2823] |
SVM | 0.3172 | 0.0471 | [ 0.2902 0.3442] |
Logistic Regression | 0.2877 | 0.0329 | [ 0.2689 0.3066] |
En términos generales, de los resultados presentados previamente, la primera conclusión relevante es que la transformación TF consistententemente supera a TF-IDF en los diferentes clasificadores evaluados y en las tres métricas propuestas (Accuracy, Recall, Precision). Por su parte, la respuesta de los clasificadores se encuentra dentro de lo previsible, pues el peor desempeño corresponde al clasificador base line conformado por un DummyClassifier de caracter estratificado debido al desbalance entre clases. Este a su vez es seguido por la performance de KNN (K Nearest Neighbours) y MNB (Multinomial Naive Bayes). Ya en un nivel un tanto superior, se encuentra SVM (Support Vector Machine) y la regresión logística. En todas las métricas se observa que la diferencia entre ambos no es significativa al 95% de confianza (5% significancia).Por estos motivos, para efectos de seleccionar un clasificador en virtud de los objetivos del proyecto se considerarán los resultados de SVM y Logístic Regression.
Conforme uno de los objetivos del proyecto corresponde a identificar elementos representativos dentro de un género, como resultado del entrenamiento de los clasificadores se presentan una serie de wordclouds ilustrando los features más representativos de cada clase obtenidos utilizando Logistic Regression:
Action (TF)
Action (TFIDF)
Adventure (TF)
Adventure (TFIDF)
Animation (TF)
Animation (TFIDF)
Comedy (TF)
Comedy (TFIDF)
Crime (TF)
Crime (TFIDF)
Drama (TF)
Drama (TFIDF)
Horror (TF)
Horror (TFIDF)
Para los dos modelos con mejor perfomance,estos en paralelo se entrenarían sobre el set completo de training y se probarían sobre el data set de testing, aun no considerado en más que la separación inicial. Así se volverían a calcular las métricas de desempeño anteriores como un indicador de que tan generalizables son los resultados obtenidos. Adicionalmente, se construirían matrices de confusión para determinar la calidad de la clasificación intra-clase.
Class | Precision | Recall | f1-score | Support |
---|---|---|---|---|
0 | 0.60 | 0.73 | 0.66 | 70 |
1 | 0.38 | 0.18 | 0.24 | 17 |
2 | 1.00 | 0.40 | 0.57 | 10 |
3 | 0.56 | 0.74 | 0.64 | 65 |
4 | 0.50 | 0.44 | 0.47 | 27 |
5 | 0.47 | 0.35 | 0.40 | 52 |
6 | 0.55 | 0.40 | 0.46 | 15 |
avg/total | 0.55 | 0.55 | 0.54 | 256 |
Action | Adventure | Animation | Comedy | Crime | Drama | Horror | |
---|---|---|---|---|---|---|---|
Action | 51 | 3 | 0 | 4 | 3 | 5 | 4 |
Adventure | 8 | 3 | 0 | 4 | 0 | 2 | 0 |
Animation | 1 | 0 | 4 | 5 | 0 | 0 | 0 |
Comedy | 4 | 0 | 0 | 48 | 4 | 9 | 0 |
Crime | 6 | 0 | 0 | 6 | 12 | 3 | 0 |
Drama | 9 | 2 | 0 | 17 | 5 | 18 | 1 |
Horror | 6 | 0 | 0 | 2 | 0 | 1 | 6 |
Class | Precision | Recall | f1-score | Support |
---|---|---|---|---|
0 | 0.66 | 0.76 | 0.71 | 70 |
1 | 0.45 | 0.29 | 0.36 | 17 |
2 | 0.80 | 0.40 | 0.53 | 10 |
3 | 0.61 | 0.72 | 0.66 | 65 |
4 | 0.45 | 0.56 | 0.50 | 27 |
5 | 0.50 | 0.40 | 0.45 | 52 |
6 | 0.50 | 0.27 | 0.35 | 15 |
avg / total | 0.58 | 0.58 | 0.57 | 256 |
Action | Adventure | Animation | Comedy | Crime | Drama | Horror | |
---|---|---|---|---|---|---|---|
Action | 53 | 3 | 0 | 2 | 6 | 4 | 2 |
Adventure | 4 | 5 | 0 | 4 | 0 | 4 | 0 |
Animation | 1 | 0 | 4 | 5 | 0 | 0 | 0 |
Comedy | 2 | 1 | 0 | 47 | 4 | 10 | 1 |
Crime | 5 | 1 | 0 | 3 | 15 | 3 | 0 |
Drama | 8 | 1 | 1 | 14 | 6 | 21 | 1 |
Horror | 7 | 0 | 0 | 2 | 2 | 0 | 4 |
Como se concluyó, los mejores clasificadores ajustados en términos de métricas corresponden a Logistic Regression y Support Vector Machine. Estos una vez entrenados sobre el dataset para esta función, permiten predecir la clasificación que tendrán los guiones de otras películas; en particular aquellas en el conjunto de testing. Una forma de interpretar el funcionamiento detrás de los clasificadores, es estimar la probabilidad de que cada script, pertenezca a cada una de las clases en cuestión, para luego ser asignado a aquella con mayor probailidad. Esta aproximación, permite dar una interpretación adicional a los resultados obtenidos, por cuanto las películas en general no son clasificadas en único género y una incorrecta clasificación de las mismas; podría ser consecuencia de una pequeña diferencia entre dos clases con probabilidades muy cercanas.
A continuación, se presentan algunos ejemplos de las probabilidades de pertenencia para algunas de las películas contenidas en el dataset empleado para este trabajo. A modo de enriquecer el análisis se contrasta en base a las diferencias existentes, cuando las probabilidades son estimadas a partir del entrenamiento con regresión logística versus la máquina de vectores de soporte.
A partir de la interpretación de la forma en la que quedan expresadas las probabilidades se observa que, en general, Support Vector Machine entrega más información sobre los géneros de una película, dando indicios de las proporciones de cada género en ésta, mientras que Logistic Regression pasa por alto los géneros secundarios para enfocarse sólo en el principal.