Sequências de parada

From Systems analysis wiki
Jump to navigation Jump to search

Stop Sequence (sequência de parada), no contexto de grandes modelos de linguagem (LLMs), é uma sequência especial de caracteres ou tokens que sinaliza ao modelo a necessidade de parar de gerar texto[1]. Este mecanismo é um componente importante dos modelos de linguagem autorregressivos, garantindo uma finalização controlada e previsível da resposta.

Ao usar uma stop sequence, o modelo verifica a cada passo da geração se o texto já gerado termina com uma das sequências especificadas. Se uma correspondência for encontrada, o processo é imediatamente interrompido, e a própria stop sequence não é incluída na saída final[2]. Isso permite que o desenvolvedor controle precisamente os limites da resposta sem alterar o prompt em si.

Princípios básicos de funcionamento

Nos modelos de linguagem autorregressivos, a geração de texto ocorre sequencialmente, token por token. A cada passo, o modelo prevê o próximo token com base em toda a sequência anterior (o prompt de entrada e o texto já gerado). Matematicamente, isso é expresso como uma probabilidade condicional:

P(yty<t,x)

onde yt é o token atual sendo gerado, y<t é a sequência de tokens gerados anteriormente, e x é a sequência de entrada[3].

O mecanismo de stop sequence funciona como um critério externo para interromper esse processo iterativo.

Tipos de sequências de parada

Existem vários tipos principais de mecanismos de parada, que podem ser usados individualmente ou em combinação.

1. Tokens de fim de sequência (EOS)

End-of-Sequence (EOS) são tokens especiais (por exemplo, `<|endoftext|>`) que são integrados ao vocabulário do modelo e projetados para marcar o fim de um fragmento lógico de texto. O modelo é treinado para gerar um token EOS quando considera a resposta completa, pois todos os textos no conjunto de dados de treinamento terminam com esse token[4]. Ao detectar um token EOS, a geração é automaticamente interrompida.

Pesquisas mostram que a presença de tokens EOS influencia a arquitetura de atenção: os modelos desenvolvem mecanismos internos para contar posições, o que, no entanto, pode limitar sua capacidade de extrapolar para sequências que excedem significativamente o comprimento dos exemplos de treinamento[5].

2. Sequências definidas pelo usuário

São strings arbitrárias que o desenvolvedor define para uma tarefa específica. Elas não fazem parte do vocabulário do modelo, mas são rastreadas no nível de caracteres. Exemplos incluem:

  • Caracteres de nova linha: `\n` ou `\n\n` para parar após um parágrafo.
  • Marcadores contextuais: `Human:`, `User:` ou `Q:` para separar as falas em um diálogo.
  • Marcadores especiais: `###`, `</output>` ou `END`.

3. Sequências estruturais

São marcadores especializados usados para finalizar elementos estruturais específicos, o que é crucial ao gerar conteúdo formatado[1]:

  • Código: aspas triplas invertidas (```) para finalizar um bloco de código.
  • JSON/XML: chaves de fechamento (`}`) ou tags (`</element>`).

Implementação técnica e problemas

A detecção eficaz de uma stop sequence é uma tarefa não trivial, associada a uma série de complexidades.

Algoritmo de detecção e otimização

O processo de detecção em sistemas reais inclui:

  1. Verificação a cada passo: Após a geração de cada novo token, o sistema verifica se a saída atual termina com uma das stop sequences especificadas.
  2. Processamento de correspondências parciais: O sistema deve rastrear situações em que parte de uma sequência já foi gerada, mas ainda não há uma correspondência completa.
  3. Verificação multicritério: A maioria dos sistemas (por exemplo, a API da OpenAI) permite rastrear várias (até quatro) stop sequences simultaneamente[2].

No framework Hugging Face Transformers, isso é implementado através da classe abstrata `StoppingCriteria`, que permite criar critérios de parada personalizados, como `MaxLengthCriteria` (por comprimento) ou `EosTokenCriteria` (pelo token EOS)[4].

Problemas e limitações

  • Problema de tokenização: Esta é a principal dificuldade técnica. A mesma sequência de caracteres (por exemplo, `\nUser:`) pode ser dividida em tokens de maneiras diferentes, dependendo do contexto. Isso complica a detecção confiável, pois a stop sequence pode acabar dividida entre vários tokens[5].
  • Desempenho: A verificação de múltiplas e longas stop sequences a cada passo pode retardar a geração, especialmente ao trabalhar com sequências longas em tempo real.
  • Falsos positivos: A sequência especificada pode aparecer acidentalmente no meio da resposta desejada, levando a uma terminação prematura. Portanto, é importante escolher marcadores suficientemente únicos e específicos (por exemplo, `\n###\n`)[6].

Aplicação e cenários de uso

As stop sequences são uma ferramenta poderosa para gerenciar o comportamento dos LLMs.

  • Controle de comprimento e custo: Permitem limitar o tamanho máximo da resposta e, consequentemente, reduzir o consumo de tokens, o que é importante ao usar APIs pagas.
  • Sistemas de diálogo: São usadas para separar claramente as falas dos interlocutores, para que o modelo assistente não gere uma resposta pelo usuário.
  • Geração de conteúdo estruturado: São indispensáveis para obter uma saída correta em formatos como JSON, XML ou ao escrever código, evitando a adição de informações desnecessárias após a conclusão da estrutura[7].
  • Prevenção de comportamento indesejado: Ajudam a interromper a geração quando aparece conteúdo repetitivo ou incorreto (alucinações).
  • Treinamento e ajuste fino (fine-tuning): Nos conjuntos de dados de treinamento, marcadores únicos (por exemplo, `###`) são frequentemente usados como stop sequences para que o modelo aprenda a terminar a resposta no local correto[6].

Direções atuais de pesquisa

  • Critérios de parada adaptativos: Desenvolvimento de métodos que determinam dinamicamente o ponto de finalização com base no contexto e na qualidade do texto gerado.
  • Abordagens entrópicas: Uso da entropia da distribuição de tokens como critério. Uma entropia alta pode indicar incerteza do modelo e servir como um sinal para interromper a geração.

Leitura adicional

  • 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.

Referências

  1. 1.0 1.1 «Stop Sequence: Understanding & Setting It Correctly». Promptitude.io Help Center. [1]
  2. 2.0 2.1 «How do I use stop sequences in the OpenAI API?». OpenAI Help Center. [2]
  3. «How to use stop sequences?». Vellum. [3]
  4. 4.0 4.1 Zong, M., & Krishnamachari, B. «A Survey on GPT-3». arXiv:2212.00857 [cs.CL], 1 de dez. de 2022. [4]
  5. 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 mai. de 2022. [5]
  6. 6.0 6.1 Eric, Mihail. «How to Finetune GPT3». mihaileric.com. [6]
  7. Corin, Daniel. «Way Enough - Cursor Triple Backticks Stop Sequence». danielcorin.com. [7]