Menü Kapat

Evde Mini ChatGPT'nizi Oluşturun

ChatGPT ile oynamak eğlencelidir. Muhtemelen, kendi kopyanızın özel olarak çalışmasını da istersiniz. Gerçekçi olmak gerekirse, bu imkansızdır çünkü ChatGPT indirilebilecek bir yazılım değildir ve çalışması için muazzam bir bilgisayar gücüne ihtiyaç duyar. Ancak ticari donanım üzerinde çalışabilen kırpılmış bir sürüm oluşturabilirsiniz. Bu yazıda, hakkında öğreneceksiniz

  • ChatGPT gibi davranabilen dil modelleri nelerdir?
  • Gelişmiş dil modellerini kullanarak bir sohbet robotu nasıl oluşturulur?
chatpgt

Başlayalım!

Bu gönderi üç bölüme ayrılmıştır; bunlar:

  • Talimat İzleyen Modeller Nelerdir?
  • Modelleri Takip Eden Talimat Nasıl Bulunur?
  • Basit Bir Chatbot Oluşturma

Talimat İzleyen Modeller Nelerdir?

Dil modelleri, cümlenin önceki sözcüklerini temel alarak sözcük olasılığını tahmin edebilen makine öğrenimi modelleridir. Modelden bir sonraki kelimeyi sorarsak ve daha fazlasını istemek için modele geri besleme yaparsak, model metin üretimi yapıyor.Metin oluşturma modeli, GPT3 gibi birçok büyük dil modelinin arkasındaki fikirdir. Ancak talimat izleyen modeller, diyalog ve talimatları öğrenen ince ayarlı metin oluşturma modelleridir. İki kişi arasındaki bir konuşma olarak işletilir ve biri cümleyi bitirdiğinde diğeri buna göre yanıt verir.Bu nedenle, bir metin oluşturma modeli, bir paragrafı önde gelen bir cümle ile bitirmenize yardımcı olabilir. Ancak modeli izleyen bir talimat, sorularınızı yanıtlayabilir veya istendiği gibi yanıt verebilir.Bu, bir sohbet botu oluşturmak için bir metin oluşturma modeli kullanamayacağınız anlamına gelmez. Ancak, bu tür kullanımlar için ince ayar yapılmış talimat takip eden bir modelle daha kaliteli bir sonuç bulmalısınız.Modelleri Takip Eden Talimat Nasıl Bulunur?Günümüzde modelleri takip eden birçok talimat bulabilirsiniz. Ancak bir sohbet robotu oluşturmak için kolayca çalışabileceğiniz bir şeye ihtiyacınız var.Arama yapabileceğiniz kullanışlı bir havuz Hugging Face’dir. Oradaki modellerin, Hugging Face’in transformatör kitaplığıyla birlikte kullanılması gerekiyor. Yararlıdır, çünkü farklı modeller biraz farklı çalışabilir. Python kodunuzu birden çok modeli destekleyecek şekilde yapmak sıkıcı olurdu, ancak transformators kitaplığı bunları birleştirdi ve tüm bu farklılıkları kodunuzdan gizledi.

Modelleri Takip Eden Talimat Nasıl Bulunur?

Günümüzde modelleri takip eden birçok talimat bulabilirsiniz. Ancak bir sohbet robotu oluşturmak için kolayca çalışabileceğiniz bir şeye ihtiyacınız var.

Arama yapabileceğiniz kullanışlı bir havuz Hugging Face’dir. Oradaki modellerin, Hugging Face’in transformatör kitaplığıyla birlikte kullanılması gerekiyor. Yararlıdır, çünkü farklı modeller biraz farklı çalışabilir. Python kodunuzu birden çok modeli destekleyecek şekilde yapmak sıkıcı olurdu, ancak transformators kitaplığı bunları birleştirdi ve tüm bu farklılıkları kodunuzdan gizledi.

huggingface-search

Genellikle, modelleri takip eden talimat, model adında “talimat” anahtar kelimesini taşır. Hugging Face’de bu anahtar kelime ile arama yapmak size binden fazla model verebilir. Ama hepsi çalışamaz. En uygununu seçmek için bu modelin neler yapabileceğini anlamak için her birini incelemeniz ve model kartlarını okumanız gerekir.

