Exemplos de probabilidades de log do Azure OpenAI (LogProbs)
Aplicativo de console .NET que demonstra quatro exemplos de como o Azure OpenAI LogProbs pode ser útil para recuperação de informações de qualidade:
- Probabilidade do primeiro token - calcula a probabilidade verdadeira ou falsa, retorna a probabilidade superior se o modelo (LLM) tiver informações suficientes para responder à pergunta no prompt.
- Probabilidade do primeiro token [com pontuações Brier] - Probabilidade verdadeira ou falsa, retorna a probabilidade superior se o modelo (LLM) tiver informações suficientes para responder à pergunta no prompt. Calcula pontuações Brier individuais e uma média total para medir a precisão da previsão probabilística do modelo (LLM).
- Pontuação de probabilidade ponderada de confiança - Retorna uma pontuação de autoconfiança entre 1 e 10 que é ponderada a partir de uma distribuição de probabilidade (5 principais probabilidades logarítmicas) para fornecer uma estimativa de pontuação de confiança aprimorada (ponderada) para responder a uma pergunta.
- Intervalo de confiança - Calculado a partir da simulação bootstrap de múltiplas chamadas ao modelo. Isso fornece um intervalo de confiança de 95% (intervalo) de pontuações de confiança plausíveis. Isso é ideal quando você precisa entender uma gama plausível de possibilidades que o modelo interpreta, em vez de uma estimativa pontual única.
Começando
Requisitos
- SDK do .NET 8.x instalado
- Acesso à API Azure OpenAI: (O OpenAI Access também funcionará) GPT3.5, GPT-4T, GPT-4o, GPT-4o-mini implantado e chave de API
- Visual Studio 2022(+) se estiver depurando a solução com um IDE
Clonar o repositório
git clone https://github.com/bartczernicki/AzureOpenAILogProbs.git
Adicione isto ao Secrets.json (clique com o botão direito em Projeto VS -> Gerenciar segredos do usuário) e execute o aplicativo de console
{
"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 compilação e execução (você também pode compilar ou depurar no Visual Studio 2022+)
Informações importantes sobre a configuração da solução
Nesta configuração, o LLM receberá parágrafos selecionados de um artigo da Wikipedia sobre a história do time de beisebol New York Mets. O artigo completo pode ser localizado aqui: https://en.wikipedia.org/wiki/New_York_Mets. Este é o contexto (informações básicas) que sempre será fornecido em cada prompt.
Além disso, são fornecidos 20 pares de perguntas e respostas. Cada item da lista tem uma pergunta sobre o artigo da Wikipedia do Mets emparelhado com uma avaliação humana Verdadeiro/Falso, se houver informações suficientes no artigo da Wikipedia fornecido para responder à pergunta. Cada pergunta será enviada ao LLM e então o LLM avaliará se possui informações suficientes para responder à pergunta. Essa resposta será comparada à avaliação humana (verdade lógica). Dois exemplos da lista de 20 perguntas:
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? " } ,
A capacidade de inspecionar as probabilidades do log de token está desativada por padrão. Para habilitar esse recurso, a propriedade IncludeLogProbabilities deve ser definida como true. Isso não custa nenhum token extra nem faz com que as chamadas de API custem mais dinheiro. No entanto, isso aumenta ligeiramente a carga útil do retorno do objeto JSON. Por exemplo, usando a nova biblioteca OpenAI .NET ela é exposta como uma propriedade na classe ChatCompletionOptions.
chatCompletionOptions . IncludeLogProbabilities = true ;
Incluída na biblioteca .NET está a capacidade de controlar o número de probabilidades de log retornadas com cada chamada de API. Isso fornece uma matriz/lista de tokens com cada respectiva probabilidade. Nas estatísticas, isso é conhecido como Função de Massa de Probabilidade (PMF), pois é uma distribuição discreta de probabilidades. Observação: no Azure OpenAI, isso tem um máximo atual de 5 e no OpenAI 10 (para a maioria das APIs). Por exemplo, usando a nova biblioteca OpenAI .NET ela é exposta como uma propriedade na classe ChatCompletionOptions.
chatCompletionOptions . TopLogProbabilityCount = 5 ;
A solução também inclui a capacidade de definir a temperatura de cada uma das saídas esperadas do modelo (LLM). O padrão é 0,3f (número de ponto flutuante), mas pode ser aumentado para 2f para maior criatividade e variação.
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 ;
.. .
Essa é essencialmente a configuração central desta solução. O restante do código é C# para conectar a entrada/saída dos serviços e garantir que os cálculos sejam executados e visualizados corretamente no aplicativo de console.
Informações básicas sobre probabilidades de log
O que são LogProbs (Probabilidades de Log)? A maioria dos LLMs atuais processam instruções de prompt prevendo o próximo token e iterando através de cada token até atingirem um ponto de parada (ou seja, comprimento máximo do token, completando as instruções do usuário). Cada token considerado para saída é processado por meio de um pipeline LLM interno que gera uma distribuição de probabilidade estatística de tokens de "melhor correspondência" para seleção. Com base nas configurações (temperatura, top_p etc.), essas probabilidades de token podem ser calculadas e então o LLM seleciona o próximo token de "melhor correspondência" com base nas diferentes configurações. Como esses LLMs são de natureza probabilística, é por isso que você pode ver saídas de tokens diferentes para a mesma instrução de prompt enviada ao modelo (LLM).
Abaixo está um exemplo de um cenário de perguntas e respostas e as probabilidades associadas para os dois tokens (palavras) que foram selecionados para responder à pergunta: “Quem foi o primeiro presidente dos Estados Unidos?” . No exemplo abaixo o modelo respondeu com dois tokens “George” “Washington”, utilizando as probabilidades do token de 99,62% e 99,99% respectivamente. Observe que havia outros tokens disponíveis para seleção, mas o conhecimento inerente e a capacidade de raciocínio do LLM (por ser treinado em uma grande quantidade de dados) aumentaram com segurança a probabilidade desses dois tokens: "George" e "Washington".
Existem configurações que podem calibrar o quão rigoroso ou criativo é um LLM. Por exemplo, você pode ter ouvido falar de uma configuração de modelo (LLM) chamada Temperatura , que essencialmente aumenta a chance de seleção de tokens de menor probabilidade.
Precisa de mais informações? Leitura recomendada no plano de fundo do Azure OpenAI LogProbs:
- Livro de receitas OpenAI - LogProbs: https://cookbook.openai.com/examples/using_logprobs
- O que são LogProbs?: https://www.ignorance.ai/p/what-are-logprobs
Usando LogProbs para melhorar a qualidade GenAI
Existem várias técnicas de melhoria comprovadas e novas que utilizam múltiplas chamadas para um modelo ou vários modelos para chegar a uma resposta, conclusão ou decisão de qualidade. Atualmente, a maioria das maneiras pelas quais os LLMs são usados em sistemas de produção GenAI é com aterramento (RAG), fornecendo informações contextuais adicionais. O modelo (LLM) é instruído a responder a uma pergunta, raciocinar sobre essa informação, etc. No entanto, com técnicas de aterramento inadequadas, isso pode resultar em resultados de qualidade inferior.
Azure OpenAI LogProbs é uma técnica avançada que pode ajudar e ser utilizada para avaliar a confiança (probabilidade) da resposta do modelo. Essa tremenda capacidade pode capacitar o sistema GenAI para se autocorrigir ou orientar o usuário/agente para chegar a uma resposta de melhor qualidade.
O poder do LogProbs é ilustrado abaixo com o diagrama do fluxo de trabalho GenAI. Observe que existem dois caminhos (esquerda e direita):
- O caminho da esquerda é o caminho tradicional que a maioria dos aplicativos GenAI segue. Você faz uma pergunta e recebe uma resposta de um LLM. Este fluxo de trabalho típico à esquerda é o que você encontrará na maioria dos aplicativos GenAI Chat atuais.
- O caminho certo é uma “melhoria de qualidade” no fluxo de trabalho. Paralelamente, pode-se perguntar ao LLM “LLM, você tem informações suficientes para responder a esta pergunta e quão certo você tem informações suficientes?”! O aviso no diagrama abaixo com esta "melhoria de qualidade" agora inclui:
- Resposta à pergunta
- O modelo possui informações suficientes para responder à pergunta - estimativa verdadeira ou falsa do modelo (LLM)
- Probabilidade de ter informações suficientes para responder à pergunta - Calculada a partir de LogProbs; que pode ser usado para inferência estatística adicional ou limite de decisão
Opções de processamento do console
1) Probabilidade do primeiro token - Quão confiante está o modelo AI (LLM) com as informações para responder à pergunta
- O modelo (LLM) responderá apenas com True ou False . O modelo basicamente classificará (Verdadeiro ou Falso) se achar que há informações suficientes (Verdadeiro) ou informações insuficientes (Falso) nos fundamentos da Wikipedia fornecidos para responder à pergunta no prompt.
- Usa o Azure OpenAI LogProbs para determinar a probabilidade de apenas o primeiro token na resposta. O primeiro token sempre será True ou False .
- Se a probabilidade for alta, o modelo (LLM) está muito confiante em sua própria resposta (Verdadeiro ou Falso)
- Se a probabilidade for baixa, o modelo (LLM) não está muito confiante na sua própria resposta (Verdadeiro ou Falso)
- A probabilidade pode ser usada como um limite de decisão de classificação para saber se o modelo possui informações suficientes (contexto RAG) para responder à pergunta. Por exemplo, pode-se fornecer à experiência do usuário um sinal verificado de que a resposta passou por uma segunda validação quando a probabilidade emitida pelo modelo (LLM) for superior a 90%.
Exemplo de saída:
Observe que a imagem acima ilustra a saída Verdadeiro e Falso do LLM, bem como a probabilidade dessa saída Verdadeiro ou Falso. Como "True" ou "False" são os primeiros e únicos tokens na resposta, a probabilidade do primeiro token (LogProb) pode ser usada. Existem alguns problemas com essa abordagem:
- Apenas o primeiro token e a probabilidade estão sendo investigados. Olhando para o exemplo de George Washington acima, observe que existem vários tokens que podem ser gerados e que podem ser componentes ou ser semelhantes a "George Washington". O mesmo se aplica mesmo quando se olha apenas para tokens "Verdadeiros" ou "Falsos". Pode haver tokens como "TRU", "true", "tr" e todos eles devem ser agrupados para significar uma probabilidade coletiva de "True". Os exemplos abaixo ilustram isso.
- Executando os exemplos muitas vezes, às vezes parecerá haver uma discrepância entre o primeiro token e o LogProb superior. Isso ocorre porque o serviço OpenAI pode selecionar tokens com probabilidades mais baixas, especialmente com configurações como temperatura mais alta. Esta é uma solução simples, basicamente LogProbs permite que o desenvolvedor substitua o primeiro token selecionado e selecione aquele com maior probabilidade.
2) Probabilidade do primeiro token [com pontuações Brier] - Cálculo das pontuações Brier da probabilidade do primeiro token
- Este exemplo mostra como medir a previsão e a precisão preditiva do modelo.
- Igual à Probabilidade do Primeiro Token, mas também calcula a Pontuação Brier para cada uma das respostas de probabilidade.
- As pontuações de Brier (e métodos semelhantes em aprendizado de máquina e estatística) são usadas para medir o desempenho de precisão de previsões probabilísticas.
- Quanto mais baixo for o Brier Score, melhor será o modelo na previsão da probabilidade da resposta. Por exemplo, se houver dois modelos e ambos preverem o evento correto, mas a probabilidade do primeiro modelo for de 65% e a probabilidade do segundo modelo for de 95%, a pontuação de Brier para o segundo modelo será menor. Isso ocorre porque se o evento futuro ocorrer, é automaticamente dada uma probabilidade de 100%. 95% está mais próximo de 100%. Mais informações sobre as pontuações de Brier: https://en.wikipedia.org/wiki/Brier_score
- As pontuações Brier podem agregar várias previsões individuais e ser agregadas em uma única pontuação. Este exemplo gera uma tabela de pontuações de Brier para cada uma das perguntas e a pontuação de Brier média para todas as perguntas.
- A média das pontuações de Brier pode nos dizer muito sobre a precisão geral do desempenho do sistema probabilístico ou de um modelo probabilístico. Pontuações médias de Brier de 0,1 ou menos são consideradas excelentes, 0,1 - 0,2 são superiores, 0,2 - 0,3 são adequadas e 0,3-0,35 são aceitáveis e, finalmente, pontuações médias de Brier acima de 0,35 indicam desempenho de previsão ruim.
As pontuações de Brier variarão dependendo dos recursos do modelo, do prompt e do contexto da pergunta. Ao manter o prompt e o contexto iguais, é possível comparar o desempenho geral da precisão do modelo. Observe as pontuações de Brier abaixo comparando os modelos GPT-4o e GPT-4o-mini. O modelo GPT-4o-mini tem uma pontuação de Brier mais baixa, o que significa que é mais preciso na previsão da probabilidade de resposta correta. Na verdade, o GPT-4o-mini chegou corretamente à resposta final em 18 das 20 perguntas, enquanto o modelo GPT-4o correspondeu à resposta humana esperada (se houver informações suficientes no contexto para responder à pergunta) 17 de 20 questões. Observe que a pontuação média de Brier do GPT-4o-mini é 0,083 (abaixo de 0,1), o que indica excelente desempenho preditivo. Portanto, a pontuação Brier do modelo GPT-4o-mini é menor (melhor). Isso mostra empiricamente que é mais preciso quantificar a probabilidade de ter informações suficientes para responder à pergunta imediata fornecida.
Exemplo de saída:
3) Pontuação de probabilidade ponderada de confiança - o modelo fornece uma pontuação de autoconfiança e, em seguida, avalia a probabilidade da pontuação de confiança
- Nos exemplos anteriores, apenas a primeira probabilidade simbólica foi usada. Qualquer token que tivesse a maior probabilidade foi usado como determinação de Verdadeiro ou Falso.
- O Azure OpenAI LogProbs pode retornar uma distribuição de função de massa de probabilidade (PMF) de até os próximos 5 tokens, incluindo suas probabilidades.
- Este cálculo usa vários LogProbs para determinar a probabilidade "ponderada" da resposta.
- Além disso, em vez de pedir ao modelo apenas que forneça uma determinação de Verdadeiro ou Falso, o modelo pode fornecer uma pontuação de confiança (1-10) de quão confiante está em responder à pergunta.
- A probabilidade ponderada é calculada pela multiplicação: Pontuação de Confiança*Probabilidade para fornecer uma estimativa melhor ponderada da confiança para responder à pergunta.
- A probabilidade ponderada pode ser usada como uma pontuação de confiança melhor calibrada para a resposta do modelo.
Para retornar múltiplas probabilidades de log, defina LogProbabilitiesPerToken como 5 (máximo atual do Azure OpenAI, no momento desta redação):
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;
Exemplo de saída:
Abaixo está um exemplo de distribuição de probabilidade de token quando 5 tokens LogProbs são retornados com suas respectivas probabilidades. No histograma abaixo, “Pontuação de Confiança: 1” tem probabilidade de 42,3%; o que significa que o modelo pensa que tem um Índice de Confiança = 1 muito baixo para responder à pergunta e que a baixa chance é de 42,3%. Se você apenas selecionar a pontuação de confiança mais alta retornada pelo modelo, poderá perder muitas outras informações com os outros tokens (token número 2 a 5). Nesse cenário, há outros ~57% de informações de que outras probabilidades de token podem ser usadas para calcular uma pontuação de confiança "ponderada", que calibra a pontuação de confiança de 1 -> 2,3.
4) Intervalo de pontuação de confiança de 95% - Use a distribuição de probabilidades para calcular um intervalo de confiança de 95% (intervalo) de respostas plausíveis
- Os exemplos anteriores mostram uma estimativa de ponto único da pontuação de confiança. Isto pode ser enganoso, pois o modelo pode ter múltiplas interpretações da resposta.
- O Azure OpenAI LogProbs pode retornar uma distribuição de função de massa de probabilidade (PMF) de até os próximos 5 tokens, incluindo suas probabilidades.
- Este cálculo usa vários LogProbs para determinar o "intervalo de confiança" da resposta.
- O intervalo de confiança é calculado inicializando múltiplas chamadas (10) para o modelo (usando o mesmo prompt) e calculando o intervalo de confiança de 95% das pontuações de confiança.
- O intervalo de confiança pode ser utilizado para compreender o leque de possibilidades, onde 95% dos resultados ficarão dentro deste intervalo à medida que a mesma pergunta é repetida.
- Por que você chamaria o modelo de 10x, isso não é um exagero? Para decisões e raciocínios de alto risco (comprar uma casa/carro, decidir sobre um diploma de 4 anos), essas poucas ligações extras valem os poucos centavos e o tempo extra para obter uma faixa de erro adequada.
Exemplo de saída:
Considerações avançadas adicionais (execute o projeto do console ExampleConfidenceIntervalSimulation)
Este repo não abordou a calibração da pontuação de confiança do modelo nem a calibração dos LogProbs de probabilidade do modelo. Como os LLMs são essencialmente redes neurais, eles podem ser descalibrados para tarefas ou domínios específicos. Basicamente, quando o LLM diz que tem 8/10 de confiança ou determina uma probabilidade de 80%, o modelo deve estar correto cerca de 80% das vezes (dentro da taxa de erro).
- Um modelo que respondeu 100 questões com um índice de confiança de 80% deveria acertar cerca de 80 vezes. Esta seria a calibração ideal.
- Nota: Existe uma taxa de erro mesmo que o modelo esteja perfeitamente calibrado em torno de 80%. No caso de 100 questões, 95% das vezes esperamos que o intervalo esteja entre 72 e 88 questões corretas (+/- 8 questões em torno da média esperada de 80). Por que reportar um nível de confiança de 95% e não 100%? Relatar um nível de confiança de 100% não faz sentido, pois o intervalo de confiança de 100% varia de 0 a 100 respostas corretas. Embora toda a gama de probabilidades seja inviável, ainda há uma chance minúscula de responder 0 ou 100 perguntas. Um nível de confiança de 95% fornece uma gama realista de resultados plausíveis e se você observar resultados fora dessa faixa, algo “que vale a pena investigar” está potencialmente acontecendo.
- Um modelo que respondesse 100 perguntas com uma pontuação de confiança de 80% e acertasse apenas 50 vezes seria extremamente confiante. Isso está bem fora da faixa de erro esperada.
- Nota: As estatísticas ou uma simulação podem demonstrar que a probabilidade de obter apenas 50 respostas corretas se o modelo afirmar que está 80% confiante é próximo de 0,00%! Não é impossível, mas se isso ocorrer num cenário de produção o modelo está claramente descalibrado e muito confiante.
- Um modelo que respondesse a 100 perguntas com uma pontuação de confiança de 80% e acertasse 90 vezes seria pouco confiante. Isso está fora da faixa de erro esperada.
- Nota: As estatísticas ou uma simulação podem demonstrar que um modelo que é 80% confiável, mas que está realmente correto mais de 90 vezes, ocorreria apenas 0,00233 (0,233%) das vezes.
Simulação Estatística Mostrando 10.000.000 simulações e os intervalos esperados para 100 questões 80% de calibração:
Estas técnicas de calibração se aplicam a cenários do mundo real. Considere o Mainifold Markets (https://manifold.markets/), onde superprevisores humanos apostam na probabilidade de eventos. A sabedoria coletiva desses superprevisores humanos é altamente calibrada na previsão de eventos do mundo real!
Exemplo de calibração em um ambiente real de previsão do Manifold Markets de milhares de previsões:
O tema calibração não é novo e tem sido estudado na teoria da decisão e no aprendizado de máquina. Você pode aplicar técnicas de inteligência de decisão (ciência cognitiva) e aprendizado de máquina para calibrar ainda mais o desempenho do modelo.
- Calibrando o Chat GPT por seu excesso de confiança: https://hubbardresearch.com/chat-gpt-ai-calibration/
- Exemplo de calibração do Manifold Markets para previsores: https://manifold.markets/calibration
- Calibrando um avaliador baseado em LLM: https://arxiv.org/pdf/2309.13308.pdf