Inteligência artificial
LongWriter: Desbloqueando a Geração de 10.000+ Palavras a Partir de LLMs de Longo Contexto
Os atuais modelos de linguagem de longo contexto (LLMs) podem processar entradas de até 100.000 tokens, mas lutam para gerar saídas que excedam mesmo uma extensão modesta de 2.000 palavras. Experimentos controlados revelam que o comprimento efetivo de geração do modelo é limitado pela escassez de exemplos de saída longa nos conjuntos de dados de treinamento supervisionado (SFT). Em outras palavras, essa limitação de saída decorre da escassez de exemplos de saída longa nos conjuntos de dados de SFT existentes.
Os recentes avanços nos LLMs de longo contexto levaram ao desenvolvimento de modelos com capacidades de memória significativamente expandidas, capazes de processar históricos que excedem 100.000 tokens de comprimento. No entanto, apesar de sua capacidade de lidar com entradas extensas, os atuais LLMs de longo contexto lutam para gerar saídas igualmente longas.
Para explorar essa limitação, o LongWriter examina o comprimento máximo de saída dos modelos de longo contexto de ponta com múltiplas consultas que exigem respostas de diferentes comprimentos, como “Escreva um artigo de 10.000 palavras sobre a história do Império Romano.” Os resultados mostram que todos os modelos consistentemente falham em produzir saídas além de 2.000 palavras de comprimento. Enquanto isso, a análise dos logs de interação do usuário revela que mais de 1% das prompts do usuário solicitam explicitamente saídas que excedam esse limite, destacando uma necessidade premente na pesquisa atual para superar essa limitação.
Para abordar isso, o LongWriter introduz o AgentWrite, um pipeline baseado em agente que divide tarefas de geração ultra-longa em subtarefas, permitindo que os LLMs prontos para uso gerem saídas coerentes que excedem 20.000 palavras. Com o AgentWrite, o LongWriter constrói o LongWriter-6k, um conjunto de dados que contém 6.000 amostras de dados de SFT com comprimentos de saída variando de 2k a 32k palavras. Ao incorporar esse conjunto de dados no treinamento do modelo, o LongWriter consegue escalar o comprimento de saída dos modelos existentes para mais de 10.000 palavras, mantendo a qualidade da saída.
O LongWriter também desenvolve o LongBench-Write, uma ferramenta abrangente para avaliar as capacidades de geração ultra-longa. O modelo de 9B de parâmetros, aprimorado ainda mais com o DPO, alcança um desempenho de ponta nessa ferramenta, superando até mesmo modelos proprietários maiores.
Neste artigo, discutiremos o framework LongWriter, exploraremos sua arquitetura e compararemos seu desempenho com os modelos de longo contexto de ponta. Vamos começar.
LongWriter: Framework de Geração de 10.000+ Palavras
Os recentes avanços nos LLMs de longo contexto levaram à criação de modelos com capacidades de memória significativamente expandidas, capazes de processar históricos que excedem 100.000 tokens. Apesar disso, os atuais LLMs de longo contexto lutam para gerar saídas de comprimento comparável. Para investigar essa limitação, o LongWriter examina o comprimento máximo de saída dos modelos de longo contexto de ponta por meio de várias consultas que exigem diferentes comprimentos de resposta, como “Escreva um artigo de 10.000 palavras sobre a história do Império Romano.” Com base nos resultados, o LongWriter observa que todos os modelos consistentemente falham em gerar saídas mais longas do que 2.000 palavras. Além disso, a análise dos logs de interação do usuário indica que mais de 1% das prompts do usuário solicitam explicitamente saídas além desse limite, destacando uma necessidade premente na pesquisa atual para abordar essa questão.

