Keras'ta Gemma Modellerini Analiz Etmek İçin LIT'yi Kullanma

1. Giriş

Üretken yapay zeka ürünleri nispeten yenidir ve bir uygulamanın davranışları, önceki yazılım formlarından daha fazla değişiklik gösterebilir. Bu nedenle, kullanılan makine öğrenimi modellerini incelemek, modelin davranışına dair örnekleri incelemek ve sürprizleri araştırmak önemlidir.

Öğrenme Yorumlanabilirliği Aracı (LIT; web sitesi, GitHub), ML modellerinin neden ve nasıl bu şekilde davrandığını anlamak için hata ayıklama ve analiz yapma platformudur.

Bu codelab'de, Google'ın Gemma modelinden daha fazla yararlanmak için LIT'i nasıl kullanacağınızı öğreneceksiniz. Bu kod laboratuvarında, farklı istem mühendisliği yaklaşımlarını analiz etmek için bir yorumlanabilirlik tekniği olan sıra belirginliğinin nasıl kullanılacağı gösterilmektedir.

Öğrenme hedefleri:

  1. Sıralı belirginliği ve model analizindeki kullanımlarını anlama
  2. Gemma'nın istem çıkışlarını ve sıra belirginliğini hesaplaması için LIT'i ayarlama.
  3. İstem tasarımlarının model çıkışları üzerindeki etkisini anlamak için LM Salience modülü aracılığıyla sıra belirginliğini kullanma
  4. LIT'te varsayılan istem iyileştirmelerini test etme ve bunların etkisini görme.

Not: Bu kod laboratuvarının Gemma'nın KerasNLP uygulamasını kullandığını ve arka uç için TensorFlow v2'yi kullandığını unutmayın. Bu adımları takip etmek için GPU çekirdeği kullanmanız önemle tavsiye edilir.

LIT kullanıcı arayüzü demosu

2. Sıralı Önem ve Model Analizinde Kullanımı

Gemma gibi metinden metne üretken modeller, tokenize edilmiş metin biçiminde bir giriş dizisi alır ve bu girişin tipik devamı veya tamamlaması olan yeni jetonlar oluşturur. Bu oluşturma işlemi, model bir durma koşuluna ulaşana kadar her yeni oluşturulan jetonu girişe ve önceki tüm oluşturma işlemlerine (döngü içinde) ekleyerek tek bir jetonda gerçekleşir. Modelin sıranın sonu (EOS) jetonu oluşturduğu veya önceden tanımlanmış maksimum uzunluğa ulaştığı durumlar buna örnek gösterilebilir.

Önem yöntemleri, bir girişin hangi bölümlerinin model için önemli olduğunu ve çıkışının farklı bölümlerini nasıl etkilediğini size söyleyebilen bir açıklamalı yapay zeka (XAI) teknik sınıfıdır. LIT, bir giriş jetonu dizisinin tahmin edilen etiket üzerindeki etkisini açıklayan çeşitli sınıflandırma görevleri için belirginlik yöntemlerini destekler. Sıralı belirginlik, bu yöntemleri metinden metne üretken modeller için genelleştirir ve önceki jetonların oluşturulan jetonlar üzerindeki etkisini açıklar.

Burada, modelin gradyanlarını analiz eden ve önceki her jetonun çıkış üzerindeki etkisinin büyüklüğünü sağlayan Grad L2 Norm yöntemini kullanarak sıra belirginliğini ölçebilirsiniz. Basit ve etkili olan bu yöntemin, sınıflandırma ve diğer ayarlarda iyi performans gösterdiği gösterilmiştir. Belirginlik puanı ne kadar yüksekse etki de o kadar yüksek olur. Bu yöntem, yorumlanabilirlik araştırma topluluğu tarafından iyi anlaşıldığı ve yaygın olarak kullanıldığı için LIT'te kullanılır.

Grad ⋅ Giriş ve entegre gradyanlar, gradyana dayalı daha gelişmiş dikkat çekiciliği yöntemleri arasındadır. LIME ve SHAP gibi, daha güçlü ancak hesaplaması önemli ölçüde daha pahalı olabilecek, çıkarmaya dayalı yöntemler de vardır. Farklı belirginlik yöntemlerinin ayrıntılı bir karşılaştırması için bu makaleyi inceleyin.

