Ejemplos de probabilidades de registro de Azure OpenAI (LogProbs)
Aplicación de consola .NET que muestra cuatro ejemplos de cómo Azure OpenAI LogProbs puede resultar útil para la recuperación de información de calidad:
- Probabilidad del primer token : calcula la probabilidad de Verdadero o Falso y devuelve la probabilidad máxima de si el modelo (LLM) tiene suficiente información para responder la pregunta en el mensaje.
- Probabilidad del primer token [con puntuaciones de Brier] : probabilidad de verdadero o falso, devuelve la probabilidad máxima de si el modelo (LLM) tiene suficiente información para responder la pregunta en el mensaje. Calcula puntuaciones Brier tanto individuales como promedio total para medir la precisión del pronóstico probabilístico del modelo (LLM).
- Puntuación de probabilidad ponderada de confianza : devuelve una puntuación de confianza en uno mismo entre 1 y 10 que se pondera a partir de una distribución de probabilidad (las 5 principales probabilidades logarítmicas) para proporcionar una estimación mejorada (ponderada) de la puntuación de confianza para responder una pregunta.
- Intervalo de confianza : calculado a partir de una simulación de arranque de múltiples llamadas al modelo. Esto proporciona un intervalo de confianza (rango) del 95% de puntuaciones de confianza plausibles. Esto es ideal cuando necesita comprender un rango plausible de posibilidades que interpreta el modelo en lugar de una estimación puntual única.
Empezando
Requisitos
- SDK de .NET 8.x instalado
- Acceso a la API de Azure OpenAI: (OpenAI Access también funcionará) ya sea GPT3.5, GPT-4T, GPT-4o, GPT-4o-mini implementado y clave API
- Visual Studio 2022(+) si se depura la solución con un IDE
Clonar el repositorio
git clone https://github.com/bartczernicki/AzureOpenAILogProbs.git
Agregue esto a Secrets.json (haga clic derecho en VS Project -> Administrar secretos de usuario) y ejecute la aplicación de consola
{
"AzureOpenAI" : {
"ModelDeploymentName" : "gpt-4-2024-04-09" , // Any Azure OpenAI GPT-4o-mini, GPT-4o or GPT3.5 model should perform well
"APIKey" : "YOURAZUREOPENAIKEY" ,
"Endpoint" : "https://YOURAZUREOPENAIENDPOINT.openai.azure.com/"
}
}
Comandos de compilación y ejecución (también puede compilar o depurar desde Visual Studio 2022+)
Información clave sobre la configuración de la solución
En esta configuración, el LLM recibirá párrafos seleccionados de un artículo de Wikipedia sobre la historia del equipo de béisbol de los Mets de Nueva York. El artículo completo se puede encontrar aquí: https://en.wikipedia.org/wiki/New_York_Mets. Este es el contexto (información fundamental) que siempre se proporcionará en cada mensaje.
Además, se proporcionan 20 pares de preguntas y respuestas. Cada elemento de la lista tiene una pregunta sobre el artículo de Wikipedia de los Mets junto con una evaluación humana Verdadero/Falso, si hay suficiente información en el artículo de Wikipedia proporcionado para responder la pregunta. Cada pregunta se enviará al LLM y luego el LLM evaluará si tiene suficiente información para responder la pregunta. Esa respuesta se comparará con la evaluación humana (verdad lógica). Dos ejemplos de la lista de 20 preguntas:
new Question { Number = 1 , EnoughInformationInProvidedContext = true , QuestionText = " When where the Mets founded? " } ,
new Question { Number = 2 , EnoughInformationInProvidedContext = true , QuestionText = " Are the Mets a baseball team or basketball team? " } ,
La capacidad de inspeccionar las probabilidades de registro de tokens está desactivada de forma predeterminada. Para habilitar esta característica, la propiedad IncludeLogProbabilities debe establecerse en verdadero. Esto no cuesta tokens adicionales ni hace que las llamadas a la API cuesten más dinero. Sin embargo, esto aumenta ligeramente la carga útil del objeto JSON que regresa. Por ejemplo, al utilizar la nueva biblioteca OpenAI .NET, se expone como una propiedad en la clase ChatCompletionOptions.
chatCompletionOptions . IncludeLogProbabilities = true ;
En la biblioteca .NET se incluye la capacidad de controlar la cantidad de probabilidades de registro devueltas con cada llamada API. Esto proporciona una matriz/lista de tokens con cada probabilidad respectiva. En estadística, esto se conoce como función de masa de probabilidad (PMF), ya que es una distribución discreta de probabilidades. Nota: En Azure OpenAI, esto tiene un máximo actual de 5 y en OpenAI 10 (para la mayoría de las API). Por ejemplo, al utilizar la nueva biblioteca OpenAI .NET, se expone como una propiedad en la clase ChatCompletionOptions.
chatCompletionOptions . TopLogProbabilityCount = 5 ;
La solución también incluye la capacidad de establecer la temperatura de cada una de las salidas esperadas del modelo (LLM). El valor predeterminado es 0,3f (número de coma flotante), pero se puede aumentar a 2f para obtener más creatividad y variación.
internal static class GenAI
{
// To simulate more variance in selecting lower probability tokens, increase the temperature to between 1.4 - 2.0.
public const float OPENAITEMPATURE = 0.3f ;
.. .
Esa es esencialmente la configuración central de esta solución. El resto del código es código C# para conectar la entrada/salida de los servicios y garantizar que los cálculos se realicen y visualicen correctamente en la aplicación de consola.
Información básica sobre las probabilidades de registro
¿Qué son los LogProbs (probabilidades de registro)? La mayoría de los LLM actuales procesan instrucciones rápidas prediciendo el siguiente token e iterando a través de cada token hasta llegar a un punto de parada (es decir, longitud máxima del token, completando las instrucciones del usuario). Cada token que se considera para la salida se procesa a través de una canalización LLM interna que genera una distribución de probabilidad estadística de los tokens de "mejor coincidencia" para seleccionar. Según las configuraciones (temperatura, top_p, etc.), estas probabilidades de token se pueden calcular y luego el LLM selecciona el siguiente token "mejor coincidente" en función de las diferentes configuraciones. Debido a que estos LLM son de naturaleza probabilística, es por eso que es posible que vea diferentes tokens generados para la misma instrucción rápida enviada al modelo (LLM).
A continuación se muestra un ejemplo de un escenario de preguntas y respuestas y las probabilidades asociadas para los dos tokens (palabras) que se seleccionaron para responder la pregunta: "¿Quién fue el primer presidente de los Estados Unidos?" . En el siguiente ejemplo, el modelo respondió con dos tokens "George" "Washington", utilizando probabilidades de token del 99,62% y 99,99% respectivamente. Tenga en cuenta que había otros tokens disponibles para su selección, pero el conocimiento inherente y la capacidad de razonamiento del LLM (al haber sido entrenado con una gran cantidad de datos) aumentaron con confianza la probabilidad de estos dos tokens: "George" y "Washington".
Existen configuraciones que pueden calibrar qué tan estricto o creativo es un LLM. Por ejemplo, es posible que haya oído hablar de una configuración de modelo (LLM) llamada Temperatura que esencialmente aumenta la posibilidad de que se seleccionen tokens de menor probabilidad.
¿Necesitas más información? Lectura recomendada sobre los antecedentes de Azure OpenAI LogProbs:
- Libro de cocina OpenAI - LogProbs: https://cookbook.openai.com/examples/using_logprobs
- ¿Qué son los LogProbs?: https://www.ignorance.ai/p/what-are-logprobs
Uso de LogProbs para mejorar la calidad de GenAI
Existen varias técnicas de mejora nuevas y probadas que utilizan múltiples llamadas a un modelo o varios modelos para llegar a una respuesta, conclusión o decisión de calidad. Actualmente, la mayoría de las formas en que se utilizan los LLM en los sistemas de producción GenAI es con conexión a tierra (RAG) al proporcionar información contextual adicional. El modelo (LLM) recibe instrucciones de responder una pregunta, razonar sobre esa información, etc. Sin embargo, con técnicas de conexión a tierra deficientes, esto puede dar como resultado resultados de menor calidad.
Azure OpenAI LogProbs es una técnica avanzada que puede ayudar y utilizarse para medir la confianza (probabilidad) de la respuesta del modelo. Esta tremenda capacidad puede permitir que el sistema GenAI se autocorrija o guíe al usuario/agente para llegar a una respuesta de mejor calidad.
El poder de LogProbs se ilustra a continuación con el diagrama del flujo de trabajo de GenAI. Observe que hay dos caminos (izquierda y derecha):
- El camino de la izquierda es el camino tradicional que siguen la mayoría de las aplicaciones GenAI. Hace una pregunta y recibe una respuesta de un LLM. Este flujo de trabajo típico de la izquierda es el que se encontrará en la mayoría de las aplicaciones GenAI Chat actuales.
- El camino correcto es una "mejora de la calidad" del flujo de trabajo. Paralelamente, uno puede preguntarle al LLM "LLM, ¿tiene suficiente información para responder esta pregunta y qué tan seguro está de que tiene suficiente información?". El aviso del siguiente diagrama con esta "mejora de calidad" ahora incluye:
- respuesta a la pregunta
- ¿Tiene el modelo suficiente información para responder la pregunta ? Estimación verdadera o falsa del modelo (LLM)
- Probabilidad de tener suficiente información para responder la pregunta : calculada a partir de LogProbs; que se puede utilizar para inferencias estadísticas adicionales o para establecer umbrales de decisión
Opciones de procesamiento de la consola
1) Probabilidad del primer token: qué tan seguro está el modelo de IA (LLM) de la información para responder la pregunta
- El modelo (LLM) responderá solo con Verdadero o Falso . Básicamente, el modelo clasificará (Verdadero o Falso) si cree que hay suficiente información (Verdadero) o no hay suficiente información (Falso) en la base proporcionada por Wikipedia para responder la pregunta en el mensaje.
- Utiliza Azure OpenAI LogProbs para determinar la probabilidad de que solo aparezca el primer token en la respuesta. El primer token siempre será True o False .
- Si la probabilidad es alta, el modelo (LLM) confía mucho en su propia respuesta (Verdadero o Falso)
- Si la probabilidad es baja, el modelo (LLM) no confía mucho en su propia respuesta (Verdadero o Falso)
- La probabilidad se puede utilizar como umbral de decisión de clasificación sobre si el modelo tiene suficiente información (contexto RAG) para responder la pregunta. Por ejemplo, se puede proporcionar una experiencia de usuario con una señal verificada de que la respuesta ha pasado por una segunda validación cuando la probabilidad emitida por el modelo (LLM) es superior al 90%.
Salida de ejemplo:
Tenga en cuenta que la imagen de arriba ilustra el resultado Verdadero y Falso del LLM, así como la probabilidad de ese resultado Verdadero o Falso. Dado que "Verdadero" o "Falso" son los primeros y únicos tokens de la respuesta, se puede utilizar la probabilidad del primer token (LogProb). Hay un par de problemas con este enfoque:
- Sólo se están investigando la primera ficha y la probabilidad. Si observa el ejemplo de George Washington anterior, tenga en cuenta que se pueden generar varios tokens que pueden ser componentes o ser similares a "George Washington". Lo mismo se aplica incluso cuando solo se miran tokens "Verdadero" o "Falso". Podría haber tokens como "TRU", "true", "tr" y todos deberían agruparse para indicar una probabilidad colectiva de "True". Los ejemplos siguientes ilustran esto.
- Al ejecutar los ejemplos muchas veces, a veces parecerá que hay una discrepancia entre el primer token y el LogProb superior. Esto se debe a que el servicio OpenAI puede seleccionar tokens con menores probabilidades, especialmente con configuraciones como una temperatura más alta. Esta es una solución simple, básicamente LogProbs permite al desarrollador anular el primer token seleccionado y seleccionar el que tiene la mayor probabilidad.
2) Probabilidad del primer token [con puntuaciones de Brier] - Cálculo de las puntuaciones de Brier de la probabilidad del primer token
- Este ejemplo muestra cómo medir la precisión predictiva y de pronóstico del modelo.
- Igual que la probabilidad del primer token, pero también calcula la puntuación Brier para cada una de las respuestas de probabilidad.
- Las puntuaciones de Brier (y métodos similares en aprendizaje automático y estadística) se utilizan para medir la precisión de las predicciones probabilísticas.
- Cuanto menor sea el puntaje de Brier, mejor será el modelo para predecir la probabilidad de la respuesta. Por ejemplo, si hay dos modelos y ambos predicen el evento correcto, pero la probabilidad del primer modelo fue del 65 % y la probabilidad del segundo modelo fue del 95 %, la puntuación de Brier para el segundo modelo será menor. Esto se debe a que si el evento futuro ocurre, automáticamente se le da una probabilidad del 100%. El 95% está más cerca del 100%. Más información sobre las puntuaciones de Brier: https://en.wikipedia.org/wiki/Brier_score
- Las puntuaciones de Brier pueden agregar múltiples predicciones individuales y agregarse en una sola puntuación. Este ejemplo genera una tabla de puntuaciones Brier para cada una de las preguntas y la puntuación Brier promedio para todas las preguntas.
- Promediar las puntuaciones de Brier puede decirnos mucho sobre la precisión del desempeño general del sistema probabilístico o de un modelo probabilístico. Las puntuaciones promedio de Brier de 0,1 o menos se consideran excelentes, 0,1 - 0,2 son superiores, 0,2 - 0,3 son adecuadas y 0,3-0,35 son aceptables y, finalmente, las puntuaciones promedio de Brier superiores a 0,35 indican un rendimiento de predicción deficiente.
Las puntuaciones de Brier variarán según las capacidades del modelo, la indicación y el contexto de la pregunta. Al mantener el mensaje y el contexto iguales, se puede comparar el rendimiento general de la precisión del modelo. Tenga en cuenta las puntuaciones de Brier a continuación comparando los modelos GPT-4o y GPT-4o-mini. El modelo GPT-4o-mini tiene una puntuación Brier más baja, lo que significa que es más preciso a la hora de predecir la probabilidad de la respuesta correcta. De hecho, el GPT-4o-mini llegó correctamente a la respuesta final 18 de las 20 preguntas, mientras que el modelo GPT-4o coincidió con la respuesta humana esperada (si hay suficiente información en el contexto para responder la pregunta) 17 de 20 preguntas. Tenga en cuenta que la puntuación Brier promedio de GPT-4o-mini es 0,083 (por debajo de 0,1), lo que indica un rendimiento predictivo excelente. Por lo tanto, la puntuación Brier del modelo GPT-4o-mini es menor (mejor). Esto muestra empíricamente que es más preciso al cuantificar la probabilidad de que tenga suficiente información para responder la pregunta rápida proporcionada.
Salida de ejemplo:
3) Puntuación de probabilidad ponderada de confianza: el modelo proporciona una puntuación de confianza en uno mismo y luego evalúa la probabilidad de la puntuación de confianza.
- En los ejemplos anteriores, sólo se utilizó la probabilidad del primer token. Cualquier token que tuviera la mayor probabilidad se utilizó como determinación de Verdadero o Falso.
- Azure OpenAI LogProbs puede devolver una distribución de función de masa de probabilidad (PMF) de hasta los cinco tokens siguientes, incluidas sus probabilidades.
- Este cálculo utiliza múltiples LogProbs para determinar la probabilidad "ponderada" de la respuesta.
- Además, en lugar de pedirle al modelo que simplemente proporcione una determinación de Verdadero o Falso, el modelo puede proporcionar una puntuación de confianza (1-10) de qué tan seguro está al responder la pregunta.
- La probabilidad ponderada se calcula multiplicando: Puntuación de confianza*Probabilidad de dar una estimación ponderada mejor de la confianza para responder la pregunta.
- La probabilidad ponderada se puede utilizar como una puntuación de confianza mejor calibrada para la respuesta del modelo.
Para devolver múltiples probabilidades de registro, establezca LogProbabilitiesPerToken en 5 (máximo actual de Azure OpenAI, al momento de escribir este artículo):
chatCompletionOptions.Temperature = 0.3f; // Higher Temperature setting will use tokens with much lower probability
chatCompletionOptions.IncludeLogProbabilities = true;
// For the Confidence Score, we want to investigate 5 of the top log probabilities (PMF)
chatCompletionOptions.TopLogProbabilityCount = 5;
Salida de ejemplo:
A continuación se muestra un ejemplo de una distribución de probabilidad de tokens cuando se devuelven 5 tokens LogProbs con sus respectivas probabilidades. En el histograma siguiente, "Puntuación de confianza: 1" tiene una probabilidad del 42,3%; lo que significa que el modelo cree que tiene un puntaje de confianza muy bajo = 1 para responder la pregunta y esa probabilidad baja es del 42,3%. Si simplemente selecciona el puntaje de confianza más alto que arrojó el modelo, es posible que le falte mucha otra información con los otros tokens (token número 2 - 5). En este escenario, hay otro ~57% de información de que otras probabilidades simbólicas se pueden usar para calcular una puntuación de confianza "ponderada", que calibra la puntuación de confianza de 1 -> 2,3.
4) Intervalo de puntuación de confianza del 95 %: utilice la distribución de probabilidades para calcular un intervalo de confianza del 95 % (rango) de respuestas plausibles.
- Los ejemplos anteriores muestran una estimación de un solo punto de la puntuación de confianza. Esto puede resultar engañoso ya que el modelo puede tener múltiples interpretaciones de la respuesta.
- Azure OpenAI LogProbs puede devolver una distribución de función de masa de probabilidad (PMF) de hasta los cinco tokens siguientes, incluidas sus probabilidades.
- Este cálculo utiliza varios LogProbs para determinar el "intervalo de confianza" de la respuesta.
- El intervalo de confianza se calcula iniciando múltiples llamadas (10) al modelo (usando el mismo mensaje) y calculando el intervalo de confianza del 95% de las puntuaciones de confianza.
- El intervalo de confianza se puede utilizar para comprender el rango de posibilidades, donde el 95% de los resultados estarán dentro de este rango cuando se repite la misma pregunta.
- ¿Por qué llamarías al modelo 10x? ¿No es excesivo? Para decisiones y razonamientos de alto riesgo (comprar una casa o un automóvil, decidirse por un título de 4 años), esas pocas llamadas adicionales bien valen los pocos centavos y el tiempo extra para obtener un rango de error adecuado.
Salida de ejemplo:
Consideraciones avanzadas adicionales (ejecute el proyecto de consola EjemploConfidenceIntervalSimulation)
Este repositorio no abordó la calibración de la puntuación de confianza del modelo ni la calibración de los LogProbs de probabilidad del modelo. Debido a que los LLM son esencialmente redes neuronales, es posible no calibrarlos para tareas o dominios específicos. Básicamente, cuando el LLM dice que tiene una confianza de 8/10 o determina una probabilidad del 80%, el modelo debe ser correcto aproximadamente el 80% de las veces (dentro de la tasa de error).
- Un modelo que respondió 100 preguntas con una puntuación de confianza del 80% debería acertar unas 80 veces. Esta sería la calibración ideal.
- Nota: Existe una tasa de error incluso si el modelo está perfectamente calibrado en torno al 80%. En el caso de 100 preguntas, el 95% de las veces esperamos que el rango esté entre 72 y 88 preguntas correctas (+/- 8 preguntas alrededor del promedio esperado de 80). ¿Por qué informar un nivel de confianza del 95% y no del 100%? Informar un nivel de confianza del 100% no tiene sentido ya que el rango de confianza del 100% va de 0 a 100 respuestas correctas. Aunque todo el rango de probabilidades es inviable, todavía existe una posibilidad muy minúscula de responder 0 o 100 preguntas. Un nivel de confianza del 95% proporciona un rango realista de resultados plausibles y si ve resultados fuera de este rango, es posible que esté sucediendo algo que "vale la pena investigar".
- Un modelo que respondiera 100 preguntas con una puntuación de confianza del 80% y solo acertara 50 veces sería extremadamente confiado. Esto está muy fuera del rango de error esperado.
- Nota: Las estadísticas o una simulación pueden demostrar que la probabilidad de obtener solo 50 respuestas correctas si el modelo afirma que tiene un 80 % de confianza es cercana al 0,00 %. No es imposible, pero si esto ocurre en un escenario de producción, el modelo está claramente descalibrado y tiene un exceso de confianza.
- Un modelo que respondiera 100 preguntas con una puntuación de confianza del 80% y acertara 90 veces tendría falta de confianza. Esto está fuera del rango de error esperado.
- Nota: Las estadísticas o una simulación pueden demostrar que un modelo que tiene un 80 % de confianza, pero que en realidad es correcto más de 90 veces, solo ocurriría el 0,00233 (0,233 %) de las veces.
Simulación estadística que muestra 10.000.000 de simulaciones y los rangos esperados para 100 preguntas 80% de calibración:
Estas técnicas de calibración se aplican a escenarios del mundo real. Consideremos Mainifold Markets (https://manifold.markets/), donde los súper pronosticadores humanos apuestan por la probabilidad de eventos. ¡La sabiduría colectiva de estos súper pronosticadores humanos está altamente calibrada para predecir eventos del mundo real!
Ejemplo de calibración en un entorno de pronóstico real de Manifold Markets de miles de pronósticos:
El tema de la calibración no es nuevo y ha sido estudiado en la teoría de la decisión y el aprendizaje automático. Puede aplicar técnicas de inteligencia de decisiones (ciencia cognitiva) y aprendizaje automático para calibrar aún más el rendimiento del modelo.
- Calibrando Chat GPT por su exceso de confianza: https://hubbardresearch.com/chat-gpt-ai-calibration/
- Ejemplo de calibración de pronosticadores de Manifold Markets: https://manifold.markets/calibration
- Calibración de un evaluador basado en LLM: https://arxiv.org/pdf/2309.13308.pdf