Daha küçük LLM'ler için pratik hızlı mühendislik

Maud Nalpas
Maud Nalpas

Büyük dil modellerinin etkinliği büyük ölçüde onlara verdiğimiz talimatlara bağlıdır. İstem mühendisliği, soruları LLM'den en iyi çıkışı alacak şekilde oluşturma sürecidir. LLM tabanlı bir özelliği uygulamada önemli bir adımdır.

İstem mühendisliği yinelemeli bir süreçtir. Farklı LLM'leri denediyseniz daha iyi bir sonuç elde etmek için isteminizde değişiklik yapmanız gerektiğini fark etmişsinizdir.

Bu durum farklı boyutlardaki modeller için de geçerlidir.

Gemini veya ChatGPT gibi büyük LLM'ler tarafından desteklenen sohbet arayüzleri, genellikle çok az istemle tatmin edici sonuçlar sağlayabilir. Ancak, hassas ayarlanmamış varsayılan, daha küçük bir LLM ile çalışırken yaklaşımınızı uyarlamanız gerekir.

Daha küçük LLM'ler daha az güçlüdür ve daha küçük bir bilgi havuzuna sahiptir.

"Daha küçük LLM'ler" ne anlama geliyor?

LLM boyutlarının tanımlanması karmaşık bir işlemdir ve bunlar, üreticiler tarafından her zaman açıklanmaz.

Bu belgede "daha küçük LLM'ler", 30 milyar parametrenin altındaki tüm modeller anlamına gelir. Şu anda, birkaç milyondan birkaç milyara kadar parametre içeren modeller, tüketici sınıfı cihazlarda tarayıcıda gerçekçi bir şekilde çalıştırılabilir.

Daha küçük LLM'ler nerede kullanılır?

  • Cihaz üzerinde/tarayıcıda üretken yapay zeka. Örneğin, MediaPipe'in LLM Tahmini API'si ile Gemma 2B'yi (yalnızca CPU'lu cihazlar için bile uygundur) veya Transformers.js ile tarayıcıda DistilBert'i kullanıyorsanız. Web indirmelerini makul düzeyde tutmak ve cihazın bellek ve GPU/CPU kısıtlamalarına uymak için, bir modelin indirilmesi ve kullanıcının cihazında çıkarım yapılması yalnızca bu küçük LLM'lerle mümkündür.
  • Özel sunucu tarafı üretken yapay zeka. Gemma 2B, Gemma 7B veya Gemma 27B gibi küçük açık ağırlıklı modelleri kendi sunucunuzda çalıştırabilir (ve isteğe bağlı olarak hassas ayar yapabilirsiniz).

Başlayın

Gemini veya ChatGPT gibi büyük LLM'ler tarafından desteklenen sohbet arayüzleri, genellikle minimum istem çabasıyla tatmin edici sonuçlar üretebilir. Ancak daha küçük LLM'lerle çalışırken yaklaşımınızı uyarlamanız gerekir. Daha küçük LLM'ler daha az güçlüdür ve daha küçük bir bilgi havuzuna sahiptir.

Bağlam ve kesin biçim talimatları sağlayın

Küçük LLM'lerle optimum sonuçlar elde etmek için daha ayrıntılı ve spesifik istemler oluşturun.

Örneğin:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Giriş (yorum) Çıkış (değerlendirme)
  Daha büyük LLM (Gemini 1.5) Daha küçük LLM (Gemma 2B)
Kesinlikle mükemmel bir uyum. Ağırlığı iyi dağıtıyor ve gün boyu yapılan yürüyüşlerde bile şaşırtıcı derecede rahat. Öneririm. 5 5 üzerinden 4 yıldız**
Kayışlar ince ve ağır yükler altında omuzlarıma batmaya başladı. 1 2/5

Gemini 1.5 bu basit istemle istenen çıkışı sağlarken Gemma'nın çıkışı tatmin edici değildir:

  • Biçim yanlış. Puan için bir tam sayı istedik.
  • Derecelendirme pek doğru değil. İlk yorum, 5 yıldızlı bir yorumu belirtecek kadar hevesli.

Bunu düzeltmek için tek, birkaç ve çoklu çekim istem ve düşünce zinciri istemlerini içeren istem mühendisliği tekniklerini kullanmamız gerekir. Ayrıca net biçim talimatları sağlamalı ve modelin tüm puan aralığını kullanması gerektiğini vurgulamalıyız.