Öne çıkma yöntemlerinin bilimi hakkında daha fazla bilgiyi öne çıkmayla ilgili bu giriş niteliğindeki etkileşimli keşfedilebilir içerikte bulabilirsiniz.

3. İçe Aktarma, Ortam ve Diğer Kurulum Kodları

Bu codelab'i yeni Colab'da takip etmeniz önerilir. Bir modeli belleğe yükleyeceğiniz için hızlandırıcı çalışma zamanı kullanmanızı öneririz. Ancak hızlandırıcı seçeneklerinin zaman içinde değiştiğini ve sınırlamalara tabi olduğunu unutmayın. Daha güçlü hızlandırıcılara erişmek istiyorsanız Colab'da ücretli abonelikler sunulur. Alternatif olarak, makinenizde uygun bir GPU varsa yerel çalışma zamanı da kullanabilirsiniz.

Not: Formla ilgili bazı uyarılar görebilirsiniz

ERROR: pip's dependency resolver does not currently take into account all the
packages that are installed. This behaviour is the source of the following
dependency conflicts. bigframes 0.21.0 requires scikit-learn>=1.2.2, but you
have scikit-learn 1.0.2 which is incompatible. google-colab 1.0.0 requires
ipython==7.34.0, but you have ipython 8.14.0 which is incompatible.

Bu uyarıları yoksayabilirsiniz.

LIT ve Keras NLP'yi yükleme

Bu kod laboratuvarını çalıştırmak için keras (3) keras-nlp (0.14.) ve lit-nlp (1.2)'nin son sürümüne ve temel modeli indirmek için bir Kaggle hesabına ihtiyacınız vardır.

pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'

Kaggle Erişimi

Kaggle ile kimlik doğrulamak için aşağıdakilerden birini yapabilirsiniz:

  • Kimlik bilgilerinizi ~/.kaggle/kaggle.json gibi bir dosyada depolayın;
  • KAGGLE_USERNAME ve KAGGLE_KEY ortam değişkenlerini kullanın veya
  • Aşağıdakileri Google Colab gibi etkileşimli bir Python ortamında çalıştırın.
import kagglehub

kagglehub.login()

Daha fazla ayrıntı için kagglehub belgelerini inceleyin ve Gemma lisans sözleşmesini kabul ettiğinizden emin olun.

Keras'ı yapılandırma

Keras 3; Tensorflow (varsayılan), PyTorch ve JAX dahil olmak üzere birden fazla derin öğrenme arka ucu destekler. Arka uç, KERAS_BACKEND ortam değişkeni kullanılarak yapılandırılır. Bu değişken, Keras kitaplığı içe aktarılmadan önce ayarlanmalıdır. Aşağıdaki kod snippet'inde, bu değişkenin etkileşimli bir Python ortamında nasıl ayarlanacağı gösterilmektedir.

import os

os.environ["KERAS_BACKEND"] = "tensorflow"  # or "jax" or "torch"

4. LIT'i ayarlama

LIT, Python Not Defterleri'nde veya web sunucusu üzerinden kullanılabilir. Bu Codelab, not defteri kullanım alanına odaklanmaktadır. Google Colab'da bu Codelab'i takip etmenizi öneririz.

Bu Codelab'de, KerasNLP hazır ayarını kullanarak Gemma v2 2B IT'yi yükleyeceksiniz. Aşağıdaki snippet, Gemma'yı başlatır ve bir örnek veri kümesini LIT Notebook widget'ına yükler.

from lit_nlp.examples.prompt_debugging import notebook as lit_pdbnb

lit_widget = lit_pdbnb.make_notebook_widget(
    ['sample_prompts'],
    ["gemma2_2b_it:gemma2_instruct_2b_en"],
)

