File size: 2,819 Bytes
57f9a5f
 
 
 
c4d8ca4
57f9a5f
 
 
 
 
 
c4d8ca4
57f9a5f
 
 
 
 
 
 
c4d8ca4
57f9a5f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c4d8ca4
57f9a5f
 
 
 
 
c4d8ca4
57f9a5f
c4d8ca4
 
57f9a5f
 
c4d8ca4
57f9a5f
 
 
 
c4d8ca4
 
57f9a5f
 
c4d8ca4
57f9a5f
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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()