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 biçimlerinden daha fazla değişiklik gösterebilir. Bu nedenle kullanılan makine öğrenimi modellerini araştırmak, modelin davranış örneklerini incelemek ve sürprizleri araştırmak önemlidir.

Öğrenme Yorumlanabilirlik Aracı (LIT; web sitesi, GitHub), makine öğrenimi modellerinde neden ve nasıl davrandıklarını anlamak için modellerinde hata ayıklama ve analiz yapma amacıyla kullanılabilecek bir platformdur.

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

Öğrenme hedefleri:

  1. Adım sırasının belirginliğini ve model analizinde kullanımlarını anlama.
  2. İstem çıkışlarını ve dizi belirginliğini hesaplamak amacıyla Gemma için LIT'yi ayarlama.
  3. İstem tasarımlarının model çıkışları üzerindeki etkisini anlamak için LM Salience modülüyle dizi belirginliğini kullanma.
  4. LIT'de istem iyileştirmeleri hakkında varsayımlara dayalı geliştirmeler test edilip etkilerini görebilirsiniz.

Not: Bu codelab'de Gemma'nın KerasNLP uygulaması, arka uç için de TensorFlow v2 kullanılır. Süreci takip etmek için GPU çekirdeği kullanmanız önemle tavsiye edilir.

LIT kullanıcı arayüzü demosu

2. Dizi Salience ve Model Analizinde Kullanımları

Gemma gibi metinden metne dönüştürme modelleri, jetonlu metin biçiminde bir giriş sırası alır ve bu girişin tipik takipleri veya tamamlamaları olan yeni jetonlar oluşturur. Bu oluşturma işlemi, her seferinde bir jeton olacak ve model durma koşuluna ulaşana kadar, yeni oluşturulan her jeton girişe ve önceki nesillere eklenerek (döngü halinde) gerçekleşir. Modelin sıra sonu (EOS) jetonu oluşturması veya önceden tanımlanmış maksimum uzunluğa ulaşması, bu duruma örnek olarak verilebilir.

Salience yöntemleri, bir girişin hangi bölümlerinin, çıktının farklı bölümleri için model için önemli olduğunu söyleyebilen açıklanabilir yapay zeka (XAI) tekniklerinin bir sınıfıdır. LIT, çeşitli sınıflandırma görevleri için belirginlik yöntemlerini destekler. Bu yöntemler, bir giriş jetonu dizisinin tahmin edilen etiket üzerindeki etkisini açıklar. Adım sırası belirginliği, bu yöntemleri metinden metne dönüştüren üretken modellere genelleştirir ve önceki jetonların oluşturulan jetonlar üzerindeki etkisini açıklar.

Dizi belirginliği için burada belirtilen Grad L2 Norm yöntemini kullanacaksınız. Bu yöntem, modelin renk geçişlerini analiz eder ve önceki her jetonun çıkış üzerindeki etkisinin büyüklüğünü sağlar. Basit ve verimli olan bu yöntem, sınıflandırma ve diğer ortamlarda iyi performans gösterdiği gösterilmiştir. Salience puanı ne kadar büyükse etki de o kadar yüksektir. Bu yöntem, iyi anlaşıldığı ve yorumlanabilirlik araştırmaları topluluğunda yaygın olarak kullanıldığı için LIT'de kullanılmaktadır.

Daha gelişmiş gradyan tabanlı belirginlik yöntemleri arasında Grad ⋅ Giriş ve entegre gradyanlar yer alır. Ayrıca, LIME ve SHAP gibi daha sağlam olabilen ancak hesaplama işlemi önemli ölçüde daha pahalı olabilen ablasyon temelli yöntemler de vardır. Farklı belirginlik yöntemlerinin ayrıntılı bir karşılaştırması için bu makaleyi inceleyin.

Önemle ilgili keşfedilebilir bu etkileşimli giriş belgesinde, dikkat çekme yöntemlerinin bilimselliği hakkında daha fazla bilgi edinebilirsiniz.

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

En iyi uygulama, bu codelab'i yeni Colab'de uygulamanızdır. Belleğe bir model yükleyeceğiniz için hızlandırıcı çalışma zamanı kullanmanızı öneririz ancak hızlandırıcı seçeneklerinin zamanla değişeceğini ve sınırlamalara tabi olduğunu unutmayın. Daha güçlü hızlandırıcılara erişmek istiyorsanız Colab ücretli abonelikler sunar. Alternatif olarak, makinenizde uygun bir GPU'ya sahipse yerel çalışma zamanı 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.

Bunları güvenle görmezden gelebilirsiniz.

LIT ve Keras NLP'yi yükleyin

