paint-brush
ChatSQL: ChatGPT aktivieren, um SQL-Abfragen aus reinem Text zu generierenvon@ademakdogan
6,963 Lesungen
6,963 Lesungen

ChatSQL: ChatGPT aktivieren, um SQL-Abfragen aus reinem Text zu generieren

von adem17m2023/06/21
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

Unser Ziel ist es, Informationen aus unserer Datenbank im Klartext abzurufen. Bei unserer Arbeit verwendeten wir MySQL als Zieldatenbank. Dennoch kann dieser Ansatz auch zur Generierung von Abfragen auf anderen Datenbanken genutzt werden. Die Beispieldatenbank wird unten angezeigt.
featured image - ChatSQL: ChatGPT aktivieren, um SQL-Abfragen aus reinem Text zu generieren
adem HackerNoon profile picture
0-item

ChatGPT wurde im Juni 2020 veröffentlicht und wird von OpenAI entwickelt. Es hat in vielen Bereichen zu revolutionären Entwicklungen geführt. Einer dieser Bereiche ist die Erstellung von Datenbankabfragen. Die Datenbankabfragen können über ChatGPT aus reinem Text generiert werden. Es hilft Ihnen bei Datenbanken, über die Sie wenig Wissen haben.


Künstliche Intelligenz, die zunehmend in unser tägliches Leben integriert wird, hat mit dem Aufstieg von ChatGPT erheblich an Dynamik gewonnen. Bevor wir mit dem Projekt beginnen, werfen wir einen kurzen Blick auf ChatGPT.


Um die Fähigkeiten von ChatGPT vollständig zu verstehen, ist es wichtig, die zugrunde liegende Architektur genau zu verstehen. ChatGPT wurde auf Basis der GPT- Architektur entwickelt. Werfen wir also zunächst einen Blick auf Transformatoren.


Für den direkten Zugang zum Projekt klicken Sie hier .


Abb. 1. Encoder und Decoder von Transformer

Transformer nutzen seq2seq-Frameworks und ermöglichen die Konvertierung einer Sequenz in eine andere. Die Sequenzen haben eine definierte Reihenfolge. Zur Veranschaulichung können Sätze als eine Abfolge von Wörtern betrachtet werden. Die Transformers können auch zur Lösung von NLP wie der Textübersetzung verwendet werden. Für das Training dieser Architektur benötigen wir viele beschriftete Daten. Für Transformatoren wäre es schwierig, dies zu lernen. Wir können Transferlernen verwenden, um dieses Problem zu lösen. Transformatoren bestehen aus zwei Komponenten (Abb. 1): einem Encoder und einem Decoder, die beide in der Lage sind, eine kompetente Sprachdarstellung zu erlangen.


Diese Kompetenz ermöglicht es uns, aus jeder Komponente Sprachmodelle zu erstellen. Durch Stapeln der Encoder erhalten wir eine bidirektionale Encoder - Darstellung von Transformatoren , allgemein bekannt als BERT . In ähnlicher Weise können wir durch Stapeln der Decodereinheiten ein generatives Pre- Training erreichen, das GPT ist. In unserem Fall konzentrieren wir uns auf GPT. Denken wir über Transferlernen im Kontext von GPT nach. Wenn wir ein Modell von Grund auf trainieren, erfordert es normalerweise eine beträchtliche Datenmenge, da die Parameter zunächst zufällig festgelegt werden. Stellen Sie sich jedoch ein Szenario vor, in dem die Parameter zufällig mit den von uns benötigten Werten übereinstimmen. In solchen Fällen benötigen wir keinen umfangreichen Datensatz, um das gewünschte Ergebnis zu erzielen. Es versteht sich, dass BERT und GPT im Transferlernkonzept verwendet werden.


Das GPT-Training ist somit in zwei Teile gegliedert. Wir haben einen Vorschulungsteil, in dem wir die GPT-Architektur trainieren, um zu verstehen, was Sprache ist, und dann einen Feinabstimmungsteil, in dem wir Transferlernen verwenden, um die GPT-Architektur weiter zu trainieren, damit sie bei bestimmten Sprachaufgaben gut funktioniert


Abb. 2. Beispiel für die Vorhersage des nächsten Wortes

GPT verfügt über eine Struktur, die zufällige Wortfolgen als Eingabe verwendet und das nächstgeeigneteste Wort vorhersagt. Die Beispielvorhersage ist in Abb. 2 zu sehen.