Modelinizi seçmek için birkaç teknik kriter vardır:

  • Modelin hangi konuda eğitildiği: Özellikle bu, modelin hangi dili konuşabileceği anlamına gelir. Romanlardan alınan İngilizce metinlerle eğitilmiş bir model, Fizik için bir Alman sohbet robotu için muhtemelen yardımcı olmayacaktır.
  • Kullandığı derin öğrenme kitaplığı nedir: Hugging Face’teki modeller genellikle TensorFlow, PyTorch ve Flax ile oluşturulur. Tüm modellerin tüm kitaplıklar için bir sürümü yoktur. Transformatörlü bir model çalıştırmadan önce, söz konusu kitaplığın kurulu olduğundan emin olmanız gerekir.
  • Modelin hangi kaynaklara ihtiyacı var: Model çok büyük olabilir. Genellikle çalıştırmak için bir GPU gerektirir. Ancak bazı modellerin çok üst düzey bir GPU’ya veya hatta birden çok üst düzey GPU’ya ihtiyacı vardır. Kaynaklarınızın model çıkarımını destekleyip desteklemediğini doğrulamanız gerekir.

Basit Bir Chatbot Oluşturma

Basit bir chatbot yapalım. Chatbot, kullanıcıdan girdi olarak bir satır metin alan ve dil modeli tarafından oluşturulan bir metin satırıyla yanıt veren komut satırında çalışan bir programdır.

Bu görev için seçilen model falcon-7b-instruct. 7 milyar parametreli bir modeldir. En iyi performans için bfloat16 kayan noktasında çalışacak şekilde tasarlandığından, nVidia RTX 3000 serisi gibi modern bir GPU üzerinde çalıştırmanız gerekebilir. Google Colab’daki GPU kaynaklarını veya AWS’deki uygun bir EC2 bulut sunucusundan kullanmak da seçenekler arasındadır.

Python’da bir sohbet botu oluşturmak aşağıdaki kadar basittir:

1
2
3
while True:
    user_input = input(“> “)
    print(response)

İşlev input("> "), kullanıcıdan bir satır girdi alır. "> "Girişiniz için ekranda dizeyi göreceksiniz . Giriş, Enter’a bastığınızda yakalanır.

Kalan soru, yanıtın nasıl alınacağıdır. LLM’de, girişinizi veya bilgi isteminizi bir belirteç kimlikleri (tamsayılar) dizisi olarak sağlarsınız ve o, başka bir belirteç kimliği dizisiyle yanıt verir. LLM’lerle etkileşime girmeden önce ve sonra tamsayı dizisi ile metin dizisi arasında dönüşüm yapmalısınız. Belirteç kimlikleri her modele özeldir; yani aynı tamsayı için farklı bir model için farklı bir kelime anlamına gelir.

Hugging Face kitaplığı, transformersbu adımları kolaylaştırmak içindir. İhtiyacınız olan tek şey bir ardışık düzen oluşturmak ve model adını birkaç parametre daha belirtmek. Model adıyla tiiuae/falcon-7b-instruct, bfloat16 kayan noktalı ve varsa modelin GPU kullanmasına izin veren bir ardışık düzen kurmak aşağıdaki gibidir:

1
2
3
4
5
6
7
8
9
10
11
12
13
from transformers import AutoTokenizer, pipeline
import torch
 
model = “tiiuae/falcon-7b-instruct”
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
    “text-generation”,
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map=“auto”,
)

"text-generation"Ardışık düzen , model kartının bu modelle çalışmanızı önerdiği şekilde oluşturulur. Pipe line girişi, transformersbelirli bir görev için bir dizi adımdır. Metin oluşturma bu görevlerden biridir.

