In questa sezione mostreremo come possiamo utilizzare la libreria open source valutazione continua per creare un feedback utente simulato.
Prendi in considerazione un'applicazione chatbot per domande e risposte. Dopo la distribuzione, gli utenti iniziano a valutare le risposte con il pollice su o giù, indicando la necessità di migliorare le prestazioni. Per questo esempio utilizzeremo l'esempio denominato correctness
in valutazione continua:
dataset = Dataset(example_data_downloader("correctness"))# Samples are annotated with "correct", "incorrect" or "refuse-to-answer"
# We remove the samples where the LLL refused to answer (i.e., said "I don't know")
dataset.filter(lambda x: x("annotation") != "refuse-to-answer")
dataset.sample(300) # Only for this example: randomly sample 300 examples
Come accennato, vogliamo creare alcuni criteri personalizzati. Sfruttiamo il LLMBasedCustomMetric
classe per definire il Tono E Concisione metrica. Per fare ciò dobbiamo definire la metrica e fornire una rubrica di punteggio.
Per il tono:
tone = LLMBasedCustomMetric(
name="Tone",
definition="The Tone/Content Issues metric evaluates the appropriateness and accuracy of the tone and content in responses to specific questions. It focuses on ensuring that the tone is professional and suitable for the context, and that the content accurately addresses the question without unnecessary deviations or inaccuracies. This metric is crucial for maintaining a professional image and ensuring clear, direct communication.",
scoring_rubric="""Use the following rubric to assign a score to the answer based on its tone:
- Score 1: The response is inappropriate or inaccurate, with a tone that is either too informal, overly strong, or not suited to the professional context. The content may be irrelevant, incorrect, or fail to directly address the question posed.
- Score 2: The response is mostly appropriate and accurate but may contain minor tone or content issues. The tone is generally professional but may slip into informality or unnecessary strength in places. The content addresses the question but may include minor inaccuracies or unnecessary details.
- Score 3: The response is appropriate and accurate, with a tone that is professional and suited to the context. The content directly and correctly addresses the question without unnecessary deviations or inaccuracies.""",
scoring_function=ScoringFunctions.Numeric(min_val=1, max_val=3),
model_parameters={"temperature": 0},
)
mentre per brevità:
conciseness = LLMBasedCustomMetric(
name="Conciseness",
definition="Conciseness in communication refers to the expression of ideas in a clear and straightforward manner, using the fewest possible words without sacrificing clarity or completeness of information. It involves eliminating redundancy, verbosity, and unnecessary details, focusing instead on delivering the essential message efficiently. ",
scoring_rubric="""Use the following rubric to assign a score to the answer based on its conciseness:
- Score 1: The answer is overly verbose, containing a significant amount of unnecessary information, repetition, or redundant expressions that do not contribute to the understanding of the topic.
- Score 2: The answer includes some unnecessary details or slightly repetitive information, but the excess does not severely hinder understanding.
- Score 3: The answer is clear, direct, and to the point, with no unnecessary words, details, or repetition.""",
scoring_function=ScoringFunctions.Numeric(min_val=1, max_val=3),
model_parameters={"temperature": 0},
)
Noi usiamo Tono E Concisione insieme a metriche più standard, in particolare prenderemo in considerazione il
- Correttezza della risposta (
DeterministicAnswerCorrectens
ELLMBasedAnswerCorrectness)
- Pertinenza della risposta (
LLMBasedAnswerRelevance
) - Coerenza dello stile (
LLMBasedStyleConsistency
) - Leggibilità (
FleschKincaidReadability
)
Il passaggio successivo consiste nel mettere insieme tutti i parametri e specificare quale campo del set di dati deve essere utilizzato per calcolare i parametri. Per farlo possiamo utilizzare il file SingleModulePipeline
pipeline = SingleModulePipeline(
dataset=dataset,
eval=(
DeterministicAnswerCorrectness().use(
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
LLMBasedAnswerCorrectness().use(
question=dataset.question,
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
LLMBasedAnswerRelevance().use(
question=dataset.question, answer=dataset.answer
),
LLMBasedStyleConsistency().use(
answer=dataset.answer, ground_truth_answers=dataset.ground_truths
),
FleschKincaidReadability().use(answer=dataset.answer),
tone.use(
question=dataset.question,
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
conciseness.use(
question=dataset.question,
answer=dataset.answer,
ground_truth_answers=dataset.ground_truths,
),
),
)
ed eseguire tutte le metriche utilizzando il file EvaluationManager
eval_manager = EvaluationManager(pipeline)
# The dataset already contains the model output so we just set the evaluation results
eval_manager.evaluation.results = dataset.data
eval_manager.run_metrics() # Note: there is no progress bar, it might take a few minutes
Il passaggio successivo consiste nell'addestrare il predittore del feedback degli utenti simulato
datasplit = DataSplit(
X=eval_manager.metrics.to_pandas(),
y=map(lambda x: 1 if x == "correct" else 0, dataset("annotation")),
split_ratios=SplitRatios(train=0.6, test=0.2, calibration=0.2),
)# We use the train and calibration sets to train the classifier
predictor = EnsembleMetric(training=datasplit.train, calibration=datasplit.calibration)
Questo predittore del feedback utente simulato è in grado di prevedere correttamente il feedback umano nella suddivisione del test il 96,67% delle volte.
Possiamo sfruttare l'approccio proposto per comprendere meglio ciò che è importante per l'utente. Di seguito è riportata l'importanza appresa di ogni metrica dal predittore del feedback utente simulato.
Guardando la trama, lo vediamo Correttezza (Compreso sovrapposizione dei tokenche è un'altra misura di correttezza) e Rilevanza alla domanda sono i predittori più importanti delle preferenze dell'utente. Ma anche l'utente pesa tono E coerenza di stile nella decisione. Allo stesso tempo, possiamo vederlo concisione E leggibilità non sono così importanti. L'esame di questo grafico fornisce informazioni preziose sulle preferenze degli utenti, fornendo una chiara indicazione di quali elementi sono essenziali e cosa può essere modificato se è necessario scendere a compromessi.
Raccogliere il feedback degli utenti è impegnativo, ma è l'informazione più importante per gli sviluppatori di modelli linguistici di grandi dimensioni (LLM). Simulando il feedback degli utenti durante i test offline, riduciamo significativamente il tempo necessario affinché il feedback ritorni dal campo agli sviluppatori, mantenendo al tempo stesso relazioni positive con gli utenti.
In pratica, il nostro approccio ha dimostrato di rispecchiare fedelmente le risposte umane reali, superando i metodi tradizionali che si basano su risposte LLM isolate. Questa strategia consente il miglioramento incrementale delle applicazioni di intelligenza artificiale generativa, favorendo il perfezionamento continuo e una maggiore congruenza con ciò che gli utenti si aspettano.
—
Nota: presto pubblicheremo un documento di ricerca con maggiori dettagli su questa metodologia. Rimani sintonizzato!
Fonte: towardsdatascience.com