Secuencias de detención (modelos de lenguaje)
Secuencia de detención (stop sequence) en el contexto de los grandes modelos lingüísticos (LLM) es una secuencia especial de caracteres o tokens que indica al modelo la necesidad de detener la generación de texto[1]. Este mecanismo es un componente crucial de los modelos lingüísticos autorregresivos, ya que garantiza una finalización controlada y predecible de la respuesta.
Al utilizar una secuencia de detención, el modelo comprueba en cada paso de la generación si el texto ya generado termina con una de las secuencias especificadas. Si se encuentra una coincidencia, el proceso se detiene inmediatamente, y la propia secuencia de detención no se incluye en la salida final[2]. Esto permite al desarrollador controlar con precisión los límites de la respuesta sin modificar la propia solicitud.
Principios básicos de funcionamiento
En los modelos lingüísticos autorregresivos, la generación de texto se produce de forma secuencial, token por token. En cada paso, el modelo predice el siguiente token basándose en toda la secuencia anterior (el prompt de entrada y el texto ya generado). Matemáticamente, esto se expresa como una probabilidad condicional:
donde es el token que se está generando actualmente, es la secuencia de tokens generados previamente, y es la secuencia de entrada[3].
El mecanismo de secuencia de detención funciona como un criterio externo para interrumpir este proceso iterativo.
Tipos de secuencias de detención
Existen varios tipos principales de mecanismos de detención que pueden utilizarse tanto por separado como en combinación.
1. Tokens de fin de secuencia (EOS)
End-of-Sequence (EOS) son tokens especiales (por ejemplo, `<|endoftext|>`) que están integrados en el vocabulario del modelo y están diseñados para marcar el final de un fragmento de texto lógico. El modelo se entrena para generar el token EOS cuando considera que la respuesta está completa, ya que todos los textos en el conjunto de entrenamiento terminan con este token[4]. Al detectar un token EOS, la generación se detiene automáticamente.
Las investigaciones demuestran que la presencia de tokens EOS influye en la arquitectura de atención: los modelos desarrollan mecanismos internos para contar posiciones, lo que, sin embargo, puede limitar su capacidad para extrapolar a secuencias que superan significativamente la longitud de los ejemplos de entrenamiento[5].
2. Secuencias definidas por el usuario
Son cadenas de caracteres arbitrarias que el desarrollador especifica para una tarea concreta. No forman parte del vocabulario del modelo, pero se rastrean a nivel de caracteres. Algunos ejemplos incluyen:
- Caracteres de nueva línea: `\n` o `\n\n` para detenerse después de un párrafo.
- Marcadores contextuales: `Human:`, `User:` o `Q:` para separar las intervenciones en un diálogo.
- Marcadores especiales: `###`, `</output>` o `END`.
3. Secuencias estructurales
Son marcadores especializados que se utilizan para finalizar determinados elementos estructurales, lo cual es de vital importancia al generar contenido formateado[1]:
- Código: triples comillas invertidas (```) para finalizar un bloque de código.
- JSON/XML: llaves de cierre (`}`) o etiquetas (`</element>`).
Implementación técnica y problemas
La detección eficaz de las secuencias de detención es una tarea no trivial que conlleva una serie de dificultades.
Algoritmo de detección y optimización
El proceso de detección en sistemas reales incluye:
- Verificación en cada paso: Después de generar cada nuevo token, el sistema comprueba si la salida actual termina con una de las secuencias de detención especificadas.
- Manejo de coincidencias parciales: El sistema debe rastrear situaciones en las que parte de una secuencia ya ha sido generada, pero aún no hay una coincidencia completa.
- Verificación multicriterio: La mayoría de los sistemas (por ejemplo, la API de OpenAI) permiten rastrear varias (hasta cuatro) secuencias de detención simultáneamente[2].
En el framework Hugging Face Transformers, esto se implementa mediante la clase abstracta `StoppingCriteria`, que permite crear criterios de detención personalizados, como `MaxLengthCriteria` (por longitud) o `EosTokenCriteria` (por token EOS)[4].
Problemas y limitaciones
- Problema de la tokenización: Esta es la principal dificultad técnica. Una misma secuencia de caracteres (por ejemplo, `\nUser:`) puede dividirse en tokens de diferentes maneras según el contexto. Esto complica la detección fiable, ya que una secuencia de detención puede quedar dividida entre varios tokens[5].
- Rendimiento: La comprobación de múltiples secuencias de detención largas en cada paso puede ralentizar la generación, especialmente cuando se trabaja con secuencias largas en tiempo real.
- Falsos positivos: La secuencia especificada puede aparecer accidentalmente en medio de la respuesta deseada, lo que llevaría a una finalización prematura. Por ello, es importante elegir marcadores suficientemente únicos y específicos (por ejemplo, `\n###\n`)[6].
Aplicaciones y escenarios de uso
Las secuencias de detención son una herramienta poderosa para gestionar el comportamiento de los LLM.
- Control de la longitud y el coste: Permiten limitar el tamaño máximo de la respuesta y, en consecuencia, reducir el consumo de tokens, lo cual es importante al utilizar API de pago.
- Sistemas de diálogo: Se utilizan para separar claramente las intervenciones de los interlocutores, evitando que el modelo de asistente genere la respuesta del usuario.
- Generación de contenido estructurado: Son indispensables para obtener una salida correcta en formatos como JSON, XML o al escribir código, evitando que se añada información superflua tras completar la estructura[7].
- Prevención de comportamiento no deseado: Ayudan a interrumpir la generación cuando aparece contenido repetitivo o incorrecto (alucinaciones).
- Entrenamiento y ajuste fino (fine-tuning): En los conjuntos de datos de entrenamiento, a menudo se utilizan marcadores únicos (por ejemplo, `###`) como secuencias de detención para que el modelo aprenda a finalizar la respuesta en el lugar adecuado[6].
Direcciones actuales de investigación
- Criterios de detención adaptativos: Desarrollo de métodos que determinan dinámicamente el punto de finalización basándose en el contexto y la calidad del texto generado.
- Enfoques entrópicos: Uso de la entropía de la distribución de tokens como criterio. Una entropía alta puede indicar incertidumbre en el modelo y servir como señal para detener la generación.
Enlaces
- Documentación de OpenAI sobre el uso de secuencias de detención
- Documentación de Hugging Face sobre StoppingCriteria
Bibliografía
- Sutskever, I.; Vinyals, O.; Le, Q. V. (2014). Sequence to Sequence Learning with Neural Networks. arXiv:1409.3215.
- Vaswani, A. et al. (2017). Attention Is All You Need. arXiv:1706.03762.
- Keskar, N. S. et al. (2019). CTRL: A Conditional Transformer Language Model for Controllable Generation. arXiv:1909.05858.
- Holtzman, A. et al. (2020). The Curious Case of Neural Text Degeneration. arXiv:1904.09751.
- Brown, T. et al. (2020). Language Models are Few-Shot Learners. arXiv:2005.14165.
- Zong, M.; Krishnamachari, B. (2022). A Survey on GPT-3. arXiv:2212.00857.
- Zhao, Y. et al. (2022). Calibrating Sequence Likelihood Improves Conditional Language Generation. arXiv:2210.00045.
- Hu, J. C.; Cavicchioli, R.; Capotondi, A. (2023). A Request for Clarity over the End-of-Sequence Token in the Self-Critical Sequence Training. arXiv:2305.12254.
- Zhu, W. et al. (2024). Improving Open-Ended Text Generation via Adaptive Decoding. arXiv:2402.18223.
- Zhang, H. et al. (2024). Adaptable Logical Control for Large Language Models. arXiv:2406.13892.
- Suh, Y. J. et al. (2025). The Curious Case of Sequentially Mis-calibrated Language Models. arXiv:2205.11916.
Notas
- ↑ 1.0 1.1 «Stop Sequence: Understanding & Setting It Correctly». Promptitude.io Help Center. [1]
- ↑ 2.0 2.1 «How do I use stop sequences in the OpenAI API?». OpenAI Help Center. [2]
- ↑ «How to use stop sequences?». Vellum. [3]
- ↑ 4.0 4.1 Brown, Tom, et al. «A Survey on GPT-3». arXiv:2212.00857 [cs.CL], 1 de diciembre de 2022. [4]
- ↑ 5.0 5.1 Suh, Y. J., et al. «The Curious Case of Sequentially Mis-calibrated Language Models». arXiv:2205.11916 [cs.CL], 24 de mayo de 2022. [5]
- ↑ 6.0 6.1 Eric, Mihail. «How to Finetune GPT3». mihaileric.com. [6]
- ↑ Corin, Daniel. «Way Enough - Cursor Triple Backticks Stop Sequence». danielcorin.com. [7]