İki gerekli konumsal bağımsız değişkene iletilen değerleri değiştirerek widget'ı yapılandırabilirsiniz:

  • datasets_config: Veri kümesi adlarını ve yüklenecek yolları içeren bir dize listesi ("veri kümesi:yol" şeklinde). Yol, URL veya yerel dosya yolu olabilir. Aşağıdaki örnekte, LIT dağıtımında sağlanan örnek istemleri yüklemek için sample_prompts özel değeri kullanılmaktadır.
  • models_config: "model:path" şeklinde, model adlarını ve yüklenecek yolları içeren bir dize listesi. Yol, URL, yerel dosya yolu veya yapılandırılan derin öğrenme çerçevesi için bir hazır ayarın adı olabilir.

LIT'i ilgilendiğiniz modeli kullanacak şekilde yapılandırdıktan sonra, widget'ı Not Defteri'nizde oluşturmak için aşağıdaki kod snippet'ini çalıştırın.

lit_widget.render(open_in_new_tab=True)

Kendi Verilerinizi Kullanma

Metinden metne üretken bir model olan Gemma, metin girişi alır ve metin çıkışı oluşturur. LIT, yüklenen veri kümelerinin yapısını modellere iletmek için özel API kullanır. LIT'teki LLM'ler, iki alan sağlayan veri kümeleriyle çalışmak üzere tasarlanmıştır:

  • prompt: Metnin oluşturulacağı modele verilen giriş ve
  • target: Gerçek kişilerden gelen "kesin referans" yanıtları veya başka bir modelden önceden oluşturulmuş yanıtlar gibi isteğe bağlı bir hedef sırası.

LIT, bu Codelab'i ve LIT'in genişletilmiş istemle hata ayıklama eğitimini destekleyen aşağıdaki kaynaklardan alınan örnekler içeren küçük bir sample_prompts grubu içerir.

  • GSM8K: İlkokul matematik problemlerini birkaç örnekle çözme.
  • Gigaword Karşılaştırması: Kısa makalelerden oluşan bir koleksiyon için başlık oluşturma.
  • Ana hatlarla istem: Nesnelerin yönergeler/sınırlarla nasıl kullanılacağıyla ilgili yeni fikirler üretme.

Ayrıca, kendi verilerinizi prompt ve isteğe bağlı olarak target alanlarına sahip kayıtlar içeren bir .jsonl dosyası (örnek) olarak veya LIT'in Dataset API'sini kullanarak herhangi bir biçimde kolayca yükleyebilirsiniz.

Örnek istemleri yüklemek için aşağıdaki hücreyi çalıştırın.

5. LIT'te Gemma için kısa istemleri analiz etme

Günümüzde istem verme, bilim kadar sanat da gerektiriyor. LIT, Gemma gibi büyük dil modelleri için istemleri deneysel olarak iyileştirmenize yardımcı olabilir. Aşağıda, Gemma'nın davranışlarını keşfetmek, olası sorunları tahmin etmek ve güvenliğini artırmak için LIT'in nasıl kullanılabileceğine dair bir örnek göreceksiniz.

Karmaşık istemlerdeki hataları belirleme

LLM tabanlı yüksek kaliteli prototipler ve uygulamalar için en önemli istem tekniklerinden ikisi az sayıda istem (istemde istenen davranışa dair örnekler dahil) ve düşünce zinciri'dir (LLM'nin nihai çıkışından önce bir açıklama veya akıl yürütme biçimi dahil). Ancak etkili bir istem oluşturmak genellikle zordur.

Bir kullanıcının, yemekleri beğenip beğenmeyeceğini zevklerine göre değerlendirmesine yardımcı olma örneğini düşünün. İlk prototip düşünce zinciri istem şablonu şöyle görünebilir:

def analyze_menu_item_template(food_likes, food_dislikes, menu_item):
  return f"""Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: {food_likes}
Taste-dislikes: {food_dislikes}
Suggestion: {menu_item}
Analysis:"""

Bu istemle ilgili sorunları fark ettiniz mi? LIT, LM Öne Çıkan Noktalar modülü ile istemini incelemenize yardımcı olur.

6. Hata ayıklama için sıra belirginliğini kullanma