Örneğin:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`;
Giriş (yorum) Daha küçük bir LLM (Gemma 2B) ile çıkış

Bu modele bayıldım! Ağırlığı iyi dağıtıyor ve gün boyu yapılan yürüyüşlerde bile şaşırtıcı derecede rahat. Öneririm.

Analiz: Bu yorum son derece olumlu ve ürünün uygunluğunu ve rahatlığını vurgulayarak üründen büyük memnuniyet olduğunu gösteriyor. Bu da alınan yüksek bir puan olduğunu gösterir.

Puan (tam sayı): 5

Kayışlar ince ve ağır yükler altında omuzlarıma batmaya başladı.

**Analizi:** Yorumda, kayışlarla ilgili önemli bir konfor sorunu vurgulanıyor. Ayrıca ürünün ağır yük veya uzun süreli geziler için uygun olmayabileceğini de belirtir.

**Derecelendirme:** 1 (en kötü)

Daha ayrıntılı istemimiz, az sayıda istem ve düşünce zinciri istem teknikleriyle birlikte daha doğru derecelendirmeler sağlar.

Manuel çıkış ayrıştırması bekleniyor

LLM'lerin çıktılarını her zaman manuel olarak temizlemeniz ve yorumlamanız gerekir. Bu durum, özellikle daha az parlak sonuçlar üretebilecek ve düşünce zinciri istemi gerektirebilecek küçük LLM'ler için geçerlidir.

İlk örnekte düşünce zinciri istemi kullandık. Bu nedenle, çıkış hem analiz hem de derecelendirme içeriyordu ve derecelendirmeyi manuel olarak ayrıştırmamız gerekiyordu. Ayrıca, önceki bölümdeki çıkışta tutarsız biçimlendirmeye dikkat edin: Model bazen markdown çıkışı yapar ancak her zaman yapmaz.

// Use try/catch to catch (parsing) errors
try {
  // Parse the output for a rating
  const int = /[1-5]/;
  const ratingAsString = llmOutput.match(int)[0];
  // Parse as int
  const ratingAsInt = parseInt(ratingAsString);
  // `checkRating` checks the rating is a number between 1 and 5, since the
  // regEx may catch a number like "100"
  const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console.error('Error', e);
}

Mind API farklılıkları

Genellikle daha büyük LLM'lere giriş noktası olan Gemini API veya OpenAI gibi LLM bulut API'leri kullanışlı istem özellikleri sunar. Örneğin, Gemini 1.5 Pro sistem talimatları ve JSON modu sunar.

Şu anda bu özellikler, özel model kullanımı veya MediaPipe LLM Tahmini API ya da Transformers.js gibi tarayıcı içi yapay zeka API'leri kullanılarak erişilen daha küçük LLM'ler için her zaman kullanılamaz. Bu durum teknik bir sınırlama olmasa da tarayıcı içi yapay zeka API'leri daha basit olma eğilimindedir.

Mind jeton sınırları

Daha küçük büyük dil modelleri için isteminizde örnekler veya daha ayrıntılı talimatlar bulunması gerektiğinden, isteminiz muhtemelen daha uzun olur ve varsa giriş jetonu sınırınızın daha büyük bir kısmını kaplar.

Ayrıca, küçük modellerin giriş jetonu sınırı daha küçüktür. Örneğin, Gemini 1.5 Pro'nun 1 milyon giriş jetonu sınırı varken Gemma modellerinin 8 bin bağlam penceresi vardır.

Sınıra ulaşmaktan kaçınmak için jeton sayısı işlevlerini kullanın.

Süre tahminlerinizi uyarlama

Mühendislik zaman tahminlerinizde hızlı tasarım ve testleri hesaba katın.

API farklılıkları ve jeton sınırları nedeniyle, isteminizi daha küçük bir LLM için oluşturmak daha büyük bir LLM için oluşturmaktan daha fazla zaman ve çaba gerektirebilir. LLM'nin çıktısını test etmek ve doğrulamak da daha fazla çaba gerektirebilir.

İstem mühendisi mi, ince ayar mı?

Web geliştiricileri için, özel eğitim ve hassas ayarlama yerine üretken yapay zekadan yararlanmak üzere tercih ettiğimiz yöntem ise istem mühendisliğidir. Ancak özellikle daha küçük bir LLM kullanıyorsanız gelişmiş istem mühendisliği bile bazı kullanım alanlarında yeterli olmayabilir.

Aşağıdaki durumlarda hassas ayarı kullanın:

  • Belirli bir görev için üst düzey doğruluk ve performansa ihtiyacınız var. İnce ayar, optimum sonuçlar için modelin dahili parametrelerini doğrudan ayarlar.
  • Görevinizle alakalı, iyi seçilmiş ve tercih edilen çıkışlarla zaten etiketlenmiş verileriniz var. Etkili ince ayar yapmak için bu verilere ihtiyacınız vardır.
  • Modeli aynı amaç için tekrar tekrar kullanıyorsanız. İnce ayar bir kez yapılabilir ve belirli bir görev için yeniden kullanılabilir.