Ana içeriğe geç

Uygulama Geliştirmek İçin Eksiksiz Databricks Dolly Eğitimi

Databricks Dolly LLM'in gelişmiş yeteneklerini kullanarak uygulamalar geliştirmeyi öğrenin.

Yapay Zeka ile Keşfedin

Verileri elle işlemek, sonuçları geciktirebilir ve projenin ilerlemesini yavaşlatabilir. Bu yüzden veri mühendisleri ve analistler günlük görevleri yürütmek için her zaman daha hızlı ve daha ucuz LLM’ler ararlar.

Dolly, Databricks tarafından geliştirilen açık kaynaklı bir yapay zekâ modelidir ve diğer şeylerin yanı sıra analistlerin, mühendislerin ve farklı sektörlerdeki profesyonellerin işlerini kolaylaştırmalarına yardımcı olabilir. Açık kaynak olduğundan, herkes gereksinimlerine göre daha iyi ve daha özelleştirilmiş LLM’ler oluşturmak için eğitim kodunu kullanabilir.

Bu konuda daha fazlasını Databricks Dolly eğitimimizde öğrenelim.

Neden Databricks Dolly?

Databricks Dolly’yi diğer araçlara karşı harika bir alternatif yapan şey, her ölçekteki şirket için özel çözümler geliştirme yaklaşımıdır. LLM’leri, yalnızca ayrıcalıklı ve yüksek maliyetli teknolojiler olmaktan çıkarıp, her şirketin sahiplenip özelleştirebileceği çok yönlü araçlara dönüştürür.

Kaynak: Databricks

Dolly’nin Faydaları

Dolly size şu şekillerde yardımcı olabilir:

  • Özelleştirme: LLM’leri kuruluşunuzun ihtiyaçlarına göre özelleştirerek iş akışlarını yönetmeyi kolaylaştırır.
  • Maliyet etkin: Talimat izleyen özelleştirilmiş modellerin ucuza ve verimli bir şekilde oluşturulmasını sağlar.
  • Çevik: İşletmelerin veri iş akışlarını optimize etmelerini, karmaşık süreçleri otomatikleştirmelerini ve içgörüleri daha etkili şekilde üretmelerini mümkün kılar.
  • Erişilebilir: Gelişmiş yapay zekâyı iş senaryolarına daha erişilebilir ve uyarlanabilir hale getirerek operasyonel verimliliği artırır.
  • Güvenli: API’ye dayalı araçlarla sıklıkla ilişkilendirilen veri güvenliği veya uyumluluk sorunlarını tetiklemeden yapay zekâ uygulamaları geliştirmek için uygulanabilir bir çözüm sunar.

Büyük dil modellerinin neler yapabildiği hakkında daha fazla bilgi edinmek ister misiniz? LLM kavramları kursunu alın.

Databricks Dolly ile Başlarken

Şimdi, Dolly’yi ihtiyaçlarınıza en iyi şekilde nasıl kullanabileceğinize bakalım.

Databricks Dolly'nin İşlevlerine Genel Bakış

Dolly, GPT gibi daha büyük modellere benzer işlevlerin kilidini açmak için özel databricks-dolly-15k veri kümesi üzerinde ince ayar yapılmıştır. Bu nedenle, fikir üretmek, metin oluşturmak ve komutla belirli görevleri yerine getirmek için özel LLM’ler oluşturabilirsiniz.

Databricks Dolly Ortamınızı Kurma

Yanıt üretimi için Databricks Dolly ortamınızı kurmak üzere şu talimatları izleyin.

A100 GPU’lara sahip bir makineniz varsa, bu modeli transformers kütüphanesi ile kullanabilirsiniz.

Adım 1: transformers ve accelerate kütüphanelerini kurmak için Databricks defterinizde aşağıdaki kodu çalıştırın:

%pip install "accelerate>=0.16.0,<1" "transformers[torch]>=4.28.1,<5" "torch>=1.13.1,<2"

Adım 2: Ardından transformers kütüphanesinden pipeline’ı içe aktarın:

from transformers import pipeline
import torch
instruct_pipeline = pipeline(model="databricks/dolly-v2-12b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")

Adım 3: Sonra, hattan yanıtlar üretebilirsiniz:

instruct_pipeline("Explain to me the difference between nuclear fission and fusion.")

Databricks Dolly LLM ile Çalışmak

Dolly ile temel işlemler

Dolly ile gerçekleştirebileceğiniz bazı temel işlemler şunlardır:

Metin oluşturma

  • Yazarlar ve içerik üreticileri herhangi bir konuda taslaklar, iskelet metinler veya tam metinler oluşturabilir. Bu, yazma sürecinde zaman ve emek tasarrufu sağlar.
  • İşletmeler ve pazarlamacılar ilgi çekici metinler, ürün açıklamaları veya pazarlama kampanyaları oluşturabilir.

Orijinal modelin sonucu ile Dolly’nin ince ayarlı sonuçları arasındaki fark. [Kaynak: Databricks]

Beyin fırtınası

  • Girişimciler ve iş liderleri potansiyel yeni ürünleri, hizmetleri veya iş modellerini keşfedebilir.
  • Yazarlar, sanatçılar ve tasarımcılar yaratıcı projelerini tetiklemek için Dolly’den ilham ve özgün fikirler edinebilir.
  • Hatta kişisel bağlamlarda etkinlik planlamak veya günlük zorlukların üstesinden gelmek için fikir üretebilirsiniz.

Orijinal modelin sonucu ile Dolly’nin ince ayarlı sonuçları arasındaki fark. [Kaynak: Databricks]

Açık uçlu Soru-Cevap

  • Öğrenciler karmaşık konularda sorular sorup derinlemesine açıklamalar alabilir.
  • Profesyoneller ve araştırmacılar belirli konularda arka plan bilgisi talep edebilir.

Dolly ile açık uçlu bir soru/cevap örneği. [Kaynak: Databricks]

Gelişmiş teknikler

Dolly yalnızca temel işlemlerle sınırlı değildir; ona çeşitli gelişmiş teknikler de uygulayabilirsiniz:

Özel verilerle ince ayar

Kişiselleştirilmiş LLM’lerinize ince ayar yapmak için daha büyük önceden eğitilmiş dil modellerini temel olarak kullanabilirsiniz. Bu, talimat izleme yeteneklerini geliştirir ve ihtiyaçlarınıza özel görevleri yerine getirmenizi sağlar.

Alana özgü talimat verisi derleme

LLM’lerinizi belirli sektörlerde uzmanlaştırmak için standart talimat verilerini, sağlık, finans, mühendislik ve benzeri alanlara uyarlanmış özel istemlerle tamamlayın.

Söz varlığı, formatlar ve bilgi içeren belirli veri kümelerine ince ayar yaparak model, o alana özgü dil ve kurallara bağlamsallaştırılmış, doğru ve ilgili çıktılar sağlayabilir.

Dinamik veri girişlerini dahil etme

Modelinizi görseller, video ve ses verisi gibi dinamik girdileri dahil edecek şekilde eğitebilirsiniz. Bu, yalnızca metni anlamanın ötesine geçerek eşzamanlı olarak birden çok veri akışından içgörü çıkaran içerik üretmesini sağlar.

Databricks Dolly ile Uygulama Geliştirme

Orijinal Dolly temel operasyonel yetenekler sağlarken, mevcut modeli sohbet botları gibi uygulamalar geliştirmek üzere ayarlayabilirsiniz.

Sohbet botu oluşturma

Databricks Dolly’yi kullanarak iki bölümde özelleştirilmiş bir sohbet botu oluşturabilirsiniz.

Veri hazırlama ve vektör veritabanı oluşturma

Bir sohbet botu oluşturmak için önce Databricks’in vektör veritabanını (Chroma) ayarlayarak Databricks Lakehouse, Delta Lake ve Delta Live Tables kullanarak veri toplamalı ve içeri aktarmalısınız.

Önce gerekli kütüphaneleri kurun.

%pip install -U chromadb==0.3.22 langchain==0.0.164 transformers==4.29.0 accelerate==0.19.0

Aşağıdaki komutu Databricks defterinizde çalıştırın.

%run ./_resources/00-init $catalog=hive_metastore $db=dbdemos_llm

Şimdi, bir bahçecilik sohbet botu geliştirdiğinizi varsayalım.

Not: Bu demoyu kendiniz denemek isterseniz, Databricks defterinde db demos’u kurduğunuzdan emin olun.

1. dbdemos’tan örnek bir bahçecilik veri kümesiyle çalıştığımız için, ‘sh’ komutunu kullanarak veri kümesini çıkarın.

%sh
#To keep it simple, we'll download and extract the dataset using standard bash commands 
#Install 7zip to extract the file
apt-get install -y p7zip-full

rm -r /tmp/gardening
mkdir -p /tmp/gardening
cd /tmp/gardening
#Download & extract the gardening archive
curl -L https://archive.org/download/stackexchange/gardening.stackexchange.com.7z -o gardening.7z
7z x gardening.7z 
#Move the dataset to our main bucket
mkdir -p /dbfs/dbdemos/product/llm/gardening/raw
cp -f Posts.xml /dbfs/dbdemos/product/llm/gardening/raw