O estudo do LongWriter revela uma percepção-chave: a restrição no comprimento de saída é primariamente enraizada nas características dos conjuntos de dados de SFT. Especificamente, o LongWriter descobre que o comprimento máximo de geração de um modelo é efetivamente limitado pelo limite superior dos comprimentos de saída presentes em seu conjunto de dados de SFT, apesar de sua exposição a sequências muito mais longas durante a fase de pré-treinamento. Essa descoberta explica o limite de geração de 2.000 palavras ubíquo nos modelos atuais, pois os conjuntos de dados de SFT existentes raramente contêm exemplos que excedam esse comprimento. Além disso, como muitos conjuntos de dados são destilados a partir de LLMs de ponta, eles também herdam a limitação de comprimento de saída de seus modelos de origem.
Para abordar essa limitação, o LongWriter introduz o AgentWrite, um pipeline baseado em agente que utiliza LLMs prontos para uso para construir automaticamente saídas estendidas e coerentes. O AgentWrite opera em duas etapas: primeiro, ele cria um plano de escrita detalhado que descreve a estrutura e o comprimento de palavra para cada parágrafo com base na entrada do usuário. Em seguida, seguindo esse plano, ele solicita ao modelo que gere o conteúdo de cada parágrafo de forma sequencial. O LongWriter mostra que o AgentWrite pode produzir saídas de alta qualidade e coerentes de até 20.000 palavras.
Com base no pipeline do AgentWrite, o LongWriter utiliza o GPT-4o para gerar 6.000 dados de SFT de saída longa, denominados LongWriter-6k, e adiciona esses dados ao treinamento dos modelos existentes. Notavelmente, o LongWriter-6k consegue desbloquear a capacidade do modelo de gerar saídas bem estruturadas que excedem 10.000 palavras de comprimento. Para avaliar rigorosamente a eficácia dessa abordagem, o LongWriter desenvolve a ferramenta LongBench-Write, que contém um conjunto diversificado de instruções de escrita do usuário, com especificações de comprimento de saída variando de 0 a 500 palavras, 500 a 2.000 palavras, 2.000 a 4.000 palavras e além de 4.000 palavras. A avaliação na LongBench-Write mostra que o modelo de 9B do LongWriter alcança um desempenho de ponta, superando até mesmo modelos proprietários maiores.
Para resumir, o trabalho do LongWriter faz as seguintes contribuições novas:
- Análise dos Limites de Comprimento de Geração: O LongWriter identifica o fator primário que limita o comprimento de saída dos atuais LLMs de longo contexto, que é a restrição no comprimento de saída nos conjuntos de dados de SFT.
- AgentWrite: Para superar essa limitação, o LongWriter propõe o AgentWrite, que utiliza uma abordagem de dividir e conquistar com LLMs prontos para uso para construir automaticamente dados de SFT com saídas ultra-longas. Utilizando esse método, o LongWriter constrói o conjunto de dados LongWriter-6k.
- Escalando o Comprimento de Janela de Saída dos Modelos Atuais: O LongWriter incorpora o conjunto de dados LongWriter-6k ao seu conjunto de dados de SFT, escalando com sucesso o comprimento de janela de saída dos modelos existentes para 10.000+ palavras sem comprometer a qualidade da saída. O LongWriter mostra que o DPO melhora ainda mais as capacidades de geração de texto longo do modelo.
AgentWrite: Construção Automática de Dados
Para utilizar LLMs prontos para uso para gerar automaticamente dados de SFT com saídas mais longas, o LongWriter projeta o AgentWrite, um pipeline baseado em agente do tipo dividir e conquistar. O AgentWrite primeiro divide as tarefas de geração ultra-longa em subtarefas, com cada subtarefa exigindo que o modelo escreva apenas um parágrafo. O modelo então executa essas subtarefas sequencialmente, e o LongWriter concatena as saídas das subtarefas para obter a saída final longa. Embora essa abordagem sequencial impeça chamadas paralelas ao modelo para completar múltiplas subtarefas simultaneamente, e o comprimento de entrada se torne mais longo, o LongWriter mostra na validação que a coerência e a qualidade globais da escrita obtidas dessa forma são muito superiores à saída gerada em paralelo.

