paint-brush
Geração guiada eficiente para grandes modelos de linguagem: resumo e introduçãopor@textmodels

Geração guiada eficiente para grandes modelos de linguagem: resumo e introdução

Muito longo; Para ler

Os pesquisadores propõem uma estrutura de máquina de estados finitos para geração de texto, oferecendo controle preciso e melhor desempenho.
featured image - Geração guiada eficiente para grandes modelos de linguagem: resumo e introdução
Writings, Papers and Blogs on Text Models HackerNoon profile picture
0-item

Autor:

(1) Brandon T. Willard, Computação Normal;

(2) R´emi Louf, Computação Normal.

Tabela de links

Abstrato

Neste artigo mostramos como o problema de geração de texto neural pode ser reformulado construtivamente em termos de transições entre os estados de uma máquina de estados finitos. Esta estrutura leva a uma abordagem eficiente para orientar a geração de texto com expressões regulares e gramáticas livres de contexto, permitindo a construção de um índice sobre o vocabulário de um modelo de linguagem. A abordagem é independente do modelo, permite impor conhecimentos e restrições específicas do domínio e permite a construção de interfaces confiáveis, garantindo a estrutura do texto gerado. Ele adiciona pouca sobrecarga ao processo de geração de sequência de token e supera significativamente as soluções existentes. Uma implementação é fornecida na biblioteca Python de código aberto Outlines [Louf e Willard].

1. Introdução

Estamos preocupados com o problema de gerar sequências de tokens a partir de um modelo de linguagem grande (LLM) [Vaswani et al., 2017, Radford et al., 2019] que estejam em conformidade com expressões regulares ou gramáticas livres de contexto (CFGs). Este tipo de geração guiada de LLM é usado para tornar a saída do modelo LLM utilizável sob requisitos de formatação rígidos que são difíceis ou caros de capturar apenas por meio de ajuste fino [Beurer-Kellner et al., 2023, Scholak et al., 2021, Poesia et al., 2021, Poesia et al. al., 2022a, Rabinovich et al., 2017, Weng, 2021, Dong et al., 2023, Poesia et al., 2022b, Geng et al., 2023, Wang et al., 2023]. Esses recursos foram recentemente generalizados em bibliotecas e interfaces de prompt [Microsoft, 2023, Beurer-Kellner et al., 2023, Rickard, 2023a,b], mas sua aplicabilidade pode ser limitada por seus custos de escalonamento.


A maioria das implementações de geração guiada distorce os valores de pontuação usados para determinar as probabilidades dos tokens no vocabulário de um LLM. Uma abordagem comum e suficiente envolve avaliações repetidas em todo o vocabulário, a fim de determinar quais tokens são válidos – de acordo com as restrições e tokens previamente amostrados – e definir as probabilidades de tokens inválidos como zero. Esta abordagem implica um custo fixo O(N) para cada token gerado, onde N é o tamanho do vocabulário do LLM.


Propomos uma abordagem que utiliza a formulação de expressões regulares da máquina de estados finitos (FSM) para iniciar e parar arbitrariamente a geração guiada e permitir a construção de um índice com o qual o conjunto de tokens de probabilidade diferente de zero pode ser obtido eficientemente em cada etapa. O resultado é um algoritmo que custa O(1) em média.


Para o caso de expressões regulares, nossa abordagem compartilha a maior semelhança com Kuchnik et al. [2023], que usa uma formulação de transdutor para obter FSMs definidos sobre o vocabulário de um modelo de linguagem, e esses FSMs contêm muitas das mesmas informações e benefícios de escala que os índices descritos aqui. Nossa abordagem não requer a abstração completa do transdutor e pode ser usada para estender mais facilmente bibliotecas de expressões regulares existentes e eficientes, sem modificar os autômatos subjacentes e suas implementações.


Mais importante ainda, nossa abordagem de indexação também pode ser estendida aos analisadores CFGs e LALR(1) para permitir a geração guiada eficiente de acordo com formatos de dados e linguagens de programação populares (por exemplo, JSON, Python, SQL, etc.). A transição para a análise é feita por meio de aumentos nos componentes e operações tradicionais do analisador LALR(1), tornando-a – novamente – uma abordagem que pode ser usada para estender as implementações existentes do analisador.


Este artigo está disponível no arxiv sob licença CC 4.0.