Generación de embeddings
He continuado estudiando OpenAI para entender los embeddings. He conseguido diseñar un chatbot un poco rudimientario pero me ha servido para enteder un poco más Python, y las lagunas que tengo en este lenguaje. Debo documentarme sobre las librerias Pandas, Numpy y Gradio, que agilizan mucho el desarrollo con este tipo de LLMs. El objetivo es familiarizarse con este tipo de herramientas que van a ser el pan de cada dÃa de muchos desarrolladores. Los que venimos de PHP lo encontramos bastante acogedor. A continuación comparto las partes más interesantes del código:
def embed_text(path='chatbot_qa.csv'):
conocimiento_df = pd.read_csv(path)
conocimiento_df['Embedding'] = conocimiento_df['texto'].apply(lambda x:get_embedding(x))
conocimiento_df.to_csv('embeddings.csv')
return conocimiento_df
La función anterior permite leer de golpe un fichero csv y por cada tupla o registro realizar un embedding correspondiente. Mención, a la manera de crear columnas en ficheros, que difiere un poco de PHP. Nota interesante: apply método de la libreria Pandas y función lambda.
def buscar(busqueda,datos, n_resultados = 5):
busqueda_embed = get_embedding(busqueda)
datos['Similitud'] = datos['Embedding'].apply(lambda x: cosine_similarity(x,busqueda_embed))
datos = datos.sort_values('Similitud',ascending=False)
return datos.iloc[:n_resultados][['texto','Similitud','Embedding']]
La función anterior, busca sobre un DataFrame y aplica cosine_similarity para buscar relación entre los vectores. La idea es buscar una relación entre los textos y devolver al menos 5 resultados.
Nota interesante: iloc método de la libreria Pandas
text_emb=embed_text('./chatbot_qa.csv')
with gr.Blocks() as demo:
busqueda = gr.Textbox(label='Buscar')
output = gr.DataFrame(headers=['texto'])
greet_btn = gr.Button('Preguntar')
greet_btn.click(fn=buscar,inputs=[busqueda,gr.DataFrame(text_emb)],outputs=output)
demo.launch()
Todo el código del chatbot se reduce a las últimas lÃneas anteriores donde se crear el embedding de todo el texto, y por último se utiliza Gradio para crear una interfaz web muy interesante para realizar filtrados, de manera que agiliza la interacción a la vez que simula un chatbox operativo.