english-aa / app.py
LordCoffee's picture
Update app.py
c4d8ca4 verified
raw
history blame
2.82 kB
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
import gradio as gr
# Modelos para an谩lisis de texto y similitud
sentiment_analysis = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
similarity_model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
similarity_tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# Respuestas esperadas para las preguntas
expected_responses = {
'question1': ['respuesta1a', 'respuesta1b', 'respuesta1c'],
'question2': ['respuesta2a', 'respuesta2b', 'respuesta2c'],
'question3': ['respuesta3a', 'respuesta3b', 'respuesta3c'],
'question4': ['respuesta4a', 'respuesta4b', 'respuesta4c'],
}
# Funci贸n para calcular la similitud de respuestas usando TF-IDF y cosine similarity
def calculate_similarity(response, expected_responses):
vectorizer = TfidfVectorizer().fit_transform([response] + expected_responses)
vectors = vectorizer.toarray()
cosine_similarities = cosine_similarity(vectors[0:1], vectors[1:])
return float(max(cosine_similarities[0]))
# Funci贸n para evaluar una sola respuesta
def evaluate_response(response, expected_responses):
return calculate_similarity(response, expected_responses)
# Funci贸n para evaluar an谩lisis de texto
def analyze_text(response):
analysis = sentiment_analysis(response)
return analysis[0]
# Funci贸n para evaluar todas las respuestas
def evaluate_all_responses(responses):
results = {}
for i, response in enumerate(responses[:4]):
question_key = f'question{i+1}'
results[question_key] = evaluate_response(response, expected_responses[question_key])
for i, response in enumerate(responses[4:]):
question_key = f'question{i+5}'
results[question_key] = analyze_text(response)
return results
# Interfaz Gradio
def evaluate(*responses):
if len(responses) != 6:
return {'error': 'Se esperan 6 respuestas'}
results = evaluate_all_responses(responses)
return results
# Definir los cuadros de texto para las respuestas de las preguntas
input_texts = [gr.Textbox(label=f"Pregunta {i+1}") for i in range(6)]
# Definir la salida como un JSON para mostrar los resultados
output_text = gr.JSON(label="Resultados")
# Crear la interfaz Gradio
demo = gr.Interface(
fn=evaluate,
inputs=input_texts,
outputs=output_text,
title="Evaluaci贸n de Respuestas y An谩lisis de Texto",
description="Ingrese las respuestas para las 6 preguntas y obtenga evaluaciones de similitud y an谩lisis de sentimientos.",
)
# Lanzar la aplicaci贸n
if __name__ == "__main__":
demo.launch()