Bu codelab'de keras (3) keras-nlp (0.8.0) ve lit-nlp (1.1) son sürümlerine sahip olmanız ve temel modeli indirebilmeniz için bir Kaggle hesabına sahip olmanız gerekir.

!pip install -q -U lit-nlp
!pip uninstall -y umap-learn
!pip install -q -U keras-nlp
!pip install -q -U keras

Kaggle Erişimi

Kaggle'a giriş yapmak için kaggle.json kimlik bilgileri dosyanızı ~/.kaggle/kaggle.json adresinde depolayabilir veya aşağıdaki kodu bir Colab ortamında çalıştırabilirsiniz. Daha fazla ayrıntı için kagglehub paketi dokümanlarına bakın.

import kagglehub

kagglehub.login()

Gemma lisans sözleşmesini de kabul ettiğinizden emin olun.

4. LIT Modellerini Ayarlama

import os

os.environ["KERAS_BACKEND"] = "tensorflow"
import keras
import keras_nlp

# Run at half precision.
keras.config.set_floatx("bfloat16")
model_name = 'gemma_instruct_2b_en'
gemma_model = keras_nlp.models.GemmaCausalLM.from_preset(model_name)

Aşağıdaki kod, Gemma modelinde farkındalığı desteklemek için LIT sarmalayıcılarını başlatır. LIT çerçevesi bunları model olarak ifade eder. Ancak bu örnekte bunlar, yukarıda yüklediğiniz temel gemma_model için farklı uç noktalardır. Bu, LIT'nin isteğe bağlı olarak oluşturma, jetona dönüştürme ve kayıt işlemlerini hesaplamasına olanak tanır.

from lit_nlp.examples.models import instrumented_keras_lms

batch_size = 1
max_sequence_length = 512
init_models = instrumented_keras_lms.initialize_model_group_for_salience
models = init_models(model_name, gemma_model,
                     batch_size=batch_size,
                     max_length=max_sequence_length)

5. LIT veri kümelerini ayarlama

Gemma, metin girişini alıp metin çıktısı oluşturan, metinden metne dayalı bir üretken modeldir. LIT'nin modelleri, veri kümelerinin oluşturma işlemini desteklemek için aşağıdaki alanları sağlayacağını varsayar:

  • prompt: KerasGenerationModel girişi.
  • target: "Kesin referans" gibi isteğe bağlı bir hedef dizilimi (altın) yanıt veya modelden önceden oluşturulmuş bir yanıt olabilir.

LIT, birkaç farklı kaynaktan örneklerle küçük bir sample_prompts grubu içerir. Örneğin:

İsterseniz kendi verilerinizi, prompt ve isteğe bağlı olarak target alanlarını içeren kayıtlar içeren bir .jsonl dosyası olarak (örnek) veya LIT'nin Dataset API'sini kullanarak herhangi bir biçimden kolayca yükleyebilirsiniz.

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

from lit_nlp.examples.datasets import lm as lm_data

datasets = {
  'sample_prompts': lm_data.PromptExamples(
      lm_data.PromptExamples.SAMPLE_DATA_PATH
  ),
}

6. LIT kullanıcı arayüzünü ayarlama

LIT, insan etkileşimli bir şekilde değerlendirme ve model davranışını inceleme olanağı sunan etkileşimli bir model anlama aracıdır. LIT kullanıcı arayüzü, aşağıdakileri yapmanıza olanak tanıyarak bu etkileşimi kolaylaştırır:

  • veri kümelerinizi ve çıkışlarınızı canlı olarak görselleştirin.
  • model davranışını yönlendiren giriş jetonlarını anlamak için belirginlik yöntemleri çalıştırma ve
  • hipotezleri test etmek için karşıt gerçekler oluşturmaktır.

LIT tüm bunları aynı arayüzde yaparak farklı araçlar arasında geçiş zorluğunu azaltır. Bu yöntem, özellikle bu codelab'in ilerleyen bölümlerinde odaklanacağınız istem mühendisliği gibi görevler için yararlıdır.

Bu kullanıcı arayüzü düzeni, diğer tüm üretken dil modelleri için kullanılabilir. Burada listelenenlerin dışındaki özelliklerle ilgileniyorsanız tam listeye buradan ulaşabilirsiniz.

from lit_nlp.api import layout
modules = layout.LitModuleName

LM_SALIENCE_LAYOUT = layout.LitCanonicalLayout(
    left={
        'Data Table': [modules.DataTableModule],
        'Datapoint Editor': [modules.DatapointEditorModule],
    },
    upper={  # if 'lower' not specified, this fills the right side
        'Salience': [modules.LMSalienceModule],
    },
    layoutSettings=layout.LayoutSettings(leftWidth=40),
    description='Custom layout for language model salience.',
)

