Modelos de incrustación de texto
Los modelos de incrustación de texto se utilizan principalmente para calcular la representación vectorial del texto. Aquí, el término "vector" se refiere a un vector matemático, también conocido como vector de características. Como desarrollador, todo lo que necesitas saber es que un modelo de incrustación de texto puede calcular el vector de características de un fragmento de texto, y luego, mediante el uso de cálculos de similitud de vectores, puede identificar contenido de texto con características similares.
Consejo: Para obtener conocimientos básicos sobre modelos de incrustación de texto, consulta el Tutorial introductorio sobre modelos de incrustación de texto
Diferencia entre Búsqueda Vectorial y Búsqueda Basada en Palabras Clave
- La búsqueda vectorial se basa en la similitud semántica de los vectores de palabras. Puede encontrar resultados que estén semánticamente relacionados con la consulta, incluso si las palabras de la consulta y las palabras en los resultados no coinciden exactamente. La búsqueda vectorial mapea palabras a un espacio vectorial de alta dimensión y calcula la similitud entre vectores. Esto significa que incluso si las palabras mismas no coinciden, siempre y cuando sean semánticamente similares, se pueden encontrar resultados relacionados.
- Por otro lado, la búsqueda basada en palabras clave es un proceso simple de coincidencia de cadenas. Solo devuelve resultados que contienen palabras de la consulta que coinciden exactamente. Si un documento utiliza diferentes palabras, incluso si son semánticamente similares, no se emparejarán.
La clase Embeddings es un tipo de clase diseñada específicamente para interactuar con modelos de incrustación de texto. Hay muchos proveedores de modelos de incrustación (como OpenAI, Cohere, Hugging Face, etc.), y el diseño de esta clase es proporcionar una interfaz estándar para todos los proveedores.
La clase Embeddings crea la representación vectorial del texto. Con la búsqueda vectorial, se pueden realizar búsquedas semánticas, por ejemplo, buscar los fragmentos de texto más similares en el espacio vectorial.
La clase Embeddings básica en LangChain expone dos métodos: uno para incrustar documentos y otro para incrustar consultas. El primero toma múltiples textos como entrada, mientras que el segundo toma un solo texto como entrada. La razón por la que se tratan como dos métodos diferentes es que algunos proveedores de incrustación tienen métodos de incrustación diferentes para los documentos que se van a buscar y las consultas (las propias consultas de búsqueda).
Inicio rápido
A continuación se muestra un ejemplo utilizando el modelo de incrustación de OpenAI:
Configuración
Primero, necesitamos instalar el paquete de Python de OpenAI. Dado que LangChain tiene muchas implementaciones diferentes de modelos de incrustación de texto, los desarrolladores deben instalar las dependencias de diferentes modelos según sus elecciones:
pip install langchain-openai
Configura la clave de OpenAI a través de variables de entorno:
export OPENAI_API_KEY="..."
Si no deseas configurar variables de entorno, puedes pasar el parámetro llamado openai_api_key
directamente al inicializar la clase OpenAI LLM para proporcionar la clave:
from langchain_openai import OpenAIEmbeddings
modelo_incrustaciones = OpenAIEmbeddings(openai_api_key="...")
De lo contrario, puedes inicializar sin parámetros:
from langchain_openai import OpenAIEmbeddings
modelo_incrustaciones = OpenAIEmbeddings()
incrustar_documentos
Calcula las características vectoriales de un lote de texto:
incrustaciones = modelo_incrustaciones.incrustar_documentos(
[
"¡Hola!",
"¡Oh, hola!",
"¿Cuál es tu nombre?",
"Mis amigos me llaman Mundo",
"¡Hola Mundo!"
]
)
len(incrustaciones), len(incrustaciones[0])
(5, 1536)
incrustar_consulta
Esta función calcula la característica vectorial de un texto de consulta. Normalmente implica convertir la pregunta que se va a buscar en un vector de características, y luego usar este vector para buscar textos similares en la base de datos de vectores.
consulta_incrustada = modelo_incrustaciones.incrustar_consulta("¿Cuál era el nombre mencionado en la conversación?")
consulta_incrustada[:5]
[0.0053587136790156364,
-0.0004999046213924885,
0.038883671164512634,
-0.003001077566295862,
-0.00900818221271038]