Spaces:
Runtime error
Runtime error
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer
|
3 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
4 |
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
5 |
+
import numpy as np
|
6 |
+
|
7 |
+
# Modelos para an谩lisis de texto y similitud
|
8 |
+
sentiment_analysis = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
|
9 |
+
similarity_model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
|
10 |
+
similarity_tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
|
11 |
+
|
12 |
+
# Respuestas esperadas
|
13 |
+
expected_responses = {
|
14 |
+
'question1': ['respuesta1a', 'respuesta1b', 'respuesta1c'],
|
15 |
+
'question2': ['respuesta2a', 'respuesta2b', 'respuesta2c'],
|
16 |
+
'question3': ['respuesta3a', 'respuesta3b', 'respuesta3c'],
|
17 |
+
'question4': ['respuesta4a', 'respuesta4b', 'respuesta4c'],
|
18 |
+
'question5': 'an谩lisis de texto para la pregunta 5',
|
19 |
+
'question6': 'an谩lisis de texto para la pregunta 6'
|
20 |
+
}
|
21 |
+
|
22 |
+
# Funci贸n para calcular la similitud de respuestas
|
23 |
+
def calculate_similarity(response, expected_responses):
|
24 |
+
vectorizer = TfidfVectorizer().fit_transform([response] + expected_responses)
|
25 |
+
vectors = vectorizer.toarray()
|
26 |
+
cosine_similarities = cosine_similarity(vectors[0:1], vectors[1:])
|
27 |
+
return float(max(cosine_similarities[0]))
|
28 |
+
|
29 |
+
# Funci贸n para evaluar una sola respuesta
|
30 |
+
def evaluate_response(response, expected_responses):
|
31 |
+
return calculate_similarity(response, expected_responses)
|
32 |
+
|
33 |
+
# Funci贸n para evaluar an谩lisis de texto
|
34 |
+
def analyze_text(response):
|
35 |
+
analysis = sentiment_analysis(response)
|
36 |
+
return analysis[0]
|
37 |
+
|
38 |
+
# Funci贸n para evaluar todas las respuestas
|
39 |
+
def evaluate_all_responses(responses):
|
40 |
+
results = {}
|
41 |
+
for i, response in enumerate(responses[:4]):
|
42 |
+
question_key = f'question{i+1}'
|
43 |
+
results[question_key] = evaluate_response(response, expected_responses[question_key])
|
44 |
+
|
45 |
+
for i, response in enumerate(responses[4:]):
|
46 |
+
question_key = f'question{i+5}'
|
47 |
+
results[question_key] = analyze_text(response)
|
48 |
+
|
49 |
+
return results
|
50 |
+
|
51 |
+
# Interfaz Gradio
|
52 |
+
def evaluate(responses):
|
53 |
+
if len(responses) != 6:
|
54 |
+
return {'error': 'Se esperan 6 respuestas'}
|
55 |
+
results = evaluate_all_responses(responses)
|
56 |
+
return results
|
57 |
+
|
58 |
+
input_texts = [gr.Textbox(label=f"Pregunta {i+1}") for i in range(6)]
|
59 |
+
output_text = gr.JSON(label="Resultados")
|
60 |
+
|
61 |
+
demo = gr.Interface(
|
62 |
+
fn=evaluate,
|
63 |
+
inputs=input_texts,
|
64 |
+
outputs=output_text,
|
65 |
+
title="Evaluaci贸n de Respuestas",
|
66 |
+
description="Ingrese las respuestas para las 6 preguntas."
|
67 |
+
)
|
68 |
+
|
69 |
+
if __name__ == "__main__":
|
70 |
+
demo.launch()
|