Die Sprachmodellierung wird als ideale Grundlage für das Verständnis der grundlegenden Aspekte der Sprache ausgewählt und kann leicht verfeinert werden. Es wird allgemein als selbstüberwachte Aufgabe bezeichnet, da die Sätze selbst sowohl als Eingabe- als auch als Ausgabebezeichnungen dienen.

Abb. 3. ChatGPT-Diagramm  –  Quelle


Fahren wir mit ChatGPT fort. Wie in Abb. 3 zu sehen ist, kann der gesamte ChatGPT-Prozess in drei Hauptschritte unterteilt werden. Im ersten Schritt wird ein GPT-Modell verwendet, das vorab auf das Verständnis der Sprache selbst trainiert wurde. Der nächste Schritt umfasst die Feinabstimmung des Modells, um Benutzeraufforderungen effektiv zu verarbeiten und auf der Grundlage dieser Aufforderungen entsprechende Antworten zu generieren. Um diesen Prozess zu erleichtern, werden gekennzeichnete Daten durch den Einsatz von Etikettierern erfasst, die nicht nur Eingabeaufforderungen bereitstellen, sondern auch die gewünschte Antwort für jede Eingabeaufforderung festlegen. Dies ermöglicht eine überwachte Feinabstimmung des GPT-Modells, da es sowohl Eingabeaufforderungen als auch entsprechende Ausgabeantworten gibt.


Im nächsten Schritt wird das überwachte, fein abgestimmte Modell verwendet, das im ersten Schritt erhalten wurde. Eine einzelne Eingabeaufforderung wird durch das Modell geleitet und es werden mehrere Antworten generiert. Anschließend bewertet und bewertet der Labeler die Qualität dieser Antworten. Jeder generierten Antwort wird eine entsprechende Belohnung zugewiesen, die zum Trainieren eines anderen GPT-Modells, des sogenannten Belohnungsmodells, verwendet wird. Da das Belohnungsmodell selbst ein Modell ist, funktioniert es, indem es eine anfängliche Eingabeaufforderung und eine der Antworten als Eingabe verwendet und eine Belohnung als Ausgabe generiert. Diese Belohnung quantifiziert die Qualität oder Güte der Antwort.


Im dritten Schritt wird eine unsichtbare Eingabeaufforderung übernommen und durch eine Nachbildung des überwachten, fein abgestimmten Modells weitergeleitet. Dadurch wird eine Antwort generiert, die dann mithilfe eines Belohnungsmodells ausgewertet wird, um ihren Rang oder ihre Qualität zu bestimmen. Der erreichte Rang wird zur weiteren Verfeinerung unseres bereits fein abgestimmten Modells verwendet. Dies wird erreicht, indem der Rang in die Verlustfunktion des PPO-Modells integriert wird, wodurch Aktualisierungen der Modellparameter durch Backpropagation ermöglicht werden. Besonders faszinierend ist, dass dieser Prozess dem Modell nicht nur dabei hilft, ungiftiges Verhalten zu zeigen, sondern es ihm auch ermöglicht, sachliche Antworten zu generieren. Dies liegt daran, dass die Belohnung selbst auf der Grundlage der Qualität der Antwort generiert wurde.

ChatSQL

Jetzt erstellen wir ein Projekt mit ChatGPT unter Verwendung von Python. Für dieses Projekt wird das LangChain-Framework verwendet.


Unser Ziel ist es, Informationen aus unserer Datenbank im Klartext abzurufen. Bei unserer Arbeit verwendeten wir MySQL als Zieldatenbank. Dennoch kann dieser Ansatz auch zur Generierung von Abfragen auf anderen Datenbanken genutzt werden. Die Beispieldatenbank wird unten angezeigt.