2. Şimdi, veri kümesi bilgisini kontrol edebilirsiniz.

%fs ls /dbdemos/product/llm/gardening/raw

Soru/Cevap’ları temizleme ve hazırlama:

1. Ham veri kümesini inceleyin.

gardening_raw_path = demo_path+"/gardening/raw"

print(f"loading raw xml dataset under {gardening_raw_path}")

raw_gardening = spark.read.format("xml").option("rowTag", "row").load(f"{gardening_raw_path}/Posts.xml")
display(raw_gardening)

2. Aşağıdaki kod, HTML biçimli bir dizeyi metne dönüştürür ve BeautifulSoup kullanarak HTML’yi ayrıştırıp metni çıkarır.

from bs4 import BeautifulSoup

#UDF to transform html content as text

@pandas_udf("string")
def html_to_text(html):
  return html.apply(lambda x: BeautifulSoup(x).get_text())

gardening_df =(raw_gardening
                  .filter("_Score >= 5") # keep only good answer/question
                  .filter(length("_Body") <= 1000) #remove too long questions
                  .withColumn("body", html_to_text("_Body")) 

#Convert html to text

                  .withColumnsRenamed({"_Id": "id", "_ParentId": "parent_id"})
                  .select("id", "body", "parent_id"))

# Save 'raw' content for later loading of questions

gardening_df.write.mode("overwrite").saveAsTable(f"gardening_dataset")
display(spark.table("gardening_dataset"))

3. Şimdi, soruları ve cevapları eşleştirin.

gardening_df = spark.table("gardening_dataset")

# Self-join to assemble questions and answers

qa_df = gardening_df.alias("a").filter("parent_id IS NULL") \
         .join(gardening_df.alias("b"), on=[col("a.id") == col("b.parent_id")]) \
         .select("b.id", "a.body", "b.body") \
         .toDF("answer_id", "question", "answer")
        
# Prepare the training dataset: question following with the best answers.

docs_df = qa_df.select(col("answer_id"), F.concat(col("question"), F.lit("\n\n"), col("answer"))).toDF("source", "text")
display(docs_df)

Belgeleri vektör gösterimine dönüştürün:

from langchain.embeddings import HuggingFaceEmbeddings
 
# Download model from Hugging face

hf_embed = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")

Daha iyi arama için belgeleri Databricks vektör veritabanında dizinleyin:

dbutils.widgets.dropdown("reset_vector_database", "false", ["false", "true"], "Recompute embeddings for chromadb")
gardening_vector_db_path = demo_path+"/vector_db"
 
# Don't recompute the embeddings if they're already available

compute_embeddings = dbutils.widgets.get("reset_vector_database") == "true" or is_folder_empty(gardening_vector_db_path)
 
if compute_embeddings:
  print(f"creating folder {gardening_vector_db_path} under our blob storage (dbfs)")
  dbutils.fs.rm(gardening_vector_db_path, True)
  dbutils.fs.mkdirs(gardening_vector_db_path)

4. Şimdi, veri kümenizi vektör veritabanında depolayarak belge veritabanını oluşturun.

from langchain.docstore.document import Document
from langchain.vectorstores import Chroma

# Import if you want to divide Chunk.
# from langchain.text_splitter import CharacterTextSplitter

all_texts = spark.table("gardening_training_dataset")
 
print(f"Saving document embeddings under /dbfs{gardening_vector_db_path}")
 
if compute_embeddings: 

  # Convert lines as langchain Documents.
  # If you want to index for shorter time periods, use the text_short field instead.

  documents = [Document(page_content=r["text"], metadata={"source": r["source"]}) for r in all_texts.collect()]
 
  # Long sentences may need to be split. But it's best to summarize as above.

  # text_splitter = CharacterTextSplitter(separator="\n", chunk_size=1000, chunk_overlap=100)

  # documents = text_splitter.split_documents(documents)
 
  # Initialize chromadb with sentence-transformers/all-mpnet-base-v2 model loaded from hugging face (hf_embed).

  db = Chroma.from_documents(collection_name="gardening_docs", documents=documents, embedding=hf_embed, persist_directory="/dbfs"+gardening_vector_db_path)
  db.similarity_search("dummy") # tickle it to persist metadata (?)
  db.persist()

Bu işlem, belge gömülerini /dbfs/dbdemos/product/llm/vector_db altında kaydedecektir

Ve hepsi bu — Soru/Cevap veri kümeniz hazır.

Ancak işiniz bittiğinde, belleği boşaltmak için Python çekirdeğinizi yeniden başlatın.

Soru & cevap için istem tasarımı

