paint-brush
Üretim Seviyesinde Bir Text2SQL Motoru Nasıl Oluşturulurile@datastax
1,902 okumalar
1,902 okumalar

Üretim Seviyesinde Bir Text2SQL Motoru Nasıl Oluşturulur

ile DataStax11m2024/08/13
Read on Terminal Reader

Çok uzun; Okumak

Text2SQL'de LLM'lerin rolü hakkında bilgi edinin, bu yeteneğin doğasında bulunan zorlukları tartışın ve Skypoint ekibinin yeni text2SQL motoru SherloQ'yu keşfedin.
featured image - Üretim Seviyesinde Bir Text2SQL Motoru Nasıl Oluşturulur
DataStax HackerNoon profile picture

Veritabanlarıyla etkileşim kurmak, çoğu insanın kolayca erişemeyeceği bir düzeyde teknik uzmanlık gerektirir. Şirketin finansal rakamlarını ve eğilimlerini anlaması gereken bir finans yöneticisini düşünün. Geleneksel olarak, bu yönetici veritabanından gerekli verileri çıkarmak için SQL analistlerine güvenmek zorunda kalırdı. Bu bağımlılık, özellikle yöneticinin istenen içgörüleri elde etmek için sorgularını birkaç kez iyileştirmesi gerekiyorsa, gecikmelere ve iletişim boşluklarına neden olabilir.


Ancak doğal dili yapılandırılmış sorgu dili ifadelerine dönüştüren bir yetenek olan text2SQL oyunu değiştirdi. text2SQL ile finans yöneticisi doğal dili kullanarak doğrudan veritabanıyla etkileşim kurabilir. Örneğin, bir kullanıcı "Geçen ay her müşteri için ortalama sipariş değeri neydi?" gibi işletmeye yönelik bir soru girebilir.


Metinden SQL'e AI motoru soruyu işleyecek ve karşılık gelen SQL sorgusunu oluşturacaktır:


Select customer_id, AVG(order_value) AS average_order_value FROM orders WHERE order_date >= DATE_SUB(CURRDATE(), INTERVAL 1 MONTH) GROUP BY customer_id;


Daha sonra bunu veritabanına karşı çalıştırıp sonuçları kullanıcıya göster.


Bu makalede, text2SQL'de LLM'lerin rolünü açıklayacağız, bu yeteneğin doğasında bulunan zorlukları tartışacağız ve Skypoint ekibi tarafından geliştirilen son derece doğru ve sağlam bir text2SQL motoru olan SherloQ'yu inceleyeceğiz.

text2SQL'de LLM'lerin Rolü

