Entrenamiento de embeddings de texto con Jina AI
Recientemente, escuchamos a Bo Wang en el Berlin Unstructured Data Meetup hablar sobre el entrenamiento de embeddings de texto generales de última generación. Los embeddings de texto ya impulsan la búsqueda vectorial moderna y los sistemas de generación aumentada por recuperación (RAG). Wang nos ayuda a comprender las complejidades de desarrollar embeddings de texto de última generación, con el enfoque principal en los embeddings de Jina.
Mira la repetición de la charla de Bo Wang en Youtube
¿Por qué deberían importarte los embeddings de texto de Jina?
El lanzamiento de Jina-Embeddings-V2 causó sensación en la comunidad de IA, acumulando más de 3 millones de descargas en Hugging Face. Este modelo se ha integrado en numerosos frameworks de IA como LangChain y LlamaIndex, y bases de datos vectoriales como Milvus y Zilliz Cloud. El revuelo en torno a los embeddings de Jina incluso llegó a la cima de Hacker News, generando extensos debates y discusiones sobre codificadores de contexto largo. Los embeddings de Jina compiten de cerca con los embeddings de OpenAI, unos de los mejores de la industria.
Con eso en mente, profundicemos en la charla de Wang sobre las complejidades de desarrollar embeddings de texto de Jina.
Evolución desde el ajuste fino hasta el entrenamiento de modelos de embeddings a escala
Jina AI no comenzó entrenando su propio modelo de embeddings. En cambio, empezó ajustando finamente modelos ya existentes como BERT. Los modelos ajustados finamente rindieron mejor que los existentes. Echemos un vistazo a las estadísticas. El valor delta al final representa qué tan bien rinde el modelo ajustado finamente en comparación con el modelo preentrenado original.
Comparación de rendimiento entre modelos preentrenados y ajustados finamente
Como puedes ver, todos los modelos ajustados finamente mejoraron significativamente, lo que implica que el algoritmo funcionó bien. Pero ¿fue el producto bien recibido por la industria tecnológica? La respuesta simple es no.
Esto ocurrió cuando la industria, incluso la industria de las búsquedas, se estaba moviendo lentamente hacia los vectores y acababa de empezar a usar modelos de embeddings preentrenados. Sin embargo, no estaban listos para el ajuste fino de modelos de embeddings. Los modelos de embeddings tampoco se habían adoptado ampliamente en otras industrias, ya que no existían LLM ni sistemas RAG.
Así que, aunque el ajuste fino permitió a Jina AI lograr mejoras incrementales, pronto se dieron cuenta de que la industria no estaba preparada para las técnicas de ajuste fino. Esta comprensión los llevó a emprender un esfuerzo ambicioso: entrenar su modelo de embeddings desde cero. Creían que desarrollar una solución propia les permitiría ampliar los límites de lo posible.
Creación de Jina-Embeddings-V1
Crear Jina-Embeddings-V1 implicó seguir un enfoque integral. Wang nos guía por el enfoque utilizado:
Investigar modelos de última generación: El primer paso es estudiar modelos de embeddings de vanguardia, incluidos minilm, mpnet, sentence-t5, GTR e instructores de gigantes tecnológicos como Microsoft y Google. Este enfoque ayuda a comprender las fortalezas y limitaciones de las soluciones existentes e identificar las áreas que necesitan mejoras.
Recopilar un conjunto de datos de entrenamiento masivo: El siguiente paso es reunir un enorme conjunto de datos. Jina AI utilizó 2 mil millones de registros de datos de entrenamiento en inglés. Este corpus masivo es esencial para entrenar un modelo de embeddings de propósito general y alta calidad capaz de manejar una amplia gama de tareas y dominios.
Limpieza y curación exhaustivas de datos: Para garantizar la calidad de los datos de entrenamiento, se realizan procesos exhaustivos de limpieza y curación de datos, incluidos la deduplicación, la detección de idioma y el filtrado de calidad. Después de este riguroso proceso, Jina AI se quedó con 400 millones de registros de datos de preentrenamiento de alta calidad y 5 millones de líneas de datos de ajuste fino anotados por humanos.
Refactorización para entrenamiento distribuido: Jina AI refactorizó su base de código de Finetuner para permitir un entrenamiento eficiente de modelos a gran escala con el fin de admitir el entrenamiento distribuido en múltiples nodos y GPU. Esta infraestructura escalable es crucial para entrenar modelos con un conjunto de datos tan masivo.
El modelo fue un éxito, pero no destacó entre todos los demás modelos de la industria, ya que tenía una longitud de contexto limitada. Para resolver esta limitación, Jina AI entrenó Jina-Embeddings-V2.
Presentamos Jina-Embeddings-V2: Entrenamiento corto, inferencia larga
Para superar la barrera de los 512 tokens y lograr su objetivo de manejar secuencias más largas, Jina AI presenta Jina-Embeddings-V2, un modelo de embeddings que puede manejar secuencias de hasta 8,192 tokens durante la inferencia mientras se entrena con secuencias más cortas. Esto se logra mediante varias modificaciones clave. Wang repasa estas modificaciones rápidamente. Profundicemos:
Eliminación de los embeddings de posición
Los modelos transformer tradicionales, incluido BERT, dependen de embeddings de posición para codificar el orden de los tokens dentro de una secuencia. Estos embeddings de posición son vectores fijos que representan la posición de cada token en relación con los demás. Sin embargo, tienen limitaciones:
- Longitud de contexto: Los embeddings de posición restringen la ventana de contexto a un tamaño fijo (por ejemplo, 512 tokens en BERT). Los documentos o secuencias más largos superan este límite, lo que provoca pérdida de información. Observa cómo la perplejidad se dispara en los modelos BERT cuando superas los 512 tokens, lo que significa que hay pérdida de información. La perplejidad mide cómo el modelo puede entender la semántica del texto. Cuanto menor sea la perplejidad, mejor.
Longitud de secuencia de inferencia vs perplejidad en BERT
- Restricciones posicionales: Los tokens en posiciones distantes reciben embeddings similares, ignorando su contexto.
Jina-Embeddings-V2 elimina por completo los embeddings de posición, lo que le permite manejar secuencias más largas sin restricciones posicionales. El modelo captura el contexto en documentos extensos, lo que lo hace adecuado para la resumición de documentos, el análisis legal y la comprensión de contenido de formato largo.
Atención con sesgos lineales (ALiBi)
ALiBi es una técnica desarrollada para grandes modelos de lenguaje. En lugar de depender de embeddings de posición fijos, ALiBi captura información del orden de las palabras dinámicamente durante los cálculos de atención. Luego se adapta al contexto de cada token, lo que le permite considerar tanto los tokens precedentes como los siguientes sin restricciones posicionales.
Efecto en los embeddings: ALiBi mejora la comprensión del contexto, incluso en textos extensos. Permite a Jina-Embeddings-V2 capturar relaciones semánticas ricas entre tokens, independientemente de su posición.
Adaptación de ALiBi para transformers bidireccionales
La comprensión bidireccional es crucial para tareas como la respuesta a preguntas, la resumición y la búsqueda semántica. Así es como Jina-Embeddings-V2 lo logra:
Concepto: ALiBi fue diseñado originalmente para modelos solo de decodificador. Jina AI lo extiende a arquitecturas bidireccionales como BERT.
Contexto bidireccional: Jina-Embeddings-V2 considera tanto el contexto izquierdo como el derecho, capturando dependencias a lo largo de toda la secuencia.
Efecto en los embeddings: El modelo sobresale en tareas donde importa comprender el contexto en ambas direcciones. Por ejemplo, la búsqueda semántica se beneficia de los embeddings bidireccionales, ya que requiere analizar simultáneamente las consultas de los usuarios y el contenido de los documentos.
Reentrenamiento de BERT desde cero
Jina AI reentrenó BERT con técnicas avanzadas, dando como resultado JinaBERT, que sirve como columna vertebral de Jina-Embeddings-V2:
Concepto: Jina AI aplica diversos trucos, incluidos el enmascaramiento de palabras completas, la receta de RoBERTa, activaciones GeGLU y enmascaramiento agresivo.
Compatibilidad con ALiBi: JinaBERT se entrena en ALiBi, lo que garantiza un modelado de contexto dinámico.
Efecto en los Embeddings: Jina-Embeddings-V2 se beneficia de una columna vertebral robusta capaz de manejar tareas diversas. Resume artículos extensos, extrae información esencial y mantiene la integridad del contexto.
La perplejidad retenida de JinaBERT sigue siendo baja incluso cuando se supera el límite de 512 tokens. Gracias a la eliminación de los embeddings posicionales y la adaptación de AliBi. Echa un vistazo al nuevo gráfico que compara BERT y JinaBERT:
Longitud de secuencia de inferencia vs perplejidad en JinaBERT y BERT
Conectando idiomas: Embeddings bilingües
Reconociendo las limitaciones de los modelos de embeddings multilingües existentes, que a menudo dependen en gran medida de datos de entrenamiento en inglés, Jina AI comenzó a desarrollar embeddings bilingües. Su objetivo es crear modelos que puedan manejar múltiples idiomas y relaciones interlingüísticas entre ellos.
El enfoque de Jina AI para los embeddings bilingües se aparta de la norma. La mayoría de los modelos multilingües, como Multilingual BERT y Multilingual E5, sufren un sesgo significativo en la distribución de sus datos de entrenamiento. Por ejemplo, el popular modelo Multilingual E5 tiene el 91,5% de sus datos de entrenamiento en inglés, con solo el 4,2% en chino y el 4,3% en otros idiomas combinados.
Multilingual E5 vs Jina Embedding v2 en datos multilingües preentrenados
En contraste, el modelo Jina-Embeddings-V2-Based-German de Jina AI presenta una distribución equilibrada de datos de entrenamiento de 50% en inglés y 50% en alemán. Estos datos interlingüísticos están diseñados específicamente para mejorar la comprensión del modelo sobre las similitudes y relaciones entre los dos idiomas.
A pesar de ser más pequeño que los modelos multilingües, Jina-Embeddings-V2-Based-German supera consistentemente a sus competidores, logrando puntuaciones más altas en tareas de búsqueda de alemán a alemán, de alemán a inglés y de inglés a alemán.
Comparación del rendimiento de búsqueda entre diferentes modelos de embeddings
Los resultados muestran la superioridad de los embeddings bilingües de Jina AI sobre modelos multilingües populares como Multilingual E5 y Cohere Embed V3, tanto en tareas de búsqueda monolingües como interlingüísticas.
Qué considerar al crear aplicaciones RAG con Jina-Embeddings-V2
Al desarrollar aplicaciones de Generación Aumentada por Recuperación (RAG) utilizando Jina-Embeddings-V2, es esencial comprender cómo el modelo maneja documentos de diferentes longitudes y el posicionamiento de la información relevante dentro de estos documentos. Bo Wang destacó varias consideraciones clave:
Documentos cortos: Si tus documentos siempre tienen menos de 512 tokens, Jina-Embeddings-V2 funciona de manera comparable a otros codificadores promedio como E5 o BGE.
Documentos largos (información temprana): Si tus documentos tienen más de 512 tokens, pero la información relevante está al principio, Jina-Embeddings-V2 podría rendir peor.
Documentos largos (información posterior): Si tus documentos tienen más de 512 tokens, y la información relevante está en el medio o al final, Jina-Embeddings-V2 mejora significativamente el rendimiento de búsqueda.
Integración de Jina AI con la base de datos vectorial Milvus
Tanto las bases de datos vectoriales como los modelos de embeddings son indispensables para crear sistemas eficientes de recuperación de información y aplicaciones RAG. Estos componentes a menudo se integran para realizar tareas de búsqueda por similitud vectorial y recuperación.
Milvus es una base de datos vectorial de código abierto diseñada para almacenar y recuperar eficientemente embeddings vectoriales a escala de miles de millones. Recientemente, los embeddings de Jina se han integrado en la biblioteca de modelos de PyMilvus, agilizando el desarrollo de aplicaciones RAG u otras aplicaciones GenAI al eliminar la necesidad de componentes de embedding adicionales.
La reciente introducción de Milvus Lite, una versión ligera de Milvus, ha simplificado aún más este proceso. Milvus Lite comparte la misma API que la versión completa de Milvus desplegada en Docker o Kubernetes, pero puede instalarse fácilmente mediante un comando pip de una sola línea sin configurar un servidor. Es ideal para la creación de prototipos y puede pasar sin problemas a diversas implementaciones de Milvus a medida que crecen tus requisitos.
Para obtener más información sobre esta integración, consulta los siguientes recursos:
Documentación de Milvus: Integrate Milvus with Jina Embeddings
Blog: Implementing a Chat History RAG with Jina AI and Milvus Lite
Mirando hacia el futuro: Jina-Embeddings-V3
El equipo de Jina AI ya está trabajando en Jina-Embeddings-V3, que promete aportar aún más avances:
Velocidad y eficiencia: Jina-Embeddings-V3 será más rápido y más eficiente en memoria, especialmente para secuencias más largas.
Soporte multilingüe: La nueva versión ofrecerá una distribución lingüística optimizada y un mejor manejo de datos multilingües.
Resolución de problemas del mundo real: Jina-Embeddings-V3 abordará problemas del mundo real con análisis de fallos por compresión en V2 y otros modelos de embedding.
Mejoras específicas para tareas: Incluirá instrucciones de tareas y cabezales de tareas cuidadosamente diseñados, junto con enrutamiento inteligente para gestionar mejor diferentes tareas.
Conciencia de fragmentos y esquemas: El modelo será consciente de fragmentos y consciente de esquemas, mejorando su comprensión de datos semiestructurados y embeddings jerárquicos.
Resumen
Los modelos de embedding de Jina ofrecen un alto rendimiento, con una ventana de entrada de 8192 tokens de longitud que sobresale en la representación integral de datos. Con soporte multilingüe e integración fluida con plataformas líderes como OpenAI, estos embeddings son ideales para aplicaciones interlingüísticas.
Los modelos de embedding y las bases de datos vectoriales son esenciales para una búsqueda de similitud y recuperación de información eficientes. Al integrar los modelos de embedding de Jina con PyMilvus, el SDK de Python para Milvus, el desarrollo de RAG y diversas aplicaciones GenAI se vuelve más eficiente y sencillo.
En una charla reciente de Bo Wang, habló sobre la creación de embeddings de texto de Jina para la búsqueda vectorial moderna y sistemas RAG. También compartió metodologías para entrenar modelos de embedding que codifican eficazmente información extensa, junto con orientación para seleccionar los modelos de embedding más adecuados para diversas necesidades empresariales.
Para más detalles, mira la repetición de la charla de Bo Wang en Youtube.
Sigue leyendo

Introducing Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud
We're announcing the general availability of Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud.

Why AI Databases Don't Need SQL
Whether you like it or not, here's the truth: SQL is destined for decline in the era of AI.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.