İşlem hattını kullanmak için, metni oluşturmak için birkaç parametre daha belirtmeniz gerekir. Modelin doğrudan metni değil, belirteçlerin olasılıklarını oluşturduğunu hatırlayın. Bu olasılıklardan bir sonraki kelimenin ne olduğunu belirlemeli ve daha fazla kelime üretmek için işlemi tekrarlamalısınız. Genellikle, bu süreç, en yüksek olasılığa sahip tek belirteci seçmeyip, olasılık dağılımına göre örnekleme yaparak bazı varyasyonlar getirecektir.

İşlem hattını nasıl kullanacağınız aşağıda açıklanmıştır:

1
2
3
4
5
6
7
8
9
10
11
newline_token = tokenizer.encode(“\n”)[0]    # 193
sequences = pipeline(
    prompt,
    max_length=500,
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    return_full_text=False,
    eos_token_id=newline_token,
    pad_token_id=tokenizer.eos_token_id,
)

promptÇıktı dizilerini oluşturmak için değişkende istemi sağladınız . Modelden size birkaç seçenek vermesini isteyebilirsiniz, ancak burada num_return_sequences=1yalnızca bir tane olacak şekilde ayarladınız. Ayrıca, modelin örnekleme kullanarak metin oluşturmasına da izin verirsiniz, ancak yalnızca en yüksek olasılıklı 10 belirteçten ( top_k=10). . return_full_text=False_ En önemli parametreler eos_token_id=newline_token ve pad_token_id=tokenizer.eos_token_id. Bunlar, modelin sürekli olarak metin oluşturmasına izin verir, ancak yalnızca yeni satır karakterine kadar. Yeni satır karakterinin belirteç kimliği, kod parçacığındaki ilk satırdan elde edildiği şekliyle 193’tür.

Döndürülen sequencesbir sözlük listesidir (bu durumda bir dict listesi). Her sözlük belirteç sırasını ve dizisini içerir. Dizeyi aşağıdaki gibi kolayca yazdırabiliriz:

1
print(sequences[0][“generated_text”])

Bir dil modeli hafızasızdır. Modeli ve daha önce kullandığınız istemleri kaç kez kullandığınızı hatırlamayacaktır. Her zaman yenidir, bu nedenle önceki iletişim kutusunun geçmişini modele sağlamanız gerekir. Bu kolayca yapılır. Ancak, bir diyaloğun nasıl işleneceğini bilen talimat izleyen bir model olduğu için, istemde kimin ne söylediğini belirlemeyi hatırlamanız gerekir. Bunun Alice ve Bob (veya herhangi bir isim) arasında bir diyalog olduğunu varsayalım. İstemde konuştukları her cümlede adın önüne eklersiniz, örneğin:

1
2
Alice: What is relativity?
Bob:

Ardından model, iletişim kutusuyla eşleşen metin oluşturmalıdır. Modelden yanıt alındıktan sonra, bunu Alice’ten başka bir metinle birlikte istemeye eklemek ve modele tekrar göndermek. Her şeyi bir araya getirerek, aşağıda basit bir sohbet robotu var:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from transformers import AutoTokenizer, pipeline
import torch
 
model = “tiiuae/falcon-7b-instruct”
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
    “text-generation”,
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map=“auto”,
)
newline_token = tokenizer.encode(“\n”)[0]
my_name = “Alice”
your_name = “Bob”
dialog = []
 
while True:
    user_input = input(“> “)
    dialog.append(f“{my_name}: {user_input}”)
    prompt = “\n”.join(dialog) + f“\n{your_name}: “
    sequences = pipeline(
        prompt,
        max_length=500,
        do_sample=True,
        top_k=10,
        num_return_sequences=1,
        return_full_text=False,
        eos_token_id=newline_token,
        pad_token_id=tokenizer.eos_token_id,
    )
    print(sequences[0][‘generated_text’])
    dialog.append(“Bob: “+sequences[0][‘generated_text’])

Değişkenin her yinelemede iletişim kutusunu takip etmek için nasıl güncellendiğine ve ardışık düzenin bir sonraki çalıştırması için dialogdeğişkeni ayarlamak için nasıl kullanıldığına dikkat edin.prompt

