Ingeniería práctica de instrucciones para LLM más pequeños

Maud Nalpas
Maud Nalpas

La eficacia de un modelo de lenguaje extenso depende en gran medida de las instrucciones que le damos. La ingeniería de instrucciones es el proceso de crear preguntas de manera que se obtenga el mejor resultado de un LLM. Es un paso fundamental para implementar una función basada en LLM.

La ingeniería de instrucciones es un proceso iterativo. Si probaste diferentes LLM, es probable que hayas notado que necesitabas modificar tu instrucción para lograr un mejor resultado.

Esto también es cierto para los modelos de diferentes tamaños.

Las interfaces de chat potenciadas por LLM grandes, como Gemini o ChatGPT, a menudo pueden producir resultados satisfactorios con un esfuerzo mínimo de instrucción. Sin embargo, cuando trabajas con un LLM predeterminado y más pequeño que no está bien ajustado, debes adaptar tu enfoque.

Los LLM más pequeños son menos potentes y tienen un grupo más pequeño de información del que extraer.

¿Qué significa “LLM más pequeños”?

Definir los tamaños de los LLM es complicado, y los creadores no siempre los divulgan.

En este documento, "LLM más pequeños" se refiere a cualquier modelo con menos de 30,000 millones de parámetros. A partir de hoy, los modelos con unos pocos millones a unos pocos miles de millones de parámetros se pueden ejecutar de manera realista en el navegador, en dispositivos de consumo.

¿Dónde se usan LLM más pequeños?

  • IA generativa integrada en el dispositivo o en el navegador, por ejemplo, si usas Gemma 2B con la API de inferencia de LLM de MediaPipe (incluso adecuada para dispositivos con CPU únicamente) o DistilBert en el navegador con Transformers.js Descargar un modelo y ejecutar la inferencia en el dispositivo de un usuario solo es posible con estos LLM más pequeños, para mantener las descargas web razonables y adaptarse a las restricciones de memoria y GPU/CPU de un dispositivo.
  • IA generativa personalizada del servidor Los modelos de peso abierto pequeños, como Gemma 2B, Gemma 7B o Gemma 27B, están disponibles para que los ejecutes en tu propio servidor (y, de manera opcional, los ajustes).

Comenzar

Las interfaces de chat potenciadas por LLM grandes, como Gemini o ChatGPT, suelen producir resultados satisfactorios con un esfuerzo mínimo de instrucción. Sin embargo, cuando trabajas con LLM más pequeños, debes adaptar tu enfoque. Los LLM más pequeños son menos potentes y tienen un grupo más pequeño de información del que extraer.

Proporciona contexto y instrucciones de formato precisas

Para obtener resultados óptimos con LLM pequeños, crea instrucciones más detalladas y específicas.

Por ejemplo:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Entrada (revisión) Salida (clasificación)
  LLM más grande (Gemini 1.5) LLM más pequeño (Gemma 2B)
¡Me encanta el ajuste! Distribuye el peso de forma adecuada y es sorprendentemente cómodo, incluso en caminatas de todo el día. Lo recomiendo. 5 4 de 5 estrellas**
Las correas son endebles y comenzaron a clavarse en mis hombros con cargas pesadas. 1 2/5

Si bien Gemini 1.5 proporciona el resultado deseado con esta instrucción simple, el resultado de Gemma no es satisfactorio:

  • El formato es incorrecto. Solicitamos un número entero para la calificación.
  • La calificación no parece ser del todo precisa. La primera opinión es lo suficientemente entusiasta como para indicar una opinión de 5 estrellas.

Para solucionar este problema, debemos usar técnicas de ingeniería de instrucciones, instrucciones con un solo ejemplo, con varios ejemplos y con muchas imágenes, y instrucciones de cadena de pensamientos. También debemos proporcionar instrucciones de formato claras y, además, insistir en que el modelo debe usar la gama completa de calificaciones.

