Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Tokenización, embeddings y vectores, Unidad 12 — Mini-proyecto de embeddings, 12.1 — Proyecto guiado ·

Búsqueda semántica básica

Búsqueda semántica básica

Introducción

La búsqueda semántica es una técnica crucial para encontrar información relevante dentro de grandes corpora de texto. En resumen, la búsqueda semántica busca entender no solo las palabras que se escriben, sino también el significado detrás de estas palabras y cómo se relacionan entre sí. Esto permite a los sistemas de búsqueda proporcionar resultados más precisos y relevantes.

En esta guía, aprenderemos a implementar una búsqueda semántica básica utilizando embeddings preentrenados. Veremos cómo convertir frases o documentos en vectores para poder compararlos y encontrar similitudes, así como los posibles errores que podemos cometer durante este proceso.

Explicación principal con ejemplos

Para comenzar, necesitamos un conjunto de datos de entrenamiento con texto preprocesado. Usaremos embeddings preentrenados de Word2Vec para convertir nuestros documentos en vectores.

Paso 1: Preparación del entorno y carga de datos

Primero, instala las bibliotecas necesarias:

!pip install gensim numpy

Luego, cargamos los embeddings preentrenados con Gensim:

from gensim.models import KeyedVectors

# Carga el modelo Word2Vec preentrenado
model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)

Paso 2: Procesamiento del texto y conversión a vectores

Convertimos cada palabra en un vector:

def get_embedding_average(text):
    words = text.lower().split()
    embeddings = [model[word] for word in words if word in model]
    return np.mean(embeddings, axis=0) if embeddings else np.zeros(model.vector_size)

# Ejemplo de uso:
text1 = "Esta es una frase de ejemplo."
v1 = get_embedding_average(text1)
print(v1)

Paso 3: Comparación y búsqueda semántica

Usamos la similitud coseno para comparar vectores:

from sklearn.metrics.pairwise import cosine_similarity

def search_semantic(query, documents):
    query_vec = get_embedding_average(query)
    similarities = [cosine_similarity([query_vec], [get_embedding_average(doc)])[0][0] for doc in documents]
    return list(zip(documents, similarities))

# Ejemplo de uso:
documents = ["Esta es una frase de ejemplo.", "Otra frase para comparar.", "Este es un ejemplo diferente."]
results = search_semantic("frase de ejemplo", documents)
for doc, sim in results:
    print(f"Documento: {doc}, Similaridad: {sim}")

Errores típicos / trampas

  1. Palabras no encontradas: La búsqueda semántica puede fallar si una palabra específica no está en el conjunto de embeddings preentrenados.
  1. Sesgos y sesgo contextual: Los modelos preentrenados pueden contener sesgos que reflejan la sociedad y cultura de los datos de entrenamiento, lo cual puede llevar a resultados sesgados o imprecisos.
  1. Longitud variable del texto: La comparación entre documentos con diferentes longitudes puede resultar en similitud incorrecta si no se normalizan adecuadamente las longitudes.

Checklist accionable

  1. Verifica la disponibilidad de palabras clave en el modelo: Antes de realizar comparaciones, asegúrate de que todas las palabras relevantes están presentes en tu modelo.
  2. Normaliza la longitud del texto: Utiliza técnicas como promedios ponderados o trucos de padding para manejar documentos con diferentes longitudes.
  3. Analiza y filtra los sesgos: Usa herramientas de análisis de embeddings y considera filtrar o ajustar los datos según sea necesario para mitigar el sesgo.
  4. Implementa validaciones previas a la búsqueda: Verifica que las palabras en tu consulta estén correctamente formadas y sean relevantes antes de buscar similitud.
  5. Mide constantemente el rendimiento: Monitorea regularmente la precisión y relevancia de tus resultados para asegurar que no haya cambios imprevistos.

Cierre: Siguientes pasos

Ahora que hemos implementado una búsqueda semántica básica, podemos explorar técnicas más avanzadas:

  • Usar modelos embeddings más recientes: Los modelos como BERT o ELMo proporcionan representaciones de texto contextualizadas, lo cual puede mejorar significativamente los resultados.
  • Implementar sistemas RAG (Retrieval-Augmented Generation): Combina la búsqueda de documentos con generación de texto para obtener soluciones más completas y precisas.

Siguiendo estos pasos, podrás mejorar el rendimiento de tu sistema de búsqueda semántica y asegurarte de que esté adaptado a tus necesidades específicas.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).