Önem, mümkün olan en küçük düzeyde (ör. her giriş jetonu için) hesaplanır ancak LIT, jeton önemini satırlar, cümleler veya kelimeler gibi daha yorumlanabilir daha büyük aralıklarda toplayabilir. Öne Çıkan Öğeler Gezgin'de öne çıkan öğeler ve bunları istenmeyen önyargıları tespit etmek için nasıl kullanacağınız hakkında daha fazla bilgi edinin.

İsteme, istem şablonu değişkenleri için yeni bir örnek girişi vererek başlayalım:

food_likes = """Cheese"""
food_dislikes = """Can't eat eggs"""
menu_item = """Quiche Lorraine"""

prompt = analyze_menu_item_template(food_likes, food_dislikes, menu_item)
print(prompt)

fewshot_mistake_example = {'prompt': prompt}  # you'll use this below
Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis:

LIT kullanıcı arayüzünü yukarıdaki hücrede veya ayrı bir sekmede açtıysanız bu istemi eklemek için LIT'in Veri Noktası Düzenleyicisi'ni kullanabilirsiniz:

LIT Veri Noktası Düzenleyicisi

Widget'ı doğrudan istenen istemle yeniden oluşturmanın başka bir yolu da şudur:

lit_widget.render(data=[fewshot_mistake_example])

Modelin şaşırtıcı şekilde tamamlandığını unutmayın:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: A savoury tart with cheese and eggs
Recommendation: You might not like it, but it's worth trying.

Model, yiyemeyeceğinizi açıkça belirttiğiniz bir şeyi neden yemenizi öneriyor?

Sıralamanın belirginliği, birkaç örnek içeren örneklerimizde olduğu gibi temel sorunun vurgulanmasına yardımcı olabilir. İlk örnekte, analiz bölümündeki it has cooked onions in it, which you don't like düşünce zinciri, nihai öneri You have to try it ile eşleşmiyor.

LM Önem modülünde "Cümleler"i ve ardından öneri satırını seçin. Kullanıcı arayüzü artık aşağıdaki gibi görünecektir:

LIT Öne Çıkan Noktalar

Bu, insan hatasını vurgular: Öneri bölümünün yanlışlıkla kopyalanıp yapıştırılması ve güncellenmemesi.

Şimdi ilk örnekteki "Öneri"yi Avoid olarak düzeltip tekrar deneyelim. LIT'te bu örnek, örnek istemlere önceden yüklenmiştir. Bu nedenle, bu küçük yardımcı işlevi kullanarak örneği alabilirsiniz:

def get_fewshot_example(source: str) -> str:
  for example in datasets['sample_prompts'].examples:
    if example['source'] == source:
      return example['prompt']
  raise ValueError(f'Source "{source}" not found in the dataset.')

lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-fixed')}])

Model tamamlama oranı şu şekilde olur:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish contains eggs and cheese, which you don't like.
Recommendation: Avoid.

Bu deneyimden çıkarabileceğimiz önemli bir ders: Erken prototipleme, önceden düşünmeyebileceğiniz riskleri ortaya çıkarmaya yardımcı olur. Ayrıca, dil modellerinin hatalara yatkın olması, hataları proaktif olarak hesaba katmayı gerektirir. Bu konuyla ilgili daha fazla bilgiyi yapay zeka ile tasarım yapmayla ilgili Kullanıcılar ve Yapay Zeka Kılavuzumuzda bulabilirsiniz.

Düzeltilen birkaç atış istemi daha iyi olsa da hâlâ tam olarak doğru değil: Kullanıcıya yumurtadan kaçınmasını doğru bir şekilde söylüyor ancak gerekçe doğru değil. Kullanıcı yumurta yiyemediğini belirtmişken yumurtayı sevmediği söyleniyor. Aşağıdaki bölümde, daha iyi sonuçlar elde etmenin yollarını göreceksiniz.

7. Model davranışını iyileştirmek için hipotezleri test etme

LIT, istemlerdeki değişiklikleri aynı arayüzde test etmenizi sağlar. Bu örnekte, modelin davranışını iyileştirmek için bir anayasa eklemeyi test edeceksiniz. Anayasalar, modelin oluşturulmasına rehberlik edecek ilkeleri içeren tasarım istemlerini ifade eder. Son yöntemler, anayasal ilkelerin etkileşimli türetimini bile sağlıyor.