Bu adımda bir soru sorarsınız; sistem S&A veri kümesinden benzer içerikleri getirir. Ardından, içeriği barındıran bir istem tasarlar ve bunu Dolly’ye gönderir; Dolly de müşteriye gösterilecek bir yanıt üretir.

Bunu şu şekilde yapabilirsiniz:

  1. Hugging Face’ten 2 gömü indirin:
# Start here to load a previously-saved DB

from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

if len(get_available_gpus()) == 0:

 Exception("Running dolly without GPU will be slow. We recommend you switch to a Single Node cluster with at least 1 GPU to properly run this demo.")
gardening_vector_db_path = "/dbfs"+demo_path+"/vector_db"
hf_embed = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")

db = Chroma(collection_name="gardening_docs", embedding_function=hf_embed, persist_directory=gardening_vector_db_path)

2. Şimdi, sorular arasında benzerlik kontrolü yapın.

def get_similar_docs(question, similar_doc_count):
 return db.similarity_search(question, k=similar_doc_count)

# Let's test it with blackberries:

for doc in get_similar_docs("how to grow blackberry?", 2):
 print(doc.page_content)

3. Bir dil modeli kullanın ve LangChain ile soruları yanıtlayan bir sistem oluşturması için ona istem verin.

from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
import torch
from langchain import PromptTemplate
from langchain.llms import HuggingFacePipeline
from langchain.chains.question_answering import load_qa_chain
 
def build_qa_chain():
  torch.cuda.empty_cache()
  model_name = "databricks/dolly-v2-7b" # can use dolly-v2-3b or dolly-v2-7b for smaller models and faster inferences.
 
  # Increase max_new_tokens for a longer response
  # Other settings might give better results! Play around
  instruct_pipeline = pipeline(model=model_name, torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto", 
                               return_full_text=True, max_new_tokens=256, top_p=0.95, top_k=50)
  # Note: if you use dolly 12B or smaller model but a GPU with less than 24GB RAM, use 8bit. This requires %pip install bitsandbytes
  # Defining our prompt content.
  # langchain will load our similar documents as {context}
  template = """Below is an instruction that describes a task. Write a response that appropriately completes the request.
 
  Instruction: 
  You are a gardener and your job is to help provide the best gardening answer. 
  Use only information in the following paragraphs to answer the question at the end. Explain the answer with reference to these paragraphs. If you don't know, say that you do not know.
 
  {context}
 
  Question: {question}
 
  Response:
  """
  prompt = PromptTemplate(input_variables=['context', 'question'], template=template)
 
  hf_pipe = HuggingFacePipeline(pipeline=instruct_pipeline)
  # Set verbose=True to see the full prompt:
  return load_qa_chain(llm=hf_pipe, chain_type="stuff", prompt=prompt, verbose=True)
# Building the chain will load Dolly and can take several minutes depending on the model size
qa_chain = build_qa_chain()

Performansı etkileyen temel ayarlar şunlardır:

  • ‘Max_new_tokens’: Daha hızlı ve daha özlü çıktılar için azaltın.
  • ‘Num_beams’: Işın aramasıyla, daha fazla ışın çalışma süresini yaklaşık doğrusal olarak artırır.

4. Hepsi bu. Şimdi basit soru yanıtlama için işlevi tanımlayabilirsiniz.

def answer_question(question):
 similar_docs = get_similar_docs(question, similar_doc_count=2)

 result = qa_chain({"input_documents": similar_docs, "question": question})
 result_html = f"<p><blockquote style=\"font-size:24\">{question}</blockquote></p>"
 result_html += f"<p><blockquote style=\"font-size:18px\">{result['output_text']}</blockquote></p>"
 result_html += "<p><hr/></p>"
 for d in result["input_documents"]:
   source_id = d.metadata["source"]
   result_html += f"<p><blockquote>{d.page_content}<br/>(Source: <a href=\"https://gardening.stackexchange.com/a/{source_id}\">{source_id}</a>)</blockquote></p>"
 displayHTML(result_html)

Artık ona bahçecilikle ilgili bir soru sorabilirsiniz.

answer_question("What is the best kind of soil to grow blueberries in?")

Buradan sohbet botu oluşturmak için dbdemo’yu kontrol edin.

Gerçek Dünya Kullanım Senaryaları

Gelişmiş NLP yetenekleriyle, Dolly ile oluşturulan özelleştirilmiş LLM’ler birçok gerçek dünya senaryosunda kullanılabilir; işte en yaygın örneklerden bazıları:

1. Finans analistleri için otomatik veri özetleme