Büyük dil modelleri (LLM'ler) yardımıyla text2SQL'i dönüştürme yeteneği önemli ölçüde iyileştirildi. Bu modeller, insan benzeri metni anlamak ve oluşturmak için büyük miktarda veri ve güçlü sinir ağı mimarileri kullanır. Çeşitli veri kümeleri üzerinde eğitim alarak, LLM'ler doğal dilin SQL sorgularına çevrilmesi de dahil olmak üzere çeşitli görevler arasında genelleme yapabilir.


Örneğin, " Dil Modelleri Az Sayıda Öğrenenlerdir " başlıklı makale, LLM'lerin sınırlı verilerle yeni görevlere uyum sağlama yeteneklerini vurgulayarak, görevleri en az örnekle nasıl gerçekleştirebileceklerini gösterir. Bu yaklaşım, kapsamlı göreve özgü verilere olan ihtiyacı önemli ölçüde azaltır ve LLM'leri çeşitli uygulamalarda dağıtmayı kolaylaştırır.


" Örümcek: Karmaşık ve Alanlar Arası Anlamsal Ayrıştırma ve Metinden SQL'e Görev için Büyük Ölçekli İnsan Etiketli Veri Seti ", farklı alanlardaki karmaşık SQL sorgularında modelleri eğitmek ve değerlendirmek için kapsamlı bir veri seti sağlar. Bu veri seti, model performansı için sağlam bir kıyaslama sağlayarak text2SQL'deki son teknolojiyi ilerletmede önemli rol oynamıştır.


Ayrıca, " PALM: Yollarla Dil Modellemesini Ölçekleme " adlı kitap, model boyutlarını ölçeklendirme ve eğitim yollarını optimize etme gibi gelişmiş eğitim tekniklerinin text2SQL de dahil olmak üzere çeşitli uygulamalarda model performansını nasıl artırabileceğini araştırıyor.


Bu LLM'ler kontrollü ortamlarda oldukça etkili olsa da, üretim ortamlarında sıklıkla zorluklarla karşılaşırlar. Bunlar arasında belirsiz istemleri ele almak, karmaşık veritabanı şemalarını yönetmek ve gerçek zamanlı performansı sağlamak yer alır. Ayrıca, bu modelleri mevcut sistemlere entegre etmek, değişen verilere ve kullanıcı gereksinimlerine uyum sağlamak için önemli çaba ve sürekli bakım gerektirir. İşte bu görev için iyi çalışan üç LLM:

SQL kodlayıcı

SQLcoder'ın temel amacı doğal dil girdisini SQL sorgularına dönüştürmektir. Diğer genel amaçlı modellerin aksine, SQLCoder SQL'e özgü veriler üzerinde rafine edilmiştir, dolayısıyla SQL sorgularını anlama ve oluşturmada özellikle etkilidir. SQLCoder, text2SQL sistemleri için karmaşık ve alanlar arası bir kıyaslama olan Spider veri kümesinde dikkate değer bir performans göstermektedir.


SQLCoder, eğitimde görülmeyen yeni şemalar için %64,6 doğrulukla doğru SQL sorgusunu üretir. Boyutunun 10 katından fazla olan GPT-3.5-turbo ve text-davinci-003'ü geride bırakır. Bu, SQLCoder'ın üretim ortamları için kritik olan çeşitli ve karmaşık SQL sorgularını işleme yeteneğini vurgular.

GPT 3.5/GPT 4

GPT-3.5 ve GPT-4 (Üretken Önceden Eğitilmiş Dönüştürücü), en gelişmiş ve etkili genel amaçlı dil modellerinden bazılarıdır. Her iki model de az sayıda örnekle yeni görevlere hızla uyum sağlayarak az sayıda çekim öğrenmede mükemmeldir ve bu, sınırlı girdiden SQL sorguları oluşturmak için idealdir.


Örneğin, Örümcek veri kümesi üzerinde değerlendirildiğinde, GPT-3.5-turbo'nun eğitimde görülmeyen yeni şemalarda doğru şekilde oluşturulmuş SQL sorgularının yüzdesi %60,6 iken, GPT-4'ün bu oranı %74,3'tür.


Bu modeller, özellikle bağlamı anlama ve karmaşık doğal dil girdilerinden doğru SQL sorguları üretme konusunda sağlam performans sergiler. Ancak, genel amaçlı tasarımları bazen SQL üretimi gibi uzmanlaşmış uygulamalarda en iyi sonuçlar için ek ince ayar gerektirir.

PALM SQL

PaLM (Pathways Language Model) SQL, Google tarafından geliştirilen bir diğer güçlü modeldir. PaLM SQL'in gelişmiş yetenekleri ve mimarisi, doğal dili SQL sorgularına çevirmede ve karmaşık ve çeşitli veritabanı şemalarını daha büyük bir doğrulukla işlemede oldukça verimli olmasını sağlar.


LLM'lerdeki gelişmelere rağmen, üretimde text2SQL için tek bir LLM'ye güvenmek sorunlu olabilir. Tek bir model, kurumsal veri ortamının çok çeşitli sorgularını, veritabanı şemalarını ve gerçek zamanlı gecikme gereksinimlerini etkili bir şekilde ele alamayacaktır.


Üretim ortamları sağlamlık, uyarlanabilirlik ve gerçek dünya iş kullanıcılarından gelen belirsiz istemlerle başa çıkma yeteneği gerektirir. Bu nedenle, bir text2SQL motoru üretim sınıfı olarak kabul edilmek için üç özellik sergilemelidir:


Farklı sorgu formülasyonlarını anlama yeteneği - Sözdizimsel olarak farklı kullanıcı istemleri aynı SQL sorgusuna indirgenebilir; iyi bir text2SQL motoru, veri modelinin bağlamını akılda tutarak bir kullanıcı isteminin arkasındaki motivasyonu anlayabilmeli ve SQL sorgusunu buna göre formüle edebilmelidir.


Belirsiz veritabanı şemaları ve veri modelleriyle çalışma yeteneği - Üretim veri modelleri, bir organizasyon içindeki birden fazla farklı ekibin katkıda bulunması ve verilerin yaşam döngüsü boyunca birden fazla kez mülkiyetinin değişmesi nedeniyle kaotik olmaya eğilimlidir.


İyi bir text2SQL motoru, kullanıcı için veri modelini netleştirme ve gürültü ile belirsizliğin halüsinasyonlara yol açmamasını sağlama yeteneğine sahip olmalıdır; bu, birçok üretim kullanıcısını caydıran günümüz LLM'lerinin bir özelliğidir.


Motorun işleyişinin sorgunun yürütülmesine önemli gecikmeler eklememesini sağlamalıdır - Bir kullanıcının gerçek zamanlı olarak beklediği yanıtlar gerçek zamanlı olarak dönmelidir. Bu, motorun en iyi sorguları en fazla ilk üç denemede formüle etmesi gerektiği anlamına gelir.

SherloQ'u Tanıtıyoruz

SherloQ, sorguları doğal dilden SQL'e çeviren Skypoint'in text2SQL motorudur. Sorgu üretimi için özel bir şirket içi (LLM) kullanmak mimarisinin önemli bir parçası olsa da, SherloQ'nun etkinliği veri sorgulama yeteneklerini geliştirmek için tasarlanmış gelişmiş bileşenlerin birleşiminden gelir. SherloQ, sorgu çevirisinde yüksek doğruluk, sağlam hata işleme ve üretim veritabanı sistemleriyle sorunsuz entegrasyon sunar ve bu da onu büyük ölçekli veri ortamları için uygun hale getirir.



Sonraki birkaç bölümde SherloQ'un iç mimari detaylarını inceleyeceğiz ve onu üretim ortamlarında kullanarak elde ettiğimiz sonuçlardan bazılarını paylaşacağız.

SherloQ'un Mimari Bileşenleri

SherloQ'nun mimarisi, her biri sistemin doğruluğunu, güvenilirliğini ve gecikmesini iyileştirmek için çalışan birden fazla hareketli parça içerir. İşte mimarinin genel görünümü:




Kullanıcı girişi - Kullanıcı girişi doğal dil sorgusudur.


Durum aracısı Eeecutor- Yürütme süreci boyunca durumu izleyen bir LangChain arayüzünün uygulamamız. Yürütme sırasında akıl yürütme ve bellek durumunu izlemek için Redis ve DataStax Astra DB'den yararlanır. Yürütücü, farklı modüller arasında koordinasyon sağlayarak işlemlerin akışını yönetir.


Kullanıcı girdilerinin doğru şekilde ayrıştırılmasını, işlenmesini ve sonraki bileşenlere iletilmesini sağlayarak girdiden SQL sorgusu oluşturmaya kadar bir akış sağlar.


Durum aracı - Langchain Base Tool'un bir durum değişkenine sahip olan ve bu durumu ilgili araca geçiren genişletilmiş bir sınıfı. Durum aracı, bir durum değişkenini koruyarak ilgili araçlara iletilmesi gereken gerekli verileri takip eder. Bu, veri akışında tutarlılığı garanti ederek, aracılar arasındaki geçiş sırasında herhangi bir bilgi kaybını önler.


SherloQ'un durum araçları :

  • Sorgu oluşturma aracı, alınan az sayıda sorguyu, veri modeli bağlamını ve DB şemasını kullanarak ilk SQL sorgusunu oluşturur. Ayrıştırılmış şema bilgilerini kullanarak ve bağlamsal örneklerden öğrenerek oluşturulan SQL sorgularının doğruluğunu ve alakalılığını artırır.


  • Yeniden deneme aracı, sorgu yürütme sırasında oluşan herhangi bir hatayı analiz eder ve hatayı gideren bir sorguyu yeniden oluşturur.


  • DB aracı, sorgu oluşturma için yararlı olabilecek veritabanı şemasını ve ilgili meta verileri (açıklamalar, yorumlar, vb.) almaya yardımcı olur. Alınan şema bilgileri, performansı optimize etmek ve veritabanı sorgularını azaltmak için zaman tabanlı bir önbelleğe alma mekanizması kullanılarak önbelleğe alınır. Ayrıca, sorguyu veritabanına karşı yürütür ve sonuçları veya bir hata yığını izini döndürür.

SherloQ'nun Performansını Artırmak İçin Veri Girişleri ve Teknikleri

SherloQ'nun performansını artırmak için çeşitli teknikler kullanıyoruz ve modele önemli veri girdileri sağlıyoruz. Bunlar yapılandırılmış ayrıştırma, az sayıda örnek, veri modeli bağlamı alma, yansıma ve yeniden deneme mekanizmasından oluşur. Her bir parça, modelin doğal dil girdilerinden kesin ve ilgili SQL sorguları üretme yeteneğini geliştirmede önemlidir.

Yapılandırılmış Ayrıştırma

Yapılandırılmış ayrıştırmada, kullanıcı istemi temel parçalarına ayrılır. Sorgunun temel bileşenlerine odaklanmak ve bunları tanımlamak, modelin doğru SQL üretmesine yardımcı olur. Örneğin:


Giriş: XYZ Corp tarafından tedarik edilen tüm kalemler için mevcut miktar nedir?

Çıktı: ["mevcut miktar mevcut", "tüm ürünler", "XYZ Corp tarafından tedarik edildi"]

Birkaç Çekimlik Örnekler

Modele, benzer kalıplara dayalı SQL sorguları oluşturmasına yardımcı olan birkaç çekim SQL örneği biçiminde referans soruları verilir. Bu örnekler, modelin amaçlanan sorguların yapısını ve biçimini tanımasına yardımcı olarak çeşitli istemler için yeni SQL sorgularını doğru bir şekilde oluşturma yeteneğini geliştirir. İşte birkaç örnek:


Örnek 1

Giriş: 20 birimden az miktarda bulunan ürünleri göster.

Çıktı: SELECT * FROM stok WHERE Miktar_Mevcut < 20;


Örnek 2

Giriş: 100$'ın üzerinde fiyata sahip ürünlere sahip satıcıları listeleyin.

Çıktı: SELECT * FROM satıcılar WHERE Vendor_ID IN (SELECT Vendor_ID FROM öğeler WHERE Birim_Fiyatı > 100);


Vektör veritabanımız olan Astra DB'den anlamsal benzerlik eşleştirmesini kullanarak en benzer birkaç çekim örneğini dinamik olarak seçiyoruz. Vektör veritabanı, yeni giriş sorgusuna yapı ve içerik olarak en yakın örnekleri bulmamızı sağlayarak modelin doğru SQL sorguları oluşturmak için en alakalı kalıpları kullanabilmesini sağlar.


Üretim ortamımızda, sorgu başına ortalama iki az çekimli örnek kullanıyoruz. Deneyimlerimize göre, doğruluğu artırmak için daha fazla az çekimli örnek eklemek ölçeklenebilir bir uygulama değildir.

Veri Modeli Bağlamı

Veri modeli bağlamı, bir SQL sorgusu oluştururken yararlı olabilecek alan-özel ayrıntıları içerir. Örneğin, bir hastane ağı için finansal veriler bağlamında, bunlar finans metrik kodları ve açıklamaları gibi şeyler olabilir. Bu bağlam, model tarafından oluşturulan SQL sorgularının alanın veri yapısıyla eşleştiğinden emin olmak için kullanılır. Veri modeli bağlamının dahil edilmesi isteğe bağlıdır ve yalnızca tablo karmaşık olduğunda ve bir SQL sorgusu oluşturmak için alan bilgisi gerektirdiğinde gereklidir.


Örneğin:

Metrik kodları: "MGMTFEE" -> Açıklama: "Mülkleri yönetmek için toplanan ücretler – Yönetim Ücretleri"

SQL DB Şeması

SQL DB şeması, kullanılabilir verilerin yapılandırılmış temsilidir. Şema, hem tabloyu hem de sütunlarını açıklayarak zenginleştirilir. Tablo adlarını ve açıklamalarını, sütunları, açıklamalarını ve veri türlerini içerir.


Şemanın sağlanması, modelin veritabanı yapısını ve her tablo ve sütunla ilişkili anlamı anlamasına yardımcı olur; böylece oluşturulan SQL sorgularının sözdizimsel olarak doğru olmasını ve doğru veritabanı öğelerini kullanmasını sağlar.

Refleks

Yansıma, modelin kendi geçmiş yanıtlarını, davranışlarını veya oluşturulan içeriklerini değerlendirme ve ölçme becerisine atıfta bulunur. Modelin hataları veya zayıflıkları belirleyip düzelterek yanıtlarını iyileştirmesini sağlar. Süreç, sorgu oluşturma aşamasında geri bildirimle birlikte Sherloq motoru tarafından daha önce görülen sorguları dikkate almayı içerir.


Bu senaryolar, modelin geçmişte gördüğü benzer soruların başarılarını tekrarlamasına veya başarısızlıklarından kaçınmasına yardımcı olur. Bu adım ayrıca, mevcut olana en çok anlamsal olarak benzeyen sorguları bulmak için Astra DB'yi kullanır.

Yeniden Deneme Mekanizması

SherloQ, veritabanından alınan hataları kullanarak bir yeniden deneme mekanizması içerir. Oluşturulan bir SQL sorgusu bir hatayla sonuçlandığında, motor sorguyu düzeltmek için önceden tanımlanmış bir şablona sahip bir aracı kullanır:


"""

Göreviniz, ANSI SQL ile uyumlu hale getirmek için bir sorudan üretilen yanlış bir SQL sorgusunu düzeltmektir. Aşağıdaki yönergeleri izleyin: Doğru yanıtları sağlamak için soruyu, veritabanı şemasını ve alınan hata mesajını dikkatlice analiz edin. Karışıklığı önlemek için Tablo Takma Adlarını kullanın.


Örneğin, SELECT t1.col1, t2.col1 FROM table1 AS t1 JOIN table2 AS t2 ON t1.id = t2.id .


Oranları hesaplarken, payı her zaman bir kayan noktaya dönüştürün. Aşağıdaki formatı kullanın:

Görev:

[QUESTION] {user_input} [/QUESTION] sorusunu ele alan bir SQL sorgusu oluşturun Doğru olması gereken sorgu şudur: {sql_query} Son yürütme sırasında alınan hata mesajı şudur: {error_message}

Cevap:

Yukarıdaki girdilere dayanarak düzeltilmiş SQL sorgusu şudur: {response_sql} “””

Sonuçların Karşılaştırılması: SherloQ uygulamasından önce ve sonra

Gelişmiş LLM'ler ve iyi tasarlanmış bir sistem kullanarak SherloQ, bağlamla daha ilgili ve daha kesin SQL sorguları üretir. Burada, gecikme ve doğruluk ölçütlerini kullanarak SherloQ'dan önce ve sonra kullanıcı istemlerinin sonuçlarını karşılaştırıyoruz.

Bir Üretim Sorusu Kullanarak Karşılaştırma

Burada, üretim müşterilerimizden biri olan tanınmış bir yaşlı bakım işletmecisine bakıyoruz. Kullanım örneklerinden biri, finans ekibinin Skypoint'in platformunu kullanarak farklı yaşlı bakım tesislerinin konsolide finansal metriklerini anlaması ve üzerinde mantık yürütmesidir.


Kullanıcı istemi: "2022 yılı boyunca tesis CM'si için Kat Hizmetleri Giderlerinin üç aylık eğilimini belirleyin."


SherloQ'dan Önce

  • Oluşturulan sorgu

    • SELECT SUM(Toplam_Tutar_Payı) / SUM(Toplam_Tutar_Payı) AS Housekeeping_Expenses FROM skypoint_metric_fact_denormalized_vw WHERE Tesis_Adı = 'CM' VE Yıl = 2022 VE Metrik_Adı = 'Housekeeping Gideri' GROUP BY Çeyrek_Sayısı';


  • Belirlenen sorunlar

    • Sorgu Çeyrek_Sayısına göre gruplandırır ancak onu seçmez; bu da eksik sonuçlara neden olabilir.

    • Metric_Code gibi daha spesifik bir tanımlayıcı yerine Metric_Name kullanımı.

    • Potansiyelin sıfıra bölünmesi SUM(Total_Amount_Denominator) içinde işlenmez.


  • Ortalama gecikme: 29 Saniye

    SherloQ öncesi kurulum, GPT-3.5'in hızlı mühendislik ve kullanıcı istemi başına 5'ten fazla birkaç çekimli sorgu ile bir kombinasyonunu kullanıyordu.


SherloQ ile

  • Oluşturulan sorgu
    • Yıl, Çeyrek_Sayısı, SUM(Toplam_Tutar_Payı) / COALESCE(SUM(NULLIF(Toplam_Tutar_Payı,0)),1) AS Housekeeping_Expenses FROM skypoint_metric_fact_denormalized_vwWHERE Metrik_Kodu = 'EXPOTHHOU' AND Tesis_Adı = 'CM' AND Yıl = 2022 GRUPLA Çeyrek_Sayısına Göre, Yıl SIRALA Çeyrek_Sayısına Göre ASC;


  • İyileştirmeler kaydedildi
  • Sorgu, gerekli üç aylık dökümü sağlayan Quarter_Number'ı içerir.
  • Metrik_Kodu alanı, metrik için daha kesin bir tanımlayıcı sağlamak amacıyla kullanılır.
  • COALESCE(SUM(NULLIF(Total_Amount_Denominator,0)),1) fonksiyonu sıfıra bölme hatalarını işler.
  • Sonuçlar çeyreklik eğilimi yansıtacak şekilde Çeyrek_Sayısı'na göre sıralanmıştır.
  • Ortalama Gecikme: 10 saniye


Üretim iş yüklerine ilişkin kıyaslamalara dayanarak, SherloQ'dan önce ve sonra doğruluk ve güvenilirlik konusunda raporladığımız sonuçlar aşağıdadır:

  • SherloQ'dan Önce
    • Doğruluk: %65

    • Güvenilirlik: %60


  • SherloQ ile
    • Doğruluk: %92

    • Güvenilirlik: %90


Yukarıdaki sonuçlar, önbelleğe almanın etkilerini ortadan kaldırmak için her istemi ayrı tanımlayıcılarla 100 kez yürüten dahili bir kıyaslama paketinden elde edilmiştir (hem dahili sistemlerimizde hem de modellerde). Paket, döndürülen yanıtı bir kıyaslama yanıtıyla karşılaştırarak doğruluğu ve benzer yanıtları ne sıklıkla döndüreceğini ölçerek güvenilirliği ölçer.


Karşılaştırma, SherloQ'nun doğal dil sorgularını doğru SQL sorgularına dönüştürmedeki avantajlarını açıkça göstermektedir. Genel performans SherloQ'dan sonra %30 oranında iyileşmiştir. Daha önce oluşturulan sorgular, hem doğruluğu hem de güvenilirliği etkileyen eksik sonuçlar ve hata işleme eksikliği gibi sorunlardan muzdaripti.


SherloQ ile oluşturulan sorgular daha kesin, verimli ve sağlamdır ve gecikme, doğruluk ve güvenilirlikte önemli iyileştirmeler vardır. Bu geliştirme, SherloQ'nun güvenilir veri alma sağlama yeteneğini gösterir ve veri sorgulama süreçlerini optimize etmek isteyen kuruluşlar için değerli bir araç haline getirir.


Skypoint platformunun diğer bölümlerini keşfetmek veya SkyPoint AI demosunu rezerve etmek için Skypoint web sitesini ziyaret edin.


Yazarlar: Alok Raj, Baş Yapay Zeka Mühendisi, Skypoint ve Sayandip Sarkar, Mühendislik Başkanı, Skypoint