Error en el codigo del laboratorio 1

Error en el codigo del laboratorio 1

de Maria Elisa Sanguinetti Giorgetti -
Número de respuestas: 5

Me parece que en el codigo del laboratorio 1 hay un error y que en realidad ese clasificador tiene malas metricas porque no encuentra nunca ningun lema tanto entre los lemas positivos como negativos entonces siempre clasifica como 'NONE'.

En mi caso lo solucione cambiando la linea de 

lemma = token.lemma_

por lemma = [token.lemma_]

en el código del clasificador.


Doy visibilidad por las dudas.



En respuesta a Maria Elisa Sanguinetti Giorgetti

Re: Error en el codigo del laboratorio 1

de Maria Elisa Sanguinetti Giorgetti -
En realidad me di cuenta que depende de como se carguen los lemas positivos y negativos, entonces puede solucionarse tanto en la carga de lemas como en esta sección de codigo.
En respuesta a Maria Elisa Sanguinetti Giorgetti

Re: Error en el codigo del laboratorio 1

de Aiala Rosá - InCo -
Hola Elisa,
Gracias por reportarlo. Mañana lo revisamos y mandamos mensaje al foro.
Saludos,
Aiala
En respuesta a Aiala Rosá - InCo

Re: Error en el codigo del laboratorio 1

de Santiago Gongora -
Hola Elisa ¿cómo estás?

En primer lugar, (y por si algún otro compañer@ está leyendo esto), hay que cargar los lemas positivos y negativos en dos colecciones distintas, una que se llama "pos_lemmas" y otra que se llama "neg_lemmas". Esto se hace leyendo los archivos de lemas, similar a como se hace al inicio del codigo con el conjunto de datos. La letra del laboratorio no incluye esto ya que solamente define diccionarios vacios. En ese caso, si esas listas de lemas son siempre vacías, ningún tuit va a tener algo distintivo y por lo tanto siempre va a ser un empate, clasificándose como "NONE".

En segundo lugar, el uso del atributo "lemma_" de la clase "token" está recomendado por la biblioteca de spacy como la forma de acceder al lema: https://spacy.io/api/lemmatizer
En la solución que hicimos, que implementa un clasificador funcional con 0,55 de F1 macro, accedemos al lema de la manera que lo recomienda Spacy:

for token in doc: #por cada token detectado por Spacy
>if token.lemma_ in pos_lemmas: #si el lema de ese token está entre los positivos
>>pos_tokens +=1 #sumamos una unidad al contador de lemas positivos en el tuit

Si en tu caso tuviste que meterlo adentro de una lista ([token.lemma_]) debe ser por cómo te quedaron cargados los datos, como decís. La idea era que los lemas del diccionario quedaran cargados en una lista de strings (["palabra1", "palabra2"]) y no como una lista de listas. De esa forma, pueden recorrer la lista de lemmas positivos y negativos, chequeando si el token.lemma_ estaba en una u otra, como se muestra en el código que puse más arriba. Es decir, solamente haciendo un chequeo de si el string token.lemma_ está en una u otra lista. Pero otras soluciones son igual de bienvenidas, y está bueno que experimenten de esa manera.

¡Cualquier duda, a las órdenes!
Santi
En respuesta a Santiago Gongora

Re: Error en el codigo del laboratorio 1

de Maria Elisa Sanguinetti Giorgetti -
En realidad me paso que quedaron cargados por separado si, pero quedaron cargados como lista de listas y no como lista de strings . Como indicas se puede solucionar en la carga de datos para no tener que modificar el resto del código, como puse en el mensaje posterior. Lo reporte porque en mi caso al menos no me di cuenta hasta graficar la matriz de confusion y revisar el código que los datos habian quedado mal cargados. Las metricas F1 daban 0.33 antes de corregir la carga de datos. Quizas el titulo no haya sido muy feliz porque no se trata de un error sino que tienes que hacer la carga de datos correctamente. Gracias por la respuesta Santi!! 
En respuesta a Maria Elisa Sanguinetti Giorgetti

Re: Error en el codigo del laboratorio 1

de Santiago Gongora -

¡Claro, entendí!

Te quedaba cargado como [[palabra1], [palabra2], [palabra3]] entonces un elemento de esa lista era, por ejemplo [palabra2]. Entonces al comparar tenías que comparar listas y no strings. Eso es algo que no es deseable desde el punto de vista de la programación (porque empiezan a jugar detalles como por ejemplo cómo está implementada la igualdad a nivel de listas).

¡Buenísimo que quedara solucionado!

A las órdenes,
Santi