Etapa I: Planejamento
Inspirado pelo processo de pensamento dos escritores humanos, que normalmente começam fazendo um plano geral para tarefas de escrita de longo prazo, o LongWriter utiliza as capacidades de planejamento dos LLMs para produzir um esboço de escrita dado uma instrução de escrita. Esse plano inclui o conteúdo principal e os requisitos de contagem de palavras para cada parágrafo. O prompt utilizado pelo LongWriter é o seguinte:
“Eu preciso que você me ajude a dividir a seguinte instrução de escrita de longo prazo em múltiplas subtarefas. Cada subtarefa guiará a escrita de um parágrafo no artigo e deve incluir os principais pontos e os requisitos de contagem de palavras para esse parágrafo. A instrução de escrita é a seguinte: {Instrução do usuário}. Por favor, divida-a no seguinte formato, com cada subtarefa ocupando uma linha:
Parágrafo 1 – Ponto principal: [Descreva o ponto principal do parágrafo, em detalhes] – Contagem de palavras: [Requisito de contagem de palavras, por exemplo, 400 palavras]
Parágrafo 2 – Ponto principal: [Descreva o ponto principal do parágrafo, em detalhes] – Contagem de palavras: [Requisito de contagem de palavras, por exemplo, 1000 palavras].Certifique-se de que cada subtarefa seja clara e específica, e que todas as subtarefas cubram todo o conteúdo da instrução de escrita. Não divida as subtarefas muito finamente; cada parágrafo da subtarefa não deve ter menos de 200 palavras e não mais de 1000 palavras. Não saída nenhum outro conteúdo.”
Etapa II: Escrita
Depois de obter o plano de escrita da Etapa I, o LongWriter chama o LLM sequencialmente para completar cada subtarefa, gerando o conteúdo da seção por seção. Para garantir a coerência da saída, quando o LongWriter chama o modelo para gerar a n-ésima seção, as seções n-1 previamente geradas também são inseridas, permitindo que o modelo continue escrevendo a próxima seção com base na história de escrita existente. Embora essa abordagem sequencial impeça chamadas paralelas ao modelo para completar múltiplas subtarefas simultaneamente, e o comprimento de entrada se torne mais longo, o LongWriter mostra na validação que a coerência e a qualidade globais da escrita obtidas dessa forma são muito superiores à saída gerada em paralelo.
O prompt utilizado pelo LongWriter é:
“Você é um excelente assistente de escrita. Eu vou dar a você uma instrução de escrita original e os passos de escrita planejados. Eu também vou fornecer o texto que já escrevi. Por favor, ajude-me a continuar escrevendo o próximo parágrafo com base na instrução de escrita, nos passos de escrita e no texto já escrito.
Instrução de escrita:
{Instrução do usuário}
Passos de escrita:
{O plano de escrita gerado na Etapa I}
Texto já escrito:
{Parágrafos (n-1) previamente gerados}
Por favor, integre a instrução de escrita original, os passos de escrita e o texto já escrito, e agora continue escrevendo {O plano para o n-ésimo parágrafo, ou seja, a n-ésima linha no plano de escrita}.”
Validação
O LongWriter testa o comprimento de geração e a qualidade do método AgentWrite em dois conjuntos de dados de escrita de longo prazo. O primeiro, LongWrite-Ruler, é usado para medir exatamente o quão longa é a saída que o método pode fornecer. O segundo, LongBench-Write, é principalmente usado para avaliar como bem o conteúdo gerado pelo modelo se alinha com as instruções do usuário em termos de comprimento e qualidade de escrita.
LongBench-Write: Para avaliar o desempenho do modelo em uma gama mais diversificada de instruções de escrita de longo prazo, o LongWriter coleta 120 prompts variados de escrita do usuário, com 60 em chinês e 60 em inglês. Para melhor avaliar se o comprimento de saída do modelo atende aos requisitos do usuário, o LongWriter garante que todas essas instruções incluam requisitos explícitos de contagem de palavras. Essas instruções são divididas em quatro subconjuntos com base nos requisitos de contagem de palavras: 0-500 palavras, 500-2.000 palavras, 2.000-4.000 palavras e mais de 4.000 palavras. Além disso, as instruções são categorizadas em sete tipos com base no tipo de saída: Literatura e Escrita Criativa, Acadêmica e Monografia, Ciência Popular, Escrita Funcional, Relatório de Notícias, Fórum da Comunidade e Educação e Treinamento.
Durante a avaliação, o LongWriter adota duas métricas: uma para pontuar o comprimento de saída e outra para pontuar a qualidade da saída. O comprimento de saída do modelo é pontuado com base em quão próximo está dos requisitos especificados nas instruções. Para a qualidade da saída, o LongWriter usa a abordagem LLM-como-juiz, selecionando o modelo GPT-4o de ponta para pontuar a saída em seis dimensões: Relevância, Precisão, Coerência, Clareza, Amplitude e Profundidade, e Experiência de Leitura. A pontuação final é calculada como a média da pontuação de comprimento e da pontuação de qualidade.
Resultados da Validação: O LongWriter apresenta a medição do comprimento de saída no LongWrite-Ruler e descobre que o AgentWrite consegue estender o comprimento de saída do GPT-4o de um máximo de 2k palavras para aproximadamente 20k palavras. O LongWriter também avalia tanto a qualidade da saída quanto a aderência ao comprimento de saída solicitado no LongBench-Write, mostrando que o GPT-4o pode concluir com sucesso tarefas com saídas abaixo de 2.000 palavras de comprimento ao avaliar o desempenho do AgentWrite.

