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()