İsteminizi daha da iyileştirmek için bu fikri kullanalım. İstemimizin en üstüne, oluşturulacak içeriğin temel ilkelerini içeren bir bölüm ekleyin. İstemimiz şu anda şu şekilde başlıyor:

Analyze a menu item in a restaurant.

* The analysis should be brief and to the point.
* The analysis and recommendation should both be clear about the suitability for someone with a specified dietary restriction.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: Avoid.

...

lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-constitution')}])

Bu güncellemeyle örnek yeniden çalıştırılabilir ve çok farklı bir sonuç gözlemlenebilir:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish contains eggs, which you can't eat.
Recommendation: Not suitable for you.

Ardından, bu değişikliğin neden gerçekleştiği hakkında fikir edinmek için istem belirginliği yeniden incelenebilir:

LIT Öne Çıkan Noktalar

Önerinin çok daha güvenli olduğunu fark edin. Ayrıca, "Sizin için uygun değil" ifadesi, analizin (düşünce zinciri) yanı sıra diyet kısıtlamasına göre uygunluğu açıkça belirtme ilkesinden etkilenir. Bu sayede, çıktının doğru nedenle gerçekleştiğinden emin olabilirsiniz.

8. Model araştırma ve keşfine teknik olmayan ekipleri dahil etme

Yorumlanabilirlik, XAI, politika, hukuk ve daha fazla alanda uzmanlık gerektiren bir ekip çalışmasıdır.

Geliştirmenin ilk aşamalarındaki modellerle etkileşim kurmak geleneksel olarak önemli düzeyde teknik uzmanlık gerektiriyordu. Bu da bazı ortak çalışanların modellere erişip bunları incelemesini zorlaştırıyordu. Geçmişte bu ekiplerin ilk prototipleme aşamalarına katılmasını sağlayacak araçlar yoktu.

LIT sayesinde bu paradigmanın değişebileceğini umuyoruz. Bu kod laboratuvarını kullanarak gördüğünüz gibi, LIT'in görsel aracı ve belirginliği inceleme ve örnekleri keşfetme konusundaki etkileşimli özelliği, farklı paydaşların bulguları paylaşmasına ve iletmesine yardımcı olabilir. Bu sayede model keşfi, araştırma ve hata ayıklama için daha çeşitli ekip arkadaşlarıyla çalışabilirsiniz. Bu teknik yöntemlerle tanıştırmak, modellerin işleyiş şekli hakkındaki bilgilerini artırabilir. Ayrıca, erken model testinde daha çeşitli uzmanlık alanları, iyileştirilebilecek istenmeyen sonuçların ortaya çıkarılmasına da yardımcı olabilir.

9. Özet

Özetle:

  • LIT kullanıcı arayüzü, kullanıcıların doğrudan çıktı oluşturmasını ve "durum ne olurdu?" senaryolarını test etmesini sağlayan etkileşimli model yürütme arayüzü sağlar. Bu, özellikle farklı istem varyasyonlarını test etmek için yararlıdır.
  • LM Önem modülü, önemin görsel bir temsilini sağlar ve model odaklı yapılar (ör. jetonlar) yerine insan odaklı yapılar (ör. cümleler ve kelimeler) hakkında iletişim kurabilmeniz için kontrol edilebilir veri ayrıntı düzeyi sunar.

Model değerlendirmelerinizde sorunlu örnekler bulduğunuzda hata ayıklama için bunları LIT'e getirin. Modelleme göreviyle mantıksal olarak ilişkili olduğunu düşünebileceğiniz en büyük makul içerik birimini analiz ederek başlayın. Modelin istem içeriğine nerede doğru veya yanlış yanıt verdiğini görmek için görselleştirmeleri kullanın. Ardından, olası düzeltmeleri belirlemek için gördüğünüz hatalı davranışı daha ayrıntılı şekilde açıklamak üzere daha küçük içerik birimlerine inin.

Son olarak: Lit sürekli olarak iyileştiriliyor. Özelliklerimiz hakkında daha fazla bilgi edinmek ve önerilerinizi paylaşmak için burayı ziyaret edin.