Примеры вероятностей журнала Azure OpenAI (LogProbs)
Консольное приложение .NET, демонстрирующее четыре примера использования Azure OpenAI LogProbs, которые могут быть полезны для получения качественной информации:
- Вероятность первого токена — вычисляет вероятность истинного или ложного значения, возвращает максимальную вероятность того, что модель (LLM) имеет достаточно информации для ответа на вопрос в подсказке.
- Вероятность первого токена [с оценками Брайера] — вероятность «истина» или «ложь», возвращает максимальную вероятность того, что модель (LLM) имеет достаточно информации для ответа на вопрос в подсказке. Вычисляет индивидуальные и общие средние баллы Брайера для измерения точности вероятностного прогнозирования модели (LLM).
- Взвешенная вероятность оценки уверенности — возвращает оценку уверенности в себе в диапазоне от 1 до 10, которая взвешивается на основе распределения вероятности (5 верхних логарифмических вероятностей) для получения улучшенной (взвешенной) оценки оценки уверенности для ответа на вопрос.
- Доверительный интервал — рассчитывается на основе предварительного моделирования нескольких вызовов модели. Это обеспечивает 95% доверительный интервал (диапазон) правдоподобных оценок достоверности. Это идеально, когда вам нужно понять вероятный диапазон возможностей, которые интерпретирует модель, а не одноточечную оценку.
Начиная
Требования
- Установлен пакет SDK для .NET 8.x.
- Доступ к API Azure OpenAI: (доступ OpenAI также будет работать) либо развернутый GPT3.5, GPT-4T, GPT-4o, GPT-4o-mini и ключ API.
- Visual Studio 2022(+) при отладке решения с помощью IDE.
Клонировать репозиторий
git clone https://github.com/bartczernicki/AzureOpenAILogProbs.git
Добавьте это в Secrets.json (щелкните правой кнопкой мыши по проекту VS -> Управление секретами пользователя) и запустите консольное приложение.
{
"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/"
}
}
Команды сборки и запуска (вы также можете выполнять сборку или отладку из Visual Studio 2022+)
Основная информация о настройке решения
В этой настройке LLM будут предоставлены избранные абзацы из статьи Википедии об истории бейсбольной команды New York Mets. Полную статью можно найти здесь: https://en.wikipedia.org/wiki/New_York_Mets. Это контекст (основная информация), который всегда будет предоставляться в каждом приглашении.
Кроме того, предусмотрено 20 пар вопросов и ответов. Каждый элемент в списке содержит вопрос о статье Мец в Википедии в сочетании с человеческой оценкой «Верно/Неверно», если в предоставленной статье Википедии достаточно информации для ответа на вопрос. Каждый вопрос будет отправлен в LLM, а затем LLM оценит, достаточно ли у него информации для ответа на вопрос. Этот ответ будет сопоставлен с человеческой оценкой (логической истиной). Два примера из списка из 20 вопросов:
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? " } ,
Возможность проверки вероятностей журнала токенов отключена по умолчанию. Чтобы включить эту функцию, для свойства IncludeLogProbabilities должно быть установлено значение true. Это не потребует дополнительных токенов и не приведет к увеличению затрат на вызовы API. Однако это очень немного увеличивает полезную нагрузку возвращаемого объекта JSON. Например, при использовании новой библиотеки OpenAI .NET она предоставляется как свойство класса ChatCompletionOptions.
chatCompletionOptions . IncludeLogProbabilities = true ;
В библиотеку .NET включена возможность контролировать количество вероятностей журнала, возвращаемых при каждом вызове API. Это предоставляет массив/список токенов с каждой соответствующей вероятностью. В статистике это известно как функция массы вероятности (PMF), поскольку она представляет собой дискретное распределение вероятностей. Примечание. В Azure OpenAI текущий максимум составляет 5, а в OpenAI — 10 (для большинства API). Например, при использовании новой библиотеки OpenAI .NET она предоставляется как свойство класса ChatCompletionOptions.
chatCompletionOptions . TopLogProbabilityCount = 5 ;
Решение также включает в себя возможность устанавливать температуру каждого из ожидаемых выходных данных модели (LLM). Значение по умолчанию — 0,3f (число с плавающей запятой), но его можно увеличить до 2f для большей креативности и вариативности.
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 ;
.. .
По сути, это основная настройка этого решения. Остальная часть кода — это код C#, предназначенный для подключения ввода-вывода служб и обеспечения правильного выполнения вычислений и их визуализации в консольном приложении.
Справочная информация о вероятностях журнала
Что такое LogProbs (логарифмы вероятностей)? Большинство современных LLM обрабатывают инструкции подсказки, предсказывая следующий токен, и перебирают каждый токен, пока не достигнут точки остановки (т. е. максимальной длины токена, завершения инструкций пользователя). Каждый токен, рассматриваемый для вывода, обрабатывается внутренним конвейером LLM, который выводит статистическое распределение вероятностей токенов «наилучшего соответствия» для выбора. На основе конфигураций (температура, top_p и т. д.) можно рассчитать вероятности этих токенов, а затем LLM выбирает следующий токен с «наилучшим соответствием» на основе различных конфигураций. Поскольку эти LLM носят вероятностный характер, поэтому вы можете видеть разные выходные данные токенов для одной и той же инструкции приглашения, отправленной в модель (LLM).
Ниже приведен пример сценария вопросов и ответов и связанные с ним вероятности для двух токенов (слов), которые были выбраны для ответа на вопрос: «Кто был первым президентом Соединенных Штатов?» . В приведенном ниже примере модель ответила двумя токенами «Джордж» «Вашингтон», используя вероятности токена 99,62% и 99,99% соответственно. Обратите внимание, что для выбора были доступны и другие токены, но присущие LLM знания и способности к рассуждению (благодаря обучению на большом количестве данных) уверенно увеличивали вероятность этих двух токенов: «Джордж» и «Вашингтон».
Существуют настройки, которые позволяют определить, насколько строгим и креативным является LLM. Например, вы, возможно, слышали о настройке модели (LLM) под названием «Температура» , которая существенно увеличивает вероятность выбора токенов с более низкой вероятностью.
Нужна дополнительная информация? Рекомендуемое чтение по теме Azure OpenAI LogProbs:
- Поваренная книга OpenAI — LogProbs: https://cookbook.openai.com/examples/using_logprobs
- Что такое LogProbs?: https://www.ignorance.ai/p/what-are-logprobs
Использование LogProbs для улучшения качества GenAI
Существуют различные проверенные и новые методы улучшения, которые используют многократное обращение к модели или нескольким моделям для получения ответа, заключения или решения по качеству. В настоящее время большинство способов использования LLM в производственных системах GenAI связано с заземлением (RAG) путем предоставления дополнительной контекстной информации. Модель (LLM) призвана ответить на вопрос, обосновать эту информацию и т. д. Однако при использовании плохих методов заземления это может привести к снижению качества результатов.
Azure OpenAI LogProbs — это продвинутый метод, который может помочь и использоваться для оценки достоверности (вероятности) ответа модели. Эта огромная возможность может дать системе GenAI возможность самокорректироваться или помочь пользователю/агенту достичь более качественного ответа.
Возможности LogProbs проиллюстрированы ниже на диаграмме рабочего процесса GenAI. Обратите внимание, что есть два пути (левый и правый):
- Левый путь — это традиционный путь, по которому следует большинство приложений GenAI. Вы задаете вопрос и получаете ответ от LLM. Типичный рабочий процесс слева — это то, что можно встретить в большинстве современных приложений GenAI Chat.
- Правильный путь — это «повышение качества» рабочего процесса. Параллельно можно спросить у LLM «LLM, достаточно ли у вас информации, чтобы ответить на этот вопрос и насколько вы уверены, что у вас достаточно информации?»! Обратите внимание на диаграмму ниже, что это «улучшение качества» теперь включает в себя:
- Ответ на вопрос
- Достаточно ли информации в модели для ответа на вопрос : истинная или ложная оценка модели (LLM)
- Вероятность наличия достаточной информации для ответа на вопрос — рассчитывается на основе LogProbs; который можно использовать для дополнительных статистических выводов или порогового значения решения.
Параметры обработки консоли
1) Вероятность первого токена — насколько уверенна модель ИИ (LLM) в наличии информации для ответа на вопрос
- Модель (LLM) ответит только True или False . Модель в основном классифицирует (верно или ложно), если она считает, что в предоставленных основаниях Википедии достаточно информации (правда) или недостаточно информации (ложь) для ответа на вопрос в подсказке.
- Использует Azure OpenAI LogProbs для определения вероятности появления только первого токена в ответе. Первый токен всегда будет либо True , либо False .
- Если вероятность высока, модель (LLM) очень уверена в своем ответе (верно или неверно).
- Если вероятность низкая, модель (LLM) не очень уверена в своем ответе (правда или ложь).
- Вероятность можно использовать в качестве порога принятия решения о классификации, определяющего, достаточно ли в модели информации (контекст RAG) для ответа на вопрос. Например, можно предоставить пользователю проверенный сигнал о том, что ответ прошел вторую проверку, когда вероятность, выдаваемая моделью (LLM), превышает 90%.
Пример вывода:
Обратите внимание, что изображение выше иллюстрирует выходные данные «Истинно» и «Ложно» от LLM, а также вероятность этого вывода «Истина» или «Ложь». Поскольку «Истина» или «Ложь» являются первыми и единственными токенами в ответе, можно использовать вероятность первого токена (LogProb). С этим подходом есть несколько проблем:
- Исследуются только первый токен и вероятность. Глядя на приведенный выше пример Джорджа Вашингтона, обратите внимание, что существуют различные токены, которые могут быть выведены как компоненты или похожи на «Джордж Вашингтон». То же самое применимо даже при просмотре только токенов «Правда» или «Ложь». Могут быть такие токены, как «TRU», «true», «tr», и все они должны быть сгруппированы вместе, чтобы обозначить коллективную вероятность «True». Примеры ниже иллюстрируют это.
- При многократном выполнении примеров иногда может возникнуть несоответствие между первым токеном и верхним LogProb. Это связано с тем, что сервис OpenAI может выбирать токены с более низкой вероятностью, особенно с такими настройками, как более высокая температура. Это простое исправление. По сути, LogProbs позволяет разработчику переопределить выбранный первый токен и выбрать тот, который имеет наибольшую вероятность.
2) Вероятность первого токена [с оценками Брайера] – вычисление баллов Брайера для вероятности первого токена
- В этом примере показано, как измерить точность прогнозирования и прогнозирования модели.
- То же, что и вероятность первого токена, но также вычисляет оценку Брайера для каждого вероятностного ответа.
- Оценки Брайера (и аналогичные методы в машинном обучении и статистике) используются для измерения точности вероятностных прогнозов.
- Чем ниже показатель Брайера, тем лучше модель прогнозирует вероятность ответа. Например, если есть две модели, и обе они предсказывают правильное событие, но вероятность первой модели составляла 65%, а вероятность второй модели — 95%, оценка Брайера для второй модели будет ниже. Это связано с тем, что если будущее событие произойдет, ему автоматически присваивается вероятность 100%. 95% ближе к 100%. Дополнительная информация о баллах Брайера: https://en.wikipedia.org/wiki/Brier_score.
- Оценки Брайера могут объединять несколько отдельных прогнозов и объединять их в одну оценку. В этом примере выводится таблица оценок Брайера для каждого вопроса и средняя оценка Брайера для всех вопросов.
- Усреднение оценок Брайера может многое сказать нам об общей точности работы вероятностной системы или вероятностной модели. Средний балл Брайера 0,1 или ниже считается отличным, 0,1–0,2 — превосходным, 0,2–0,3 — адекватным, 0,3–0,35 — приемлемым, и, наконец, средний балл Брайера выше 0,35 указывает на плохую эффективность прогнозирования.
Оценки Брайера будут варьироваться в зависимости от возможностей модели, подсказки и контекста вопроса. Сохраняя подсказку и контекст одинаковыми, можно сравнить общую точность модели. Обратите внимание на оценки Брайера ниже при сравнении моделей GPT-4o и GPT-4o-mini. Модель GPT-4o-mini имеет более низкий показатель Брайера, что означает, что она более точно прогнозирует вероятность правильного ответа. Фактически, GPT-4o-mini правильно дал окончательный ответ на 18 из 20 вопросов, тогда как модель GPT-4o соответствовала ожидаемому ответу человека (если в контексте достаточно информации для ответа на вопрос) 17 из 20 вопросы. Обратите внимание, что средний балл Брайера для GPT-4o-mini составляет 0,083 (ниже 0,1), что указывает на превосходную прогностическую эффективность. Таким образом, оценка Брайера модели GPT-4o-mini ниже (лучше). Это эмпирически показывает, что он более точно определяет вероятность того, что у него будет достаточно информации для ответа на заданный наводящий вопрос.
Пример вывода:
3) Взвешенная вероятность оценки уверенности. Модель предоставляет оценку уверенности в себе, а затем оценивает вероятность оценки уверенности.
- В предыдущих примерах использовалась только первая вероятность токена. Тот жетон, который имел наибольшую вероятность, использовался в качестве определения истинности или ложности.
- Azure OpenAI LogProbs может возвращать распределение функции вероятности (PMF) до следующих 5 токенов, включая их вероятности.
- В этом расчете используется несколько LogProbs для определения «взвешенной» вероятности ответа.
- Кроме того, вместо того, чтобы просить модель просто дать определение «Правда» или «Ложь», модель может предоставить оценку уверенности (1–10), насколько она уверена в ответе на вопрос.
- Взвешенная вероятность рассчитывается путем умножения: Показатель уверенности*Вероятность, чтобы дать более взвешенную оценку уверенности в ответе на вопрос.
- Взвешенную вероятность можно использовать в качестве более точного показателя достоверности ответа модели.
Чтобы вернуть несколько вероятностей журнала, установите для LogProbabilitiesPerToken значение 5 (текущий максимум Azure OpenAI на момент написания):
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;
Пример вывода:
Ниже приведен пример распределения вероятностей токенов, когда 5 токенов LogProbs возвращаются с соответствующими вероятностями. На гистограмме ниже вероятность «Показатель уверенности: 1» составляет 42,3%; это означает, что модель считает, что у нее очень низкий показатель уверенности = 1 для ответа на вопрос, и этот низкий шанс составляет 42,3%. Если вы просто выберете тот самый высокий показатель достоверности, который вернула модель, вы можете упустить много другой информации с другими токенами (токены номер 2–5). В этом сценарии имеется еще около 57% информации о том, что вероятности других токенов могут быть использованы для расчета «взвешенного» показателя уверенности, который калибрует показатель уверенности от 1 до 2,3.
4) 95% доверительный интервал. Используйте распределение вероятностей для расчета 95% доверительного интервала (диапазона) правдоподобных ответов.
- В предыдущих примерах показана одноточечная оценка показателя достоверности. Это может ввести в заблуждение, поскольку модель может иметь несколько интерпретаций ответа.
- Azure OpenAI LogProbs может возвращать распределение функции вероятности (PMF) до следующих 5 токенов, включая их вероятности.
- В этом расчете используется несколько LogProbs для определения «доверительного интервала» ответа.
- Доверительный интервал рассчитывается путем начальной загрузки нескольких вызовов (10) к модели (с использованием одного и того же приглашения) и расчета 95% доверительного интервала оценок достоверности.
- Доверительный интервал можно использовать для понимания диапазона возможностей, при котором 95% результатов попадают в этот диапазон при повторении одного и того же вопроса.
- Почему вы назвали модель 10х, не слишком ли это? Для принятия важных решений и рассуждений (покупка дома/машины, решение о четырехлетнем обучении) эти дополнительные звонки стоят нескольких центов и дополнительного времени, чтобы получить правильный диапазон ошибок.
Пример вывода:
Дополнительные соображения (запустите консольный проект exampleConfidenceIntervalSimulation)
В этом репозитории не затрагивались ни калибровка показателя достоверности модели, ни калибровка вероятности модели LogProbs. Поскольку LLM по сути представляют собой нейронные сети, их можно не калибровать для конкретных задач или областей. По сути, когда LLM говорит, что она достоверна 8/10 или определяет вероятность 80%, модель должна быть правильной примерно в 80% случаев (в пределах частоты ошибок).
- Модель, которая ответила на 100 вопросов с показателем достоверности 80%, должна быть правильной примерно 80 раз. Это была бы идеальная калибровка.
- Примечание. Уровень ошибок существует, даже если модель идеально откалибрована, и составляет около 80%. В случае 100 вопросов в 95 % случаев мы ожидаем, что диапазон будет составлять от 72 до 88 правильных вопросов (+/- 8 вопросов от ожидаемого среднего значения в 80). Зачем сообщать об уровне достоверности 95%, а не 100%? Сообщать об уровне достоверности 100 % не имеет смысла, поскольку диапазон достоверности 100 % составляет от 0 до 100 правильных ответов. Несмотря на то, что весь диапазон вероятностей недостижим, все же существует очень малая вероятность ответить на 0 или 100 вопросов. Уровень достоверности 95 % обеспечивает реалистичный диапазон правдоподобных результатов, и если вы видите результаты за пределами этого диапазона, возможно, происходит что-то, что «стоит исследовать».
- Модель, которая ответила на 100 вопросов с показателем достоверности 80% и оказалась верной только 50 раз, была бы чрезвычайно самоуверенной. Это выходит далеко за пределы ожидаемого диапазона ошибок.
- Примечание. Статистика или моделирование могут продемонстрировать вероятность получения только 50 правильных ответов, если модель утверждает, что ее достоверность составляет 80 %, что составляет около 0,00 %! Это не невозможно, но если это происходит в производственном сценарии, модель явно не откалибрована и очень самоуверенна.
- Модель, которая ответила на 100 вопросов с показателем достоверности 80% и оказалась верной 90 раз, будет недостаточно уверенной. Это выходит за пределы ожидаемого диапазона ошибок.
- Примечание. Статистика или моделирование могут продемонстрировать, что модель, достоверность которой составляет 80 %, но на самом деле верна более 90 раз, будет реализовываться только в 0,00233 (0,233 %) случаях.
Статистическое моделирование. Показаны 10 000 000 моделирования и ожидаемые диапазоны для 100 вопросов. Калибровка 80 %:
Эти методы калибровки применимы к реальным сценариям. Рассмотрим рынки Mainifold (https://manifold.markets/), где суперпрогнозисты делают ставки на вероятность событий. Коллективная мудрость этих людей-суперпрогнозистов отлично подходит для предсказания реальных событий!
Пример калибровки в реальной среде прогнозирования на различных рынках с тысячами прогнозов:
Тема калибровки не нова и изучалась в теории принятия решений и машинном обучении. Для дальнейшей калибровки производительности модели вы можете применять как методы анализа принятия решений (когнитивная наука), так и методы машинного обучения.
- Калибровка GPT чата на предмет его самоуверенности: https://hubbardresearch.com/chat-gpt-ai-калибровка/
- Пример калибровки прогнозистов Manifold Markets: https://manifold.markets/калибровка
- Калибровка оценщика на основе LLM: https://arxiv.org/pdf/2309.13308.pdf