ai.google.dev'de görüntüleyin | Google Colab'de çalıştır | Vertex AI'da aç | Kaynağı GitHub'da görüntüle |
Gemma gibi büyük dil modelleri (LLM) bilgilendirici yanıtlar oluşturma konusunda başarılıdır ve bu modelleri sanal asistanlar ve chatbot'lar oluşturmak için idealdir.
Geleneksel olarak LLM'ler durum bilgisiz bir şekilde çalışırlar. Diğer bir deyişle, geçmiş görüşmeleri depolamak için gerekli olan yerleşik bir hafızaya sahip değildirler. Her istem veya soru, önceki etkileşimler dikkate alınmadan bağımsız olarak işlenir. Ancak doğal konuşmanın önemli yanlarından biri, önceki etkileşimlerdeki bağlamı koruyabilme becerisidir. Bu sınırlamanın üstesinden gelmek ve LLM'lerin sohbet bağlamını muhafaza etmesini sağlamak için LLM'ye sunulan her yeni istemde sohbet geçmişi (veya ilgili bölümler) gibi alakalı bilgilerin açıkça sağlanması gerekir.
Bu eğitim, Gemma'nın talimatlar ayarlı model varyantını kullanarak nasıl chatbot geliştireceğinizi gösterir.
Kurulum
Gemma kurulumu
Bu eğiticiyi tamamlamak için önce Gemma kurulumu bölümündeki kurulum talimatlarını tamamlamanız gerekir. Gemma kurulum talimatları, aşağıdakileri nasıl yapacağınızı gösterir:
- kaggle.com adresinden Gemma'ya erişin.
- Gemma 2B modelini çalıştırmak için yeterli kaynağa sahip bir Colab çalışma zamanı seçin.
- Kaggle kullanıcı adı ve API anahtarı oluşturup yapılandırın.
Gemma kurulumunu tamamladıktan sonra bir sonraki bölüme geçin. Burada, Colab ortamınız için ortam değişkenlerini ayarlayabilirsiniz.
Ortam değişkenlerini ayarlama
KAGGLE_USERNAME
ve KAGGLE_KEY
için ortam değişkenlerini ayarlayın.
import os
from google.colab import userdata
# Note: `userdata.get` is a Colab API. If you're not using Colab, set the env
# vars as appropriate for your system.
os.environ["KAGGLE_USERNAME"] = userdata.get('KAGGLE_USERNAME')
os.environ["KAGGLE_KEY"] = userdata.get('KAGGLE_KEY')
Bağımlıları yükleme
Keras ve KerasNLP'yi yükleyin.
# Install Keras 3 last. See https://keras.io/getting_started/ for more details.
pip install -q tensorflow-cpu
pip install -q -U keras-nlp tensorflow-hub
pip install -q -U keras>=3
pip install -q -U tensorflow-text
Arka uç seçin
Keras, basitlik ve kullanım kolaylığı için tasarlanmış üst düzey, çok çerçeveli bir derin öğrenme API'sidir. Keras 3 arka ucu seçmenize olanak tanır: TensorFlow, JAX veya PyTorch. Bu eğitimde üçü de kullanılabilir.
import os
# Select JAX as the backend
os.environ["KERAS_BACKEND"] = "jax"
# Pre-allocate 100% of TPU memory to minimize memory fragmentation
os.environ["XLA_PYTHON_CLIENT_MEM_FRACTION"] = "1.0"
Paketleri içe aktarma
Keras ve KerasNLP'yi içe aktarın.
import keras
import keras_nlp
# for reproducibility
keras.utils.set_random_seed(42)
Modeli örneklendirme
KerasNLP, birçok popüler model mimarisinin uygulanmasını sağlar. Bu eğiticide, nedensel dil modelleme için uçtan uca Gemma modeli olan GemmaCausalLM
'i kullanarak modeli örneklendireceksiniz. Nedensel dil modeli, önceki jetonlara dayanarak bir sonraki jetonu tahmin eder.
from_preset
yöntemini kullanarak modeli örneklendirin:
gemma_lm = keras_nlp.models.GemmaCausalLM.from_preset("gemma_1.1_instruct_2b_en")
Attaching 'metadata.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'metadata.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'task.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'config.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'metadata.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'metadata.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'config.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'config.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'model.weights.h5' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'metadata.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'metadata.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'preprocessor.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'tokenizer.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'tokenizer.json' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook... Attaching 'assets/tokenizer/vocabulary.spm' from model 'keras/gemma/keras/gemma_1.1_instruct_2b_en/3' to your Colab notebook...
GemmaCausalLM.from_preset()
işlevi, modeli önceden ayarlanmış mimariden ve ağırlıklardan örneklendirir. Yukarıdaki kodda "gemma_1.1_instruct_2b_en"
dizesi, 2 milyar parametreyle Gemma 2B modeli için hazır ayarı belirtir. 7B, 9B ve 27B parametrelerine sahip Gemma modelleri de mevcuttur. Gemma modellerine ait kod dizelerini Kaggle'daki Model Varyasyonu listelemelerinde bulabilirsiniz.
Model hakkında daha fazla bilgi edinmek için summary
yöntemini kullanın:
gemma_lm.summary()
Özetten görebileceğiniz gibi, modelin 2,5 milyar eğitilebilir parametresi vardır.
Biçimlendirme yardımcı işlevlerini tanımlama
from IPython.display import Markdown
import textwrap
def display_chat(prompt, text):
formatted_prompt = "<font size='+1' color='brown'>🙋♂️<blockquote>" + prompt + "</blockquote></font>"
text = text.replace('•', ' *')
text = textwrap.indent(text, '> ', predicate=lambda _: True)
formatted_text = "<font size='+1' color='teal'>🤖\n\n" + text + "\n</font>"
return Markdown(formatted_prompt+formatted_text)
def to_markdown(text):
text = text.replace('•', ' *')
return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
Chatbot'u derleme
Gemma talimat ayarı yapılmış gemma_1.1_instruct_2b_en
modelinde, aşağıdaki dönüş jetonlarını anlayacak şekilde ince ayar yapıldı:
<start_of_turn>user\n ... <end_of_turn>\n
<start_of_turn>model\n ... <end_of_turn>\n
Bu eğitim, chatbot'u derlemek için bu jetonları kullanır. Gemma kontrol jetonları hakkında daha fazla bilgi için Biçimlendirme ve sistem talimatları bölümüne bakın.
Sohbet durumunu yönetmek için bir sohbet yardımcısı oluşturun
class ChatState():
"""
Manages the conversation history for a turn-based chatbot
Follows the turn-based conversation guidelines for the Gemma family of models
documented at https://ai.google.dev/gemma/docs/formatting
"""
__START_TURN_USER__ = "<start_of_turn>user\n"
__START_TURN_MODEL__ = "<start_of_turn>model\n"
__END_TURN__ = "<end_of_turn>\n"
def __init__(self, model, system=""):
"""
Initializes the chat state.
Args:
model: The language model to use for generating responses.
system: (Optional) System instructions or bot description.
"""
self.model = model
self.system = system
self.history = []
def add_to_history_as_user(self, message):
"""
Adds a user message to the history with start/end turn markers.
"""
self.history.append(self.__START_TURN_USER__ + message + self.__END_TURN__)
def add_to_history_as_model(self, message):
"""
Adds a model response to the history with start/end turn markers.
"""
self.history.append(self.__START_TURN_MODEL__ + message + self.__END_TURN__)
def get_history(self):
"""
Returns the entire chat history as a single string.
"""
return "".join([*self.history])
def get_full_prompt(self):
"""
Builds the prompt for the language model, including history and system description.
"""
prompt = self.get_history() + self.__START_TURN_MODEL__
if len(self.system)>0:
prompt = self.system + "\n" + prompt
return prompt
def send_message(self, message):
"""
Handles sending a user message and getting a model response.
Args:
message: The user's message.
Returns:
The model's response.
"""
self.add_to_history_as_user(message)
prompt = self.get_full_prompt()
response = self.model.generate(prompt, max_length=1024)
result = response.replace(prompt, "") # Extract only the new response
self.add_to_history_as_model(result)
return result
Modelle sohbet edin
Modelle sohbet etmeye başlayın.
chat = ChatState(gemma_lm)
message = "Tell me, in a few words, how to compute all prime numbers up to 1000?"
display_chat(message, chat.send_message(message))
🙋♂️
1000'e kadar olan tüm asal sayıların nasıl hesaplanacağını birkaç kelimeyle anlatır mısın?🤖
Eratosthenes Eleği, belirli bir sınıra kadar olan tüm asal sayıları hesaplamak için yaygın olarak kullanılan bir yöntemdir. Her asal sayının katlarını yinelemeli olarak işaretler.
Görüşmeyi sürdürün.
message = "Now in Python! No numpy, please!"
display_chat(message, chat.send_message(message))
🙋♂️
Şimdi Python'da! Hayır lütfen!🤖
def prime(n): if n <= 1: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True
message = "Thank you, it works! Can you explain the code in plain English?"
display_chat(message, chat.send_message(message))
🙋♂️
Teşekkürler, işe yarıyor! Kodu sade İngilizceyle açıklayabilir misiniz?🤖
Sağlanan kod, belirli bir sayının asal olup olmadığını kontrol eden bir
prime
işlevini tanımlar.İşleyiş şekli:
İşlev, kontrol edilecek sayı olan tek bir bağımsız değişken (
n
) alır.Öncelikle
n
değerinin 1'den küçük veya 1'e eşit olup olmadığını kontrol eder. Bu ise sayı asal değildir; dolayısıyla işlev,False
değerini döndürür.Daha sonra, 2'den
n
'ın kareköküne kadar sayılar arasında iterasyon yapan bir döngüye girer.Her
i
sayısı içinn
değerinini
ile eşit bir şekilde bölünüp bölünemediğini (yanin % i == 0
).
n
,i
ile bölünebiliyorsan
böleni varsa asal sayı alamayacağı için işlevFalse
değerini döndürür.Döngü,
n
için hiç bölen bulmadan tamamlanırsa işlev,n
değerinin asal sayı olduğunu belirterekTrue
değerini döndürür.Örnek kullanım:
>>> prime(2) True >>> prime(3) True >>> prime(4) False >>> prime(5) True
Bu Kodun avantajları:
- Asal sayıları bulmak için basit ve verimli bir algoritmadır.
- Çeşitli bilgisayar bilimleri ve matematiksel uygulamalarda yaygın olarak kullanılmaktadır.
message = "Great! Now add those explanations as comments in the code."
display_chat(message, chat.send_message(message))
🙋♂️
Mükemmel. Şimdi bu açıklamaları koda yorum olarak ekleyin.🤖
def prime(n): """ Checks whether a given number is prime or not. Args: n: The number to check. Returns: True if n is prime, False otherwise. """ # Check if n is less than or equal to 1. if n <= 1: return False # Iterate through numbers from 2 to the square root of n. for i in range(2, int(n**0.5) + 1): # Check if n is divisible by i. if n % i == 0: return False # If the loop completes without finding any divisors for n, then n is prime. return True
Oluşturulan kodu çalıştırarak oluşturulan yanıtı test edin:
def is_prime(n):
"""
Checks if a number is prime.
Args:
n: The number to check.
Returns:
True if n is prime, False otherwise.
"""
# If n is less than or equal to 1, it is not prime.
if n <= 1:
return False
# Iterate through all the numbers from 2 to the square root of n.
for i in range(2, int(n**0.5) + 1):
# If n is divisible by any of the numbers in the range from 2 to the square root of n, it is not prime.
if n % i == 0:
return False
# If no divisors are found, n is prime.
return True
# Initialize an empty list to store prime numbers.
primes = []
# Iterate through all the numbers from 2 to 1000.
for i in range(2, 1001):
# If the number is prime, add it to the list.
if is_prime(i):
primes.append(i)
# Print the prime numbers.
print(primes)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
Tüm bağlamın Chat
sınıfı tarafından nasıl saklandığını görmek için get_history
yöntemini kullanın.
print(chat.get_history())
<start_of_turn>user Tell me, in a few words, how to compute all prime numbers up to 1000?<end_of_turn> <start_of_turn>model The Sieve of Eratosthenes is a widely used method to compute all prime numbers up to a given limit. It involves iteratively marking out multiples of each prime number.<end_of_turn> <start_of_turn>user Now in Python! No numpy, please!<end_of_turn> <start_of_turn>model ```python def prime(n): if n <= 1: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True ```<end_of_turn> <start_of_turn>user Thank you, it works! Can you explain the code in plain English?<end_of_turn> <start_of_turn>model The provided code defines a function `prime` that checks whether a given number is prime or not. **How it works:** - The function takes a single argument, `n`, which is the number to check. - It first checks if `n` is less than or equal to 1. If it is, the number is not prime, so the function returns `False`. - It then enters a loop that iterates through numbers from 2 to the square root of `n`. - For each number `i`, it checks if `n` is divisible evenly by `i` (i.e., `n % i == 0`). - If `n` is divisible by `i`, the function returns `False` because `n` cannot be prime if it has a divisor. - If the loop completes without finding any divisors for `n`, the function returns `True`, indicating that `n` is a prime number. **Example Usage:** ```python >>> prime(2) True >>> prime(3) True >>> prime(4) False >>> prime(5) True ``` **Benefits of this Code:** - It is a simple and efficient algorithm for finding prime numbers. - It is widely used in various computer science and mathematical applications.<end_of_turn> <start_of_turn>user Great! Now add those explanations as comments in the code.<end_of_turn> <start_of_turn>model ```python def prime(n): """ Checks whether a given number is prime or not. Args: n: The number to check. Returns: True if n is prime, False otherwise. """ # Check if n is less than or equal to 1. if n <= 1: return False # Iterate through numbers from 2 to the square root of n. for i in range(2, int(n**0.5) + 1): # Check if n is divisible by i. if n % i == 0: return False # If the loop completes without finding any divisors for n, then n is prime. return True ```<end_of_turn>
Özet ve ek okuma
Bu eğiticide, JAX'ta Keras'ı kullanarak Gemma 2B Talimatı hassaslaştırılmış modelle nasıl sohbet edeceğinizi öğrendiniz.
Gemma hakkında daha fazla bilgi edinmek için şu kılavuzlara ve eğiticilere göz atın: