1. Wprowadzenie
Produkty oparte na generatywnej AI są stosunkowo nowe, a zachowanie aplikacji może się różnić bardziej niż w przypadku wcześniejszych form oprogramowania. Dlatego ważne jest, aby przetestować używane modele uczenia maszynowego, zbadać przykłady ich działania i zidentyfikować niespodzianki.
Narzędzie do analizowania interpretowalności (LIT) (strona internetowa, GitHub) to platforma do debugowania i analizowania modeli systemów uczących się, która pozwala zrozumieć, dlaczego i jak działają.
Z tego ćwiczenia dowiesz się, jak używać funkcji LIT, aby lepiej wykorzystać model Gemma od Google. To ćwiczenie z programowania pokazuje, jak za pomocą techniki interpretowalności, jaką jest wyróżnienie sekwencji, analizować różne podejścia do tworzenia promptów.
Cele szkolenia:
- Poznanie znaczenia sekwencji i jej zastosowania w analizie modelu.
- Konfigurowanie LIT w Gemma w celu obliczania wyjściowych promptów i wyróżnienia sekwencji.
- Korzystanie z modułu LM Salience do określania znaczenia sekwencji, aby poznać wpływ projektów promptów na dane wyjściowe modelu.
- Testowanie hipotetycznych ulepszeń promptów w LIT i sprawdzanie ich wpływu.
Uwaga: ten moduł wykorzystuje implementację KerasNLP w Gemme oraz TensorFlow v2 na zapleczu. Zdecydowanie zalecamy korzystanie z rdzenia GPU.
2. Wyróżnienie sekwencji i jego zastosowanie w analizie modeli
Modele generatywne tekst-tekst, takie jak Gemma, przyjmują sekwencję wejściową w postaci tekstu posegmentowanego i generują nowe tokeny, które są typowymi kontynuacjami lub uzupełnieniami tego wejścia. Generowanie odbywa się pojedynczo, a każdy nowo wygenerowany token jest dołączany (w pętli) do danych wejściowych wraz z tokenami z poprzednich generacji, aż do momentu, gdy model osiągnie warunek zatrzymania. Przykłady obejmują sytuację, gdy model wygeneruje token końca sekwencji (EOS) lub osiągnie zdefiniowaną wstępnie maksymalną długość.
Metody natężenia to klasa technik z zakresu zrozumiałej sztucznej inteligencji (XAI), które mogą pomóc Ci określić, które części danych wejściowych są ważne dla modelu w różnych częściach jego danych wyjściowych. LIT obsługuje metody wyróżniania w różnych zadaniach klasyfikacyjnych, które wyjaśniają wpływ sekwencji tokenów wejściowych na prognozowaną etykietę. Wyraźność sekwencji pozwala uogólnić te metody do modeli generatywnych tekst-tekst i wyjaśnia wpływ poprzednich tokenów na wygenerowane tokeny.
Do określenia znaczenia sekwencji użyjesz metody Grad L2 Norm, która analizuje gradienty modelu i podaje wielkość wpływu każdego poprzedzającego tokena na wynik. Ta metoda jest prosta i wydajna, a dodatkowo potwierdzono, że dobrze sprawdza się w klasyfikacji i innych ustawieniach. Im wyższy wynik trafności, tym większy wpływ. Ta metoda jest używana w ramach LIT, ponieważ jest dobrze zrozumiana i stosowana powszechnie w środowisku badaczy interpretowalności.
Bardziej zaawansowane metody ważności danych wejściowych oparte na gradientach to Gradient ⋅ Input i gradienty zintegrowane. Dostępne są też metody oparte na ablacji, takie jak LIME i SHAP, które mogą być bardziej niezawodne, ale znacznie droższe w wykonywaniu. Szczegółowe porównanie różnych metod określenia znaczenia znajdziesz w tym artykule.
Więcej informacji o naukowych podstawach metod wyróżniania znajdziesz w tym interaktywnym wprowadzeniu do wyróżniania.
3. Importy, środowisko i inne kody konfiguracji
Najlepiej przeprowadzić ten samouczek w nowym Colab. Zalecamy korzystanie ze środowiska wykonawczego akceleratora, ponieważ wczytujesz model do pamięci. Pamiętaj jednak, że opcje akceleratora zmieniają się z czasem i są ograniczone. Jeśli chcesz mieć dostęp do wydajniejszych akceleratorów, Colab oferuje płatne subskrypcje. Możesz też użyć środowiska wykonawczego lokalnego, jeśli Twój komputer ma odpowiedni układ GPU.
Uwaga: możesz zobaczyć ostrzeżenia w postaci
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.
Możesz je bezpiecznie zignorować.
Instalowanie biblioteki LIT i Keras NLP
W tym ćwiczeniu będziesz potrzebować najnowszej wersji keras
(3) keras-nlp
(0.14.) i lit-nlp
(1.2) oraz konta Kaggle, aby pobrać model bazowy.
pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'
Dostęp do Kaggle
Aby uwierzytelnić się w Kaggle, możesz:
- przechowywać swoje dane logowania w pliku, np.
~/.kaggle/kaggle.json
; - Użyj zmiennych środowiskowych
KAGGLE_USERNAME
iKAGGLE_KEY
. - Wykonaj te czynności w interaktywnym środowisku Pythona, takim jak Google Colab.
import kagglehub
kagglehub.login()
Aby dowiedzieć się więcej, zapoznaj się z dokumentacją kagglehub
i zaakceptuj umowę licencyjną Gemma.
Konfigurowanie Keras
Keras 3 obsługuje wiele backendów do deep learningu, w tym Tensorflow (domyślny), PyTorch i JAX. Backend jest konfigurowany za pomocą zmiennej środowiskowej KERAS_BACKEND
, którą należy ustawić przed zaimportowaniem biblioteki Keras. Ten fragment kodu pokazuje, jak ustawić tę zmienną w interaktywnym środowisku Pythona.
import os
os.environ["KERAS_BACKEND"] = "tensorflow" # or "jax" or "torch"
4. Konfigurowanie LIT
LIT może być używany w notatnikach Pythona lub na serwerze internetowym. To Codelab skupia się na zastosowaniu notatnika. Możesz je wykonać w Google Colab.
W tym ćwiczeniu Codelab załadujesz model Gemma v2 do użytku w firmie IT przy użyciu wstępnie skonfigurowanego modelu KerasNLP. Ten fragment kodu inicjuje Gemma i wczytuje przykładowy zbiór danych w widżecie Notebook LIT.
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"],
)
Aby skonfigurować widżet, możesz zmienić wartości przekazane do 2 wymaganych argumentów pozycyjnych:
datasets_config
: lista ciągów znaków zawierających nazwy zbiorów danych i ścieżki do wczytania w formacie „dataset:path”, gdzie ścieżka może być adresem URL lub ścieżką do lokalnego pliku. Przykład poniżej używa wartości specjalnejsample_prompts
, aby załadować przykładowe prompty podane w rozkładzie LIT.models_config
: lista ciągów znaków zawierających nazwy modeli i ścieżki do ich wczytania w formacie „model:ścieżka”, gdzie ścieżka może być adresem URL, lokalną ścieżką pliku lub nazwą wstępnie ustawionego frameworku do głębokiego uczenia się.
Gdy skonfigurujesz LIT do używania interesującego Cię modelu, uruchom podany niżej fragment kodu, aby wyrenderować widżet w notatniku.
lit_widget.render(open_in_new_tab=True)
Korzystanie z własnych danych
Gemma to model generatywny „tekst na tekst”, który przetwarza tekst na tekst. LIT używa interfejsu API z opiniami do przekazywania struktury załadowanych zbiorów danych do modeli. Modele LLM w interfejsie LIT są przeznaczone do pracy ze zbiorami danych, które zawierają 2 pola:
prompt
: dane wejściowe do modelu, z którego będzie generowany tekst;target
: opcjonalna docelowa sekwencja, np. odpowiedź „dane podstawowe” od oceniających lub wcześniej wygenerowana odpowiedź z innego modelu.
LIT zawiera mały zestaw sample_prompts
z przykładami z tych źródeł, które obsługują to Codelab i rozszerzony samouczek debugowania.
- GSM8K: rozwiązywanie zadań matematycznych z podstawówki za pomocą przykładów typu „few-shot”.
- Gigaword Benchmark: generowanie nagłówków dla zbioru krótkich artykułów.
- Prompting Constitutional: generowanie nowych pomysłów na wykorzystanie obiektów z wytycznymi lub granicami.
Możesz też łatwo wczytać własne dane, np. jako plik .jsonl
zawierający rekordy z polam prompt
i opcjonalnie target
(przykład) lub z dowolnego formatu za pomocą interfejsu Dataset API usługi LIT.
Aby załadować przykładowe prompty, uruchom komórkę poniżej.
5. Analiza promptów typu Few Shot dla Gemma w LIT
Obecnie prompty to zarówno sztuka, jak i nauka. Narzędzia do ulepszania promptów mogą pomóc Ci w empirycznym ulepszaniu promptów dla dużych modeli językowych, takich jak Gemma. Poniżej znajdziesz przykład tego, jak można używać LIT do badania zachowań Gemmy, przewidywania potencjalnych problemów i zwiększania jej bezpieczeństwa.
Wykrywanie błędów w skomplikowanych promptach
Dwie najważniejsze techniki promptów w przypadku wysokiej jakości prototypów i aplikacji opartych na LLM to prompty krótkie (z przykładami pożądanego zachowania w promptach) oraz łańcuch myślenia (w tym forma wyjaśnienia lub rozumowania przed ostatecznym wyjściem LLM). Tworzenie skutecznego promptu jest jednak często trudne.
Rozważ przykład pomocy komuś w ocenie, czy spodoba mu się dany rodzaj jedzenia. Początkowy prototyp łańcucha myśli może wyglądać tak:
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:"""
Czy zauważyłeś/zauważyłaś problemy z tym promptem? LIT pomoże Ci sprawdzić prompt za pomocą modułu LM dotyczącego widoczności.
6. Używanie wyróżnienia sekwencji do debugowania
Wyraźność jest obliczana na najmniejszym możliwym poziomie (czyli dla każdego tokena wejściowego), ale LIT może agregować wyrazistość tokenów w większe zakresy, które łatwiej interpretować, takie jak wiersze, zdania lub słowa. Dowiedz się więcej o czynnikach wpływających na postrzeganie i o tym, jak można ich używać do wykrywania niezamierzonych uprzedzeń w naszym eksploratorze czynników wpływających na postrzeganie.
Zacznijmy od podania nowego przykładowego promptu dla zmiennych szablonu promptu:
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:
Jeśli masz otwarty interfejs LIT w komórce powyżej lub na osobnej karcie, możesz użyć edytora punktu danych w LIT, aby dodać to prompt:
Innym sposobem jest ponowne wyrenderowanie widżetu bezpośrednio z wyświetlanym promptem:
lit_widget.render(data=[fewshot_mistake_example])
Zauważ, że model został ukończony:
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.
Dlaczego model sugeruje, że należy zjeść coś, czego nie można jeść?
Wyróżnienie sekwencji może pomóc w wyświetleniu głównego problemu, który występuje w naszych przykładach z kilku sesji. W pierwszym przykładzie ciąg logiczny w sekcji analizy it has cooked onions in it, which you don't like
nie pasuje do końcowej rekomendacji You have to try it
.
W module LM Salience kliknij „Sentences” (Zdania), a potem wybierz wiersz rekomendacji. Interfejs powinien teraz wyglądać tak:
To jest przykład błędu ludzkiego: przypadkowego skopiowania i wklejenia części rekomendacji bez jej zaktualizowania.
Teraz popraw wartość „Recommendation” w pierwszym przykładzie na Avoid
i spróbuj ponownie. LIT ma ten przykład wstępnie załadowany w przykładowych promptach, więc możesz użyć tej małej funkcji pomocniczej, aby go pobrać:
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')}])
Teraz ukończenie modelu wygląda tak:
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.
Z tego wynika ważna lekcja: wczesny prototypowanie pomaga wykrywać zagrożenia, o których wcześniej nie pomyślisz, a modele językowe są podatne na błędy, co oznacza, że należy je uwzględniać w projektowaniu. Więcej informacji na ten temat znajdziesz w Przewodniku Ludzie + AI dotyczącym projektowania z wykorzystaniem AI.
Poprawiony prompt z kilkoma zdjęciami jest lepszy, ale nadal nie jest idealny: prawidłowo informuje użytkownika, że powinien unikać jaj, ale uzasadnienie jest nieprawidłowe, ponieważ mówi, że nie lubi jaj, a w rzeczywistości użytkownik stwierdził, że nie może jeść jaj. W następnej sekcji dowiesz się, jak to poprawić.
7. Testowanie hipotez w celu poprawy działania modelu
Interfejs LIT umożliwia testowanie zmian w promptach w ramach tego samego interfejsu. W tym przypadku przetestujesz dodanie konfiguracji constitut(), aby poprawić działanie modelu. Koncepcje to prompty projektowe z zasadami, które ułatwiają generowanie modelu. Najnowsze metody umożliwiają nawet interaktywne wyprowadzanie zasad konstytucyjnych.
Skorzystamy z tego pomysłu, aby jeszcze bardziej ulepszyć prompt. Dodaj sekcję z zasadami generowania na początku promptu, który teraz wygląda tak:
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')}])
Po tej aktualizacji przykład można ponownie uruchomić i uzyskać zupełnie inne dane wyjściowe:
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.
Następnie można ponownie sprawdzić widoczność prompta, aby dowiedzieć się, dlaczego nastąpiła ta zmiana:
Zauważ, że rekomendacja jest znacznie bezpieczniejsza. Ponadto na komunikat „Nie jest odpowiedni dla Ciebie” wpływa zasada wyraźnego określenia przydatności produktu w zależności od ograniczeń dietetycznych oraz analiza (tzw. łańcuch myślenia). Dzięki temu możesz mieć pewność, że wynik jest uzyskiwany z odpowiednich powodów.
8. Włączanie zespołów nietechnicznych do analizowania i sprawdzania modeli
Interpretowalność to praca zespołowa, która wymaga wiedzy z różnych dziedzin, takich jak XAI, zasady, prawo itp.
Interakcje z modelami na wczesnych etapach rozwoju wymagały do tej pory znacznej wiedzy technicznej, co utrudniało niektórym współpracownikom dostęp do tych modeli i ich testowanie. Wcześniej nie było narzędzi, które umożliwiałyby tym zespołom udział we wczesnych fazach prototypowania.
Mamy nadzieję, że dzięki temu podejściu do nauki języka obcego może się to zmienić. Jak widzisz w tym ćwiczeniu, wizualne medium i interaktywna możliwość badania wyróżnienia oraz analizowania przykładów mogą pomóc różnym interesariuszom w udostępnianiu i przekazywaniu wyników. Dzięki temu możesz zaangażować do eksploracji, analizowania i debugowania modelu szersze grono współpracowników. Poznanie tych metod technicznych może pomóc im lepiej zrozumieć, jak działają modele. Ponadto bardziej zróżnicowany zestaw umiejętności w ramach wczesnego testowania modeli może pomóc w odkrywaniu niepożądanych wyników, które można poprawić.
9. Podsumowanie
Podsumowując:
- Interfejs LIT zawiera interfejs do interaktywnego wykonywania modeli, który umożliwia użytkownikom bezpośrednie generowanie wyników i testowanie scenariuszy „co by było, gdyby”. Jest to szczególnie przydatne podczas testowania różnych wariantów prompta.
- Moduł LM Salience zapewnia wizualną reprezentację znaczenia i kontrolowaną szczegółowość danych, dzięki czemu możesz przekazywać informacje o strukturach zorientowanych na człowieka (np. zdania i słowa) zamiast struktur zorientowanych na model (np. tokeny).
Gdy znajdziesz problematyczne przykłady w ocenie modelu, prześlij je do narzędzia LIT na potrzeby debugowania. Zacznij od przeanalizowania największej sensownej jednostki treści, która logicznie wiąże się z zadaniem modelowania. Użyj wizualizacji, aby sprawdzić, gdzie model prawidłowo lub nieprawidłowo interpretuje prompt. Następnie przejdź do mniejszych jednostek treści, aby dokładniej opisać nieprawidłowe działanie, aby zidentyfikować możliwe poprawki.
Na koniec: Lit jest stale ulepszany. Więcej informacji o naszych funkcjach i sugestiach znajdziesz tutaj.