Treinamento Supervisionado
O LongWriter realiza o treinamento com base em dois dos últimos modelos de código aberto, nomeadamente GLM-4-9B e Llama-3.1-8B. Ambos são modelos base e suportam uma janela de contexto de até 128k tokens, tornando-os naturalmente adequados para treinamento em saídas longas. Para tornar o treinamento mais eficiente, o LongWriter adota o treinamento de empacotamento com ponderação de perda. O treinamento nos dois modelos resulta em dois modelos: LongWriter-9B (abreviado para GLM-4-9B-LongWriter) e LongWriter-8B (abreviado para Llama-3.1-8B-LongWriter).
Ao mesmo tempo, o LongWriter observa que, se a perda for calculada como a média por sequência, ou seja, tirando a média da perda média de cada sequência dentro de um lote, a contribuição de cada token de destino para a perda em dados de saída longa seria significativamente menor do que aquela com saídas mais curtas. Nos experimentos do LongWriter, também é encontrado que isso leva a um desempenho subótimo do modelo em tarefas com saídas longas. Portanto, o LongWriter escolhe uma estratégia de ponderação de perda que calcula a perda como a média por token, onde a perda é computada como a média das perdas em todos os tokens de destino dentro daquele lote.
Todos os modelos são treinados usando um nó com 8xH800 80G GPUs e DeepSpeed+ZeRO3+CPU offloading. O LongWriter usa um tamanho de lote de 8, uma taxa de aprendizado de 1e-5 e um comprimento de empacotamento de 32k. Os modelos são treinados por 4 épocas, o que leva aproximadamente 2.500-3.000 passos.
Alinhamento (DPO)
Para melhorar ainda mais a qualidade da saída do modelo e aprimorar sua capacidade de seguir os limites de comprimento nas instruções, o LongWriter realiza a otimização direta de preferência (DPO) no modelo LongWriter-9B treinado por supervisão. Os dados de DPO vêm dos dados de DPO de chat do GLM-4 (aproximadamente 50k entradas). Além disso, o LongWriter constrói 4k pares de dados especificamente direcionados a instruções de escrita de longo prazo. Para cada instrução de escrita, o LongWriter amostra 4 saídas do LongWriter-9B e pontua essas saídas seguindo um método específico. Uma pontuação de seguimento de comprimento também é combinada como calculada. A saída com a pontuação mais alta é então selecionada como a amostra positiva, e uma das saídas restantes é escolhida aleatoriamente como a amostra negativa.
O modelo resultante, LongWriter-9B-DPO, é treinado por 250 passos nos dados misturados acima. O LongWriter segue uma receita específica para o treinamento de DPO.
LongWriter: Experimentos e Resultados
O LongWriter avalia 4 modelos proprietários e 5 modelos de código aberto no LongBench-Write, juntamente com os modelos LongWriter treinados. Até o conhecimento do LongWriter, o Suri-IORPO é o único modelo anterior que também é alinhado para geração de texto de longo prazo. Ele é treinado com base no Mistral-7B-Instruct-v0.2 usando LoRA. Consistente com a configuração de avaliação no LongWrite-Ruler, o LongWriter define a temperatura de saída para 0,5 e configura o parâmetro de geração de tokens máximo do modelo para o máximo permitido por sua chamada de API. Para os modelos de código aberto, é definido como 32.768.

