2 minutos de lectura

Embeddings OpenAi - Parte2

Puntos a ver ...

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.