¿Cómo utilizar modelos de embeddings open source con Langstream?
La posibilidad de trabajar con modelos de embeddings open source nos abre las puertas a un abanico de oportunidades en el mundo del procesamiento de lenguaje natural. Langstream nos permite utilizar estas herramientas, y en esta guía analizaremos cómo implementar de manera eficiente los modelos de embeddings a través de la biblioteca Sentence Transformers. El objetivo es ayudar a los usuarios a configurar y aprovechar estos modelos a su máximo potencial utilizando ejemplos prácticos.
¿Qué son los Sentence Transformers?
Los Sentence Transformers son modelos de embedding altamente valorados dentro de la comunidad, conocidos por ser de los primeros en su tipo y por su gran potencia. Embeddings, en este contexto, se refiere al proceso de transformar texto en un formato numérico que los algoritmos de machine learning pueden procesar. Esencialmente, convierten oraciones en vectores de números que capturan el significado semántico del texto.
Para empezar a trabajar con estos modelos, debemos importar el componente Sentence Transformer Embeddings desde la librería de embeddings diseñada para soportarlo en Langstream. Así, se utiliza el modelo "Paraphrase Multilingual Mini LM L12 V2", el cual es un modelo multilingüe que soporta el español.
from langstream.embeddings import SentenceTransformerEmbeddings
embeddings_st = SentenceTransformerEmbeddings(model_name="paraphrase-multilingual-MiniLM-L12-v2")
Ventajas de usar Sentence Transformers
Versatilidad Multilingüe: Capacidad de procesar múltiples idiomas, incluido el español.
Independencia: Los modelos pueden funcionar localmente sin necesidad de conectarse a una API.
Optimización de recursos: Embeddings compactos que requieren menor poder computacional.
¿Cómo cargar y usar struct embeddings?
Los struct embeddings representan generadores de embeddings de nueva generación altamente eficientes. Aunque aún no hay un modelo de struct embedding que maneje el español específicamente, su rendimiento en otros idiomas es notable.
Para usarlos, importa la librería Instructor Embeddings y configúralos para funcionar en tu hardware preferido, como CUDA para usar GPU.
from langstream.embeddings import InstructEmbeddings
embeddings_instruct = InstructEmbeddings(model_name="Instructor-Large", model_kwargs={"device":"cuda"})
Características de los struct embeddings
Innovación y poder: Modelos avanzados que destacan por la cantidad de detalles que capturan en los embeddings.
Gran escala: Embeddings de 768 números, proporcionando una rica representación del texto.
¿Cómo trabajar con diferentes tamaños y números de tokens?
Es crucial entender los límites de tokenización de los modelos para evitar cortes de texto y pérdidas de información significativa. Cuando se trabajan con modelos importados desde Hugging Face, podemos determinar el tamaño máximo de tokens aceptados.
Sentence Transformers Mini: Optimo para pequeños fragmentos con un máximo de 128 tokens.
Instructor Large: Procesa hasta 512 tokens por documento, adecuado para textos más largos.
Para otros proveedores, como OpenAI y Cohere, es importante revisar sus documentaciones. OpenAI, por ejemplo, podría aceptar hasta 8000 tokens, mientras que para Cohere el número óptimo es 500 tokens.
Recomendaciones y mejores prácticas
Leer documentaciones actualizadas: Mantente al día revisando blogs y documentaciones para conocer las capacidades y limitaciones de los modelos.
Optar por modelos multilingües: Si trabajas en proyectos multilingües, asegúrate de seleccionar modelos que soporten todos los idiomas necesarios.
Optimizar el hardware: Siempre que sea posible, utilice GPU para acelerar el proceso de generación de embeddings.
Fragmentar textos adecuadamente: Asegúrate de fragmentar tus documentos según el tamaño de tokens aceptados por el modelo elegido.
Adoptar estas prácticas beneficiará tanto a los proyectos personales como a los empresariales, maximizando la eficiencia al trabajar con grandes volúmenes de texto. Implementar adecuadamente los modelos de embeddings no solo optimiza el rendimiento, sino que también mejora la calidad de las aplicaciones de procesamiento de lenguaje natural.
pueden tambien probar este modelo es un poco pesado pero es multilenguaje con una longitud de 1024 mayor a los 384 y 724 moestrados en la clase
embeddings_hg = HuggingFaceEmbeddings(model_name="intfloat/multilingual-e5-large")
Siempre y Cuando el Hardware del VPS aguante, estaria buen. si es en localhost lo dudo, dberiase tener una GPU de alto rendimiento.
Una diferencia entre usar embeddings o IntructEmbeddings, es que el IntructEmbeddings, porporciona contexto a la busqueda, por ejemplo, en cada busqueda que realicemos podemos añadir un texto como el siguiente "devuelve articulos de la wikipedia que contegan: {nuestra variable}"
a Jan 2025.
Me tomo un buen buen rato pero a pesar de que encuentren que deben mantener la versión 2.2.2 de sentence transformers, la Liberia ha sido deprecada.
from langchain.embeddingsimportHuggingFaceEmbeddingsembedding_instruct =HuggingFaceEmbeddings( model_name ="hkunlp/instructor-large", model_kwargs ={'device':'cpu'})
Hola! una duda: Estoy intentando pasarle el objeto documents que obtuve luego del cargue del pdf y de pasarlo por el textsplitter, a la funcion de embeddings, pero veo que esta solo recibe objetos de tipo texto y no documents directamente. Alguien puede darme una idea de como pasarle ese document y no el texto plano como en el ejemplo del video??
Hoy en día que hago esto mismo me saca un error TypeError: INSTRUCTOR._load_sbert_model() got an unexpected keyword argument 'token' a pesar de que yo no esté colocando ningún parámetro que diga Token, alguien sabe hoy en día por qué sucede esto de casualidad?
La librería sentence_transformers fue deprecada, debes instalarfrom langchain.embeddings import HuggingFaceEmbeddings
# A junio de 2023 no hay modelos Instruct para españolembedding_instruct = HuggingFaceEmbeddings( model_name = "hkunlp/instructor-large", model_kwargs = {'device':'cpu'})
# El device podría ser cpu
%%capture
!pip install huggingface_hub transformers langchain-community
``````js
from langchain.embeddingsimportHuggingFaceEmbeddings# A junio de 2023 no hay modelos Instruct para español
embedding_instruct =HuggingFaceEmbeddings( model_name ="hkunlp/instructor-large", model_kwargs ={'device':'cpu'})# El device podría ser cpu
A día de hoy, tuve que usar el siguiente codigo para no tener problemas en la consola:
Como aporte a tener en cuenta cuando estén realizando sus embeddings, existen dos conceptos importantes que son max-tokens y dimensions (dimensiones).
Las dimensiones están relacionadas con la representación vectorial de palabras, mientras que el máximo de tokens está relacionado con la gestión de la longitud de las secuencias de entrada durante la tokenización y el procesamiento de texto. Ambos son parámetros importantes que se deben ajustar según las necesidades y recursos disponibles.
tu_embedding.client, nos dice la cantidad de tokens, permitidos por el embedding que estes usando.