품질 정보 검색에 유용할 수 있는 Azure OpenAI LogProbs의 네 가지 예를 보여주는 .NET 콘솔 애플리케이션:
git clone https://github.com/bartczernicki/AzureOpenAILogProbs.git
{
"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/"
}
}
dotnet build
dotnet run
이 설정에서 LLM은 뉴욕 메츠 야구팀의 역사에 관한 Wikipedia 기사에서 선택된 단락을 제공받게 됩니다. 전체 기사는 https://en.wikipedia.org/wiki/New_York_Mets에서 확인할 수 있습니다. 이는 각 프롬프트에서 항상 제공되는 컨텍스트(접근 정보)입니다.
또한 20개의 질문과 답변 쌍이 제공됩니다. 목록의 각 항목에는 제공된 Wikipedia 문서에 질문에 답할 만큼 충분한 정보가 있는 경우 인적 평가 True/False와 짝을 이루는 Mets Wikipedia 문서에 대한 질문이 있습니다. 각 질문은 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? " } ,
토큰 로그 확률을 검사하는 기능은 기본적으로 꺼져 있습니다. 이 기능을 활성화하려면 includeLogProbaries 속성을 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) 모델로 전송된 동일한 프롬프트 지침에 대해 다른 토큰 출력이 표시될 수 있습니다.
다음은 "미국의 초대 대통령은 누구였나요?"라는 질문에 답하기 위해 선택된 두 개의 토큰(단어)에 대한 Q&A 시나리오 및 관련 확률의 예입니다. . 아래 예에서 모델은 각각 99.62%와 99.99%의 토큰 확률을 사용하여 두 개의 토큰 "George" "Washington"으로 응답했습니다. 선택할 수 있는 다른 토큰이 있었지만 LLM의 고유한 지식과 추론 능력(많은 양의 데이터에 대한 교육을 통해)은 "George"와 "Washington"이라는 두 토큰의 확률을 자신있게 높였습니다.
LLM이 얼마나 엄격한지 또는 창의적인지를 조정할 수 있는 설정이 있습니다. 예를 들어, 본질적으로 낮은 확률의 토큰이 선택될 가능성을 높이는 온도 라는 (LLM) 모델 설정에 대해 들어보셨을 것입니다.
더 많은 정보가 필요하세요? Azure OpenAI LogProbs 배경에 대한 권장 자료:
응답, 결론 또는 품질 결정에 도달하기 위해 모델 또는 여러 모델에 대한 다중 호출을 사용하는 다양하고 입증된 새로운 개선 기술이 있습니다. 현재 GenAI 생산 시스템에서 LLM을 사용하는 대부분의 방법은 추가 상황 정보를 제공하여 접지(RAG)하는 것입니다. (LLM) 모델은 질문, 해당 정보에 대한 이유 등에 답하도록 지시됩니다. 그러나 접지 기술이 좋지 않으면 결과 품질이 낮아질 수 있습니다.
Azure OpenAI LogProbs는 모델 응답의 신뢰도(확률)를 측정하는 데 도움이 되고 활용될 수 있는 고급 기술입니다. 이 엄청난 기능을 통해 GenAI 시스템은 자체 수정을 수행하거나 사용자/에이전트가 향상된 품질 응답에 도달하도록 안내할 수 있습니다.
LogProbs의 강력한 기능은 GenAI 워크플로 다이어그램을 통해 아래에 설명되어 있습니다. 두 가지 경로(왼쪽 및 오른쪽)가 있습니다.
예제 출력:
위 이미지는 LLM의 True 및 False 출력과 해당 True 또는 False 출력의 확률을 보여줍니다. "True" 또는 "False"는 응답의 첫 번째이자 유일한 토큰이므로 첫 번째 토큰(LogProb) 확률을 사용할 수 있습니다. 이 접근 방식에는 몇 가지 문제가 있습니다.
Brier 점수는 모델 기능, 프롬프트 및 질문의 맥락에 따라 달라집니다. 프롬프트와 컨텍스트를 동일하게 유지함으로써 전체 모델 정확도 성능을 비교할 수 있습니다. 아래에서 GPT-4o와 GPT-4o-mini 모델을 비교한 Brier 점수를 확인하세요. GPT-4o-mini 모델은 Brier 점수가 낮기 때문에 정답 응답 확률을 더 정확하게 예측할 수 있습니다. 실제로 GPT-4o-mini는 20개 질문 중 18개에 대한 최종 답변에 정확하게 도달한 반면, GPT-4o 모델은 예상되는 인간 답변과 일치했습니다(문맥에 질문에 답변할 만큼 충분한 정보가 있는 경우). 20개 중 17개 질문. GPT-4o-mini의 평균 Brier 점수는 0.083(0.1 미만)으로 이는 탁월한 예측 성능을 나타냅니다. 따라서 GPT-4o-mini 모델의 Brier 점수가 더 낮다(더 좋음). 이는 제공된 프롬프트 질문에 대답하기에 충분한 정보가 있을 확률을 정량화하는 것이 더 정확하다는 것을 경험적으로 보여줍니다.
예제 출력:
여러 로그 확률을 반환하려면 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)에 대한 많은 정보가 누락될 수 있습니다. 이 시나리오에는 신뢰 점수를 1 -> 2.3으로 보정하는 "가중치" 신뢰 점수를 계산하는 데 다른 토큰 확률을 사용할 수 있다는 또 다른 ~57%의 정보가 있습니다.
예제 출력:
이 레포에서는 모델의 신뢰도 점수 보정이나 모델 확률 LogProbs 보정에 대해서는 다루지 않았습니다. LLM은 본질적으로 신경망이므로 특정 작업이나 도메인에 대해 조정되지 않을 수 있습니다. 기본적으로 LLM이 8/10 신뢰도 또는 80%의 확률을 결정한다고 말하면 모델은 약 80%의 시간 동안(오류율 내에서) 정확해야 합니다.
10,000,000개의 시뮬레이션과 100개의 질문에 대한 예상 범위를 보여주는 통계 시뮬레이션 80% 보정:
이러한 교정 기술은 실제 시나리오에 적용됩니다. 인간 슈퍼 예측가들이 사건의 확률에 베팅하는 마이니폴드 시장(https://manifold.markets/)을 생각해 보세요. 이 인간 슈퍼 예측가들의 집단적 지혜는 실제 사건을 예측하는 데 고도로 조정되어 있습니다!
Manifold Markets의 수천 가지 예측에 대한 실제 예측 환경에서의 보정 예:
교정이라는 주제는 새로운 것이 아니며 의사결정 이론과 기계 학습에서 연구되어 왔습니다. 의사결정 인텔리전스(인지 과학)와 기계 학습 기술을 모두 적용하여 모델 성능을 추가로 보정할 수 있습니다.