Dolly büyük veri kümelerini işleyerek analistlerin temel içgörüleri daha hızlı kavramasına yardımcı olacak özlü özetler üretebilir.

Örneğin, bir finans araştırmacısının tarihsel hisse senedi fiyatı eğilimlerini hızla anlaması gerekebilir. Dolly verileri analiz edip net bir genel bakış sunarak araştırmacının değerli zamanından tasarruf sağlayabilir.

2. Perakende sektörlerinde veri temizleme ve ön işleme

Perakende şirketlerinde veri analistleri, ülke genelindeki binlerce mağazanın işlem kayıtlarını içeren devasa veri kümeleriyle çalışır. Ancak, tek tek mağazalardan gelen ham veriler çoğu zaman tutarsızlıklar, eksik değerler, yinelenen kayıtlar ve diğer hatalar içerir.

Dolly, verilerdeki tutarsızlıkları, eksik değerleri ve olası hataları tespit ederek veri bilimcilerin anlamlı içgörüler çıkarmak ve görselleştirmeler oluşturmak için temiz veri kullanmalarını sağlayabilir.

3. İlaç sektörlerinde en güncel araştırmaları takip etme

İlaç şirketlerinde bilim insanları, birden fazla disiplindeki en güncel yayımlanmış araştırmaları takip eder. Ancak, her hafta yüzlerce yeni araştırma makalesini elle incelemek zaman alır.

Bunun yerine Databricks Dolly LLM’i kullanarak araştırma makalelerini analiz edip amaçlar, yöntemler, sonuçlar ve çıkarımlar gibi ana unsurları çıkarabilirler. Çok sayfalı özetleri bir araya getirip her makaledeki en önemli içgörüleri vurgulayabilir.

Zorluklar ve Sınırlamalar

Diğer öncü LLM teknolojileri gibi, Dolly’nin de bazı sınırlamaları ve zorlukları vardır. İşte Dolly’nin üç temel kusuru:

  • ChatGPT’den çok daha küçük bir veri kümesiyle eğitildiği için hayal ürünü veya gerçeğe aykırı yanıtlar üretebilir.
  • Belirli bir makine öğrenimi ve NLP uzmanlığı gerektirdiğinden, ihtiyaçlarınıza göre ince ayar yapıp özelleştirmek zordur.
  • Matematiksel soruları çözme, programlama problemleri ve yanıtlara mizah katma konularında zorlanır.

Dolly LLM’in Eksiklerini Giderme

Dolly’nin mevcut sınırlamalarını gidermek için doğrulanmış teknikler olmasa da Databricks sürekli araştırma yapmakta ve mevcut yapay zekâ modellerini iyileştirmenin yollarını bulmayı amaçlamaktadır. Dolly bunun bir örneğidir; şu anda sürüm 2’dedir, ancak önümüzdeki yıllarda daha fazla iyileştirme görebiliriz.

Sonuç ve Sonraki Adımlar

Databricks Dolly, ticari kullanım için sunulan açık kaynaklı bir yapay zekâ modelidir. Eğitim kodunu ve veri kümelerini kullanarak ihtiyaçlarınızı karşılayan özel LLM’ler oluşturabilirsiniz.

Bu Databricks Dolly eğitiminin ötesine geçmeye ve mevcut becerilerinizi geliştirmeye hazırsanız, aşağıdaki kaynaklarla başlayın:

İyi öğrenmeler!

SSS

Dolly 2.0 Kullanıcılar İçin Ücretsiz mi?

Evet, Dolly 2.0 üzerinde temel işlemleri deneyebilirsiniz. Açık kaynaklı ve ticari kullanım lisansı ile yayımlandığından ücretsizdir.

Databricks Dolly LLM, ChatGPT'den Elde Edilen Veriler Üzerinde mi Eğitildi?

Hayır, Databricks Dolly LLM, ChatGPT’den elde edilen veriler üzerinde eğitilmemiştir. Bunun yerine, Dolly 2.0 yalnızca insan tarafından oluşturulmuş yeni bir talimat veri kümesi üzerinde ince ayar yapılarak geliştirilmiştir.

Dolly ile ChatGPT Arasındaki Fark Nedir?

Dolly açık kaynaklı bir yapay zekâ modelidir, ChatGPT ise kapalı bir modeldir. Bu, Dolly’nin eğitim kodunun herkese açık olduğu, ChatGPT’ninkinin ise özel olduğu anlamına gelir. Dolly, ChatGPT’ye (175 milyar parametre) kıyasla daha küçük bir veri kümesi (6 milyar parametre) üzerinde eğitilmiştir; bu da Dolly’yi daha az karmaşık ve potansiyel olarak daha az güçlü kılar.

Konular

İlgili