A maioria dos modelos anteriores não consegue atender ao requisito de comprimento de mais de 2.000 palavras, enquanto os modelos LongWriter consistentemente fornecem respostas mais longas e ricas para tais prompts.
Observando a pontuação de comprimento de saída SlS_lSl para prompts em cada faixa de comprimento solicitado, o LongWriter descobre que os modelos anteriores geralmente têm um desempenho ruim (pontuando abaixo de 70) em prompts na faixa [2k, 4k), com apenas o Claude 3.5 Sonnet alcançando uma pontuação decente. Para prompts na faixa [4k, 20k), quase todos os modelos anteriores são completamente incapazes de atingir o comprimento de saída solicitado, mesmo pontuando 0 (significando que todos os comprimentos de saída são menos de um terço do comprimento solicitado). Ao adicionar dados de treinamento do LongWriter-6k, o modelo treinado do LongWriter consegue efetivamente atingir o comprimento de saída solicitado, mantendo uma boa qualidade, como sugerido pelas pontuações nas faixas [2k, 20k) e os gráficos de dispersão.

O DPO melhora efetivamente tanto a qualidade da saída do modelo quanto sua capacidade de seguir os requisitos de comprimento em geração de longo prazo.
Ao comparar as pontuações do LongWriter-9B e do LongWriter-9B-DPO, descobrimos que o DPO melhora significativamente tanto as pontuações Sl (+4%) quanto as pontuações Sq (+3%), e a melhoria é consistente em todas as faixas. Isso mostra que, em cenários de geração de longo prazo, o DPO ainda ajuda a melhorar a qualidade da saída do modelo e pode alinhar melhor o comprimento de saída do modelo com o comprimento solicitado. A última conclusão também foi recentemente observada por Yuan et al. (2024) em gerações mais curtas. Também anotamos manualmente vitórias e derrotas em pares para o GPT-4o e três modelos LongWriter em suas saídas no LongBench-Write e visualizamos os resultados na Figura 9. Podemos ver que os humanos preferem o modelo treinado com DPO sobre o LongWriter-9B em 58% dos casos. Além disso, apesar de ter menos parâmetros, o LongWriter-9B-DPO alcança um empate com o GPT-4o.

O limite de comprimento de saída dos modelos LongWriter é estendido para entre 10k e 20k palavras, enquanto mais dados com saídas longas são necessários para suportar saídas ainda mais longas.
Seguindo o teste LongWrite-Ruler, também apresentamos os resultados do teste LongWrite-Ruler dos modelos LongWriter. Os resultados sugerem que seus comprimentos de geração máximos estão entre 10k e 20k palavras. A falta de dados de SFT com saídas mais longas é provavelmente a razão principal que impede o modelo de alcançar comprimentos de saída mais longos.
Pensamentos Finais
Neste trabalho, discutimos o LongWriter, um pipeline baseado em agente que divide tarefas de geração ultra-longa em subtarefas, identifica um limite de geração de 2.000 palavras para os LLMs atuais e propõe aumentar o tamanho da janela de saída dos LLMs adicionando dados de saída longa durante o alinhamento. Para construir automaticamente dados de saída longa, o LongWriter desenvolve o AgentWrite, um pipeline baseado em agente que utiliza LLMs prontos para uso para criar saídas estendidas e coerentes. O LongWriter consegue escalar o tamanho da janela de saída dos LLMs atuais para mais de 10.000 palavras com o conjunto de dados LongWriter-6k construído. Estudos de ablação extensivos nos dados de treinamento demonstram a eficácia dessa abordagem. Para trabalhos futuros, o LongWriter sugere as seguintes três direções: 1. Expandir o framework do AgentWrite para construir dados com saídas mais longas para estender ainda mais o tamanho da janela de saída dos LLMs. 2. Refinar o framework do AgentWrite para alcançar dados de saída longa de alta qualidade. 3. Saídas de modelo mais longas trazem desafios para a eficiência de inferência. Vários métodos foram propostos para melhorar a eficiência de inferência. Vale a pena investigar como esses métodos podem garantir uma eficiência de modelo melhorada sem comprometer a qualidade da geração.