Bu kod, LIT sunucusunu başlatır. Bu işlem birkaç saniye sürebilir çünkü ayrıca modeli örnek istemlerde çalıştırıp sonucu önbelleğe alır.

from lit_nlp import notebook as lit_notebook

lit_widget = lit_notebook.LitWidget(
    models=models,
    datasets=datasets,
    layouts={'default': LM_SALIENCE_LAYOUT},
    default_layout='default',
)

Artık kullanıcı arayüzünü gösterebilirsiniz:

lit_widget.render(height=800)

LIT kullanıcı arayüzü demosu

LIT'yi yeni bir sekmede tam sayfa olarak da açabilirsiniz. Bu kodu çalıştırın ve görüntülenen bağlantıyı tıklayın:

lit_widget.render(open_in_new_tab=True)

Not: LIT'yi normal bir .py komut dosyasında kullanıyorsanız, bağımsız bir sunucu oluşturmak için LitWidget yerine lit_nlp.dev_server.Server() kullanın. Daha fazla bilgi için LIT belgelerini inceleyin.

7. LIT'de Gemma için Birkaç Çekim İstemi Analizi

Günümüzde, istem oluşturmak bilim kadar sanattır ve LIT, Gemma gibi büyük dil modellerine yönelik istemleri deneysel olarak iyileştirmenize yardımcı olabilir. LIT'nin Gemma'nın davranışlarını incelemek, olası sorunları öngörmek ve güvenliğini artırmak için nasıl kullanılabileceğini göreceksiniz.

Karmaşık istemlerdeki hataları tanımlama

