No início deste ano, Matt Welsh anunciou que a programação estava chegando ao fim. Escreveu na ACM Communications:
Acredito que a ideia tradicional de "escrever programas" está morrendo, na verdade, para todas as aplicações, exceto aplicações muito especializadas, como a conhecemos, a maioria da programação de software será substituída por sistemas de IA treinados. Em alguns casos em que apenas programas "simples" são necessários (afinal, nem tudo requer modelos de centenas de bilhões de parâmetros executados em clusters de GPU), os próprios programas serão gerados diretamente pela IA, em vez de codificados manualmente.
Algumas semanas depois, em um discurso, Wales expandiu suas observações de morte. Não é apenas a arte da programação que vai para o túmulo, mas a ciência da computação como um todo. Toda a ciência da computação está "condenada". (A imagem abaixo é uma captura de tela do discurso.) )
Os libertadores destas tristes mensagens não parecem estar sobrecarregados de tristeza. Embora Welsh tenha se tornado professor e praticante de ciência da computação (em Harvard, Google, Apple e outros lugares), ele parece ansioso para passar para o próximo passo. "Enfim, escrever código é uma!" Ele declarou.
Não estou tão otimista quanto ao futuro da pós-programação. Em primeiro lugar, sou cético. Não acho que tenhamos ultrapassado o limite para as máquinas aprenderem a resolver problemas computacionais interessantes por conta própria. Acho que ainda não estamos perto disso, ou estamos indo na direção certa. Além disso, se se verificar que o meu ponto de vista está errado, o meu impulso não é aquiescer mas resistir. Por um lado, não saúdo o nosso novo senhor da IA. Mesmo que eles provem ser melhores programadores do que eu, eu ainda vou continuar a usar meu editor de código e compilador, obrigado. "Programação é uma porcaria?" Para mim, tem sido uma fonte de alegria e inspiração para mim. Considero-o também uma ferramenta valiosa para compreender o mundo. Eu nunca tenho certeza se eu entendo até que eu sou capaz de reduzir uma ideia a código. Para me beneficiar dessa experiência de aprendizado, eu tive que realmente escrever o programa em vez de apenas dizer algumas palavras mágicas e invocar um gênio da lâmpada de IA de Aladdin.
Modelo de linguagem grande
A ideia de que máquinas programáveis poderiam escrever seus próprios programas está profundamente enraizada na história da computação. Charles Babbage sugeriu essa possibilidade já em 1836, quando discutiu seu plano para uma máquina analítica. Quando Fortran foi introduzido em 1957, seu nome oficial era "FORTRAN Automatic Coding System". Seu objetivo declarado é que os computadores "codificem problemas para si mesmos e produzam programas que sejam tão bons (mas sem erros) quanto os codificadores humanos".
O Fortran não elimina truques (ou erros) de programação, mas torna o processo menos tedioso. Linguagens posteriores e outras ferramentas trouxeram mais melhorias. E o sonho de uma programação totalmente automatizada nunca foi frustrado. As máquinas parecem ser mais adequadas para programação do que a maioria. Os computadores são metódicos, regrados, fastidiosos e literais — todas essas características (certas ou erradas) estão associadas a programadores experientes.
Ironicamente, os sistemas de IA agora prontos para assumir tarefas de programação estranhamente não são como computadores. Suas personalidades são mais parecidas com Deanna Troi do que com o Comandante Data. Consistência lógica, raciocínio causal e atenção cuidadosa aos detalhes não são seus pontos fortes. Eles têm momentos incrivelmente brilhantes quando parecem estar ponderando pensamentos profundos, mas também têm o potencial para um fracasso surpreendente – erros flagrantes e descarados da razão. Eles me lembram uma velha brincadeira: as pessoas cometem erros, e é preciso um computador para realmente bagunçar as coisas.
O mais recente sistema de IA é chamado de Big Language Model (LLM). Como a maioria das outras invenções recentes de IA, elas são construídas em redes neurais artificiais, uma estrutura multicamadas inspirada na estrutura do cérebro. Os nós de uma rede são semelhantes aos neurônios biológicos, e as conexões entre nós atuam como sinapses, que são os pontos de conexão onde os sinais são transmitidos de um neurônio para outro. A rede de treinamento pode ajustar a força ou o peso da conexão. Em um modelo de linguagem, o treinamento é feito forçando uma grande quantidade de texto na rede. Quando o processo estiver concluído, os pesos de junção codificam estatísticas detalhadas sobre as características linguísticas do texto de formação. No modelo maior, o número de pesos é de 100 bilhões ou mais.
Neste caso, o termo modelo pode ser enganoso. O termo não se refere a modelos em escala ou miniaturas, como aeromodelos. Em vez disso, refere-se a modelos preditivos, como modelos matemáticos comumente encontrados na ciência. Assim como os modelos atmosféricos preveem o tempo de amanhã, os modelos de linguagem preveem a próxima palavra em uma frase.
O modelo de linguagem em grande escala mais famoso é o ChatGPT, que foi lançado ao público no outono passado e atraiu grande atenção. Abreviatura GPT Gee Pee Tee: Minha língua está constantemente tropeçando nessas três sílabas rimadas. Outros produtos de IA têm nomes fofos, como Bart, Claude, Llama; Eu gostaria de poder renomear GPT no mesmo espírito. Eu chamaria de Gepeto, e ecoa o padrão das consoantes. GPT significa Transformador Generativo Pré-Treinado; A versão de chat do sistema está equipada com uma HMI conversacional. O ChatGPT foi desenvolvido pela OpenAI, que foi fundada em 2015 para libertar a IA do controle de um punhado de empresas de tecnologia ricas. A OpenAI cumpriu com sucesso essa missão a ponto de se tornar uma empresa de tecnologia rica.
O ChatGPT é admirável e chocante por sua redação, capacidade de falar bem, fluência em inglês e outros idiomas. O chatbot pode imitar autores famosos, contar piadas, escrever cartas de amor, traduzir poesia, escrever spam, "ajudar" os alunos com trabalhos de casa e inventar desinformação para desinformação política. Para o bem ou para o mal, essas habilidades linguísticas representam avanços tecnológicos surpreendentes. Computadores que antes lutavam para construir uma frase compreensível de repente se tornaram mestres das palavras. O que o GPT diz pode ou não ser verdade, mas é quase sempre bem redigido.
Logo após o lançamento do ChatGPT, fiquei surpreso ao descobrir que seu domínio da linguagem se estendia às linguagens de programação. O conjunto de treinamento do modelo parece incluir não apenas várias linguagens naturais, mas também uma grande quantidade de código-fonte do programa de repositórios públicos, como o GitHub. Com base neste recurso, GPT é capaz de escrever novos programas com base em comandos. Eu achei isso surpreendente porque os computadores são tão exigentes e implacáveis sobre sua entrada. Embora os computadores às vezes tenham pequenos erros, como erros ortográficos, os leitores humanos lutam para entender uma frase. Mas se o computador receber entrada com uma vírgula ou parêntese incompatível, ele vomitará distorcido. Modelos de linguagem com propriedades potencialmente estatísticas ou probabilísticas parecem improváveis de manter a precisão necessária além de algumas linhas.
Enganei-me, mais uma vez, nesta matéria. Uma inovação fundamental nos grandes modelos linguísticos, o mecanismo de atenção, resolve este problema. Quando eu mesmo comecei a experimentar o ChatGPT, descobri rapidamente que ele poderia realmente gerar programas sem erros gramaticais descuidados.
Mas outros problemas se seguiram.
Subindo a escada da palavra
Quando você se senta para conversar com uma máquina, você é imediatamente confrontado com uma pergunta incômoda: "Sobre o que devemos falar?" Estou procurando um tópico que meça razoavelmente os recursos de programação do ChatGPT. Quero um problema que possa ser resolvido por meios computacionais, mas isso não requer muita aritmética, o que é considerado uma das fraquezas dos grandes modelos de linguagem. Escolhi o jogo de anagrama inventado por Lewis Carroll há 150 anos e analisado em profundidade por Donald E. Knuth nos anos 90 do século 20.
Na transcrição abaixo, todas as trocas do meu lado estão marcadas como BR; A roseta é o logotipo OpenAI que especifica a resposta do ChatGPT.
Quando vi essas frases se desenrolarem na tela – o chatbot digitando-as palavra por palavra, um pouco erráticas, como se parasse para resolver meus pensamentos – fiquei imediatamente impressionado com a habilidade do sistema em inglês. GPT lista todas as características básicas da palavra escada em prosa simples e poderosa: é um jogo ou quebra-cabeça onde você vai de palavra em palavra mudando uma letra de cada vez, cada degrau da escada deve ser uma palavra em inglês, e o objetivo é encontrar a sequência mais curta possível da palavra inicial para a palavra alvo. Eu mesmo não consigo explicar melhor. O mais útil é o exemplo de trabalho de COLD-> WARM.
Não são apenas frases individuais que dão a impressão de capacidade de linguagem. As frases são organizadas em parágrafos, que são amarrados juntos para formar um discurso coerente. Fantástico!
Também notável é a capacidade do robô de lidar com entradas difusas, e desleixadas. Minha pergunta inicial foi formulada como uma pergunta sim ou não, mas o ChatGPT interpretou corretamente como um pedido: "Diga-me o que você sabe sobre a palavra escada." Minha segunda instrução ignora quaisquer pistas tipográficas indicando que CHUMBO e OURO devem ser entendidos como palavras, não metal. O chatbot deveria me fornecer receitas de alquimia, mas forneceu as citações que faltavam.
No entanto, deixando de lado toda essa complexidade linguística e retórica, o que eu realmente queria testar era a capacidade do programa de resolver o problema da palavra escada. Ambos os exemplos da transcrição acima podem ser encontrados na web, então é provável que apareçam nos dados de treinamento do ChatGPT. Por outras palavras, os grandes modelos linguísticos podem simplesmente lembrar-se das soluções em vez de as construir. Por isso, apresentei uma tarefa ainda mais difícil:
À primeira vista, o ChatGPT parece ter triunfado novamente, resolvendo um quebra-cabeça que tenho certeza que nunca encontrou antes. Mas dê uma olhada mais de perto. MARSH -> MARIS REQUER UMA SUBSTITUIÇÃO DE DUAS LETRAS, ASSIM COMO PARIL -> ABRIL. O estatuto de MARIS e PARIL como "palavras válidas" também pode ser questionado. Queixei-me:
Nossa! O robô oferece confissões escorregadias e desculpas, mas a escada "correta" está mais louca do que nunca. Parece que estamos jogando Scrabble com Humpty Dumpty na rima do berçário Mother Goose e também declarando "Eu digo que APRCHI é uma palavra, ele é uma palavra!" Em seguida, disperse todas as telhas.
Não se trata de um fracasso separado e único. Todas as minhas tentativas de resolver a palavra escada com ChatGPT saíram dos trilhos, embora nem sempre da mesma maneira. Num caso, pedi uma escada do REACH para o GRASP. Os especialistas em IA apresentam esta solução:
ALCANCE -> ENSINAR -> PÊSSEGO -> PAZ -> PACES -> PARES -> PARSE -> PARSE -> PARSE -> PARSE -> PARKS -> PARKS -> PARKS -> PARKS -> PARES -> GRASP.
Agora balbuciamos como criancinhas que acabaram de aprender a contar: "Um, dois, três, quatro, quatro, três, quatro, quatro, sete, azul, dez!" "
Todos os resultados que mostrei até agora estão documentados com o ChatGPT versão 3.5. Eu também tentei a nova e melhorada versão 4.0, que saiu em março. O robô atualizado exala a mesma confiança amável, mas temo que tenha as mesmas tendências, caindo em incoerência casual:
A escada começa bem com quatro degraus, seguindo todas as regras. Mas depois a IA distraiu-se. PASSAR DE PLAGE PARA PÁGINAS REQUER UMA SUBSTITUIÇÃO DE QUATRO LETRAS. DEPOIS, HÁ PASES, QUE NÃO É UMA PALAVRA (TANTO QUANTO SEI) E NÃO É NECESSÁRIO AQUI DE QUALQUER MANEIRA, JÁ QUE AS SEQUÊNCIAS PODEM IR DIRETAMENTE DE PÁGINAS PARA PARES. Seguiu-se mais estupidez. Ainda assim, aprecio a nota informativa sobre a PLAGE.
Recentemente também tive a oportunidade de experimentar Llama 2, um LLM publicado pela Meta (pessoas do Facebook). Embora este modelo tenha sido desenvolvido independentemente do GPT, parece ter algumas das mesmas peculiaridades psicológicas, como fazer regras e depois ignorá-las. Quando pedi uma escada ligando REACH e GRASP, Llama 2 sugeriu o seguinte:
Matt Welsh menciona dois modos de operação para sistemas de computação construídos em grandes modelos de linguagem. Até agora, temos trabalhado no que chamo de modo profético, onde você faz uma pergunta e o computador retorna uma resposta. Você fornece um par de palavras, e o sistema encontra uma escada que as conecta e executa todos os cálculos necessários para chegar lá. Você entrega uma caixa de sapatos cheia de registros financeiros, e o computador preenche seu formulário 1040. Você compila dados climáticos históricos, e o computador prevê a temperatura média global em 2050.
A alternativa aos oráculos de IA é o AI Code Monkey. No segundo modo, a máquina não responde diretamente às suas perguntas nem realiza os seus cálculos; Em vez disso, ele cria um programa que pode ser executado em um computador convencional. Em vez de uma escada de palavras do seu bot, você retorna um programa que gera uma escada de palavras, escrita na linguagem de programação de sua escolha. Em vez de preencher uma declaração de impostos completa, você obtém um software de preparação de impostos; Os modelos climáticos substituem as previsões de temperatura.
Vamos experimentá-lo com o ChatGPT 3.5:
Você pode usar o recurso wordLadder para resolver quebra-cabeças de escada. Aqui está um exemplo de uso:
A sua saída é:
Observe que esta é uma demonstração básica e, para escadas maiores ou cenários mais complexos, otimizações ou algoritmos adicionais podem ser necessários, como a pesquisa ampliada.
Mais uma vez, uma rápida olhada na saída mostra que o desempenho foi bem-sucedido. O ChatGPT parece ser tão fluente em Java quanto em inglês. Ele conhece a sintaxe de se, enquanto e para declarações, bem como todas as regras de pontuação e parênteses exigentes. Os programas gerados por máquina parecem combinar todos esses componentes para realizar uma tarefa específica. Preste também atenção ao grande número de comentários explicativos, que são certamente para nosso benefício, não para ele. Da mesma forma, nomes de variáveis descritivas (currentWord, newWord, ladder).
O ChatGPT também inclui proativamente instruções para executar o programa em um exemplo específico (MARÇO a ABRIL), e imprime o resultado que corresponde à resposta dada em nossa troca anterior. Essa saída é gerada pela execução do programa? ChatGPT não diz isso explicitamente, mas afirma que se você executar o programa como instruído, você obterá os resultados exibidos (em toda a glória ridícula).
Podemos testar esta instrução carregando o programa em um navegador da Web ou outro ambiente de execução Java. A conclusão: apanhado! O programa foi executado, mas não produziu o resultado especificado. O RESULTADO REAL DO PROGRAMA É: MARÇO -> AARCH -> APRCH -> APRIH -> ABRIL. Esta sequência não é tão estranha porque segue a regra de mudar apenas uma letra de cada vez, e todas as "palavras" têm exatamente cinco letras. Por outro lado, nenhuma "palavra" intermediária pode ser encontrada nos dicionários ingleses.
EXISTE UM ALGORITMO SIMPLES QUE GERA SEQUÊNCIAS MARÇO -> AARCH -> APRCH -> APRIH -> ABRIL. Basta percorrer a palavra inicial passo a passo da esquerda para a direita, alterando a letra em cada posição para corresponder à letra correspondente na palavra-alvo. Seguindo esta regra, qualquer par de palavras de cinco letras pode ser organizado em etapas em não mais do que cinco passos. MARÇO-> ABRIL leva apenas quatro passos porque o R no meio não precisa ser alterado. Eu não consigo imaginar uma maneira mais fácil de fazer uma escada de palavras – assumindo, é claro, que você está disposto a fazer qualquer mistura de letras contar como uma palavra.
O programa criado pelo ChatGPT pode usar essa rotina rápida e suja, mas faz algo muito mais tedioso: constrói todas as escadas possíveis, a primeira das quais é a palavra inicial, e continua a expandir essas escadas até tropeçar em uma que contém a palavra-alvo. Este é um algoritmo de força bruta desperdiçado. Cada letra da palavra inicial pode ser alterada de 25 maneiras. Assim, uma palavra de 5 letras tem 125 possíveis sucessores. Quando se chega aos cinco degraus, há 190 milhões de possibilidades. (OS EXEMPLOS QUE FORNECI AQUI, COMO MARÇO -> ABRIL E REACH-> GRAMP, TÊM UMA LETRA INVARIANTE, ENTÃO A SOLUÇÃO LEVA APENAS QUATRO PASSOS.) Tentar calcular a solução completa em cinco passos esgotou minha paciência. )
Macaco de código de 4ª geração
Vamos tentar o mesmo exercício de codificação com o ChatGPT 4. Dada a mesma dica, o novo bot responde da seguinte forma:
O programa tem a mesma estrutura geral (um loop while com dois aninhados para loops dentro) e emprega a mesma estratégia algorítmica (gerando todas as strings que são diferentes de uma determinada palavra em um só lugar). Mas a versão GPT-4 tem uma grande novidade: o reconhecimento de uma lista de palavras é essencial. Com esta mudança, temos finalmente esperança de gerar uma escada de palavras reais.
Embora o GPT-4 reconheça a necessidade de uma lista, ele fornece apenas um espaço reservado, a sequência de 10 palavras que configura para o exemplo REACH-> GRASP dado acima. Os esboços desta lista de palavras são de pouca utilidade, nem mesmo para regenerar a falsa escada "REACH-to-GRASP". Se você tentar fazer isso, o programa informará que não existe escada. Não há nada de errado com este resultado, porque uma dada 10 palavras não forma um caminho eficaz para mudar apenas uma letra por passo.
Mesmo que as palavras da lista sejam cuidadosamente escolhidas, o vocabulário de 10 é muito insignificante. Gerar listas de palavras maiores parece ser uma tarefa fácil para modelos de linguagem. Afinal, LLM é treinado em um enorme corpus de textos, onde quase todas as palavras em inglês provavelmente aparecerão pelo menos uma vez, enquanto palavras comuns aparecem milhões de vezes. O robô não pode colher uma amostra representativa dessas palavras? A resposta é claramente não. Embora se possa dizer que o GPT "leu" todo este texto, ele não armazena essas palavras de forma facilmente acessível. (O mesmo vale para leitores humanos.) Você pode fazer uma lista das 10 palavras de cinco letras mais comuns em seu vocabulário olhando para trás em uma vida inteira de experiências de leitura?
Quando pedi ao ChatGPT 4 para gerar uma lista de palavras, ele se opôs apologeticamente: "Sinto muito pela confusão, mas como uma IA desenvolvida pela OpenAI, não posso acessar diretamente o banco de dados de palavras ou obter a capacidade de obter dados de fontes externas..." Então eu tentei alguns truques e pedi ao robô para escrever uma história de 1000 palavras e, em seguida, classificar as palavras da história por frequência. O truque funcionou, mas a amostra era pequena demais para ser de muita utilidade. Contanto que eu fique com ele, eu posso ser capaz de persuadir uma lista aceitável do GPT, mas estou pegando um atalho. Afinal, não sou uma IA desenvolvida pela OpenAI, e tenho acesso a recursos externos. Eu me apropriei de uma lista de 5.757 palavras em inglês de cinco letras compiladas por Knuth para seu experimento de escada de palavras. Com esta lista, os programas escritos em GPT-4 encontrarão o seguinte diagrama de escada de nove passos:
ALCANCE -> PÊSSEGO -> PAZ -> LUGAR -> PLANO -> PLANOS -> GLANS -> VIDRO -> GRAMA -> AGARRAR
Este resultado corresponde exatamente ao resultado do próprio programa de escada de Knuth, que ele publicou há 30 anos na Stanford Graphbase.
Neste ponto, devo admitir que, com um pouco de ajuda externa, o ChatGPT finalmente atendeu ao meu pedido. Ele escreve um programa que pode construir uma escada de palavras válida. Mas ainda tenho reservas. Embora GPT-4 e Knuth escrever programas que produzem a mesma saída, os programas em si não são equivalentes, ou mesmo semelhantes.
Knuth abordou este problema na direção oposta, começando não com uma coleção de todas as cadeias possíveis de cinco letras (que somam menos de 12 milhões), mas com sua lista muito menor de 5.757 palavras comuns em inglês. Ele então constrói um gráfico (ou rede) onde cada palavra é um nó, e os dois nós são conectados por arestas se e somente se as palavras correspondentes diferirem por uma letra. A ilustração a seguir mostra um fragmento desse diagrama.
No diagrama, uma escada de palavras é uma série de arestas desde o nó inicial até o nó de destino. A melhor escada é o caminho mais curto, percorrendo o menor número de lados. Por exemplo, o melhor caminho da coleira para o retch é a coleira -> lixiviação -> alcançar -> retch, mas também há caminhos mais longos, como trela -> lixiviação -praia > -pêssego > -> alcançar -> retch. Para encontrar o caminho mais curto, Knuth usou um algoritmo criado por Edsger W. Dijkstra na década de 50 do século 20.
O programa de escada de palavras de Knuth requer investimento inicial para converter uma lista de palavras simples em um gráfico. Por outro lado, evita gerar milhares ou milhões de cadeias de cinco letras que não podem ser elementos destas últimas. Na resolução do problema REACH-> GRASP, o programa GPT-4 produziu 219.180 cadeias desse tipo; Apenas 2.792 delas (pouco mais de 1%) são palavras reais.
Se os vários procedimentos de escada de palavras que descrevo forem submetidos por alunos, darei uma nota negativa à versão sem uma lista de palavras. O programa GPT-4 com a lista vai passar, mas por uma questão de eficiência e elegância, eu só vou dar ao programa Knuth as notas mais altas.
Por que os chatbots preferem algoritmos inferiores? Você pode simplesmente Google para "word ladder program" para obter pistas. Quase todos os melhores resultados vieram de sites como Leetcode, GeeksForGeeks e RosettaCode. Esses sites são claramente destinados a atender candidatos a emprego e concorrentes em competições de programação, com soluções que exigem a geração de todas as 125 variantes de letra única de cada palavra, assim como os programas GPT. Como existem muitos desses sites – parecem ser centenas – eles são mais importantes do que outras fontes, como o livro de Knuth (se o texto aparecer no conjunto de treinamento). Isso significa que devemos culpar o Leetcode pela escolha errada do algoritmo, não o GPT? Em vez disso, gostaria de salientar as inevitáveis fraquezas do protocolo, as mais comuns das quais são a resposta correta por defeito.
Sempre que penso que grandes modelos de linguagem estão sendo escritos para todos os nossos softwares, outra preocupação relacionada me assombra. De onde vêm os novos algoritmos? O modelo de linguagem da faculdade pode ser criativo na remistura de elementos de projetos existentes, mas não vejo nenhuma maneira de inventar algo completamente novo e melhor.
** Chega da palavra escada! **
Admito que fui longe demais, torturando o ChatGPT com muitas variantes de um problema particular (e irrelevante). Talvez os modelos de linguagem da faculdade tenham um desempenho melhor em outras tarefas computacionais. Eu tentei vários, com resultados mistos. Eu só quero discutir um deles, e acho os esforços do ChatGPT bastante pungentes.
Com o ChatGPT 3.5, peço o valor do número 100 de Fibonacci. Note que a minha pergunta foi feita no modo Oracle; Estou pedindo esse número, não um programa que o calcule. Ainda assim, o ChatGPT escreve voluntariamente um programa de Fibonacci e, em seguida, renderiza a saída desse programa.
O algoritmo implementado por este programa está matematicamente correto; Vem diretamente da definição da sequência de Fibonacci, que é um membro de uma sequência que começa em {0, 1}, com cada elemento subsequente igual à soma dos dois primeiros itens. A resposta dada também está correta: 354224848179261915075 é, de facto, o número 100 de Fibonacci. Então, qual é o problema? É a frase do meio: "Quando você executar este código, ele produzirá o número 100 de Fibonacci." Isso não é verdade. Se você executar o código, você receberá o valor errado 354224848179262000000. As versões recentes do Java fornecem o tipo de dados BigInt para resolver esse problema, mas o BigInt deve ser explicitamente especificado, o que os programas ChatGPT não fazem. A razão para esta anomalia é que Java usa aritmética de ponto flutuante, mesmo para valores inteiros. De acordo com o padrão de ponto flutuante IEEE, o inteiro máximo que pode ser representado sem perda de precisão é 253−1; O número 100 de Fibonacci é aproximadamente 268. Isso é o que eu chamo de pensamento pungente: o ChatGPT dá a resposta certa, mas o método que afirma usar para calcular essa resposta não a fornece. O bot deve ter encontrado o valor correto por algum outro meio, mas a maneira exata não foi revelada.
Dar a mesma tarefa ao ChatGPT 4.0 nos levará a uma jornada ainda mais estranha. Na interação seguinte, ativei o Code Interpreter, um plugin do ChatGPT que permite que o sistema teste e execute parte do código que escreve. Aparentemente, o robô aproveitou esse recurso, primeiro criando um programa que falhou por razões desconhecidas:
Aqui o ChatGPT é escrito em Python, a principal linguagem de programação suportada pelo Code Interpreter. A primeira tentativa de escrever um programa baseou-se na exponenciação das matrizes de Fibonacci:
Este é um método bem conhecido e eficaz, e o programa implementa-o corretamente. No entanto, por razões misteriosas, o interpretador de código não pode executar o programa. (O código funciona bem em um ambiente Python padrão e retorna a resposta correta.) )
Neste ponto, o robô irá girar em uma direção completamente nova e decolar, sugerindo que o valor de Fibonacci necessário seja calculado por uma identidade matemática chamada fórmula de Binet. Tinha escrito expressões matemáticas, mas depois mudou de ideias. Ele prevê corretamente o problema da precisão numérica: dado um valor exato da raiz quadrada de 5, a fórmula produzirá um resultado exato, mas isso não é viável.
Então, agora o ChatGPT adotou uma estratégia diferente, usando o mesmo algoritmo iterativo da versão 3.5. Desta vez, obtivemos a resposta certa porque Python (ao contrário do Java) não tem problemas em lidar com números inteiros grandes.
Fiquei impressionado com este desempenho, não só com a resposta correta, mas também com a persistência corajosa do sistema. Apesar dos problemas do ChatGPT, ele perseverou, intrigado por dificuldades inesperadas, mas se recusou a desistir. "Bem, esse método matricial deve funcionar. Mas, de qualquer forma, vamos tentar a fórmula Binet... Oh espere, eu esqueci... De qualquer forma, não há necessidade de ser tão chique sobre isso. Vamos fazê-lo de uma forma óbvia e lenta. Sinto que é uma abordagem muito humana para a resolução de problemas. É estranho ver esse comportamento nas máquinas.
Registrar pontuações de sucesso e fracasso
Meu pequeno experimento me fez duvidar da alegação de que oráculos de IA e macacos de código de IA estão prestes a excluir programadores humanos. Eu vi algum sucesso, mas mais um fracasso. Este registo desolador foi compilado em tarefas computacionais relativamente simples, cujas soluções são bem conhecidas e amplamente publicadas.
Outros fizeram uma avaliação mais ampla e profunda da geração de código LLM. Na bibliografia ao final deste artigo, listo cinco desses estudos. Gostaria de resumir brevemente alguns dos resultados que relataram.
Dois anos atrás, Mark Chen e mais de 50 colegas da OpenAI se esforçaram muito para medir a precisão do Codex, um fork do ChatGPT 3 dedicado a escrever código. (Codex tornou-se desde então o motor que alimenta o GitHub Copilot, o "assistente do programador".) ) criou um conjunto de 164 tarefas que podem ser feitas escrevendo programas Python. Essas tarefas são principalmente exercícios de livros didáticos, competições de programação e tipos na literatura (impressionante) sobre como se sair bem em entrevistas de emprego de programação. A maioria das tarefas pode ser concluída com apenas algumas linhas de código. Exemplo: Calcule o número de vogais em uma determinada palavra, determine se um inteiro é primo ou composto.
A equipa do Professor Chen também refletiu sobre os critérios para definir o sucesso e o fracasso. Como o processo LLM é não-determinístico (a seleção de palavras é baseada na probabilidade), o modelo pode gerar um programa defeituoso na primeira tentativa, mas acabará produzindo a resposta correta se a tentativa for permitida para continuar. Um parâmetro chamado temperatura controla o grau de incerteza. A temperatura zero, o modelo escolhe sempre a palavra mais provável em cada passo; À medida que a temperatura aumenta, a aleatoriedade é introduzida, permitindo a escolha de palavras improváveis. Chen et al. Considere a possibilidade desta mudança adotando três parâmetros de sucesso:
pass@1: LLM gera o programa correto na primeira tentativa
pass@10: Pelo menos um dos 10 programas gerados está correto
pass@100: Pelo menos um dos 100 programas gerados está correto
Pass@1 testes são realizados a temperatura zero, pelo que o modelo dá sempre o melhor palpite. pass@10 e pass@100 ensaios são realizados a temperaturas mais elevadas, permitindo ao sistema explorar uma gama mais ampla de potenciais soluções.
Os autores avaliaram várias versões do Codex em todas as 164 tarefas. Para a maior e mais poderosa versão do Codex, a taxa de pass@1 é de cerca de 29%, a taxa de pass@10 é de 47% e a taxa de pass@100 chega a 72%. Devemos ficar impressionados ou chocados quando vemos estes números? Vale a pena comemorar que o Codex está certo na primeira tentativa quase um terço do tempo (quando a temperatura está definida para zero)? Ou se você estivesse disposto a peneirar 100 planos propostos para encontrar o plano certo, a taxa de sucesso subiu para quase três quartos? Minha opinião pessoal é a seguinte: se você olhar para a atual geração de LLM como um esforço pioneiro em um programa de pesquisa de longo prazo, os resultados são encorajadores. Mas se você acha que a tecnologia pode substituir imediatamente o software codificado manualmente, há pouca esperança. Ainda estamos longe do nível de fiabilidade necessário.
Outros estudos produziram resultados amplamente semelhantes. Fredrico Cassano et al. Avaliar o desempenho de múltiplos LLMs gerando código em uma variedade de linguagens de programação; Eles relatam uma ampla gama de taxas de pass@1, mas apenas duas ultrapassam 50%. Alessio Buscemi testou o ChatGPT 3.5 em 40 tarefas de codificação, exigindo programas escritos em 10 idiomas e repetindo cada consulta 10 vezes. De 4.000 testes, 1.833 produziram código que poderia ser compilado e executado. Liu Zhijie et al. Sua avaliação do ChatGPT é baseada em perguntas publicadas no site Leetcode. Julgue os resultados submetendo o código gerado a um processo automatizado de pontuação Leetcode. A taxa média de aceitação de todas as perguntas variou de 31% para programas escritos em C a 50% para programas Python. Liu et al. Outra observação interessante: o ChatGPT teve uma pontuação muito pior em questões publicadas após setembro de 2021 (o prazo para o conjunto de treinamento do GPT). Eles especulam que o robô pode ser mais capaz de resolver problemas anteriores porque já viu uma solução durante o treinamento.
Um artigo recente publicado por Li Zhong e Zilong Wang vai além da questão básica da correção do programa e considera robustez e confiabilidade. O programa gerado responde corretamente a erros de entrada malformados ou externos, como ao tentar abrir um arquivo que não existe? Embora o prompt do LLM incluísse um exemplo mostrando como lidar corretamente com esses problemas, Zhong e Wang descobriram que o código gerado não conseguiu fazê-lo 30 a 50 por cento do tempo.
Para além destes resultados frustrantes, eu próprio tenho mais dúvidas. Quase todos os testes são realizados através de pequenos trechos de código. Um LLM que tem dificuldade em escrever um programa de 10 linhas pode ter maior dificuldade em escrever um programa de 100 linhas ou 1.000 linhas. Além disso, uma simples classificação de aprovação/reprovação é uma medida muito aproximada da qualidade do código. Considere o teste de primalidade no conjunto de benchmark de grupo de Chen. Este é um dos programas escritos em Codex:
Este código é classificado como correto – deve estar correto porque nunca classifica incorretamente números primos como números compostos e vice-versa. No entanto, quando n é grande, você pode não ter paciência ou vida para esperar por um veredicto. O algoritmo tenta dividir n por cada inteiro entre 2 e n−1.
LLM praticidade não convencional
Ainda é cedo para grandes modelos linguísticos. O ChatGPT foi lançado há menos de um ano; A tecnologia subjacente tem apenas cerca de seis anos. Embora eu tenha certeza de que estou afirmando que LLM não está pronto para conquistar o mundo da codificação, eu não posso prever com tanta confiança que eles nunca irão. Estes modelos irão definitivamente melhorar e vamos utilizá-los melhor. Já existe uma indústria emergente que oferece orientação de "engenharia just-in-time" como forma de tirar o máximo proveito de cada consulta.
Outra maneira de melhorar o desempenho do LLM pode ser formar um híbrido com outro sistema de computação equipado com ferramentas de lógica e raciocínio em vez de ferramentas de análise de linguagem pura. Na véspera de sua recente morte, Doug Lenat propôs combinar LLM com Cyc, um enorme banco de dados de senso comum que ele passou quatro décadas trabalhando para construir. Stephen Wolfram está trabalhando na integração do ChatGPT no Wolfram|Em Alpha, Wolfram|Alpha é uma coleção on-line de dados e algoritmos com curadoria.
Ainda assim, alguns dos obstáculos que dificultam a geração de cursos de LLM parecem difíceis de superar.
Os modelos de linguagem trabalham sua magia de uma maneira simples: no processo de escrever uma frase ou parágrafo, LLM escolhe a próxima palavra com base na palavra anterior. É como escrever uma mensagem de texto no seu telefone: você digita "Vou te ver..." e o software sugere continuações alternativas: "amanhã", "em breve", "mais tarde". No LLM, é atribuída a cada candidato uma probabilidade, que é calculada com base na análise de todo o texto do conjunto de treinamento modelo.
Há mais de um século, o matemático russo A. A. Markov explorou pela primeira vez a ideia de gerar texto a partir desta análise estatística. Seu processo é agora conhecido como o modelo n-grama, onde n é o número de palavras (ou caracteres ou outros símbolos) a considerar ao escolher o próximo elemento da sequência. Há muito tempo sou fascinado pelo processo de n-gramas, embora principalmente por causa de suas possibilidades cômicas. (Num artigo publicado há 40 anos, chamei-lhe "a arte de transformar a literatura em bobagem".) ")
É claro que o ChatGPT e outros LLMs recentes são mais do que n-metamodelos. Sua rede neural captura características estatísticas linguísticas muito além de uma sequência de n símbolos consecutivos. De particular importância é o mecanismo de atenção, que rastreia dependências entre símbolos selecionados a distâncias arbitrárias. Nas línguas naturais, este meio é útil para manter a consistência do sujeito e do verbo, ou para associar pronomes ao objeto a que se referem. Em linguagens de programação, o mecanismo de atenção garante a integridade de estruturas de sintaxe de várias partes, como se... então... e mantém os parênteses devidamente emparelhados e aninhados.
No entanto, mesmo com essas melhorias, o LLM é essencialmente uma ferramenta para construir um novo texto com base na probabilidade de as palavras aparecerem no texto existente. Na minha maneira de pensar, isso não é pensar. Trata-se de algo mais superficial, centrado nas palavras e não nas ideias. Dado esse mecanismo bruto, fiquei surpreso e intrigado com o quanto o LLM foi capaz de alcançar.
Durante décadas, os arquitetos da IA acreditaram que a verdadeira inteligência, seja ela natural ou artificial, exigia um modelo mental do mundo. Para entender o que está acontecendo ao seu redor (e dentro de você), você precisa ter uma intuição sobre como as coisas funcionam, como elas se encaixam, o que acontece a seguir, causa e efeito. Lynant insiste que o conhecimento mais importante é o conhecimento que você adquire muito antes de começar a ler. Você aprende a gravidade caindo. Quando você descobre que uma torre de bloco de construção é fácil de derrubar, mas difícil de reconstruir, você entende a entropia. Antes que a linguagem comece a criar raízes, você aprenderá sobre dor, medo, fome e amor na infância. O cérebro na caixa não pode acessar essa experiência porque não pode acessar diretamente o universo físico ou social.
Duzentos e cinquenta anos atrás, o relojoeiro suíço Pierre Jacquet-Droz construiu um autômato mecânico que podia escrever com uma colcha. Este dispositivo de relógio tem centenas de câmaras e engrenagens e está vestido como um menino sentado em um banquinho. Após a ativação, o menino mergulhou a caneta em tinta e escreveu uma mensagem curta - mais notavelmente o aforismo cartesiano "Penso, logo existo". Que engraçado! Mas mesmo no século 18, ninguém acreditava que os bonecos de grafite realmente pensavam. Os céticos da LLM colocam o ChatGPT na mesma categoria.
Vou dizer-lhe qual destas teorias de mentalidade LLM contrastantes está correta? Eu não sou. Nenhuma das opções me atraiu. Se Bender e outros estão certos, então devemos encarar o fato de que um gadget sem capacidade de raciocinar ou sentir, sem experiência do universo físico ou interação social, sem autoconsciência, escreve artigos universitários, escreve músicas de rap, dá conselhos a apaixonados. O conhecimento, a lógica, as emoções não valem nada; Língua escorregadia é tudo. Trata-se de uma proposição subversiva. Se o ChatGPT pode nos enganar com esse show inconsciente, talvez também sejamos mentirosos, e suas vozes e raiva não têm sentido.
Por outro lado, se Sutskever estiver certo, então muito da experiência humana que prezamos – o senso de personalidade que evolui lentamente à medida que crescemos e vivemos – pode ser aprendida lendo essas palavras na internet. Se for esse o caso, então eu realmente não tenho que suportar a dor indescritível do ensino médio, eu não tenho que cometer todos os erros estúpidos que causam tanta dor e dificuldade; Não há necessidade de ferir minha autoestima colidindo com o mundo. Eu poderia ter lido tudo isso do conforto da minha poltrona; Apenas palavras podem me levar a um estado de maturidade com uma mente clara sem experimentar todos os tropeços e dores no vale que molda minha alma.
Ainda tenho duas opiniões (ou talvez mais de duas!) sobre o status e o impacto dos grandes modelos de linguagem na ciência da computação. )。 Os entusiastas da IA podem estar certos. Estes modelos podem assumir a programação, bem como muitos outros tipos de trabalho e aprendizagem. Ou podem falhar, como acontece com outras inovações promissoras de IA. Não acho que tenhamos que esperar muito para obter uma resposta.
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
O capítulo final em inteligência artificial e programação
Fonte original: CSDN
No início deste ano, Matt Welsh anunciou que a programação estava chegando ao fim. Escreveu na ACM Communications:
Acredito que a ideia tradicional de "escrever programas" está morrendo, na verdade, para todas as aplicações, exceto aplicações muito especializadas, como a conhecemos, a maioria da programação de software será substituída por sistemas de IA treinados. Em alguns casos em que apenas programas "simples" são necessários (afinal, nem tudo requer modelos de centenas de bilhões de parâmetros executados em clusters de GPU), os próprios programas serão gerados diretamente pela IA, em vez de codificados manualmente.
Algumas semanas depois, em um discurso, Wales expandiu suas observações de morte. Não é apenas a arte da programação que vai para o túmulo, mas a ciência da computação como um todo. Toda a ciência da computação está "condenada". (A imagem abaixo é uma captura de tela do discurso.) )
Não estou tão otimista quanto ao futuro da pós-programação. Em primeiro lugar, sou cético. Não acho que tenhamos ultrapassado o limite para as máquinas aprenderem a resolver problemas computacionais interessantes por conta própria. Acho que ainda não estamos perto disso, ou estamos indo na direção certa. Além disso, se se verificar que o meu ponto de vista está errado, o meu impulso não é aquiescer mas resistir. Por um lado, não saúdo o nosso novo senhor da IA. Mesmo que eles provem ser melhores programadores do que eu, eu ainda vou continuar a usar meu editor de código e compilador, obrigado. "Programação é uma porcaria?" Para mim, tem sido uma fonte de alegria e inspiração para mim. Considero-o também uma ferramenta valiosa para compreender o mundo. Eu nunca tenho certeza se eu entendo até que eu sou capaz de reduzir uma ideia a código. Para me beneficiar dessa experiência de aprendizado, eu tive que realmente escrever o programa em vez de apenas dizer algumas palavras mágicas e invocar um gênio da lâmpada de IA de Aladdin.
A ideia de que máquinas programáveis poderiam escrever seus próprios programas está profundamente enraizada na história da computação. Charles Babbage sugeriu essa possibilidade já em 1836, quando discutiu seu plano para uma máquina analítica. Quando Fortran foi introduzido em 1957, seu nome oficial era "FORTRAN Automatic Coding System". Seu objetivo declarado é que os computadores "codificem problemas para si mesmos e produzam programas que sejam tão bons (mas sem erros) quanto os codificadores humanos".
O Fortran não elimina truques (ou erros) de programação, mas torna o processo menos tedioso. Linguagens posteriores e outras ferramentas trouxeram mais melhorias. E o sonho de uma programação totalmente automatizada nunca foi frustrado. As máquinas parecem ser mais adequadas para programação do que a maioria. Os computadores são metódicos, regrados, fastidiosos e literais — todas essas características (certas ou erradas) estão associadas a programadores experientes.
Ironicamente, os sistemas de IA agora prontos para assumir tarefas de programação estranhamente não são como computadores. Suas personalidades são mais parecidas com Deanna Troi do que com o Comandante Data. Consistência lógica, raciocínio causal e atenção cuidadosa aos detalhes não são seus pontos fortes. Eles têm momentos incrivelmente brilhantes quando parecem estar ponderando pensamentos profundos, mas também têm o potencial para um fracasso surpreendente – erros flagrantes e descarados da razão. Eles me lembram uma velha brincadeira: as pessoas cometem erros, e é preciso um computador para realmente bagunçar as coisas.
O mais recente sistema de IA é chamado de Big Language Model (LLM). Como a maioria das outras invenções recentes de IA, elas são construídas em redes neurais artificiais, uma estrutura multicamadas inspirada na estrutura do cérebro. Os nós de uma rede são semelhantes aos neurônios biológicos, e as conexões entre nós atuam como sinapses, que são os pontos de conexão onde os sinais são transmitidos de um neurônio para outro. A rede de treinamento pode ajustar a força ou o peso da conexão. Em um modelo de linguagem, o treinamento é feito forçando uma grande quantidade de texto na rede. Quando o processo estiver concluído, os pesos de junção codificam estatísticas detalhadas sobre as características linguísticas do texto de formação. No modelo maior, o número de pesos é de 100 bilhões ou mais.
Neste caso, o termo modelo pode ser enganoso. O termo não se refere a modelos em escala ou miniaturas, como aeromodelos. Em vez disso, refere-se a modelos preditivos, como modelos matemáticos comumente encontrados na ciência. Assim como os modelos atmosféricos preveem o tempo de amanhã, os modelos de linguagem preveem a próxima palavra em uma frase.
O modelo de linguagem em grande escala mais famoso é o ChatGPT, que foi lançado ao público no outono passado e atraiu grande atenção. Abreviatura GPT Gee Pee Tee: Minha língua está constantemente tropeçando nessas três sílabas rimadas. Outros produtos de IA têm nomes fofos, como Bart, Claude, Llama; Eu gostaria de poder renomear GPT no mesmo espírito. Eu chamaria de Gepeto, e ecoa o padrão das consoantes. GPT significa Transformador Generativo Pré-Treinado; A versão de chat do sistema está equipada com uma HMI conversacional. O ChatGPT foi desenvolvido pela OpenAI, que foi fundada em 2015 para libertar a IA do controle de um punhado de empresas de tecnologia ricas. A OpenAI cumpriu com sucesso essa missão a ponto de se tornar uma empresa de tecnologia rica.
O ChatGPT é admirável e chocante por sua redação, capacidade de falar bem, fluência em inglês e outros idiomas. O chatbot pode imitar autores famosos, contar piadas, escrever cartas de amor, traduzir poesia, escrever spam, "ajudar" os alunos com trabalhos de casa e inventar desinformação para desinformação política. Para o bem ou para o mal, essas habilidades linguísticas representam avanços tecnológicos surpreendentes. Computadores que antes lutavam para construir uma frase compreensível de repente se tornaram mestres das palavras. O que o GPT diz pode ou não ser verdade, mas é quase sempre bem redigido.
Logo após o lançamento do ChatGPT, fiquei surpreso ao descobrir que seu domínio da linguagem se estendia às linguagens de programação. O conjunto de treinamento do modelo parece incluir não apenas várias linguagens naturais, mas também uma grande quantidade de código-fonte do programa de repositórios públicos, como o GitHub. Com base neste recurso, GPT é capaz de escrever novos programas com base em comandos. Eu achei isso surpreendente porque os computadores são tão exigentes e implacáveis sobre sua entrada. Embora os computadores às vezes tenham pequenos erros, como erros ortográficos, os leitores humanos lutam para entender uma frase. Mas se o computador receber entrada com uma vírgula ou parêntese incompatível, ele vomitará distorcido. Modelos de linguagem com propriedades potencialmente estatísticas ou probabilísticas parecem improváveis de manter a precisão necessária além de algumas linhas.
Enganei-me, mais uma vez, nesta matéria. Uma inovação fundamental nos grandes modelos linguísticos, o mecanismo de atenção, resolve este problema. Quando eu mesmo comecei a experimentar o ChatGPT, descobri rapidamente que ele poderia realmente gerar programas sem erros gramaticais descuidados.
Mas outros problemas se seguiram.
Quando você se senta para conversar com uma máquina, você é imediatamente confrontado com uma pergunta incômoda: "Sobre o que devemos falar?" Estou procurando um tópico que meça razoavelmente os recursos de programação do ChatGPT. Quero um problema que possa ser resolvido por meios computacionais, mas isso não requer muita aritmética, o que é considerado uma das fraquezas dos grandes modelos de linguagem. Escolhi o jogo de anagrama inventado por Lewis Carroll há 150 anos e analisado em profundidade por Donald E. Knuth nos anos 90 do século 20.
Na transcrição abaixo, todas as trocas do meu lado estão marcadas como BR; A roseta é o logotipo OpenAI que especifica a resposta do ChatGPT.
Não são apenas frases individuais que dão a impressão de capacidade de linguagem. As frases são organizadas em parágrafos, que são amarrados juntos para formar um discurso coerente. Fantástico!
Também notável é a capacidade do robô de lidar com entradas difusas, e desleixadas. Minha pergunta inicial foi formulada como uma pergunta sim ou não, mas o ChatGPT interpretou corretamente como um pedido: "Diga-me o que você sabe sobre a palavra escada." Minha segunda instrução ignora quaisquer pistas tipográficas indicando que CHUMBO e OURO devem ser entendidos como palavras, não metal. O chatbot deveria me fornecer receitas de alquimia, mas forneceu as citações que faltavam.
No entanto, deixando de lado toda essa complexidade linguística e retórica, o que eu realmente queria testar era a capacidade do programa de resolver o problema da palavra escada. Ambos os exemplos da transcrição acima podem ser encontrados na web, então é provável que apareçam nos dados de treinamento do ChatGPT. Por outras palavras, os grandes modelos linguísticos podem simplesmente lembrar-se das soluções em vez de as construir. Por isso, apresentei uma tarefa ainda mais difícil:
Não se trata de um fracasso separado e único. Todas as minhas tentativas de resolver a palavra escada com ChatGPT saíram dos trilhos, embora nem sempre da mesma maneira. Num caso, pedi uma escada do REACH para o GRASP. Os especialistas em IA apresentam esta solução:
ALCANCE -> ENSINAR -> PÊSSEGO -> PAZ -> PACES -> PARES -> PARSE -> PARSE -> PARSE -> PARSE -> PARKS -> PARKS -> PARKS -> PARKS -> PARES -> GRASP.
E isto:
ESPADA -> SWARD -> RECOMPENSA -> REDESENHAR -> REDESENHADO -> REDESENHADO -> REDESENHADO -> REDESENHADO -> REDESENHAR -> REEMBOLSADO -> REPARAÇÃO -> PAZ
Agora balbuciamos como criancinhas que acabaram de aprender a contar: "Um, dois, três, quatro, quatro, três, quatro, quatro, sete, azul, dez!" "
Todos os resultados que mostrei até agora estão documentados com o ChatGPT versão 3.5. Eu também tentei a nova e melhorada versão 4.0, que saiu em março. O robô atualizado exala a mesma confiança amável, mas temo que tenha as mesmas tendências, caindo em incoerência casual:
Recentemente também tive a oportunidade de experimentar Llama 2, um LLM publicado pela Meta (pessoas do Facebook). Embora este modelo tenha sido desenvolvido independentemente do GPT, parece ter algumas das mesmas peculiaridades psicológicas, como fazer regras e depois ignorá-las. Quando pedi uma escada ligando REACH e GRASP, Llama 2 sugeriu o seguinte:
ALCANCE -> ENSINAR -> DEACH -> LEACH -> FALA -> ASSENTO -> PÉS -> AGARRAR
Matt Welsh menciona dois modos de operação para sistemas de computação construídos em grandes modelos de linguagem. Até agora, temos trabalhado no que chamo de modo profético, onde você faz uma pergunta e o computador retorna uma resposta. Você fornece um par de palavras, e o sistema encontra uma escada que as conecta e executa todos os cálculos necessários para chegar lá. Você entrega uma caixa de sapatos cheia de registros financeiros, e o computador preenche seu formulário 1040. Você compila dados climáticos históricos, e o computador prevê a temperatura média global em 2050.
A alternativa aos oráculos de IA é o AI Code Monkey. No segundo modo, a máquina não responde diretamente às suas perguntas nem realiza os seus cálculos; Em vez disso, ele cria um programa que pode ser executado em um computador convencional. Em vez de uma escada de palavras do seu bot, você retorna um programa que gera uma escada de palavras, escrita na linguagem de programação de sua escolha. Em vez de preencher uma declaração de impostos completa, você obtém um software de preparação de impostos; Os modelos climáticos substituem as previsões de temperatura.
Vamos experimentá-lo com o ChatGPT 3.5:
Mais uma vez, uma rápida olhada na saída mostra que o desempenho foi bem-sucedido. O ChatGPT parece ser tão fluente em Java quanto em inglês. Ele conhece a sintaxe de se, enquanto e para declarações, bem como todas as regras de pontuação e parênteses exigentes. Os programas gerados por máquina parecem combinar todos esses componentes para realizar uma tarefa específica. Preste também atenção ao grande número de comentários explicativos, que são certamente para nosso benefício, não para ele. Da mesma forma, nomes de variáveis descritivas (currentWord, newWord, ladder).
O ChatGPT também inclui proativamente instruções para executar o programa em um exemplo específico (MARÇO a ABRIL), e imprime o resultado que corresponde à resposta dada em nossa troca anterior. Essa saída é gerada pela execução do programa? ChatGPT não diz isso explicitamente, mas afirma que se você executar o programa como instruído, você obterá os resultados exibidos (em toda a glória ridícula).
Podemos testar esta instrução carregando o programa em um navegador da Web ou outro ambiente de execução Java. A conclusão: apanhado! O programa foi executado, mas não produziu o resultado especificado. O RESULTADO REAL DO PROGRAMA É: MARÇO -> AARCH -> APRCH -> APRIH -> ABRIL. Esta sequência não é tão estranha porque segue a regra de mudar apenas uma letra de cada vez, e todas as "palavras" têm exatamente cinco letras. Por outro lado, nenhuma "palavra" intermediária pode ser encontrada nos dicionários ingleses.
EXISTE UM ALGORITMO SIMPLES QUE GERA SEQUÊNCIAS MARÇO -> AARCH -> APRCH -> APRIH -> ABRIL. Basta percorrer a palavra inicial passo a passo da esquerda para a direita, alterando a letra em cada posição para corresponder à letra correspondente na palavra-alvo. Seguindo esta regra, qualquer par de palavras de cinco letras pode ser organizado em etapas em não mais do que cinco passos. MARÇO-> ABRIL leva apenas quatro passos porque o R no meio não precisa ser alterado. Eu não consigo imaginar uma maneira mais fácil de fazer uma escada de palavras – assumindo, é claro, que você está disposto a fazer qualquer mistura de letras contar como uma palavra.
O programa criado pelo ChatGPT pode usar essa rotina rápida e suja, mas faz algo muito mais tedioso: constrói todas as escadas possíveis, a primeira das quais é a palavra inicial, e continua a expandir essas escadas até tropeçar em uma que contém a palavra-alvo. Este é um algoritmo de força bruta desperdiçado. Cada letra da palavra inicial pode ser alterada de 25 maneiras. Assim, uma palavra de 5 letras tem 125 possíveis sucessores. Quando se chega aos cinco degraus, há 190 milhões de possibilidades. (OS EXEMPLOS QUE FORNECI AQUI, COMO MARÇO -> ABRIL E REACH-> GRAMP, TÊM UMA LETRA INVARIANTE, ENTÃO A SOLUÇÃO LEVA APENAS QUATRO PASSOS.) Tentar calcular a solução completa em cinco passos esgotou minha paciência. )
Vamos tentar o mesmo exercício de codificação com o ChatGPT 4. Dada a mesma dica, o novo bot responde da seguinte forma:
Embora o GPT-4 reconheça a necessidade de uma lista, ele fornece apenas um espaço reservado, a sequência de 10 palavras que configura para o exemplo REACH-> GRASP dado acima. Os esboços desta lista de palavras são de pouca utilidade, nem mesmo para regenerar a falsa escada "REACH-to-GRASP". Se você tentar fazer isso, o programa informará que não existe escada. Não há nada de errado com este resultado, porque uma dada 10 palavras não forma um caminho eficaz para mudar apenas uma letra por passo.
Mesmo que as palavras da lista sejam cuidadosamente escolhidas, o vocabulário de 10 é muito insignificante. Gerar listas de palavras maiores parece ser uma tarefa fácil para modelos de linguagem. Afinal, LLM é treinado em um enorme corpus de textos, onde quase todas as palavras em inglês provavelmente aparecerão pelo menos uma vez, enquanto palavras comuns aparecem milhões de vezes. O robô não pode colher uma amostra representativa dessas palavras? A resposta é claramente não. Embora se possa dizer que o GPT "leu" todo este texto, ele não armazena essas palavras de forma facilmente acessível. (O mesmo vale para leitores humanos.) Você pode fazer uma lista das 10 palavras de cinco letras mais comuns em seu vocabulário olhando para trás em uma vida inteira de experiências de leitura?
Quando pedi ao ChatGPT 4 para gerar uma lista de palavras, ele se opôs apologeticamente: "Sinto muito pela confusão, mas como uma IA desenvolvida pela OpenAI, não posso acessar diretamente o banco de dados de palavras ou obter a capacidade de obter dados de fontes externas..." Então eu tentei alguns truques e pedi ao robô para escrever uma história de 1000 palavras e, em seguida, classificar as palavras da história por frequência. O truque funcionou, mas a amostra era pequena demais para ser de muita utilidade. Contanto que eu fique com ele, eu posso ser capaz de persuadir uma lista aceitável do GPT, mas estou pegando um atalho. Afinal, não sou uma IA desenvolvida pela OpenAI, e tenho acesso a recursos externos. Eu me apropriei de uma lista de 5.757 palavras em inglês de cinco letras compiladas por Knuth para seu experimento de escada de palavras. Com esta lista, os programas escritos em GPT-4 encontrarão o seguinte diagrama de escada de nove passos:
ALCANCE -> PÊSSEGO -> PAZ -> LUGAR -> PLANO -> PLANOS -> GLANS -> VIDRO -> GRAMA -> AGARRAR
Este resultado corresponde exatamente ao resultado do próprio programa de escada de Knuth, que ele publicou há 30 anos na Stanford Graphbase.
Neste ponto, devo admitir que, com um pouco de ajuda externa, o ChatGPT finalmente atendeu ao meu pedido. Ele escreve um programa que pode construir uma escada de palavras válida. Mas ainda tenho reservas. Embora GPT-4 e Knuth escrever programas que produzem a mesma saída, os programas em si não são equivalentes, ou mesmo semelhantes.
Knuth abordou este problema na direção oposta, começando não com uma coleção de todas as cadeias possíveis de cinco letras (que somam menos de 12 milhões), mas com sua lista muito menor de 5.757 palavras comuns em inglês. Ele então constrói um gráfico (ou rede) onde cada palavra é um nó, e os dois nós são conectados por arestas se e somente se as palavras correspondentes diferirem por uma letra. A ilustração a seguir mostra um fragmento desse diagrama.
O programa de escada de palavras de Knuth requer investimento inicial para converter uma lista de palavras simples em um gráfico. Por outro lado, evita gerar milhares ou milhões de cadeias de cinco letras que não podem ser elementos destas últimas. Na resolução do problema REACH-> GRASP, o programa GPT-4 produziu 219.180 cadeias desse tipo; Apenas 2.792 delas (pouco mais de 1%) são palavras reais.
Se os vários procedimentos de escada de palavras que descrevo forem submetidos por alunos, darei uma nota negativa à versão sem uma lista de palavras. O programa GPT-4 com a lista vai passar, mas por uma questão de eficiência e elegância, eu só vou dar ao programa Knuth as notas mais altas.
Por que os chatbots preferem algoritmos inferiores? Você pode simplesmente Google para "word ladder program" para obter pistas. Quase todos os melhores resultados vieram de sites como Leetcode, GeeksForGeeks e RosettaCode. Esses sites são claramente destinados a atender candidatos a emprego e concorrentes em competições de programação, com soluções que exigem a geração de todas as 125 variantes de letra única de cada palavra, assim como os programas GPT. Como existem muitos desses sites – parecem ser centenas – eles são mais importantes do que outras fontes, como o livro de Knuth (se o texto aparecer no conjunto de treinamento). Isso significa que devemos culpar o Leetcode pela escolha errada do algoritmo, não o GPT? Em vez disso, gostaria de salientar as inevitáveis fraquezas do protocolo, as mais comuns das quais são a resposta correta por defeito.
Sempre que penso que grandes modelos de linguagem estão sendo escritos para todos os nossos softwares, outra preocupação relacionada me assombra. De onde vêm os novos algoritmos? O modelo de linguagem da faculdade pode ser criativo na remistura de elementos de projetos existentes, mas não vejo nenhuma maneira de inventar algo completamente novo e melhor.
**
Chega da palavra escada! **
Admito que fui longe demais, torturando o ChatGPT com muitas variantes de um problema particular (e irrelevante). Talvez os modelos de linguagem da faculdade tenham um desempenho melhor em outras tarefas computacionais. Eu tentei vários, com resultados mistos. Eu só quero discutir um deles, e acho os esforços do ChatGPT bastante pungentes.
Com o ChatGPT 3.5, peço o valor do número 100 de Fibonacci. Note que a minha pergunta foi feita no modo Oracle; Estou pedindo esse número, não um programa que o calcule. Ainda assim, o ChatGPT escreve voluntariamente um programa de Fibonacci e, em seguida, renderiza a saída desse programa.
Dar a mesma tarefa ao ChatGPT 4.0 nos levará a uma jornada ainda mais estranha. Na interação seguinte, ativei o Code Interpreter, um plugin do ChatGPT que permite que o sistema teste e execute parte do código que escreve. Aparentemente, o robô aproveitou esse recurso, primeiro criando um programa que falhou por razões desconhecidas:
Neste ponto, o robô irá girar em uma direção completamente nova e decolar, sugerindo que o valor de Fibonacci necessário seja calculado por uma identidade matemática chamada fórmula de Binet. Tinha escrito expressões matemáticas, mas depois mudou de ideias. Ele prevê corretamente o problema da precisão numérica: dado um valor exato da raiz quadrada de 5, a fórmula produzirá um resultado exato, mas isso não é viável.
Então, agora o ChatGPT adotou uma estratégia diferente, usando o mesmo algoritmo iterativo da versão 3.5. Desta vez, obtivemos a resposta certa porque Python (ao contrário do Java) não tem problemas em lidar com números inteiros grandes.
Fiquei impressionado com este desempenho, não só com a resposta correta, mas também com a persistência corajosa do sistema. Apesar dos problemas do ChatGPT, ele perseverou, intrigado por dificuldades inesperadas, mas se recusou a desistir. "Bem, esse método matricial deve funcionar. Mas, de qualquer forma, vamos tentar a fórmula Binet... Oh espere, eu esqueci... De qualquer forma, não há necessidade de ser tão chique sobre isso. Vamos fazê-lo de uma forma óbvia e lenta. Sinto que é uma abordagem muito humana para a resolução de problemas. É estranho ver esse comportamento nas máquinas.
Meu pequeno experimento me fez duvidar da alegação de que oráculos de IA e macacos de código de IA estão prestes a excluir programadores humanos. Eu vi algum sucesso, mas mais um fracasso. Este registo desolador foi compilado em tarefas computacionais relativamente simples, cujas soluções são bem conhecidas e amplamente publicadas.
Outros fizeram uma avaliação mais ampla e profunda da geração de código LLM. Na bibliografia ao final deste artigo, listo cinco desses estudos. Gostaria de resumir brevemente alguns dos resultados que relataram.
Dois anos atrás, Mark Chen e mais de 50 colegas da OpenAI se esforçaram muito para medir a precisão do Codex, um fork do ChatGPT 3 dedicado a escrever código. (Codex tornou-se desde então o motor que alimenta o GitHub Copilot, o "assistente do programador".) ) criou um conjunto de 164 tarefas que podem ser feitas escrevendo programas Python. Essas tarefas são principalmente exercícios de livros didáticos, competições de programação e tipos na literatura (impressionante) sobre como se sair bem em entrevistas de emprego de programação. A maioria das tarefas pode ser concluída com apenas algumas linhas de código. Exemplo: Calcule o número de vogais em uma determinada palavra, determine se um inteiro é primo ou composto.
A equipa do Professor Chen também refletiu sobre os critérios para definir o sucesso e o fracasso. Como o processo LLM é não-determinístico (a seleção de palavras é baseada na probabilidade), o modelo pode gerar um programa defeituoso na primeira tentativa, mas acabará produzindo a resposta correta se a tentativa for permitida para continuar. Um parâmetro chamado temperatura controla o grau de incerteza. A temperatura zero, o modelo escolhe sempre a palavra mais provável em cada passo; À medida que a temperatura aumenta, a aleatoriedade é introduzida, permitindo a escolha de palavras improváveis. Chen et al. Considere a possibilidade desta mudança adotando três parâmetros de sucesso:
pass@1: LLM gera o programa correto na primeira tentativa
pass@10: Pelo menos um dos 10 programas gerados está correto
pass@100: Pelo menos um dos 100 programas gerados está correto
Pass@1 testes são realizados a temperatura zero, pelo que o modelo dá sempre o melhor palpite. pass@10 e pass@100 ensaios são realizados a temperaturas mais elevadas, permitindo ao sistema explorar uma gama mais ampla de potenciais soluções.
Os autores avaliaram várias versões do Codex em todas as 164 tarefas. Para a maior e mais poderosa versão do Codex, a taxa de pass@1 é de cerca de 29%, a taxa de pass@10 é de 47% e a taxa de pass@100 chega a 72%. Devemos ficar impressionados ou chocados quando vemos estes números? Vale a pena comemorar que o Codex está certo na primeira tentativa quase um terço do tempo (quando a temperatura está definida para zero)? Ou se você estivesse disposto a peneirar 100 planos propostos para encontrar o plano certo, a taxa de sucesso subiu para quase três quartos? Minha opinião pessoal é a seguinte: se você olhar para a atual geração de LLM como um esforço pioneiro em um programa de pesquisa de longo prazo, os resultados são encorajadores. Mas se você acha que a tecnologia pode substituir imediatamente o software codificado manualmente, há pouca esperança. Ainda estamos longe do nível de fiabilidade necessário.
Outros estudos produziram resultados amplamente semelhantes. Fredrico Cassano et al. Avaliar o desempenho de múltiplos LLMs gerando código em uma variedade de linguagens de programação; Eles relatam uma ampla gama de taxas de pass@1, mas apenas duas ultrapassam 50%. Alessio Buscemi testou o ChatGPT 3.5 em 40 tarefas de codificação, exigindo programas escritos em 10 idiomas e repetindo cada consulta 10 vezes. De 4.000 testes, 1.833 produziram código que poderia ser compilado e executado. Liu Zhijie et al. Sua avaliação do ChatGPT é baseada em perguntas publicadas no site Leetcode. Julgue os resultados submetendo o código gerado a um processo automatizado de pontuação Leetcode. A taxa média de aceitação de todas as perguntas variou de 31% para programas escritos em C a 50% para programas Python. Liu et al. Outra observação interessante: o ChatGPT teve uma pontuação muito pior em questões publicadas após setembro de 2021 (o prazo para o conjunto de treinamento do GPT). Eles especulam que o robô pode ser mais capaz de resolver problemas anteriores porque já viu uma solução durante o treinamento.
Um artigo recente publicado por Li Zhong e Zilong Wang vai além da questão básica da correção do programa e considera robustez e confiabilidade. O programa gerado responde corretamente a erros de entrada malformados ou externos, como ao tentar abrir um arquivo que não existe? Embora o prompt do LLM incluísse um exemplo mostrando como lidar corretamente com esses problemas, Zhong e Wang descobriram que o código gerado não conseguiu fazê-lo 30 a 50 por cento do tempo.
Para além destes resultados frustrantes, eu próprio tenho mais dúvidas. Quase todos os testes são realizados através de pequenos trechos de código. Um LLM que tem dificuldade em escrever um programa de 10 linhas pode ter maior dificuldade em escrever um programa de 100 linhas ou 1.000 linhas. Além disso, uma simples classificação de aprovação/reprovação é uma medida muito aproximada da qualidade do código. Considere o teste de primalidade no conjunto de benchmark de grupo de Chen. Este é um dos programas escritos em Codex:
Ainda é cedo para grandes modelos linguísticos. O ChatGPT foi lançado há menos de um ano; A tecnologia subjacente tem apenas cerca de seis anos. Embora eu tenha certeza de que estou afirmando que LLM não está pronto para conquistar o mundo da codificação, eu não posso prever com tanta confiança que eles nunca irão. Estes modelos irão definitivamente melhorar e vamos utilizá-los melhor. Já existe uma indústria emergente que oferece orientação de "engenharia just-in-time" como forma de tirar o máximo proveito de cada consulta.
Outra maneira de melhorar o desempenho do LLM pode ser formar um híbrido com outro sistema de computação equipado com ferramentas de lógica e raciocínio em vez de ferramentas de análise de linguagem pura. Na véspera de sua recente morte, Doug Lenat propôs combinar LLM com Cyc, um enorme banco de dados de senso comum que ele passou quatro décadas trabalhando para construir. Stephen Wolfram está trabalhando na integração do ChatGPT no Wolfram|Em Alpha, Wolfram|Alpha é uma coleção on-line de dados e algoritmos com curadoria.
Ainda assim, alguns dos obstáculos que dificultam a geração de cursos de LLM parecem difíceis de superar.
Os modelos de linguagem trabalham sua magia de uma maneira simples: no processo de escrever uma frase ou parágrafo, LLM escolhe a próxima palavra com base na palavra anterior. É como escrever uma mensagem de texto no seu telefone: você digita "Vou te ver..." e o software sugere continuações alternativas: "amanhã", "em breve", "mais tarde". No LLM, é atribuída a cada candidato uma probabilidade, que é calculada com base na análise de todo o texto do conjunto de treinamento modelo.
Há mais de um século, o matemático russo A. A. Markov explorou pela primeira vez a ideia de gerar texto a partir desta análise estatística. Seu processo é agora conhecido como o modelo n-grama, onde n é o número de palavras (ou caracteres ou outros símbolos) a considerar ao escolher o próximo elemento da sequência. Há muito tempo sou fascinado pelo processo de n-gramas, embora principalmente por causa de suas possibilidades cômicas. (Num artigo publicado há 40 anos, chamei-lhe "a arte de transformar a literatura em bobagem".) ")
É claro que o ChatGPT e outros LLMs recentes são mais do que n-metamodelos. Sua rede neural captura características estatísticas linguísticas muito além de uma sequência de n símbolos consecutivos. De particular importância é o mecanismo de atenção, que rastreia dependências entre símbolos selecionados a distâncias arbitrárias. Nas línguas naturais, este meio é útil para manter a consistência do sujeito e do verbo, ou para associar pronomes ao objeto a que se referem. Em linguagens de programação, o mecanismo de atenção garante a integridade de estruturas de sintaxe de várias partes, como se... então... e mantém os parênteses devidamente emparelhados e aninhados.
No entanto, mesmo com essas melhorias, o LLM é essencialmente uma ferramenta para construir um novo texto com base na probabilidade de as palavras aparecerem no texto existente. Na minha maneira de pensar, isso não é pensar. Trata-se de algo mais superficial, centrado nas palavras e não nas ideias. Dado esse mecanismo bruto, fiquei surpreso e intrigado com o quanto o LLM foi capaz de alcançar.
Durante décadas, os arquitetos da IA acreditaram que a verdadeira inteligência, seja ela natural ou artificial, exigia um modelo mental do mundo. Para entender o que está acontecendo ao seu redor (e dentro de você), você precisa ter uma intuição sobre como as coisas funcionam, como elas se encaixam, o que acontece a seguir, causa e efeito. Lynant insiste que o conhecimento mais importante é o conhecimento que você adquire muito antes de começar a ler. Você aprende a gravidade caindo. Quando você descobre que uma torre de bloco de construção é fácil de derrubar, mas difícil de reconstruir, você entende a entropia. Antes que a linguagem comece a criar raízes, você aprenderá sobre dor, medo, fome e amor na infância. O cérebro na caixa não pode acessar essa experiência porque não pode acessar diretamente o universo físico ou social.
Duzentos e cinquenta anos atrás, o relojoeiro suíço Pierre Jacquet-Droz construiu um autômato mecânico que podia escrever com uma colcha. Este dispositivo de relógio tem centenas de câmaras e engrenagens e está vestido como um menino sentado em um banquinho. Após a ativação, o menino mergulhou a caneta em tinta e escreveu uma mensagem curta - mais notavelmente o aforismo cartesiano "Penso, logo existo". Que engraçado! Mas mesmo no século 18, ninguém acreditava que os bonecos de grafite realmente pensavam. Os céticos da LLM colocam o ChatGPT na mesma categoria.
Vou dizer-lhe qual destas teorias de mentalidade LLM contrastantes está correta? Eu não sou. Nenhuma das opções me atraiu. Se Bender e outros estão certos, então devemos encarar o fato de que um gadget sem capacidade de raciocinar ou sentir, sem experiência do universo físico ou interação social, sem autoconsciência, escreve artigos universitários, escreve músicas de rap, dá conselhos a apaixonados. O conhecimento, a lógica, as emoções não valem nada; Língua escorregadia é tudo. Trata-se de uma proposição subversiva. Se o ChatGPT pode nos enganar com esse show inconsciente, talvez também sejamos mentirosos, e suas vozes e raiva não têm sentido.
Por outro lado, se Sutskever estiver certo, então muito da experiência humana que prezamos – o senso de personalidade que evolui lentamente à medida que crescemos e vivemos – pode ser aprendida lendo essas palavras na internet. Se for esse o caso, então eu realmente não tenho que suportar a dor indescritível do ensino médio, eu não tenho que cometer todos os erros estúpidos que causam tanta dor e dificuldade; Não há necessidade de ferir minha autoestima colidindo com o mundo. Eu poderia ter lido tudo isso do conforto da minha poltrona; Apenas palavras podem me levar a um estado de maturidade com uma mente clara sem experimentar todos os tropeços e dores no vale que molda minha alma.
Ainda tenho duas opiniões (ou talvez mais de duas!) sobre o status e o impacto dos grandes modelos de linguagem na ciência da computação. )。 Os entusiastas da IA podem estar certos. Estes modelos podem assumir a programação, bem como muitos outros tipos de trabalho e aprendizagem. Ou podem falhar, como acontece com outras inovações promissoras de IA. Não acho que tenhamos que esperar muito para obter uma resposta.