2 puan yazan GN⁺ 2024-12-09 | 1 yorum | WhatsApp'ta paylaş

Yapılandırılmış çıktılar

6 Aralık 2024

Ollama artık model çıktısını JSON şemasıyla tanımlanmış belirli bir biçimle sınırlandırabilen yapılandırılmış çıktıları destekliyor. Ollama Python ve JavaScript kütüphaneleri de yapılandırılmış çıktıları destekleyecek şekilde güncellendi.

  • Yapılandırılmış çıktıların kullanım alanları:
    • Belgelerden veri ayrıştırma
    • Görüntülerden veri çıkarma
    • Tüm dil modeli yanıtlarını yapılandırma
    • JSON moduna kıyasla daha yüksek güvenilirlik ve tutarlılık sağlama

Başlarken

  • Ollama'nın en güncel sürümünü indirin
  • Ollama Python veya JavaScript kütüphanesini en güncel sürüme yükseltin
cURL
  • format parametresi kullanılarak modele yapılandırılmış çıktı iletilebilir
Çıktı
  • Yanıt, isteğin JSON şemasıyla tanımlanan biçimde döner
Python
  • Ollama Python kütüphanesi kullanılarak şema, JSON nesnesi olarak format parametresine iletilir
  • Şemayı serileştirmek için Pydantic kullanılması önerilir
Çıktı
  • name='Canada' capital='Ottawa' languages=['English', 'French']
JavaScript
  • Ollama JavaScript kütüphanesi kullanılarak şema, JSON nesnesi olarak format parametresine iletilir
  • Şemayı serileştirmek için Zod kullanılması önerilir
Çıktı
  • { name: "Canada", capital: "Ottawa", languages: [ "English", "French" ] }

Örnekler

Veri çıkarma

  • Metinden yapılandırılmış veri çıkarmak için bilgiyi temsil eden bir şema tanımlanır
  • Model, bilgiyi çıkarır ve veriyi tanımlanan şemaya göre JSON olarak döndürür
Örnek çıktı
  • pets=[ Pet(name='Luna', animal='cat', age=5, color='grey', favorite_toy='yarn'), Pet(name='Loki', animal='cat', age=2, color='black', favorite_toy='tennis balls') ]

Görsel açıklama

  • Yapılandırılmış çıktılar vision modelleriyle birlikte kullanılabilir
  • llama3.2-vision kullanılarak bir görsel açıklanır ve yapılandırılmış çıktı döndürülür
Örnek çıktı
  • summary='A palm tree on a sandy beach with blue water and sky.'
  • objects=[ Object(name='tree', confidence=0.9, attributes='palm tree'), Object(name='beach', confidence=1.0, attributes='sand') ]
  • scene='beach', colors=['blue', 'green', 'white'], time_of_day='Afternoon', setting='Outdoor', text_content=None
OpenAI uyumluluğu
  • OpenAI istemcisi kullanılarak yapılandırılmış çıktılarla uyumlu şekilde çalışılabilir

İpuçları

  • Yapılandırılmış çıktıları güvenilir şekilde kullanmak için:
    • Yanıt şemasını Pydantic (Python) veya Zod (JavaScript) ile tanımlayın
    • Modelin isteği anlaması için prompt'a "JSON olarak döndür" ifadesini ekleyin
    • Daha deterministik çıktı için temperature değerini 0 olarak ayarlayın

Sonraki adımlar

  • Kontrollü üretim için logit exposure
  • Yapılandırılmış çıktıların performans ve doğruluğunu iyileştirme
  • Sampling için GPU hızlandırma
  • JSON şemasının ötesinde ek biçim desteği

1 yorum

 
GN⁺ 2024-12-09
Hacker News görüşleri
  • llama.cpp'nin gbnf özelliğiyle daha güçlü çıktı kısıtlamaları ayarlanabiliyor

  • Normal prompt'ları yapılandırıp CSV verisine dönüştürürken gereksiz metni kaldırmak için kullanışlı

  • gemma2:2b kullanılarak metin girildiğinde yapılandırılmış JSON biçiminde çıktı alınabiliyor

    • Örnek girdi: "You have spent 190 at Fresh Mart. Current balance: 5098"
    • Örnek çıktı: {"amount": 190, "balance": 5098, "category": "Shopping", "place": "Fresh Mart"}
  • LLM çıktısının kalitesinin kısıtlamalardan nasıl etkilendiğini merak eden görüşler var

    • Bazı durumlarda Markdown veya düz metin olarak parse etmek daha iyi kalite sağlayabiliyor
  • Desteklenen modellerle birlikte kullanılıp kullanılamayacağına dair bir soru var

    • Kişisel donanımda yalnızca 1b-3b modelleri kararlı biçimde çalıştırabiliyorlar
  • llama.cpp ve ollama'nın llama'nın yapılandırılmış çıktı özelliğini kullanıp kullanmadığı, yoksa bunun farklı bir şekilde mi uygulandığı merak ediliyor

    • Meta'nın Llama sayfasında modelin doğal olarak yapılandırılmış çıktıyı desteklediği belirtiliyor
  • outlines ile karşılaştırıldığında ne tür bir katma değer sunduğuna dair bir soru var

  • oobabooga'yı kullanmaya devam etme nedeni, exlv2 desteği sayesinde çift 3090'larda daha verimli inference sunması

  • Önce curl örneğinin gelmesi daha iyi olurdu

    • Pydantic seviliyor ama şemayı doğrudan kodlamak, prototipi Go'ya taşımayı daha kolay hale getiriyor
  • LLM'ye yapılandırılmış girdi vermenin en iyi yoluna dair bir soru var

    • Örnek: 100 cümle girip her birini farklı şekillerde sınıflandırmak
    • Yapılandırılmış veri elde etmek kolay ama satır numaralarını önek olarak kullanma yöntemi kulağa tuhaf geliyor