Alle Codes finden Sie hier ( https://github.com/ademakdogan/ChatSQL )

 +-----+--------------------------------------------------------+------------------------+-------------------+--------+------------------+ | ID | Title | Author | Genre | Height | Publisher | +-----+--------------------------------------------------------+------------------------+-------------------+--------+------------------+ | 1 | Fundamentals of Wavelets | Goswami, Jaideva | signal_processing | 228 | Wiley | | 2 | Data Smart | Foreman, John | data_science | 235 | Wiley | | 3 | God Created the Integers | Hawking, Stephen | mathematics | 197 | Penguin | | 4 | Superfreakonomics | Dubner, Stephen | economics | 179 | HarperCollins | | 5 | Orientalism | Said, Edward | history | 197 | Penguin | | 6 | Nature of Statistical Learning Theory, The | Vapnik, Vladimir | data_science | 230 | Springer | | 7 | Integration of the Indian States | Menon, VP | history | 217 | Orient Blackswan | | 8 | Drunkard's Walk, The | Mlodinow, Leonard | science | 197 | Penguin | | 9 | Image Processing & Mathematical Morphology | Shih, Frank | signal_processing | 241 | CRC | | 10 | How to Think Like Sherlock Holmes | Konnikova, Maria | psychology | 240 | Penguin | | 11 | Data Scientists at Work | Sebastian Gutierrez | data_science | 230 | Apress | | 12 | Slaughterhouse Five | Vonnegut, Kurt | fiction | 198 | Random House | | 13 | Birth of a Theorem | Villani, Cedric | mathematics | 234 | Bodley Head | | 14 | Structure & Interpretation of Computer Programs | Sussman, Gerald | computer_science | 240 | MIT Press | | 15 | Age of Wrath, The | Eraly, Abraham | history | 238 | Penguin | | 16 | Trial, The | Kafka, Frank | fiction | 198 | Random House | | 17 | Statistical Decision Theory' | Pratt, John | data_science | 236 | MIT Press | | 18 | Data Mining Handbook | Nisbet, Robert | data_science | 242 | Apress | | 19 | New Machiavelli, The | Wells, HG | fiction | 180 | Penguin | | 20 | Physics & Philosophy | Heisenberg, Werner | science | 197 | Penguin | | 21 | Making Software | Oram, Andy | computer_science | 232 | O'Reilly | | . | ....... | ....... | .... | ... | .... | | . | ....... | ....... | .... | ... | .... |

Das ChatSQL besteht aus zwei Hauptteilen. Zunächst werden über ChatGPT MySQL-Anfragen aus dem angegebenen Klartext generiert. Diese generierten Abfragen werden ausgeführt. Im zweiten Schritt werden die in der Datenbank zurückgegebenen Ergebnisse ausgewertet. In dieser Phase können die Ergebnisse entweder direkt dem Benutzer präsentiert oder zur weiteren Analyse und Interpretation an ChatGPT zurückgesendet werden. So können Sie mit ChatGPT über Ihre Datenbank chatten.


Angenommen, der Benutzer möchte „Zeigen Sie mir die Belletristik des Buchtyps, die größer als 175 und kleiner als 178 ist. Der Autor sollte nicht ‚Doyle, Arthur Conan‘ sein.“ Daher kann in diesem Fall der folgende Befehl verwendet werden.


 python3 chatsql.py -p 'Show me the book type fiction which they height bigger than 175 and smaller than 178. The author shouldn't be 'Doyle, Arthur Conan'. '


Als Ergebnis werden die folgenden Informationen erhalten.

 CHATGPT QUERY------------------: SELECT * FROM bt WHERE Genre = 'Fiction' AND Height > 175 AND Height < 178 AND Author != 'Doyle, Arthur Conan' RAW RESULT------------------: [(32, 'Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176, 'Random House'), (37, 'Veteran, The', 'Forsyth, Frederick', 'fiction', 177, 'Transworld'), (38, 'False Impressions', 'Archer, Jeffery', 'fiction', 177, 'Pan'), (72, 'Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176, 'Pan'), (87, 'City of Joy, The', 'Lapierre, Dominique', 'fiction', 177, 'vikas'), (128, 'Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176, 'nan')] PROCESSED RESULT------------------ : The books 'Pillars of the Earth, The' by Ken Follett, 'Veteran, The' by Frederick Forsyth, 'False Impressions' by Jeffery Archer, 'Prisoner of Birth, A' by Jeffery Archer, 'City of Joy, The' by Dominique Lapierre, and 'Rosy is My Relative' by Gerald Durrell are all fiction books with 176 or 177 pages published by Random House, Transworld, Pan, Vikas, and Nan, respectively.


Wenn Ihre Datenbankspalten entsprechend benannt sind, versteht chatgpt diese Namen und antwortet entsprechend auf Anfragen. Es kann jedoch vorkommen, dass die Spaltennamen in der Datenbank nicht aussagekräftig sind oder ChatGPT ihren Kontext möglicherweise nicht vollständig erkennt. Um sicherzustellen, dass das System ordnungsgemäß funktioniert, ist es daher erforderlich, ChatGPT vorab Informationen über die Datenbank bereitzustellen. Die Datei Info.json kann zum Hinzufügen von Informationen verwendet werden.

 +-----+--------------------------------------------------------+------------------------+-------------------+------+------------------+ | ID | aa | bb | cc | dd | ee | +-----+--------------------------------------------------------+------------------------+-------------------+------+------------------+ | 1 | Fundamentals of Wavelets | Goswami, Jaideva | signal_processing | 228 | Wiley | | 2 | Data Smart | Foreman, John | data_science | 235 | Wiley | | 3 | God Created the Integers | Hawking, Stephen | mathematics | 197 | Penguin | | 4 | Superfreakonomics | Dubner, Stephen | economics | 179 | HarperCollins | | 5 | Orientalism | Said, Edward | history | 197 | Penguin | | . | ....... | ....... | .... | ... | .... | | . | ....... | ....... | .... | ... | .... |

Nehmen wir als Beispiel eine Datenbank mit schlechtem Namen wie unten. In diesem Fall werden die erforderlichen Informationen zur Datenbank in die Datei info.json eingegeben.


{„bt“: „Tabellenname“, „aa“: „Titel des Buches“, „bb“: „Autor des Buches“, „cc“: „Buchtyp“, „dd“: „Höhe des book“, „ee“: „Book Publisher“}

und verwenden Sie dann denselben Befehl:

 python3 chatsql.py -p 'Show me the book type fiction which they height bigger than 175 and smaller than 178. The author shouldn't be 'Doyle, Arthur Conan'. '


Selbst wenn die Spaltennamen in der Datenbank schlecht ausgewählt sind, generiert chatgpt die richtige Abfrage, da wir die richtigen Informationen bereitstellen

 {'query': "SELECT aa, bb, cc, dd FROM bt WHERE cc = 'fiction' AND dd > 175 AND dd < 178 AND bb != 'Doyle, Arthur Conan'", 'raw_result': "[('Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176), ('Veteran, The', 'Forsyth, Frederick', 'fiction', 177), ('False Impressions', 'Archer, Jeffery', 'fiction', 177), ('Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176), ('City of Joy, The', 'Lapierre, Dominique', 'fiction', 177), ('Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176)]", 'processed_result': '\nThe books "Pillars of the Earth, The" by Ken Follett, "Veteran, The" by Frederick Forsyth, "False Impressions" by Jeffery Archer, "Prisoner of Birth, A" by Jeffery Archer, "City of Joy, The" by Dominique Lapierre and "Rosy is My Relative" by Gerald Durrell are all fiction and have page lengths of 176 or 177.'}


Das nächste Projekt könnte darin bestehen, Abfragen (Mongo, SQL) aus Eingabeaufforderungen mit kostenlosen Modellen (Llama) zu generieren.


Projekt-Repo: https://github.com/ademakdogan/ChatSQL

Github: https://github.com/ademakdogan

Linkedin: https://www.linkedin.com/in/adem-akdoğan-948334177/

Verweise

[1] Brown, TB, Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P. und Amodei, D. (2020). Sprachmodelle sind Wenig-Schuss-Lernende. arXiv-Vorabdruck arXiv:2005.14165.


[2] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., Sutskever, I. (2019). Sprachmodelle sind unbeaufsichtigte Multitasking-Lernende. OpenAI-Blog.


[3] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, AN und Polosukhin, I. (2017). Aufmerksamkeit ist alles, was Sie brauchen. In Fortschritte in neuronalen Informationsverarbeitungssystemen (S. 5998–6008).


[4] Devlin, J., Chang, MW, Lee, K. & Toutanova, K. (2019). BERT: Vortraining tiefer bidirektionaler Transformatoren für das Sprachverständnis. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Bd. 1, S. 4171–4186).


[5] Lewis, M., Liu, Y., Goyal, N., Ghazvininejad, M., Mohamed, A., Levy, O. & Zettlemoyer, L. (2019). BART: Entrauschendes Sequenz-zu-Sequenz-Vortraining für die Erzeugung, Übersetzung und das Verständnis natürlicher Sprache. arXiv-Vorabdruck arXiv:1910.13461.


[6] Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., … & Liu, PJ (2019). Erkunden Sie die Grenzen des Transferlernens mit einem einheitlichen Text-zu-Text-Transformator. arXiv-Vorabdruck arXiv:1910.10683.


[7] Vaswani, A. & et al. (2017). Transformer-XL: Aufmerksame Sprachmodelle über einen Kontext fester Länge hinaus. arXiv-Vorabdruck arXiv:1901.02860.