Büyük Dil Modelleri (LLM'ler) evrildikçe, artık yalnızca metinle sınırlı kalmıyorlar. GPT-4V, LLaVA ve Gemini Pro gibi Görüntü-Dil Modelleri'nin (VLM) yükselişi, yapay zekânın görüntüleri, grafikleri ve ekran görüntülerini yorumlamasına olanak tanıyan yeni yetenekler açtı. Ancak bu modelleri değerlendirmek standart metin üretiminden çok daha karmaşıktır. Sadece BLEU skorları veya temel dize eşleştirmesi kullanamazsınız. Çok modlu uygulamalarınızın güvenilir ve doğru olduğundan emin olmak için sağlam, özel gözlemlenebilirlik araçlarına ihtiyacınız var.
Bu kılavuzda, önde gelen bir yapay zekâ gözlemlenebilirliği ve değerlendirme platformu olan Braintrust'un, özel metrikler kullanarak VLM'leri değerlendirmek için nasıl kullanılabileceğini inceleyeceğiz. Nesne algılama doğruluğu ve başlık kalitesi gibi görme görevleri için belirli değerlendirme kriterleri oluşturmaya odaklanarak, dağıtımınızın gerçek dünya performans verilerine dayandığından emin olacağız.
Neden Standart Metrikler Görüntü-Dil Modelleri İçin İşe Yaramaz?
Perplexity veya ROUGE gibi geleneksel NLP metrikleri metinden-metine görevler için tasarlanmıştır. Görsel veri eklediğinizde, girdi alanı devasa ve belirsiz hale gelir. Örneğin, bir model bir nesneyi doğru bir şekilde tanımlayabilir, ancak başka bir nesneye olan uzamsal ilişkisini açıklamakta başarısız olabilir. Sadece "doğru" veya "yanlış" bir boole değeri yetersizdir.
Braintrust, geliştiricilerin belirli iş mantığıyla uyumlu özel metrikler tanımlamasına olanak tanır. Bu, VLM'ler için kritiktir çünkü bir çıktının "doğruluğu" genellikle görüntünün bağlamına bağlıdır. Braintrust'u kullanarak hem görüntü girdisini hem de modelin metin çıktısını kaydedebilir, ardından standart kıyaslamaların kaçırdığı nüansları değerlendirmek için özel puanlama işlevleri uygulayabilirsiniz.
Braintrust'ta Özel Metriklerin Kurulması
Braintrust API'si, özel değerlendiriciler tanımlamayı basit hale getirir. Girdi görüntüsünü, beklenen gerçek durumu (mevcutsa) ve modelin çıktısını alıp yapılandırılmış bir skor döndüren Python işlevleri yazabilirsiniz. Pratik bir örneğe bakalım: bir VLM'nin bir görüntüdeki nesneleri sayma yeteneğini değerlendirmek.
import braintrust
from PIL import Image
import re
def count_accuracy(input, output, ground_truth):
"""
Modelin nesneleri doğru sayıp saymadığını değerlendirmek için özel metrik.
Args:
input: Orijinal görüntü nesnesi.
output: VLM'den gelen metin yanıtı.
ground_truth: Bilinen nesne sayısı (örn., 5).
Returns:
'score' ve 'reasoning' içeren bir sözlük.
"""
# Model çıktısında bulunan ilk tam sayıyı çıkar
match = re.search(r'\d+', output)
if not match:
return {
'score': 0,
'reasoning': 'Çıktıda sayı bulunamadı.'
}
predicted_count = int(match.group())
if predicted_count == ground_truth:
return {
'score': 1,
'reasoning': f'{predicted_count} nesne doğru bir şekilde tanımlandı.'
}
else:
# Yakınsa kısmi kredi verilebilir mi? Yoksa katılık için sadece 0 mı?
# Burada katı 0/1 kullanıyoruz, ancak 1 - abs(diff)/max kullanabilirdiniz
return {
'score': 0,
'reasoning': f'Model {predicted_count} tahmin etti, beklenen {ground_truth}.'
}
# Özel metriği kaydet
braintrust.log(
'VLM_Count_Test',
metrics={
'count_accuracy': count_accuracy
}
)
Değerlendirme İş Akışının Uygulanması
Özel metrik tanımlandıktan sonra, bir görüntü veri seti üzerinde bir değerlendirme çalıştırabilirsiniz. Braintrust, her isteğin maliyetini, gecikmesini ve jeton kullanımını otomatik olarak izler, böylece VLM'nizin performansının bütüncül bir görünümünü elde edersiniz. Değerlendirme çalıştırmasını nasıl yapılandırabileceğinize dair bir örnek:
import base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# Örnek veri seti yapısı
dataset = [
{
"input": {
"image": "path/to/dogs.jpg",
"prompt": "Bu görüntüde kaç köpek var?"
},
"expected": 3
},
{
"input": {
"image": "path/to/cats.png",
"prompt": "Bu görüntüde kaç kedi var?"
},
"expected": 1
}
]
def model_call(input):
# OpenAI ile uyumlu bir VLM uç noktasına sahip olduğunuzu varsayalım
image_b64 = encode_image(input['image'])
response = openai.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": input['prompt']},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_b64}"}},
],
}
],
)
return response.choices[0].message.content
# Değerlendirmeyi çalıştır
braintrust.run(
"VLM_Count_Eval",
tasks=dataset,
model=model_call,
metrics={
'count_accuracy': count_accuracy,
'latency': braintrust.latency,
'cost': braintrust.cost
}
)
Sonuçların Görselleştirilmesi ve İterasyon
Değerlendirmeyi çalıştırdıktan sonra, Braintrust paneli özel count_accuracy metriğinizi maliyet ve gecikmeyle birlikte görüntüler. Modelin hangi tür görüntülerde zorlandığını görmek için sonuçları filtreleyebilirsiniz. Belki de net stüdyo çekimlerinde iyi performans gösterirken, gürültülü, gerçek dünya sokak manzaralarında başarısız oluyor. Bu ince taneli içgörü, istem mühendisliğinizi iyileştirmek veya modelinizi ince ayar yapmak için paha biçilmezdir.
Sonuç
Görüntü-Dil Modellerini değerlendirmek, genel NLP metriklerinin ötesine geçmeyi gerektirir. Braintrust'un esnek özel metrik sistemini kullanarak, geliştiriciler kullanım senaryolarına özgü değerlendirme hatları oluşturabilir. Nesneleri sayıyor, ekran görüntülerinden metin çıkarıyor veya tıbbi görüntüleri yorumluyor olsanız da, özel metrikler yapay zekânıza üretim ortamında güvenmek için gereken hassasiyeti sağlar. Başarı kriterlerinizi tanımlayarak başlayın, özel değerlendiricinizi kodlayın ve optimizasyonunuzu verilerin yönlendirmesine izin verin.