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

Maud Nalpas
Maud Nalpas

Büyük bir dil modelinin etkililiği, büyük ölçüde ona verdiğimiz talimatlara bağlıdır. İstem mühendisliği, bir LLM'den en iyi çıkışı alacak şekilde soru oluşturma sürecidir. LLM tabanlı bir özelliğin uygulanmasında ö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 ince ayar 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 üretebilir. Ancak, ayarları düzgün yapılmamış, 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" derken neyi kastediyoruz?

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

Bu belgede, "daha küçük LLM'ler" 30 milyarın altındaki herhangi bir modeli ifade etmektedir. Bugünden itibaren birkaç milyon veya birkaç milyar parametresi olan modeller, tüketici düzeyindeki cihazlarda tarayıcıda gerçekçi olarak çalıştırılabilir.

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

  • Cihaz üzerinde/tarayıcı içinde üretken yapay zeka (ör. Gemma 2B'yi MediaPipe'in LLM Inference API ile birlikte) (yalnızca CPU cihazlar için uygundur) veya Transformers.js ile tarayıcıda DistilBert'i kullanıyorsanız. Web indirmelerinin makul olmasını sağlamak ve cihazın bellek ve GPU/CPU kısıtlamalarına uymak amacıyla, bir modelin indirilmesi ve kullanıcının cihazında çıkarım yapılması yalnızca bu daha küçük LLM'lerle mümkündür.
  • Sunucu tarafında özel üretken yapay zeka. Gemma 2B, Gemma 7B veya Gemma 27B gibi küçük açık ağırlıklı modeller kendi sunucunuzda çalıştırmanız (ve isteğe bağlı olarak ince ayar yapma) seçeneği sunar.

Başlayın

Gemini veya ChatGPT gibi büyük LLM'ler tarafından desteklenen sohbet arayüzleri genellikle çok az istemle 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ğlama

Küçük LLM'lerle en iyi 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ş (inceleme) Çıkış (derecelendirme)
  Daha büyük LLM (Gemini 1.5) Daha küçük LLM (Gemma 2B)
Uyduğuna bayıldım. Ağırlığı iyi dağıtıyor ve tüm gün süren yürüyüşlerde bile şaşırtıcı derecede rahat bir şekilde hareket ediyor. Önerin. 5 5 üzerinden 4 yıldız**
Kayışları çok zayıf ve ağır yük altında omuzlarımı kazımaya başladılar. 1 5/2

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

  • Biçim yanlış. Derecelendirme için bir tam sayı isteğinde bulunduk.
  • Derecelendirme pek doğru görünmüyor. İlk yorum 5 yıldızlı bir yorumu gösterecek kadar hevesli.

Bunu düzeltmek için istem mühendisliği tekniklerini, bir, az ve çok çekimli istem ve fikir zincirini sorgulama yöntemini kullanmamız gerekir. Ayrıca, biçimle ilgili net talimatlar sağlamamız ve modelin tüm derecelendirme aralığını kullanması gerektiği konusunda ısrar etmemiz gerekir.

Ö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ş (inceleme) Daha küçük bir LLM (Gemma 2B) ile çıkış yapın

Uyduğuna bayıldım. Ağırlığı iyi dağıtıyor ve şaşırtıcı derecede rahat bir şekilde tüm gün süren gezilerde bile kullanılıyor. Önerin.

Analiz: Bu yorum son derece olumludur ve ürünün kesimini ve rahatlığını vurgulayarak üründen son derece memnun kaldığınızı gösterir. Bu, puanın yüksek olduğunu gösterir.

Derecelendirme (tam sayı): 5

Kayışları çok zayıf ve ağır yük altında omuzlarımı kazımaya başladılar.

**Analiz:** Yorum, kayışlarla ilgili önemli bir konfor sorunu olduğunu vurgular. Bu durum, ürünün ağır yükler veya uzun süreli geziler için uygun olmayabileceğini de gösterir.

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

Daha ayrıntılı istemimiz, birkaç kez çekimli istemler ve bir düşünce zinciri teknikleri ile birlikte kullanıldığında daha doğru derecelendirmeler sağlar.

Manuel çıkış ayrıştırma

Bir LLM'nin çıktısını her zaman manuel olarak temizlemeniz ve yorumlamanız gerekse de, bu özellikle daha az gösterişli sonuçlar üretebilen ve düşünce zincirini gerektirebilecek daha küçük LLM'ler için geçerlidir.

İlk örnekte, düşünce zinciri şeklinde istemde bulunma yöntemini kullandık. Bu nedenle, çıkışta hem analiz hem de derecelendirme vardı ve derecelendirme için manuel olarak ayrıştırmamız gerekiyor. Ayrıca, önceki bölümde yer alan çıkıştaki tutarsız biçimlendirmeye dikkat edin: Model bazen Markdown çıktısı verir, ancak her seferinde 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 Inference API ya da Transformers.js gibi tarayıcı içi AI API'leri kullanılarak erişilen daha küçük LLM'ler için her zaman kullanılamamaktadır. Bu, teknik bir sınırlama olmasa da tarayıcı içi AI API'leri genellikle daha basittir.

Zihin jetonu sınırları

Daha küçük LLM'ler isteminizin örnekler veya daha ayrıntılı talimatlar içermesi gerektiğinden, muhtemelen daha uzun sürer ve varsa giriş jetonu sınırınızdan daha fazla yer kaplar.

Ayrıca, daha küçük modellerin giriş jetonu sınırı genellikle daha küçük olur. Örneğin, Gemini 1.5 Pro'da 1 milyon giriş jetonu sınırı bulunurken Gemma modellerinde 8K bağlam aralığı vardır.

Sınıra ulaşmamak için jeton sayısı işlevlerini kullanın.

Süre tahminlerinizi uyarlayın

Mühendislik süresi tahminlerinizde hızlı tasarım ve testlere yer verin.

API farklılıkları ve jeton sınırları nedeniyle, isteminizi daha büyük bir LLM'den daha küçük bir LLM için oluşturmak üzere muhtemelen daha fazla zamana ve çabaya ihtiyacınız olacaktır. LLM'nin çıktısını test etmek ve doğrulamak da daha yüksek zahmete yol açabilir.

Hızlı mühendis mi, ince ayar mı?

Web geliştiricileri için özel eğitim ve ince ayar yerine üretken yapay zekadan yararlanma konusunda istem mühendisliğini tercih ediyoruz. Ancak özellikle daha küçük bir LLM kullanıyorsanız bazı kullanım alanlarında ileri düzey istem mühendisliği bile yeterli olmayabilir.

İnce ayarı şu durumlarda kullanın:

  • Belirli bir görev için üstün doğruluk ve performansa ihtiyacınız var. Hassas ayarlama, en iyi sonuçlar için modelin dahili parametrelerini doğrudan ayarlar.
  • İşinizle alakalı, iyi seçilmiş ve tercih edilen çıkışlarla etiketlenmiş verilerinizdir. Etkili ince ayarlamalar 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örevde tekrar kullanılabilir.