clavel's picture
Update app.py
ac37333
raw
history blame
6.23 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TextClassificationPipeline, pipeline
title = "Clasificador de Tesis"
description = "Clasifica el texto de una tesis con la carrera a la que le pertenece [Actuar铆a, Derecho, Econom铆a, Psicolog铆a, Qu铆mica Farmac茅utico Biol贸gica]."
article = """
## Obtenci贸n de los datos
### Motivos y Objetivo de la Obtenci贸n de los Datos
La creaci贸n de este dataset ha sido motivado por la participaci贸n en el Hackathon 2022 de PLN en Espa帽ol organizado por Somos NLP, con el objetivo de democratizar el NLP en espa帽ol y promover su aplicaci贸n a buenas causas y, debido a que no existe un dataset de tesis en espa帽ol.
### Proceso de Obtenci贸n
Se opt贸 realizar un [scraper](https://github.com/IsaacIsaias/NLP-clasificador-tesis/blob/main/main.py) para conseguir la informaci贸n. Se decidi贸 usar la base de datos [TESIUNAM](https://tesiunam.dgb.unam.mx/F?func=find-b-0&local_base=TES01), la cual es un cat谩logo en donde se pueden visualizar las tesis de los sustentantes que obtuvieron un grado en la Universidad Nacional Aut贸noma de M茅xico (UNAM), as铆 como de las tesis de licenciatura de escuelas incorporadas a ella.
Para ello, en primer lugar se consult贸 la [Oferta Acad茅mica](http://oferta.unam.mx/indice-alfabetico.html) de la Universidad, sitio de donde se extrajo cada una de las 131 licenciaturas en forma de lista. Despu茅s, se analiz贸 cada uno de los casos presente en la base de datos, debido a que existen carreras con m谩s de 10 tesis, otras con menos de 10, o con solo una o ninguna tesis disponible. Se us贸 Selenium para la interacci贸n con un navegador Web (Edge) y est谩 actualmente configurado para obtener las primeras 20 tesis, o menos, por carrera.
Este scraper obtiene de esta base de datos:
- Nombres del Autor
- Apellidos del Autor
- T铆tulo de la Tesis
- A帽o de la Tesis
- Carrera de la Tesis
A la vez, este scraper descarga cada una de las tesis en la carpeta *Downloads* del equipo local.
En el csv formado por el scraper se a帽adi贸 el Resumen/Introduccion/Conclusion de la tesis, dependiendo cual primero estuviera disponible, ya que la complejidad recae en la diferencia de la estructura y formato de cada una de las tesis.
Posteriormente, se le realiz贸 un procesado al dataset con las siguientes tareas:
- Conversi贸n a min煤sculas
- Tokenizaci贸n
- Eliminaci贸n de palabras que no son alfanum茅ricas
- Eliminaci贸n de palabras vac铆as
- Stemming: eliminaci贸n de plurales
## Impacto Social
El presente conjunto de datos favorecer谩 la b煤squeda e investigaci贸n relacionada con tesis en espa帽ol, a partir de su categorizaci贸n autom谩tica por un modelo entrenado con este dataset. Esta tarea favorece el cumplimiento del Objetivo 4 de Desarrollo Sostenible de la ONU: Educaci贸n y Calidad (https://www.un.org/sustainabledevelopment/es/objetivos-de-desarrollo-sostenible/).
## Miembros del Equipo:
- Isaac Isa铆as L贸pez L贸pez ([MajorIsaiah](https://huggingface.co/MajorIsaiah))
- Dionis L贸pez Ramos ([inoid](https://huggingface.co/inoid))
- Yisel Clavel Quintero ([clavel](https://huggingface.co/clavel))
- Ximena Yeraldin L贸pez L贸pez ([Ximyer](https://huggingface.co/Ximyer))
"""
tokenizer = AutoTokenizer.from_pretrained('hiiamsid/BETO_es_binary_classification', use_fast=False)
model = AutoModelForSequenceClassification.from_pretrained(
'hackathon-pln-es/unam_tesis_BETO_finnetuning', num_labels=5, output_attentions=False, output_hidden_states=False)
#pipe = TextClassificationPipeline(model=model, tokenizer=tokenizer, return_all_scores=True)
pipe = pipeline("text-classification", model='hackathon-pln-es/unam_tesis_BETO_finnetuning', tokenizer=tokenizer)
#classificationResult = pipe("El objetivo de esta tesis es elaborar un estudio de las condiciones asociadas al aprendizaje desde casa.")
def thesis_prediction(input):
classificationResult = pipe(input)
classificationResult[0].sort(reverse=True, key=lambda x:x['score'])
keyClass = classificationResult[0][0]['label']
return keyClass
examples = [
["Introducci贸n al an谩lisis de riesgos competitivos bajo el enfoque de la funci贸n de incidencia acumulada (FIA) y su aplicaci贸n con R"],
["los promedios de calificaciones y clasificar por grupo o asignatura se realizaron a trav茅s de tablas din谩micas en Excel"],
["El matrimonio civil sin distinci贸n de g茅nero y las garant铆as de su reconocimiento y protecci贸n"],
["establece que la acusaci贸n deber谩 contener la enunciaci贸n de los hechos que se le atribuyen al acusado"],
["Notas sobre deuda p煤blica en M茅xico"],
["茅stas suman 56.8% de la poblaci贸n del pa铆s (63,836,779 habitantes), por lo que representan los mayores centros de consumo."],
["La importancia de la motivaci贸n para el clima laboral"],
["pues surgen pensamientos que se relacionan con la evaluaci贸n de la vida misma"],
["Asociaci贸n del polimorfismo rs1256031 del receptor beta de estr贸genos en pacientes con diabetes tipo 2"],
["los derivados de la serie LCG presentaron actividad citot贸xica contra las l铆neas celulares SK-LU-1 y SW620"]
]
#gr.Interface(fn=thesis_prediction, inputs=[gr.inputs.Textbox(label="T铆tulo o frase:", placeholder="Ingrese de favor el t铆tulo de la tesis o un fragmento de esta."),], outputs=[gr.outputs.HTML(label="La tesis pertenece a la carrera de: ",)], title=title, description=description, article=article, examples=examples).launch()
#gr.Interface(fn=thesis_prediction, inputs=[gr.inputs.Textbox(label="T铆tulo o frase:", placeholder="Ingrese de favor el t铆tulo de la tesis o un fragmento de esta."),], outputs="keyClass", title=title, description=description, article=article, examples=examples).launch()
#gr.Interface.load('huggingface/hackathon-pln-es/unam_tesis_BETO_finnetuning', placeholder="Ingrese de favor el t铆tulo de la tesis o un fragmento de esta.", title=title, description=description, article=article, examples=examples).launch()
gr.Interface.from_pipeline(pipe, title=title, description=description, article=article, examples=examples).launch()