Yüksek kaliteli LLM tabanlı prototipler ve uygulamalar için en önemli istem tekniklerinden ikisi, birkaç hızlı istem (istemde istenen davranışın örnekleri dahil) ve düşünce zinciri (LLM'nin nihai sonucundan önce bir açıklama veya akıl yürütme biçimi dahil) olmaktır. Ancak etkili bir istem oluşturmak genellikle zordur.

Birinin yemeklerini kendi zevkine göre sevip sevmeyeceklerini değerlendirmesine yardımcı olduğunuz bir örnek 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 istemdeki sorunları fark ettiniz mi? LIT, LM Salience modülü ile istemi incelemenize yardımcı olur.

8. Hata ayıklama için adım sırası belirginliğini kullan

Salience mümkün olan en küçük düzeyde hesaplanır (ör. her bir giriş jetonu için) ancak LIT, jeton belirginliğini satırlar, cümleler veya kelimeler gibi daha yorumlanabilir daha geniş aralıklarda toplayabilir. Saliency Explorable'da istenmeyen önyargıları tanımlamak için alaka düzeyi ve bunun nasıl kullanılacağı hakkında daha fazla bilgi edinin.

İsteme, istem şablonu değişkenleri için yeni bir örnek giriş 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 şu istemi eklemek için LIT'nin Veri Noktası Düzenleyicisi'ni kullanabilirsiniz:

LIT Veri Noktası Düzenleyicisi

Başka bir yol da widget'ı doğrudan ilgilendiğiniz istemle yeniden oluşturmaktır:

lit_widget.render(data=[fewshot_mistake_example])

Şaşırtıcı model tamamlamasına dikkat edin:

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, neden yiyemediğinizi açıkça söylediğiniz bir şeyi yemenizi öneriyor?

Adım sırasının belirginliği, birkaç çekimlik örneklerimizde de gördüğümüz kök sorunu vurgulamaya yardımcı olabilir. İlk örnekte, it has cooked onions in it, which you don't like analiz bölümündeki düşünce zinciri akıl yürütmesi, You have to try it numaralı nihai öneriyle eşleşmiyor.

LM Salience modülünde "Cümleler"i seçin öneri satırını seçin. Kullanıcı arayüzü aşağıdaki gibi görünecektir:

LIT Salience

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

Şimdi "Öneri"yi düzeltelim durumu Avoid olarak değiştirin ve tekrar deneyin. LIT'de bu örnek, örnek istemlere önceden yüklenmiştir. Böylece bu örneği almak için bu küçük yardımcı program işlevini kullanabilirsiniz:

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')}])

Artık model tamamlama ş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.

Buradan çıkarılacak önemli bir ders şudur: Prototipin erken oluşturulması, önceden aklınıza gelmemiş olabilecek riskleri ortaya çıkarmaya yardımcı olur ve dil modellerinin hataya açık yapısı, bir kişinin hatalara karşı proaktif bir şekilde tasarım yapması gerektiği anlamına gelir. Bu konuyla ilgili ayrıntılı bilgiyi İnsan + Yapay Zeka Rehberimizde yapay zeka ile tasarım yapmayla ilgili bulabilirsiniz.

Düzeltilmiş birkaç atış istemi daha iyi olsa da tam olarak doğru değildir: kullanıcıya yumurtadan kaçınmasını doğru söylüyor, ancak çıkardığı mantık doğru değil. Aslında kullanıcı yumurta yiyemediğini söylese de yumurtadan hoşlanmadığını söylüyor. Aşağıdaki bölümde, performansınızı nasıl daha iyi yapabileceğinizi göreceksiniz.

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

LIT, istemlerde yapılan değişiklikleri aynı arayüzde test etmenize olanak tanır. Bu örnekte, modelin davranışını iyileştirmek için bir anayasa eklemeyi test edeceksiniz. Anayasalar, model üretimine yön veren ilkeleri içeren tasarım istemlerini ifade eder. Son yöntemler anayasal ilkelerin etkileşimli türevlenmesini bile mümkün kılmaktadır.

İstemi daha da iyileştirmek için bu fikri kullanalım. İstemimizin en üstüne, nesille ilgili ilkeleri içeren bir bölüm ekleyin. Bu bölüm şimdi ş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 birlikte örnek yeniden çalıştırılabilir ve çok farklı bir çıkış 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.

Bu değişikliğin neden gerçekleştiğini anlamanıza yardımcı olması için istem belirginliği yeniden incelenebilir:

LIT Salience

Bu önerinin çok daha güvenli olduğuna dikkat edin. Ayrıca "Sizin için uygun değil" analiziyle (düşünce zinciri) birlikte diyet kısıtlamasına göre uygunluğu açıkça belirtme ilkesinden etkilenir. Bu, çıktının doğru nedenle ortaya çıktığına dair daha fazla güven sağlar.

10. Model araştırma ve araştırma çalışmalarına teknik olmayan ekipleri dahil etme

Yorumlanabilirlik, XAI, politika, hukuk ve diğer alanlarda uzmanlığı kapsayan bir ekip çalışması anlamına gelir.

Modellerle geliştirmenin ilk aşamalarında etkileşime geçmek, geleneksel olarak önemli bir teknik uzmanlık gerektirmesi, bazı ortak çalışanların modellere erişmelerini ve bu modelleri araştırmalarını zorlaştırıyordu. Bu ekiplerin ilk prototip oluşturma aşamalarına katılmasını sağlayacak araçlar geçmişten beri mevcut değildi.

LIT sayesinde bu paradigmanın değişebileceğini umuyoruz. Bu codelab'de gördüğünüz gibi, LIT'nin görsel ortamı ve etkileşimliliği sayesinde belirginliği inceleme ve örnekleri keşfetme becerisi, 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 geniş çeşitlilikte ekip arkadaşlarını bir araya getirebilirsiniz. Müşterilerinizi bu teknik yöntemlerle tanıştırmak, modellerin nasıl çalıştığını daha iyi anlamalarını sağlayabilir. Ayrıca, erken model testlerinde daha fazla çeşitlilik içeren bir uzmanlık, iyileştirilebilecek istenmeyen sonuçların ortaya çıkarılmasına da yardımcı olabilir.

11. Özet

Özetle:

  • LIT kullanıcı arayüzü, etkileşimli model yürütme işlemi için bir arayüz sağlayarak kullanıcıların doğrudan çıkışları oluşturmasına ve "acaba" testine olanak tanır. senaryoları ele alacağız. Bu, özellikle farklı istem varyasyonlarını test ederken yararlıdır.
  • LM Salience modülü, belirginliğin görsel bir temsilini ve kontrol edilebilir veri ayrıntı düzeyini sağlar. Böylece, model merkezli yapılar (ör. jetonlar) yerine insan odaklı yapılar (ör. cümleler ve kelimeler) hakkında iletişim kurabilirsiniz.

Model değerlendirmelerinizde sorunlu örnekler bulduğunuzda hata ayıklama için bu örnekleri LIT'ye aktarın. Modelleme göreviyle mantıksal olarak ilişkili olduğunu düşündüğünüz en mantıklı içerik birimini analiz ederek başlayın, modelin istem içeriğine doğru ya da yanlış bir şekilde nerede katıldığını görmek için görselleştirmeleri kullanın ve ardından görmek istediğiniz yanlış davranışı daha ayrıntılı bir şekilde açıklamak için daha küçük içerik birimlerini ayrıntılı olarak inceleyin.

Son olarak: Edebiyat sürekli olarak gelişiyor. Burada özelliklerimiz hakkında daha fazla bilgi edinin ve önerilerinizi paylaşın.