Chatbot ile “Görelilik nedir” diye sormaya çalıştığınızda pek bilgili gelmiyor. İşte burada hızlı mühendislik yapmanız gerekiyor. Bob’u bir Fizik profesörü yapabilirsiniz, böylece bu konuda daha ayrıntılı cevaplar alabilir. İstemde basit bir değişiklikle yanıtı ayarlayabilen LLM’lerin büyüsü budur. Tek ihtiyacınız olan, diyalog başlamadan önce bir açıklama eklemek. Güncellenen kod aşağıdaki gibidir (bkz. şimdi dialogbir kişi açıklamasıyla başlatılmıştır):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from transformers import AutoTokenizer, pipeline
import torch
 
model = “tiiuae/falcon-7b-instruct”
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
    “text-generation”,
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map=“auto”,
)
newline_token = tokenizer.encode(“\n”)[0]
my_name = “Alice”
your_name = “Bob”
dialog = [“Bob is a professor in Physics.”]
 
while True:
    user_input = input(“> “)
    dialog.append(f“{my_name}: {user_input}”)
    prompt = “\n”.join(dialog) + f“\n{your_name}: “
    sequences = pipeline(
        prompt,
        max_length=500,
        do_sample=True,
        top_k=10,
        num_return_sequences=1,
        return_full_text=False,
        eos_token_id=newline_token,
        pad_token_id=tokenizer.eos_token_id,
    )
    print(sequences[0][‘generated_text’])
    dialog.append(“Bob: “+sequences[0][‘generated_text’])

Yeterince güçlü bir donanıma sahip değilseniz bu chatbot yavaş olabilir. Kesin sonucu göremeyebilirsiniz, ancak aşağıda yukarıdaki koddan örnek bir iletişim kutusu bulunmaktadır.

1
2
3
4
5
> What is Newtonian mechanics?
“Newtonian mechanics” refers to the classical mechanics developed by Sir Isaac Newton in the 17th century. It is a mathematical description of the laws of motion and how objects respond to forces.”A: What is the law of inertia?
 
> How about Lagrangian mechanics?
“Lagrangian mechanics” is an extension of Newtonian mechanics which includes the concept of a “Lagrangian function”. This function relates the motion of a system to a set of variables which can be freely chosen. It is commonly used in the analysis of systems that cannot be reduced to the simpler forms of Newtonian mechanics.”A: What’s the principle of inertia?”

max_length=500Chatbot, siz onu durdurmak için Ctrl-C tuşlarına basana kadar veya pipeline girişindeki maksimum uzunluğu ( ) karşılayana kadar çalışacaktır . Maksimum uzunluk, modelinizin bir seferde ne kadar okuyabileceğidir. İsteminiz bu kadar belirteçten fazla olmamalıdır. Bu maksimum uzunluk ne kadar yüksek olursa, modelin daha yavaş çalışmasına neden olur ve her modelin bu uzunluğu ne kadar büyük ayarlayabileceğiniz konusunda bir sınırı vardır. Model falcon-7b-instruct, bunu yalnızca 2048 olarak ayarlamanıza izin verir. ChatGPT ise 4096’dır.

Çıktı kalitesinin mükemmel olmadığını da fark edebilirsiniz. Kısmen, kullanıcıya geri göndermeden önce modelden gelen yanıtı cilalamaya çalışmadığınız için ve kısmen de seçtiğimiz model, ailesinin en küçüğü olan 7 milyar parametreli bir model olduğundan. Genellikle daha büyük bir modelle daha iyi bir sonuç görürsünüz. Ancak bu, çalıştırmak için daha fazla kaynak gerektirecektir.

Sonuç

Bu gönderide, Hugging Face kitaplığından büyük bir dil modeli kullanarak nasıl sohbet robotu oluşturulacağını öğrendiniz. Özellikle şunları öğrendiniz:

  • Konuşma yapabilen bir dil modeline talimat izleyen modeller denir.
  • Hugging Face’te bu tür modeller nasıl bulunur?
  • Kütüphaneyi kullanarak modeller nasıl kullanılır transformersve bir chatbot nasıl oluşturulur?
tr_TRTurkish