Los modelos de lenguaje grandes (LLMs) son muy buenos en tareas de procesamiento de lenguaje natural (NLP). Sin embargo, no se usa mucho para codificar texto. Codificar texto significa transformar el texto en representaciones numéricas que los modelos de lenguaje pueden entender y utilizar para diversas tareas, como buscar información o comparar similitudes entre textos.
LLM2Vec es una nueva técnica que transforma estos modelos en fuertes codificadores de texto. Este método tiene tres pasos simples: habilitar la atención bidireccional, predecir la siguiente palabra oculta y aprendizaje contrastivo no supervisado.
¿Qué es codificar texto?
Codificar texto en este contexto significa convertir una secuencia de palabras en una representación numérica, es decir, una serie de vectores que capturan el significado y la estructura del texto. Estas representaciones numéricas permiten a los modelos de lenguaje procesar y analizar el texto de manera más eficiente, facilitando tareas como la búsqueda de información, la clasificación de documentos y la comparación de similitudes entre textos.
Pasos de LLM2Vec
- Atención Bidireccional: Normalmente, los LLMs solo miran las palabras anteriores para predecir la siguiente. LLM2Vec cambia esto para que el modelo pueda mirar en ambas direcciones, mejorando la comprensión del contexto. Por ejemplo, en la frase «El gato duerme en la cocina», el modelo puede considerar tanto las palabras antes como después de «duerme» para entender mejor su significado.
- Predicción de la Siguiente Palabra Oculta: Se entrena al modelo para que adivine palabras ocultas dentro de una oración, usando el contexto de las palabras a su alrededor. Por ejemplo, si ocultamos la palabra «duerme» en «El gato [oculto] en la cocina», el modelo debe usar «El gato» y «en la cocina» para predecir que la palabra oculta es «duerme».
- Aprendizaje Contrastivo no Supervisado: Este paso ayuda al modelo a diferenciar entre oraciones similares y diferentes, mejorando la calidad de las representaciones de las oraciones. Por ejemplo, el modelo aprenderá a distinguir entre «El gato duerme en la cocina» y «El perro juega en el jardín», entendiendo que, aunque ambas son oraciones sobre animales en lugares, su significado es diferente.
Ejemplos de Código
Para ilustrar cómo LLM2Vec mejora la codificación de texto, aquí tienes algunos ejemplos de código que muestran cómo convertir un modelo de lenguaje en un modelo de codificación de texto:
- Instalación de Paquetes Necesarios
pip install llm2vec
pip install flash-attn --no-build-isolation
- Conversión del Modelo
import torch
from llm2vec import LLM2Vec
l2v = LLM2Vec.from_pretrained(
"meta-llama/Meta-Llama-3-8B",
device_map="cuda" if torch.cuda.is_available() else "cpu",
torch_dtype=torch.bfloat16,
)
l2v.save("Llama-3-8B-Emb")
- Entrenamiento con el Objetivo MNTP
import os
import json
# Crear el archivo de configuración para el entrenamiento MNTP
JSON_CONFIG = '''
{
"model_name_or_path": "meta-llama/Meta-Llama-3-8B",
"dataset_name": "wikitext",
"dataset_config_name": "wikitext-103-raw-v1",
"per_device_train_batch_size": 1,
"per_device_eval_batch_size": 1,
"gradient_accumulation_steps": 16,
"do_train": true,
"do_eval": true,
"max_seq_length": 512,
"mask_token_type": "blank",
"data_collator_type": "all_mask",
"mlm_probability": 0.8,
"overwrite_output_dir": true,
"output_dir": "Llama-3-8B-llm2vec-MNTP-Emb",
"evaluation_strategy": "steps",
"eval_steps": 100,
"save_steps": 200,
"stop_after_n_steps": 1000,
"lora_r": 16,
"gradient_checkpointing": true,
"torch_dtype": "bfloat16",
"attn_implementation": "flash_attention_2"
}
'''
with open("mntp_config.json", 'w') as f:
f.write(JSON_CONFIG)
# Ejecutar el script de entrenamiento
os.system("python llm2vec/experiments/run_mntp.py mntp_config.json")
Resultados
LLM2Vec se probó en tres modelos populares: S-LLaMA-1.3B, LLaMA-2-7B, y Mistral-7B. En pruebas de tareas de palabra y secuencia, los modelos transformados por LLM2Vec superaron a los modelos tradicionales. Además, combinando LLM2Vec con aprendizaje contrastivo supervisado, se alcanzaron nuevos niveles de rendimiento en tareas de codificación de texto.
Conclusión
LLM2Vec demuestra que los modelos de lenguaje grandes pueden convertirse en poderosos codificadores de texto con pocos cambios. Esto hace que los LLMs sean útiles para muchas aplicaciones de procesamiento de lenguaje natural sin necesidad de grandes adaptaciones. La simplicidad y eficiencia de LLM2Vec abren nuevas posibilidades para utilizar modelos de lenguaje grandes en una variedad de contextos y aplicaciones.
Link del paper original: https://arxiv.org/pdf/2404.05961
Esto ha sido todo por ahora, espero que este artículo te sea de utilidad, si llegaste hasta aquí, déjame tu comentario. Nos vemos en otra entrega de «Inteligencia Artificial Para Todos»
Average Rating