paint-brush
ChatSQL: habilitar ChatGPT para generar consultas SQL a partir de texto sin formatopor@ademakdogan
6,292 lecturas
6,292 lecturas

ChatSQL: habilitar ChatGPT para generar consultas SQL a partir de texto sin formato

por adem17m2023/06/21
Read on Terminal Reader

Demasiado Largo; Para Leer

Nuestro objetivo es recuperar información de nuestra base de datos utilizando texto plano. En nuestro trabajo, utilizamos MySQL como base de datos de destino. Sin embargo, este enfoque también se puede utilizar para generar consultas en otras bases de datos. La base de datos de ejemplo se muestra a continuación.
featured image - ChatSQL: habilitar ChatGPT para generar consultas SQL a partir de texto sin formato
adem HackerNoon profile picture
0-item

ChatGPT se lanzó en junio de 2020 y está desarrollado por OpenAI. Ha llevado a desarrollos revolucionarios en muchas áreas. Una de estas áreas es la creación de consultas a la base de datos. Las consultas a la base de datos se pueden generar a partir de texto sin formato a través de ChatGPT . Te ayuda con bases de datos de las que tienes poco conocimiento.


La inteligencia artificial, que se ha integrado progresivamente en nuestra vida diaria, ha cobrado un impulso significativo con el auge de ChatGPT. Antes de pasar al proyecto, exploremos brevemente ChatGPT.


Para comprender completamente las capacidades de ChatGPT, es esencial tener una comprensión sólida de su arquitectura subyacente. ChatGPT ha sido desarrollado en base a la arquitectura GPT . Así que echemos un vistazo a los transformadores primero.


Para acceder directamente al proyecto, haga clic aquí .


Fig 1. Codificador y Decodificador de Transformador

Los transformadores utilizan marcos seq2seq, lo que permite la conversión de una secuencia en otra. Las secuencias tienen un orden definido. Como ilustración, las oraciones pueden verse como una sucesión de palabras. Los Transformers también se pueden usar para resolver PNL, como la traducción de texto. Necesitamos muchos datos etiquetados para entrenar esta arquitectura. Esto sería difícil de aprender para los transformadores. Podemos utilizar el aprendizaje por transferencia para resolver este problema. Los transformadores constan de dos componentes (Fig. 1): un codificador y un decodificador, ambos expertos en adquirir una representación de lenguaje competente.


Esta competencia nos permite construir modelos de lenguaje a partir de cada componente. Al apilar los codificadores, obtenemos una representación de transformadores de codificador bidireccional , comúnmente conocida como BERT . De manera similar, al apilar las unidades decodificadoras, podemos lograr un entrenamiento de preparación generativo que es GPT. En nuestro caso nos estamos centrando en GPT. Pensemos en el aprendizaje por transferencia en el contexto de GPT. Cuando entrenamos un modelo desde cero, normalmente exige una cantidad sustancial de datos, ya que los parámetros se establecen inicialmente de forma aleatoria. Sin embargo, imagine un escenario donde los parámetros se alinean fortuitamente con los valores que requerimos. En tales casos, no necesitamos un conjunto de datos extenso para lograr el resultado deseado. Como se comprenderá, BERT y GPT se utilizan en el concepto de transferencia de aprendizaje.


Por lo tanto, la formación GPT se divide en dos partes. Tenemos una parte de capacitación previa en la que entrenamos la arquitectura GPT para comprender qué es el idioma y luego una parte de ajuste fino en la que usamos el aprendizaje de transferencia para entrenar aún más la arquitectura GPT para que funcione bien en tareas específicas del idioma.


Fig. 2. Ejemplo de predicción de la siguiente palabra

GPT tiene una estructura que toma secuencias de palabras aleatorias como entrada y predice la siguiente palabra más adecuada. La predicción de muestra se puede ver en la figura 2.


El modelado del lenguaje se selecciona como una base ideal para comprender los aspectos fundamentales del lenguaje y puede ajustarse fácilmente. Se conoce comúnmente como una tarea autosupervisada, ya que las oraciones mismas sirven como etiquetas de entrada y salida.

Fig. 3. Diagrama de ChatGPT — Fuente


Pasemos a ChatGPT. Como se puede ver en la Fig. 3, todo el proceso de ChatGPT se puede dividir en tres pasos principales. En el primer paso, se utiliza el modelo GPT que ha sido entrenado previamente para comprender el lenguaje en sí. El siguiente paso consiste en ajustar el modelo para procesar de manera efectiva las indicaciones del usuario y generar respuestas apropiadas basadas en esas indicaciones. Para facilitar este proceso, los datos etiquetados se obtienen mediante la participación de etiquetadores que no solo brindan indicaciones sino que también especifican la respuesta deseada para cada indicación. Esto permite participar en el ajuste fino supervisado del modelo GPT, ya que hay indicaciones de entrada y respuestas de salida correspondientes.


En el siguiente paso, se utiliza el modelo de ajuste fino supervisado que se obtuvo del primer paso. Se pasa un solo mensaje a través del modelo y se generan múltiples respuestas. El etiquetador luego evalúa y clasifica la calidad de estas respuestas. A cada respuesta generada se le asigna una recompensa correspondiente, que se utiliza para entrenar otro modelo de GPT conocido como modelo de recompensas. Al ser un modelo en sí mismo, el modelo de recompensas funciona tomando un aviso inicial y una de las respuestas como entrada y generando una recompensa como salida. Esta recompensa cuantifica la calidad o bondad de la respuesta.