Por ejemplo:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`
;
Entrada (revisión) Salida con un LLM más pequeño (Gemma 2B)

¡Me encanta el ajuste! Distribuye el peso de forma adecuada y es sorprendentemente cómodo, incluso en caminatas de todo el día. Lo recomiendo.

Análisis: Esta opinión es muy positiva y hace hincapié en el ajuste y la comodidad del producto, lo que indica una gran satisfacción con el producto. Esto justifica una calificación alta.

Calificación (número entero): 5

Las correas son endebles y comenzaron a clavarse en mis hombros con cargas pesadas.

**Análisis:** En la opinión, se destaca un problema importante de comodidad con las correas. También sugiere que el producto podría no ser adecuado para cargas pesadas o salidas prolongadas.

**Calificación:** 1 (peor)

Nuestra instrucción más elaborada, combinada con técnicas de instrucción con varios ejemplos y de cadena de pensamientos, proporciona calificaciones más precisas.

Se espera el análisis de resultados manual

Si bien siempre debes limpiar e interpretar manualmente el resultado de un LLM, esto es especialmente cierto para los LLM más pequeños, que pueden producir resultados menos pulidos y pueden requerir indicaciones de cadena de pensamiento.

En el primer ejemplo, usamos instrucciones de encadenamiento de pensamientos, por lo que el resultado incluyó un análisis y una calificación, y debemos analizar la calificación de forma manual. También ten en cuenta el formato incoherente en el resultado de la sección anterior: el modelo a veces genera Markdown, pero no siempre.

// Use try/catch to catch (parsing) errors
try {
 
// Parse the output for a rating
 
const int = /[1-5]/;
 
const ratingAsString = llmOutput.match(int)[0];
 
// Parse as int
 
const ratingAsInt = parseInt(ratingAsString);
 
// `checkRating` checks the rating is a number between 1 and 5, since the
 
// regEx may catch a number like "100"
 
const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console
.error('Error', e);
}

Diferencias entre las APIs de Mind

Las APIs de LLM en la nube, como la API de Gemini o OpenAI, que suelen ser el punto de entrada a LLM más grandes, ofrecen funciones de instrucciones prácticas. Por ejemplo, Gemini 1.5 Pro ofrece instrucciones del sistema y modo JSON.

Por el momento, estas funciones no siempre están disponibles para el uso de modelos personalizados ni para LLM más pequeños a los que se accede con APIs de IA en el navegador, como la API de inferencia de LLM de MediaPipe o Transformers.js. Si bien esto no es necesariamente una limitación técnica, las APIs de IA integradas en el navegador suelen ser más livianas.

Ten en cuenta los límites de tokens

Debido a que tu instrucción para LLM más pequeños debe incluir ejemplos o instrucciones más detalladas, es probable que sea más larga y ocupe más del límite de tokens de entrada, si hay uno.

Además, los modelos más pequeños suelen tener un límite de tokens de entrada más pequeño. Por ejemplo, Gemini 1.5 Pro tiene un límite de 1 millón de tokens de entrada, mientras que los modelos de Gemma tienen una ventana de contexto de 8K.

Usa funciones de recuento de tokens para evitar alcanzar el límite.

Adapta tus estimaciones de tiempo

Ten en cuenta el diseño y las pruebas de la propuesta en tus estimaciones de tiempo de ingeniería.

Debido a las diferencias en las APIs y los límites de tokens, es probable que necesites más tiempo y esfuerzo para elaborar tu instrucción para un LLM más pequeño que uno más grande. Probar y validar el resultado del LLM también puede requerir más esfuerzo.

¿Ingeniero de instrucciones o ajuste fino?

Para los desarrolladores web, la ingeniería de instrucciones es nuestra forma preferida de aprovechar la IA generativa en lugar del entrenamiento personalizado y el ajuste fino. Sin embargo, incluso la ingeniería de instrucciones avanzada puede no ser suficiente en algunos casos de uso, sobre todo si usas un LLM más pequeño.

Usa el ajuste fino en los siguientes casos:

  • Necesitas precisión y rendimiento de primer nivel para una tarea específica. El ajuste fino ajusta directamente los parámetros internos del modelo para obtener resultados óptimos.
  • Tienes datos bien seleccionados, relevantes para tu tarea, que ya están etiquetados con los resultados preferidos. Necesitas estos datos para realizar un ajuste fino eficaz.
  • Usas el modelo para el mismo propósito de forma reiterada. El ajuste fino se puede realizar una vez y reutilizarse para una tarea específica.