Korzystanie z technologii sztucznej inteligencji (AI) w określonym języku mówionym jest niezbędne, aby wiele firm mogło skutecznie z niej korzystać. Modele z rodziny Gemma mają pewne zdolności wielojęzyczne, ale używanie ich w językach innych niż angielski daje często nieidealne wyniki.
Na szczęście nie musisz uczyć Gemmy całego języka mówionego, aby wykonywać zadania w tym języku. Co więcej, modele Gemma można dostroić tak, aby wykonywały określone zadania w języku o znacznie mniejszej ilości danych i wysiłku, niż mogłoby się wydawać. Dzięki około 20 przykładom żądań i oczekiwań dotyczących odpowiedzi w wybranym języku możesz korzystać z Gemma, aby rozwiązywać różne problemy biznesowe w takim języku, który najlepiej odpowiada Tobie i Twoim klientom.
Film z omówieniem projektu i jego rozszerzania, w tym z opiniami osób, które go stworzyły, znajdziesz na stronie Asystent AI do przetwarzania mowy w sekcji Budowanie z użyciem AI od Google. Możesz też sprawdzić kod tego projektu w repozytorium kodu Gemma Cookbook. W przeciwnym razie możesz rozpocząć przedłużanie projektu, wykonując instrukcje opisane poniżej.
Omówienie
W tym samouczku dowiesz się, jak skonfigurować, uruchomić i rozszerzyć aplikację do zadań opartą na mowie, która została utworzona za pomocą Gemma i Pythona. Aplikacja zapewnia podstawowy interfejs internetowy, który możesz modyfikować zgodnie ze swoimi potrzebami. Aplikacja została stworzona, aby generować odpowiedzi na e-maile klientów fikcyjnej koreańskiej piekarni. Wszystkie dane wejściowe i wyjściowe są w pełni obsługiwane w języku koreańskim. Możesz używać tego wzorca aplikacji w dowolnym języku i w dowolnym zadaniu biznesowym, które wykorzystuje dane wejściowe i dane wyjściowe w postaci tekstu.
Rysunek 1. Interfejs projektu z zapytaniami e-mailowymi dotyczącymi koreańskiej piekarni
Wymagania sprzętowe
Przeprowadź ten proces dostrajania na komputerze z procesorem graficznym (GPU) lub procesorem obliczeniowym Tensor (TPU) oraz z wystarczającą ilością pamięci na obecny model i dane do dostrajania. Aby uruchomić konfigurację dostrajania w tym projekcie, potrzebujesz około 16 GB pamięci GPU, mniej więcej takiej samej ilości zwykłej pamięci RAM i co najmniej 50 GB miejsca na dysku.
Z części tego samouczka poświęconej dostrajaniu modelu Gemma możesz uruchomić środowisko Colab ze środowiskiem wykonawczym GPU T4. Jeśli kompilujesz ten projekt w maszynie wirtualnej Google Cloud, skonfiguruj instancję zgodnie z tymi wymaganiami:
- Sprzęt GPU: do uruchomienia tego projektu wymagany jest procesor NVIDIA T4, a zalecana jest platforma NVIDIA L4 lub nowsza.
- System operacyjny: wybierz opcję Deep Learning on Linux, a zwłaszcza maszynę wirtualną deep learning z CUDA 12.3 M124 ze wstępnie zainstalowanymi sterownikami oprogramowania GPU.
- Rozmiar dysku rozruchowego: zapewnij co najmniej 50 GB miejsca na dysku na dane, modele i oprogramowanie pomocnicze.
Konfigurowanie projektu
Te instrukcje pomogą Ci przygotować ten projekt do rozwoju i testowania. Ogólne kroki konfiguracji obejmują instalację wymaganego oprogramowania, klonowanie projektu z repozytorium kodu, ustawienie kilku zmiennych środowiskowych, instalację bibliotek Pythona i testowanie aplikacji internetowej.
Instalowanie i konfigurowanie
Ten projekt używa Pythona 3 i środowisk wirtualnych (venv
) do zarządzania pakietami i uruchamiania aplikacji. Poniższe instrukcje instalacji dotyczą maszyny z Linuksem.
Aby zainstalować wymagane oprogramowanie:
Zainstaluj Pythona 3 i pakiet środowiska wirtualnego
venv
dla Pythona.sudo apt update sudo apt install git pip python3-venv
Klonowanie projektu
Pobierz kod projektu na komputer programisty. Aby pobrać kod źródłowy projektu, musisz użyć oprogramowania do kontroli wersji git.
Aby pobrać kod projektu:
Sklonuj repozytorium Git za pomocą tego polecenia.
git clone https://github.com/google-gemini/gemma-cookbook.git
Opcjonalnie skonfiguruj lokalne repozytorium Git, aby używać rzadkiego sprawdzania, dzięki czemu będziesz mieć tylko pliki projektu.
cd gemma-cookbook/ git sparse-checkout set Gemma/spoken-language-tasks/ git sparse-checkout init --cone
Instalowanie bibliotek Pythona
Zainstaluj biblioteki Pythona z aktywnym wirtualnym środowiskiem Pythona venv
, aby zarządzać pakietami i zależnościami Pythona. Pamiętaj, aby przed zainstalowaniem bibliotek Pythona za pomocą instalatora pip
aktywować wirtualne środowisko Pythona. Więcej informacji o korzystaniu z wirtualnych środowisk Pythona znajdziesz w dokumentacji Pythona venv.
Aby zainstalować biblioteki Pythona:
W oknie terminala przejdź do katalogu
spoken-language-tasks
:cd Gemma/spoken-language-tasks/
Skonfiguruj i aktywuj środowisko wirtualne Pythona (venv) dla tego projektu:
python3 -m venv venv source venv/bin/activate
Zainstaluj wymagane biblioteki Pythona w tym projekcie za pomocą skryptu
setup_python
../setup_python.sh
Ustawianie zmiennych środowiskowych
Ustaw kilka zmiennych środowiskowych, które są wymagane do uruchomienia tego projektu kodu, w tym nazwę użytkownika Kaggle i klucz tokena Kaggle. Aby je pobrać, musisz mieć konto Kaggle i poprosić o dostęp do modeli Gemma. W tym projekcie dodasz swoją nazwę użytkownika Kaggle i klucz tokena Kaggle do 2 plików .env
, które są odczytywane odpowiednio przez aplikację internetową i program strojenia.
Aby ustawić zmienne środowiskowe:
- Aby uzyskać nazwę użytkownika i klucz tokena Kaggle, wykonaj instrukcje podane w dokumentacji Kaggle.
- Aby uzyskać dostęp do modelu Gemma, postępuj zgodnie z instrukcjami dotyczącymi uzyskiwania dostępu do Gemma, które znajdziesz na stronie Konfiguracja Gemma.
- Utwórz pliki zmiennych środowiskowych dla projektu, tworząc plik tekstowy
.env
w każdej z tych lokalizacji w klonowanym projekcie:k-mail-replier/k_mail_replier/.env k-gemma-it/.env
Po utworzeniu plików tekstowych
.env
dodaj te ustawienia do obu plików:KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE> KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
Uruchamianie i testowanie aplikacji
Po zakończeniu instalacji i konfiguracji projektu uruchom aplikację internetową, aby sprawdzić, czy została prawidłowo skonfigurowana. Zanim zaczniesz edytować projekt na własne potrzeby, sprawdź, czy nie ma żadnych błędów.
Aby uruchomić i przetestować projekt:
W oknie terminala przejdź do katalogu
/k_mail_replier/
:cd spoken-language-tasks/k-mail-replier/
Uruchom aplikację za pomocą skryptu
run_flask_app.sh
:./run_flask_app.sh
Po uruchomieniu aplikacji internetowej kod programu wyświetla adres URL, pod którym możesz przeglądać i testować aplikację. Zwykle jest to:
http://127.0.0.1:5000/
W interfejsie internetowym naciśnij przycisk 답변 작성 pod pierwszym polem do wprowadzania danych, aby wygenerować odpowiedź z modelu.
Pierwsza odpowiedź z modelu po uruchomieniu aplikacji trwa dłużej, ponieważ musi wykonać kroki inicjowania przy pierwszym uruchomieniu generacji. Kolejne żądania i generowanie w już uruchomionej aplikacji internetowej kończą się w krótszym czasie.
Rozszerzenie aplikacji
Po uruchomieniu aplikacji możesz ją rozszerzyć, modyfikując interfejs użytkownika i logikę biznesową, tak aby działała ona w zadaniach, które są istotne dla Ciebie lub Twojej firmy. Zachowanie modelu Gemma możesz też zmodyfikować za pomocą kodu aplikacji, zmieniając komponenty promptu, które aplikacja wysyła do generatywnego modelu AI.
Aplikacja przekazuje modelowi instrukcje wraz z danymi wejściowymi od użytkownika, a model wysyła do użytkownika pełne prompty. Możesz zmodyfikować te instrukcje, aby zmienić działanie modelu, np. określić, że model powinien wyodrębnić informacje z żądania i umieścić je w formacie uporządkowanych danych, np. w formacie JSON. Prostszym sposobem na zmianę zachowania modelu jest podanie dodatkowych instrukcji lub wskazówek dotyczących jego odpowiedzi, np. określenie, że generowane odpowiedzi powinny być pisane w uprzejmy sposób.
Aby zmienić instrukcje dotyczące promptu:
- W projekcie dotyczącym zadań związanych z językiem mówionym otwórz plik kodu
k-mail-replier/k_mail_replier/app.py
. W kodzie
app.py
dodaj instrukcje dodawania do funkcjiget_prompt():
:def get_prompt(): return "발신자에게 요청에 대한 감사를 전하고, 곧 자세한 내용을 알려드리겠다고 정중하게 답장해 주세요. 정중하게 답변해 주세요!:\n"
W tym przykładzie do instrukcji w języku koreańskim dodano zdanie „Proszę o uprzejmą odpowiedź”.
Udostępnienie dodatkowych instrukcji dotyczących promptów może w dużym stopniu wpłynąć na generowane dane wyjściowe, a ich wdrożenie wymaga znacznie mniej wysiłku. Wypróbuj tę metodę, aby sprawdzić, czy model zapewnia pożądane zachowanie. Jednak korzystanie z instrukcji dotyczących promptów w celu modyfikacji działania modelu Gemma ma swoje granice. W szczególności ogólny limit tokenów wejściowych modelu, który wynosi 8192 tokenów w przypadku Gemma 2, wymaga zrównoważenia szczegółowych instrukcji prompta z rozmiarem nowych danych, aby nie przekroczyć tego limitu.
Co więcej, jeśli Gemma ma wykonywać zadania w języku innym niż angielski, samo wykorzystanie modelu podstawowego raczej nie przyniesie miarodajnych wyników. Zamiast tego dostrój model za pomocą przykładów w języku docelowym, a następnie rozważ modyfikację instrukcji dotyczących promptów, aby wprowadzić niewielkie poprawki w danych wyjściowych dostrojonego modelu.
Dostrój model
Dokładne dostrojenie modelu Gemma to zalecany sposób na to, aby model skutecznie odpowiadał w języku innym niż angielski. Nie musisz jednak osiągnąć pełnej biegłości w języku docelowym, aby model mógł wykonywać zadania w tym języku. Aby uzyskać podstawową funkcjonalność w języku docelowym, możesz użyć około 20 przykładów. W tej sekcji samouczka dowiesz się, jak skonfigurować i przeprowadzić dostrojenie modelu Gemma do konkretnego zadania w określonym języku.
Poniższe instrukcje wyjaśniają, jak przeprowadzić dokładne dostrojenie w środowisku VM. Możesz też wykonać tę operację za pomocą powiązanego notatnika Colab w ramach tego projektu.
Wymagania sprzętowe
Wymagania dotyczące mocy obliczeniowej do dostrajania są takie same jak wymagania sprzętowe w przypadku pozostałej części projektu. Operację dostrajania możesz wykonać w środowisku Colab z użyciem środowiska wykonawczego T4 GPU jeśliograniczysz tokeny wejściowe do 256 i rozmiar partii do 1.
Przygotuj dane
Zanim zaczniesz dostrajać model Gemma, musisz przygotować dane do dostrajania. Gdy dostosowujesz model do konkretnego zadania i języka, potrzebujesz zestawu przykładów zapytań i odpowiedzi w tym języku docelowym. Te przykłady powinny zawierać tekst żądania bez żadnych instrukcji oraz tekst oczekiwanej odpowiedzi. Na początek przygotuj zbiór danych z około 20 przykładami. Te przykłady powinny obejmować pełną gamę żądań i idealnych odpowiedzi. Upewnij się, że żądania i odpowiedzi nie są powtarzalne, ponieważ może to spowodować powtarzanie się odpowiedzi modeli i nieprawidłowe dostosowywanie ich do zmian w żądaniach. Tabela poniżej zawiera kilka przykładowych rekordów z zbioru danych tego przykładu kodu:
Żądanie | Odpowiedź |
---|---|
안녕하세요, 2주 뒤에 있을 아이 생일을 위해 3호 케이크 3개를 주문하고 싶은데 가능할까요? | 고객님, 안녕하세요. 2주 뒤 아이 생일을 엔한 3씨 케이미 2개 주문 문씨 감사합니컴. 네, 3호 케이크 2개 주문 가능합니다. 아이 생일 케이크인 만큼 더욱 신경 써서 정성껏 준비하겠습니다. 혹시 원하시는 디자인이나 특별한 요청 사항이 있으시면 편하게 말씀해주세요. 픽업 날짜와 시간을 알려주시면 더욱 자세한 안내를 도와드리겠습니다. 다시 한번 문의 감사드리며, 아이 생일 진심으로 축하합니다! [가게 이름] 드림 |
안녕하세요, 9월 15일에 있을 아들의 돌잔치를 위해 케이크를 주문하고 싶습니다. - 케이크 종류: 생크림 케이크 - 크기: 2호 - 디자인: 아기자기한 동물 디자인 - 문구: "첫 생일 축하해, 사랑하는 아들!" - 픽업 날짜 및 시간: 9월 14일 오후 3시 가격 및 주문 가능 여부를 알려주시면 감사하겠습니다. 감사합니다. 김민지 드림 | 안녕하세요, 김민지 님, 9월 15일 아드님의 돌잔치를 위한 케이크 주문 문의 감사합니다. - 생크림 케이크 2호, 아기자기한 동물 디자인, "첫 생일 축하해, 사랑하는 아들!" 문구, 9월 14일 오후 3시 픽업 모두 가능합니다. - 가격은 5만원입니다. 주문을 원하시면 원락 주세요 감사합니컴. [가게 이름] 드림 |
Tabela 1. Częściowa lista zbioru danych służącego do dostosowania odpowiedzi na e-maila z ofertą w koreańskiej piekarni.
Format i wczytywanie danych
Możesz przechowywać dane dostrajania w dowolnym dogodnym formacie, w tym rekordy bazy danych, pliki JSON, CSV lub zwykły tekst, jeśli tylko masz możliwość pobrania rekordów za pomocą kodu w Pythonie. Dla wygody przykładowy program do dostrajania pobiera rekordy z repozytorium online.
W tym przykładzie program do dostrajania wczytuje zbiór danych do dostrajania w module k-gemma-it/main.py
za pomocą funkcji prepare_tuning_dataset()
:
def prepare_tuning_dataset():
tokenizer = keras_nlp.models.GemmaTokenizer.from_preset(model_id)
# load data from repository (or local directory)
from datasets import load_dataset
ds = load_dataset(
# Dataset : https://huggingface.co/datasets/bebechien/korean_cake_boss
"bebechien/korean_cake_boss",
split="train",
)
...
Jak już wspomnieliśmy, możesz przechowywać zbiór danych w dowolnym formacie, o ile tylko możesz pobierać żądania z powiązanymi odpowiedziami i zbierać je w postaci ciągu tekstowego, który jest używany jako rekord strojenia.
Zbieranie rekordów dostrajania
W rzeczywistym procesie dostrajania każde żądanie i odpowiedź są łączone w jeden ciąg znaków z instrukcjami dotyczącymi promptów i tagami do wskazywania treści żądania i treści. Program dostrajania następnie tokenizuje ciąg znaków do wykorzystania przez model. Kod do konfiguracji rekordu dostrajania znajdziesz w funkcji prepare_tuning_dataset()
modułu k-gemma-it/main.py
:
def prepare_tuning_dataset():
...
prompt_instruction = "다음에 대한 이메일 답장을 작성해줘."
for x in data:
item = f"<start_of_turn>user\n{prompt_instruction}\n\"{x['input']}\"<end_of_turn>\n<start_of_turn>model\n{x['output']}<end_of_turn>"
length = len(tokenizer(item))
# skip data if the token length is longer than our limit
if length < token_limit:
tuning_dataset.append(item)
if(len(tuning_dataset)>=num_data_limit):
break
...
Ta funkcja odczytuje dane i sformatuje je, dodając tagi start_of_turn
i end_of_turn
, które są wymaganym formatem podczas dostarczania danych do dostrajania modelu Gemma. Ten kod wstawia też do każdego żądania parametr prompt_instruction
, który należy odpowiednio zmodyfikować w sposób odpowiedni dla Twojej aplikacji.
Generuj wagi modelu
Po załadowaniu danych do dostrajania możesz uruchomić program do dostrajania. W przypadku tej przykładowej aplikacji proces dostrajania korzysta z biblioteki Keras NLP, aby dostosować model za pomocą adaptacji niskiego rzędu (tzw. LoRA), która służy do generowania nowych wag modelu. W porównaniu z tuningiem o pełnej precyzji użycie LoRA jest znacznie bardziej efektywne pod względem wykorzystania pamięci, ponieważ przybliża zmiany do wag modelu. Następnie możesz nałożyć te przybliżone wagi na istniejące wagi modelu, aby zmienić jego działanie.
Aby wykonać etap dostrajania i obliczyć nowe wagi:
W oknie terminala przejdź do katalogu
k-gemma-it/
.cd spoken-language-tasks/k-gemma-it/
Uruchom proces dostrajania za pomocą skryptu
tune_model
:./tune_model.sh
Proces dostrajania może potrwać kilka minut w zależności od dostępnych zasobów obliczeniowych. Po pomyślnym zakończeniu procesu program do dostrajania zapisuje nowe pliki *.h5
weight w katalogu k-gemma-it/weights
w tym formacie:
gemma2-2b_k-tuned_4_epoch##.lora.h5
Rozwiązywanie problemów
Jeśli dostrajanie nie zakończy się powodzeniem, przyczyny mogą być dwie:
- Brak pamięci / wyczerpanie zasobów: te błędy występują, gdy proces dostrajania wymaga pamięci przekraczającej dostępną pamięć GPU lub procesora. Podczas procesu dostrajania nie uruchamiaj aplikacji internetowej. Jeśli dostosowywanie odbywa się na urządzeniu z 16 GB pamięci GPU, ustaw
token_limit
na 256, abatch_size
na 1. - Nie są zainstalowane sterowniki GPU lub są one niezgodne z JAX: proces przekształcania wymaga, aby urządzenie obliczeniowe miało zainstalowane sterowniki sprzętowe, które są zgodne z wersją bibliotek JAX. Więcej informacji znajdziesz w dokumentacji instalacji JAX.
Wdrażanie modelu dostosowanego
Proces dostrajania generuje wiele wag na podstawie danych do dostrajania i łącznej liczby epok ustawionej w aplikacji do dostrajania. Domyślnie program do dostrajania generuje 20 plików z wagami modelu, po jednym dla każdej ery dostrajania. Każda kolejna epoka strojenia generuje współczynniki, które lepiej odtwarzają wyniki danych strojenia. W danych wyjściowych z ostatniej iteracji procesu doboru parametrów znajdziesz wskaźniki dokładności dla każdej epoki:
...
Epoch 14/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 567ms/step - loss: 0.4026 - sparse_categorical_accuracy: 0.8235
Epoch 15/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 569ms/step - loss: 0.3659 - sparse_categorical_accuracy: 0.8382
Epoch 16/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 571ms/step - loss: 0.3314 - sparse_categorical_accuracy: 0.8538
Epoch 17/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 572ms/step - loss: 0.2996 - sparse_categorical_accuracy: 0.8686
Epoch 18/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 574ms/step - loss: 0.2710 - sparse_categorical_accuracy: 0.8801
Epoch 19/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 575ms/step - loss: 0.2451 - sparse_categorical_accuracy: 0.8903
Epoch 20/20
10/10 ━━━━━━━━━━━━━━━━━━━━ 6s 575ms/step - loss: 0.2212 - sparse_categorical_accuracy: 0.9021
Chociaż chcesz, aby współczynnik dokładności był stosunkowo wysoki (około 0,80–0,90), nie może być on zbyt wysoki ani bardzo zbliżony do 1,00, ponieważ oznacza to, że wagi zbliżają się do nadmiernego dopasowania do danych służących do doboru parametrów. W takim przypadku model nie działa dobrze w przypadku żądań, które różnią się znacznie od przykładów do strojenia. Domyślnie skrypt wdrażania wybiera wagi ery 17, które zwykle mają współczynnik dokładności około 0,90.
Aby wdrożyć wygenerowane wagi w aplikacji internetowej:
W oknie terminala przejdź do katalogu
k-gemma-it/
.cd spoken-language-tasks/k-gemma-it/
Przeprowadź proces dostrajania za pomocą skryptu
deploy_weights
:./deploy_weights.sh
Gdy uruchomisz ten skrypt, w katalogu k-mail-replier/k_mail_replier/weights/
powinien pojawić się nowy plik *.h5
.
Testowanie nowego modelu
Po wdrożenie nowych wag do aplikacji możesz wypróbować nowy dostrojony model. Aby to zrobić, ponownie uruchom aplikację internetową i wygeneruj odpowiedź.
Aby uruchomić i przetestować projekt:
W oknie terminala przejdź do katalogu
/k_mail_replier/
.cd spoken-language-tasks/k-mail-replier/
Uruchom aplikację za pomocą skryptu
run_flask_app.sh
:./run_flask_app.sh
Po uruchomieniu aplikacji internetowej kod programu wyświetla adres URL, pod którym możesz przeglądać i testować aplikację. Adres ten to zwykle:
http://127.0.0.1:5000/
Aby wygenerować odpowiedź modelu, w interfejsie internetowym kliknij przycisk 답변 작성 pod pierwszym polem danych.
Model Gemma został dostrojony i wdrożony w aplikacji. Eksperymentuj z aplikacją i spróbuj określić granice możliwości generowania dostosowanego modelu w przypadku Twojego zadania. Jeśli znajdziesz scenariusze, w których model nie działa dobrze, rozważ dodanie niektórych z tych żądań do listy przykładowych danych dostrajania, dodając żądanie i podając idealną odpowiedź. Następnie ponownie uruchom proces dostrajania, ponownie wprowadź nowe wagi i sprawdź wynik.
Dodatkowe materiały
Więcej informacji o tym projekcie znajdziesz w repozytorium kodu Gemma Cookbook. Jeśli potrzebujesz pomocy przy tworzeniu aplikacji lub chcesz współpracować z innymi deweloperami, skorzystaj z serwera Google Developers Community Discord. Więcej informacji o projektach z Google AI znajdziesz na tej playliście wideo.