En el tercer paso, se tomará un mensaje invisible y se pasará a través de una réplica del modelo supervisado y ajustado. Esto generará una respuesta, que luego se evaluará utilizando un modelo de recompensas para determinar su rango o calidad. El rango obtenido se utilizará para refinar aún más nuestro modelo ya perfeccionado. Esto se logra incorporando el rango en la función de pérdida del modelo PPO, lo que permite actualizaciones de los parámetros del modelo a través de la retropropagación. Lo que es particularmente fascinante es que este proceso no solo ayuda al modelo a exhibir un comportamiento no tóxico, sino que también le permite generar respuestas fácticas. Esto se debe a que la recompensa en sí se generó en función de la calidad de la respuesta.

chatsql

Ahora hagamos un proyecto con ChatGPT usando python. El marco LangChain se utiliza para este proyecto.


Nuestro objetivo es recuperar información de nuestra base de datos utilizando texto plano. En nuestro trabajo, utilizamos MySQL como base de datos de destino. Sin embargo, este enfoque también se puede utilizar para generar consultas en otras bases de datos. La base de datos de ejemplo se muestra a continuación.


Todos los códigos se pueden encontrar aquí ( 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 | | . | ....... | ....... | .... | ... | .... | | . | ....... | ....... | .... | ... | .... |

El ChatSQL consta de dos partes principales. En primer lugar, las consultas mysql se generan a partir del texto sin formato dado a través de ChatGPT. Estas consultas generadas se ejecutan. En el segundo paso, se evalúan los resultados devueltos en la base de datos. En esta etapa, los resultados pueden presentarse directamente al usuario o enviarse a ChatGPT para su posterior análisis e interpretación. Entonces puedes chatear sobre tu base de datos con ChatGPT.


Supongamos que el usuario quiere "Muéstrame el tipo de libro de ficción cuya altura sea mayor que 175 y menor que 178. El autor no debería ser 'Doyle, Arthur Conan'". Entonces, el siguiente comando se puede usar en este caso.


 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'. '


Como resultado se obtiene la siguiente información.

 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.


Si las columnas de su base de datos tienen el nombre apropiado, chatgpt entenderá estos nombres y responderá las consultas en consecuencia. Sin embargo, puede haber casos en los que los nombres de las columnas en la base de datos no sean significativos o ChatGPT no descubra completamente su contexto. Por lo tanto, para garantizar que el sistema funcione correctamente, es necesario proporcionar a ChatGPT información previa sobre la base de datos. El archivo Info.json se puede usar para agregar información.

 +-----+--------------------------------------------------------+------------------------+-------------------+------+------------------+ | 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 | | . | ....... | ....... | .... | ... | .... | | . | ....... | ....... | .... | ... | .... |

Como ejemplo, tengamos una base de datos mal nombrada como se muestra a continuación. En este caso, la información requerida sobre la base de datos se ingresa en el archivo info.json.


{“bt”: “Nombre de la tabla”, “aa”: “Título del libro”, “bb”: “Autor del libro”, “cc”: “Tipo de libro”, “dd”: “Altura del libro”, “ee”: “Editor de libros”}

y luego usa el mismo comando:

 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'. '


Incluso si los nombres de las columnas en la base de datos están mal seleccionados, chatgpt genera la consulta correcta porque proporcionamos la información correcta

 {'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.'}


El próximo proyecto podría ser generar consultas (mongo, sql) a partir de solicitudes con modelos libres (Llama).


Proyecto Repo: https://github.com/ademakdogan/ChatSQL

Github: https://github.com/ademakdogan

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

Referencias

[1] Brown, TB, Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P. y Amodei, D. (2020). Los modelos de lenguaje son aprendices de pocas oportunidades. preimpresión de arXiv arXiv:2005.14165.


[2] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., Sutskever, I. (2019). Los modelos de lenguaje son aprendices multitarea sin supervisión. Blog de OpenAI.


[3] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, AN y Polosukhin, I. (2017). La atención es todo lo que necesitas. En Avances en los sistemas de procesamiento de información neuronal (págs. 5998–6008).


[4] Devlin, J., Chang, MW, Lee, K. y Toutanova, K. (2019). BERT: Pre-entrenamiento de transformadores bidireccionales profundos para la comprensión del lenguaje. En Actas de la Conferencia de 2019 del Capítulo de América del Norte de la Asociación de Lingüística Computacional: Tecnologías del Lenguaje Humano (Vol. 1, págs. 4171–4186).


[5] Lewis, M., Liu, Y., Goyal, N., Ghazvininejad, M., Mohamed, A., Levy, O. y Zettlemoyer, L. (2019). BART: Entrenamiento previo de eliminación de ruido de secuencia a secuencia para la generación, traducción y comprensión del lenguaje natural. preimpresión de arXiv arXiv:1910.13461.


[6] Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., … y Liu, PJ (2019). Explorando los límites del aprendizaje por transferencia con un transformador unificado de texto a texto. preimpresión de arXiv arXiv:1910.10683.


[7] Vaswani, A. y et al. (2017). Transformer-XL: modelos de lenguaje atento más allá de un contexto de longitud fija. preimpresión de arXiv arXiv:1901.02860.