Milliseid soovitusi annavad teadusuuringut selles osas, kuidas suurte keelemudelite abil SQL koodi genereerida?

Postitas Erki Eessaar 01.11.2024 12:17 (muudeti 21.11.2024 16:09)

Chang ja Lussier (2023) katsetavad erinevaid võimalusi ja annavad soovitusi suurte keelemudelite promptimiseks e viipade koostamiseks, et saada nendelt SQL koodi. Keelemudelile võiks SQL koodi genereerimiseks anda ette:

  • Näiteülesanded sõnalise küsimuse ning lahenduseks oleva SQL koodi paaridena. Päringuid, kus näiteülesandeid ette ei anta nimetatakse zero-shot text-to-SQL. Päringuid, kus antakse ette mõned näiteülesanded nimetatakse few-shot text-to-SQL.
  • Andmebaasi struktuuri kirjeldus kas tabelite loomise lausetena (CREATE TABLE) või struktuuri kirjeldusena kus on esitatud tabeli nimi, veergude nimed, võtmed ja seosed.
  • Iga tabeli kohta kolm rida näiteandmetena, mille võib esitada näiteks komadega eraldatud nimekirjana, mille ees on nende andmete leidmiseks kasutatud päring (kujul: SELECT * FROM Tabel LIMIT 3) või siis esitada näiteandmed INSERT lausetena. Chang ja Lussier (2023) soovitavad esitada iga veeru kohta kolm erinevat näiteväärtust ja selle ees päringu nende andmete leidmiseks (kujul: SELECT DISTINCT veerg FROM Tabel LIMIT 3).
  • Inimkeelne küsimus.

Uuring näitas, et vastuse täpsuse jaoks oleks abi järgnevast.

  • Etteantud teksti normaliseerimine (v.a andmeväärtuste näited). Normaliseerimine tähendab antud teksti esitamist väiketähtedena ja SQL lausetes treppimisest loobumist. See vähendab keelemudelile sisendiks mineva teksti hulka (võib olla piirang prompti pikkusele).
  • Andmebaasi kirjelduses tabelite võtmete (PRIMARY KEY ja UNIQUE kitsendused) ja tabelite vaheliste seoste esitamisest (FOREIGN KEY kitsendused).
  • Mõõdukast hulgast (nt kuni 15) näiteülesannete ja vastuste (SQL lausete) paaridest. Siin võib piirangu seada keelemudelist sõltuv küsimuse lubatud maksimumpikkus.
  • Näiteandmete esitamisest kujul päring + tulemuseks olevad read.
  • Rohkem pole alati parem – Rajkumar et al. (2022) toob välja, et kolm rida näiteandmeid oleks optimaalne – ridade arvu suurenemisel hakkab täpsus vähenema.
  • Näiteülesanded võiksid olla sama andmebaasi põhjal, mille põhjal soovitakse enda ülesande lahendust. Andes näitena ette erinevaid andmebaase ning nendel põhinevaid näiteülesandeid hakkas mingist hetkest vastuste täpsus vähenema. Võimalik, et põhjuseks oli prompti liigne pikkus, sest uuritud mudelite korral saadi parimad tulemused umbes 5500 märgi pikkuse promptiga. Chang ja Lussier (2023) väidavad ChatGPT ja Codex näitel, et täpsus hakkab vähenema kui keelemudelile antud sisendi pikkus ületab 70% maksimaalselt lubatust.

Rajkumar et al. (2022) järeldasid juba 2022. aastal, et suured keelemudelid (katsetati prorgammeerijatele mõeldud keelemudeli Codex põhjal) on inimkeelest SQLi genereerimisel tugevad tegijad. Loomulikult on oluline küsimuse (prompti) sõnastamine. Prompti kaudu näidete esitamine on tulemuste täpsuselt võrreldav väiksemate keelemudelite peenhäälestamise järel saadud tulemustega. Kui esitada ainult küsimus (ilma täiendava infota) on täpsus 8.3%. Kui lisaks esitati skeemi kirjeldus tõusis täpsus 59.9%. Kui tulemuses esitati tabelite kohta ka SELECT lause + kolm rida näiteandmeid kasvas tulemuse täpsus 67%-ni.

Veel soovitusi:
  • Kasutage prompti e viiba alguses sõna "Please" (Palun). Keelemudel ennustab, mis tekst peaks sisestatud tekstile jälgima. Viisakale tekstile peaks järgnema viisakam järg ning see on tavaliselt täpsem.
  • Öelge küsimuses, kelle rollis Te küsimust esitate (nt andmebaasi programmeerija).
  • Ingliskeelne küsimus võib anda veidi täpsema vastuse, kuid üldiselt saavad keelemudelid ka eesti keelega hästi hakkama. Sisemiselt toimub neil ikkagi tõlkimine inglise keelde.
  • Vastuse esitamisel failina (nt testandmete genereerimisel) võib tehisintellekt teha vea andmete faili tõstmisel. Lahenduseks võib olla paluda esitada vastus kopeeritaval kujul, st mitte failina.
  • Testandmete genereerimiseks võib paluda tehisintellektil genereerida kood, mis neid andmeid genereerib (sobivas programmeerimiskeeles, mis tuleb viibas ette öelda), selle asemel, et paluda andmeid genereerida ja väljastada.

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!