Contoh Probabilitas Log Azure OpenAI (LogProbs).
Aplikasi Konsol .NET yang menunjukkan empat contoh bagaimana Azure OpenAI LogProbs dapat berguna untuk pengambilan informasi berkualitas:
- Probabilitas Token Pertama - Menghitung probabilitas Benar atau Salah, mengembalikan probabilitas teratas apakah model (LLM) memiliki cukup informasi untuk menjawab pertanyaan di prompt.
- Probabilitas Token Pertama [Dengan Skor Brier] - Probabilitas Benar atau Salah, mengembalikan probabilitas teratas apakah model (LLM) memiliki cukup informasi untuk menjawab pertanyaan dalam prompt. Menghitung Skor Brier baik individu maupun rata-rata total untuk mengukur akurasi perkiraan probabilistik model (LLM).
- Probabilitas Tertimbang dari Skor Keyakinan - Mengembalikan Skor kepercayaan diri antara 1-10 yang diberi bobot dari distribusi probabilitas (5 log probabilitas teratas) untuk memberikan perkiraan skor keyakinan yang lebih baik (tertimbang) untuk menjawab pertanyaan.
- Interval Keyakinan - Dihitung dari simulasi bootstrap beberapa panggilan ke model. Ini memberikan interval kepercayaan (kisaran) 95% dari skor kepercayaan yang masuk akal. Hal ini ideal ketika Anda perlu memahami serangkaian kemungkinan yang masuk akal yang diinterpretasikan oleh model, bukan hanya estimasi satu titik.
Memulai
Persyaratan
- .NET 8.x SDK Terpasang
- Akses API Azure OpenAI: (Akses OpenAI juga akan berfungsi) baik GPT3.5, GPT-4T, GPT-4o, GPT-4o-mini yang diterapkan dan kunci API
- Visual Studio 2022(+) jika men-debug solusi dengan IDE
Kloning reponya
git clone https://github.com/bartczernicki/AzureOpenAILogProbs.git
Tambahkan ini ke Secrets.json (Klik Kanan pada Proyek VS -> Kelola Rahasia Pengguna) dan jalankan aplikasi konsol
{
"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/"
}
}
Perintah Bangun dan Jalankan (Anda juga dapat membuat atau Debug dari Visual Studio 2022+)
Info Penting Tentang Penyetelan Solusi
Dalam pengaturan ini, LLM akan diberikan paragraf pilihan dari artikel Wikipedia tentang sejarah tim bisbol New York Mets. Artikel selengkapnya dapat ditemukan di sini: https://en.wikipedia.org/wiki/New_York_Mets. Inilah konteks (informasi landasan) yang akan selalu diberikan dalam setiap prompt.
Selain itu, tersedia 20 pasangan tanya jawab. Setiap item dalam daftar memiliki pertanyaan tentang artikel Wikipedia Mets yang dipasangkan dengan penilaian manusia Benar/Salah, jika terdapat cukup informasi dalam artikel Wikipedia yang disediakan untuk menjawab pertanyaan tersebut. Setiap pertanyaan akan dikirimkan ke LLM dan kemudian LLM akan menilai apakah memiliki informasi yang cukup untuk menjawab pertanyaan tersebut. Jawaban itu akan dibandingkan dengan penilaian manusia (kebenaran logika). Dua contoh dari daftar 20 pertanyaan:
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? " } ,
Kemampuan untuk memeriksa probabilitas log token dinonaktifkan secara default. Untuk mengaktifkan fitur ini, properti IncludeLogProbabilities harus disetel ke true. Ini tidak memerlukan token tambahan atau membuat panggilan API memerlukan biaya lebih banyak. Namun, ini sedikit meningkatkan payload objek JSON yang kembali. Misalnya, dengan menggunakan pustaka OpenAI .NET yang baru, pustaka ini diekspos sebagai properti di kelas ChatCompletionOptions.
chatCompletionOptions . IncludeLogProbabilities = true ;
Termasuk dalam perpustakaan .NET adalah kemampuan untuk mengontrol jumlah probabilitas log yang dikembalikan dengan setiap panggilan API. Ini menyediakan array/Daftar token dengan probabilitas masing-masing. Dalam statistik, ini dikenal sebagai Fungsi Massa Probabilitas (PMF) karena merupakan distribusi probabilitas yang terpisah. Catatan: Di Azure OpenAI, nilai maksimum saat ini adalah 5 dan di OpenAI 10 (untuk sebagian besar API). Misalnya, dengan menggunakan pustaka OpenAI .NET yang baru, pustaka ini diekspos sebagai properti di kelas ChatCompletionOptions.
chatCompletionOptions . TopLogProbabilityCount = 5 ;
Solusinya juga mencakup kemampuan untuk mengatur Suhu setiap keluaran yang diharapkan dari model (LLM). Standarnya adalah 0,3f (angka floating point), namun dapat ditingkatkan menjadi 2f untuk lebih banyak kreativitas dan varians.
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 ;
.. .
Itu pada dasarnya adalah pengaturan inti dari solusi ini. Kode selanjutnya adalah kode C# untuk menyambungkan input/output layanan dan memastikan bahwa perhitungan dilakukan dengan benar dan divisualisasikan dalam aplikasi konsol.
Informasi Latar Belakang tentang Probabilitas Log
Apa itu LogProbs (Probabilitas Log)? Sebagian besar LLM saat ini memproses instruksi cepat dengan memprediksi token berikutnya dan mengulangi setiap token hingga mencapai titik penghentian (yaitu panjang token maksimum, menyelesaikan instruksi pengguna). Untuk setiap token yang dipertimbangkan untuk keluaran diproses melalui saluran LLM internal yang menghasilkan distribusi probabilitas statistik dari token "yang paling cocok" untuk dipilih. Berdasarkan konfigurasi (suhu, top_p, dll.) probabilitas token ini dapat dihitung dan kemudian LLM memilih token "yang paling cocok" berikutnya berdasarkan konfigurasi yang berbeda. Karena LLM ini bersifat probabilistik, inilah sebabnya Anda mungkin melihat keluaran token berbeda untuk instruksi cepat yang sama yang dikirim ke model (LLM).
Di bawah ini adalah contoh skenario Tanya Jawab dan probabilitas terkait untuk dua token (kata) yang dipilih untuk menjawab pertanyaan: "Siapa presiden pertama Amerika Serikat?" . Pada contoh di bawah, model menjawab dengan dua token "George" "Washington", menggunakan probabilitas token masing-masing sebesar 99,62% dan 99,99%. Perhatikan bahwa ada token lain yang tersedia untuk dipilih, namun pengetahuan dan kemampuan penalaran yang melekat pada LLM (dari pelatihan pada sejumlah besar data) dengan percaya diri meningkatkan kemungkinan dua token ini: "George" dan "Washington".
Ada pengaturan yang dapat mengkalibrasi seberapa ketat atau kreatif suatu LLM. Misalnya, Anda mungkin pernah mendengar tentang pengaturan model (LLM) yang disebut Suhu yang pada dasarnya meningkatkan kemungkinan pemilihan token dengan probabilitas lebih rendah.
Butuh informasi lebih lanjut? Bacaan yang Direkomendasikan di latar belakang Azure OpenAI LogProbs:
- Buku Masakan OpenAI - LogProbs: https://cookbook.openai.com/examples/using_logprobs
- Apa itu LogProbs?: https://www.ignorance.ai/p/what-are-logprobs
Menggunakan LogProbs untuk Meningkatkan Kualitas GenAI
Ada berbagai teknik peningkatan yang telah terbukti dan baru yang menggunakan beberapa panggilan ke suatu model atau beberapa model untuk sampai pada respons, kesimpulan, atau keputusan yang berkualitas. Saat ini, sebagian besar penggunaan LLM dalam sistem produksi GenAI adalah dengan grounding (RAG) dengan memberikan informasi kontekstual tambahan. Model (LLM) diinstruksikan untuk menjawab pertanyaan, memberikan alasan atas informasi tersebut, dll. Namun, dengan teknik grounding yang buruk, hal ini dapat menghasilkan kualitas hasil yang lebih rendah.
Azure OpenAI LogProbs adalah teknik tingkat lanjut yang dapat membantu dan dimanfaatkan untuk mengukur keyakinan (probabilitas) respons model. Kemampuan luar biasa ini dapat memberdayakan sistem GenAI untuk mengoreksi diri sendiri atau memandu pengguna/agen untuk mencapai respons berkualitas yang lebih baik.
Kekuatan LogProbs diilustrasikan di bawah ini dengan diagram alur kerja GenAI. Perhatikan bahwa ada dua jalur (kiri dan kanan):
- Jalur kiri adalah jalur tradisional yang diikuti sebagian besar aplikasi GenAI. Anda mengajukan pertanyaan dan menerima tanggapan dari LLM. Alur kerja khas di sebelah kiri ini adalah apa yang akan ditemukan di sebagian besar aplikasi Obrolan GenAI saat ini.
- Jalur yang benar adalah "peningkatan kualitas" pada alur kerja. Secara paralel, seseorang dapat bertanya kepada LLM "LLM, apakah Anda memiliki cukup informasi untuk menjawab pertanyaan ini dan seberapa yakin Anda memiliki cukup informasi?"! Perhatikan dari diagram di bawah dengan "peningkatan kualitas" ini sekarang meliputi:
- Jawaban atas pertanyaan itu
- Apakah Model Memiliki Informasi yang Cukup untuk Menjawab Pertanyaan - Estimasi Benar atau Salah dari model (LLM).
- Probabilitas Memiliki Informasi yang Cukup untuk Menjawab Pertanyaan - Dihitung dari LogProbs; yang dapat digunakan untuk inferensi statistik tambahan atau ambang batas pengambilan keputusan
Opsi Pemrosesan Konsol
1) Probabilitas Token Pertama - Seberapa Percaya Diri Model AI (LLM) dengan informasi untuk menjawab pertanyaan
- Model (LLM) hanya akan merespons dengan True atau False . Model pada dasarnya akan mengklasifikasikan (Benar atau Salah) jika menurutnya terdapat cukup informasi (Benar) atau tidak cukup informasi (Salah) di landasan Wikipedia yang disediakan untuk menjawab pertanyaan di prompt.
- Menggunakan Azure OpenAI LogProbs untuk menentukan probabilitas hanya token pertama dalam respons. Token pertama akan selalu berupa True atau False .
- Jika probabilitasnya tinggi, model (LLM) sangat yakin dengan jawabannya sendiri (Benar atau Salah)
- Jika probabilitasnya rendah, model (LLM) tidak terlalu yakin dengan jawabannya sendiri (Benar atau Salah)
- Probabilitas dapat digunakan sebagai ambang keputusan klasifikasi apakah model memiliki cukup informasi (konteks RAG) untuk menjawab pertanyaan. Misalnya, seseorang dapat memberikan pengalaman pengguna dengan sinyal terverifikasi bahwa jawabannya telah melewati validasi kedua ketika probabilitas yang dipancarkan dari model (LLM) lebih dari 90%.
Contoh Keluaran:
Perhatikan gambar di atas mengilustrasikan keluaran Benar dan Salah dari LLM serta probabilitas keluaran Benar atau Salah tersebut. Karena "Benar" atau "Salah" adalah token pertama dan satu-satunya dalam respons, probabilitas token pertama (LogProb) dapat digunakan. Ada beberapa masalah dengan pendekatan ini:
- Hanya token dan probabilitas pertama yang sedang diselidiki. Melihat contoh George Washington di atas, perlu diketahui bahwa ada berbagai token yang dapat menjadi output yang dapat berupa komponen atau serupa dengan “George Washington”. Hal yang sama berlaku bahkan ketika hanya melihat token "Benar" atau "Salah". Mungkin ada token seperti "TRU", "true", "tr" dan semuanya harus dikelompokkan bersama untuk menandakan probabilitas kolektif "Benar". Contoh di bawah menggambarkan hal ini.
- Menjalankan contoh berkali-kali terkadang tampak ada perbedaan antara token pertama versus LogProb teratas. Hal ini karena layanan OpenAI dapat memilih token dengan probabilitas lebih rendah, terutama dengan pengaturan seperti suhu yang lebih tinggi. Ini adalah perbaikan sederhana, pada dasarnya LogProbs memungkinkan pengembang untuk mengganti token pertama yang dipilih dan memilih token dengan probabilitas tertinggi.
2) Probabilitas Token Pertama [Dengan Skor Brier] - Menghitung Skor Brier dari Probabilitas Token Pertama
- Contoh ini menunjukkan cara mengukur perkiraan & keakuratan prediksi model.
- Sama seperti Probabilitas Token Pertama, tetapi juga menghitung Brier Score untuk setiap jawaban probabilitas.
- Skor Brier (dan metode serupa dalam Pembelajaran Mesin & Statistik) digunakan untuk mengukur kinerja akurasi prediksi probabilistik.
- Semakin rendah Brier Score, semakin baik model dalam memprediksi probabilitas respon jawaban. Misalnya, jika ada dua model dan keduanya memprediksi kejadian yang benar, namun probabilitas model pertama adalah 65% dan probabilitas model kedua adalah 95%, maka skor Brier untuk model kedua akan lebih rendah. Sebab jika peristiwa yang akan datang terjadi otomatis diberi probabilitas 100%. 95% mendekati 100%. Informasi lebih lanjut tentang skor Brier: https://en.wikipedia.org/wiki/Brier_score
- Skor Brier dapat menggabungkan beberapa prediksi individu dan digabungkan menjadi satu skor. Contoh ini menampilkan tabel Skor Brier untuk setiap pertanyaan dan rata-rata Skor Brier untuk semua pertanyaan.
- Rata-rata skor Brier dapat memberi tahu kita banyak hal tentang keakuratan kinerja sistem probabilistik atau model probabilistik secara keseluruhan. Rata-rata Skor Brier 0,1 atau lebih rendah dianggap sangat baik, 0,1 - 0,2 lebih unggul, 0,2 - 0,3 cukup, dan 0,3-0,35 dapat diterima, dan terakhir skor rata-rata Brier di atas 0,35 menunjukkan kinerja prediksi yang buruk.
Skor Brier akan bervariasi tergantung pada kemampuan model, perintah, dan konteks pertanyaan. Dengan menjaga prompt dan konteks tetap sama, seseorang dapat membandingkan performa akurasi model secara keseluruhan. Perhatikan skor Brier di bawah ini yang membandingkan model GPT-4o dan GPT-4o-mini. Model GPT-4o-mini memiliki skor Brier yang lebih rendah, yang berarti lebih akurat dalam memprediksi kemungkinan jawaban yang benar. Faktanya, GPT-4o-mini memberikan jawaban akhir dengan benar 18 dari 20 pertanyaan, sedangkan model GPT-4o cocok dengan jawaban yang diharapkan manusia (jika terdapat cukup informasi dalam konteks untuk menjawab pertanyaan) 17 dari 20 pertanyaan. Perhatikan bahwa skor Brier rata-rata GPT-4o-mini adalah 0,083 (di bawah 0,1), yang menunjukkan kinerja prediktif yang sangat baik. Oleh karena itu, skor Brier model GPT-4o-mini lebih rendah (lebih baik). Hal ini secara empiris menunjukkan bahwa ia lebih akurat dalam mengukur probabilitas bahwa ia mempunyai informasi yang cukup untuk menjawab pertanyaan cepat yang diberikan.
Contoh Keluaran:
3) Probabilitas Tertimbang dari Skor Keyakinan - Model memberikan skor kepercayaan diri dan kemudian menilai probabilitas skor kepercayaan diri
- Pada contoh sebelumnya, hanya probabilitas token pertama yang digunakan. Token mana pun yang memiliki probabilitas tertinggi digunakan sebagai penentuan Benar atau Salah.
- Azure OpenAI LogProbs dapat mengembalikan distribusi fungsi massa probabilitas (PMF) hingga 5 token berikutnya termasuk probabilitasnya.
- Perhitungan ini menggunakan beberapa LogProb untuk menentukan probabilitas respons yang "tertimbang".
- Selain itu, daripada meminta model hanya memberikan penentuan Benar atau Salah, model dapat memberikan skor keyakinan (1-10) seberapa yakin model tersebut dalam menjawab pertanyaan.
- Probabilitas tertimbang dihitung dengan perkalian: Skor Keyakinan*Probabilitas untuk memberikan estimasi tertimbang yang lebih baik atas keyakinan untuk menjawab pertanyaan.
- Probabilitas tertimbang dapat digunakan sebagai skor keyakinan terkalibrasi yang lebih baik untuk respons model.
Untuk mengembalikan beberapa Probabilitas Log, atur LogProbabilitiesPerToken ke 5 (maksimum Azure OpenAI saat ini, pada tulisan ini):
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;
Contoh Keluaran:
Di bawah ini adalah contoh Distribusi Probabilitas Token ketika 5 token LogProbs dikembalikan dengan probabilitasnya masing-masing. Pada histogram di bawah, "Skor Keyakinan: 1" memiliki probabilitas 42,3%; yang berarti model berpendapat bahwa Skor Keyakinan = 1 dalam menjawab pertanyaan sangat rendah dan peluang yang rendah adalah 42,3%. Jika Anda hanya memilih skor keyakinan tertinggi yang dikembalikan model, Anda mungkin kehilangan banyak informasi lain pada token lainnya (token nomor 2 - 5). Dalam skenario ini, terdapat ~57% informasi lainnya bahwa probabilitas token lain dapat digunakan untuk menghitung Skor Keyakinan "tertimbang", yang mengkalibrasi Skor Keyakinan dari 1 -> 2,3.
4) Interval Skor Keyakinan 95% - Gunakan distribusi probabilitas untuk menghitung Interval Keyakinan 95% (kisaran) jawaban yang masuk akal
- Contoh sebelumnya menunjukkan estimasi satu poin dari skor keyakinan. Hal ini dapat menyesatkan karena model tersebut mungkin memiliki interpretasi ganda terhadap responsnya.
- Azure OpenAI LogProbs dapat mengembalikan distribusi fungsi massa probabilitas (PMF) hingga 5 token berikutnya termasuk probabilitasnya.
- Perhitungan ini menggunakan beberapa LogProb untuk menentukan "interval kepercayaan" dari respons.
- Interval kepercayaan dihitung dengan melakukan bootstrap beberapa panggilan (10) ke model (menggunakan perintah yang sama) dan menghitung interval kepercayaan 95% dari skor kepercayaan.
- Interval kepercayaan dapat digunakan untuk memahami rentang kemungkinan, dimana 95% hasil akan berada dalam rentang ini jika pertanyaan yang sama diulang.
- Mengapa Anda menyebut modelnya 10x, bukankah itu berlebihan? Untuk keputusan dan pertimbangan berisiko tinggi (membeli rumah/mobil, memutuskan gelar 4 tahun), beberapa panggilan tambahan tersebut sepadan dengan beberapa sen dan waktu ekstra untuk mendapatkan rentang kesalahan yang tepat.
Contoh Keluaran:
Pertimbangan Lanjutan Lebih Lanjut (Jalankan proyek konsol SampleConfidenceIntervalSimulation)
Repo ini tidak menyentuh kalibrasi skor keyakinan model maupun kalibrasi LogProbs probabilitas model. Karena LLM pada dasarnya adalah jaringan neural, LLM dapat tidak dikalibrasi untuk tugas atau domain tertentu. Pada dasarnya, ketika LLM menyatakan keyakinannya 8/10 atau menentukan probabilitas 80%, model harus benar sekitar 80% (dalam tingkat kesalahan).
- Model yang menjawab 100 pertanyaan dengan skor keyakinan 80% seharusnya benar sekitar 80 kali lipat. Ini akan menjadi kalibrasi yang ideal.
- Catatan: Terdapat tingkat kesalahan meskipun model dikalibrasi sempurna sekitar 80%. Dalam kasus 100 pertanyaan, 95% dari waktu yang kami perkirakan kisarannya antara 72 dan 88 pertanyaan yang benar (+/- 8 pertanyaan di sekitar rata-rata yang diharapkan yaitu 80). Mengapa melaporkan Tingkat Keyakinan 95% dan bukan 100%? Melaporkan tingkat keyakinan 100% tidak masuk akal karena rentang keyakinan 100% adalah 0 - 100 jawaban benar. Meskipun seluruh rentang probabilitas tidak dapat dilakukan, peluang untuk menjawab 0 atau 100 pertanyaan masih sangat kecil. Tingkat kepercayaan 95% memberikan kisaran hasil yang realistis dan masuk akal dan jika Anda melihat hasil di luar kisaran ini, sesuatu yang "layak diselidiki" berpotensi terjadi.
- Model yang menjawab 100 pertanyaan dengan skor keyakinan 80% dan hanya benar 50 kali akan dianggap terlalu percaya diri. Ini jauh di luar rentang kesalahan yang diharapkan.
- Catatan: Statistik atau simulasi dapat menunjukkan kemungkinan hanya mendapatkan 50 jawaban yang benar jika model menyatakan keyakinannya 80% mendekati 0,00%! Bukan tidak mungkin, namun jika hal ini terjadi dalam skenario produksi, model tersebut jelas tidak terkalibrasi dan sangat percaya diri.
- Model yang menjawab 100 pertanyaan dengan skor keyakinan 80% dan benar sebanyak 90 kali akan dianggap kurang percaya diri. Ini berada di luar rentang kesalahan yang diharapkan.
- Catatan: Statistik atau simulasi dapat menunjukkan bahwa model yang memiliki tingkat kepercayaan 80%, namun sebenarnya benar lebih dari 90 kali hanya akan muncul 0,00233 (0,233%).
Simulasi Statistik Menampilkan 10.000.000 simulasi dan rentang yang diharapkan untuk 100 pertanyaan kalibrasi 80%:
Teknik kalibrasi ini berlaku untuk skenario dunia nyata. Pertimbangkan Pasar Mainifold (https://manifold.markets/), di mana manusia peramal super bertaruh pada kemungkinan suatu peristiwa. Kebijaksanaan kolektif dari manusia peramal super ini sangat terkalibrasi dalam memprediksi kejadian di dunia nyata!
Contoh Kalibrasi dalam lingkungan perkiraan nyata dari Manifold Markets dari ribuan perkiraan:
Topik kalibrasi bukanlah hal baru dan telah dipelajari dalam teori keputusan dan pembelajaran mesin. Anda dapat menerapkan teknik kecerdasan keputusan (ilmu kognitif) dan pembelajaran mesin untuk lebih mengkalibrasi performa model.
- Mengkalibrasi GPT Obrolan karena Terlalu Percaya Diri: https://hubbardresearch.com/chat-gpt-ai-calibration/
- Contoh peramal kalibrasi Manifold Markets: https://manifold.markets/calibration
- Mengkalibrasi Evaluator Berbasis LLM: https://arxiv.org/pdf/2309.13308.pdf