2 pontos por GN⁺ 2025-12-15 | 1 comentários | Compartilhar no WhatsApp
  • Inspirado no programa Mark V. Shaney dos anos 1980, foi criado o gerador de texto simples Mark V. Shaney Junior, implementado com cerca de 30 linhas de código Python
  • Esse modelo prevê probabilisticamente a próxima palavra com base em três palavras (trigrama) e usa como dados de treino mais de 200 posts de blog (cerca de 200 mil palavras)
  • As frases geradas saem no formato de frases sem sentido (gibberish), misturando palavras de temas do blog como Lisp, Emacs, matemática e programação
  • Ao aumentar a ordem (order) do modelo, as frases ficam mais consistentes, mas acima de 5 ele passa a citar o texto original literalmente, e a criatividade desaparece
  • Mesmo na era dos grandes modelos de linguagem (LLMs), essa clareza estrutural dos modelos de Markov simples é apresentada como um bom ponto de partida para entender os princípios da geração de linguagem

Visão geral do programa Mark V. Shaney Junior

  • Mark V. Shaney Junior é um gerador de texto que imita o usuário virtual Mark V. Shaney, ativo na Usenet nos anos 1980
    • O original era um programa que gerava posts automaticamente usando um modelo de Markov
    • Esta implementação simplifica a ideia em uma versão minimalista, publicada no GitHub
  • O código completo tem cerca de 30 linhas em Python e prioriza a simplicidade em vez da eficiência
    • É simples o bastante para que até quem está vendo um modelo de Markov pela primeira vez consiga entender em menos de 20 minutos

Programação experimental como hobby

  • O autor gosta de programar não para resolver um problema específico, mas para explorar ideias
    • Já fez vários experimentos com cadeias de Markov com diferentes espaços de estado
    • Ele organiza esse código experimental e o compartilha no GitHub ou no Codeberg
  • Mark V. Shaney Junior também é um desses experimentos, depois refinado e publicado

Geração de texto com dados do blog

  • Depois de testar o modelo treinando-o com A Christmas Carol de Charles Dickens,
    o autor usou como entrada 24 anos de posts do blog (mais de 200 textos, cerca de 200 mil palavras)
    • Os comentários (cerca de 40 mil palavras) foram excluídos
  • As frases geradas saem como sentenças ilógicas misturando comandos de programação, termos matemáticos e comandos de editor
    • Ex.: frases com comandos do Emacs, código Lisp e termos matemáticos combinados aleatoriamente
  • Algumas frases pegam palavras de posts específicos do blog para formar combinações sem sentido
    • Ex.: “Lisp source file” e “self-esteem” são extraídos de posts diferentes e combinados

Propriedade de Markov e estrutura do algoritmo

  • A configuração padrão é baseada em trigrama (3 palavras),
    usando uma estrutura de mapa que armazena as duas palavras anteriores como chave (key) e a terceira como valor (value)
  • Processo de geração de texto
    • Seleciona um par de palavras aleatório → escolhe, com probabilidade uniforme, uma das possíveis próximas palavras
    • Forma um novo par com a palavra recém-selecionada e a palavra anterior, e repete
    • Encerra quando não há mais palavra seguinte ou quando chega ao limite de 100 palavras
  • Quando o mesmo trigrama aparece várias vezes, a palavra seguinte correspondente é armazenada repetidamente na lista,
    permitindo uma escolha probabilística proporcional à frequência de ocorrência
  • Esse processo é uma transição probabilística que depende apenas do estado atual e,
    em forma de equação, é expresso como P(Xₙ₊₁ | Xₙ, Xₙ₋₁, …, X₁) = P(Xₙ₊₁ | Xₙ)
    • Essa característica sem memória (memoryless) é o núcleo da propriedade de Markov

Experimentos adicionais e ajuste da ordem do modelo

  • A ordem (order) padrão é 2 e pode ser alterada por argumento de linha de comando
    • Ao elevar a ordem para 3 ou 4, as frases ficam mais consistentes e naturais
    • Exemplo: geração de frases relativamente lógicas misturando comandos de IRC e conceitos matemáticos
  • Porém, ao elevar a ordem para 5, surge a tendência de copiar o texto original literalmente, fazendo desaparecer o nonsense criativo (gibberish)
  • Também é possível gerar texto a partir de um prompt inicial
    • Ex.: ao inserir uma frase começando com “Finally we”, é gerada uma frase longa misturando palavras como Emacs, MATLAB e GNU bash

O significado de um modelo simples

  • Em 2025, os grandes modelos de linguagem (LLMs) dominam, mas
    modelos de Markov não conseguem capturar estrutura global nem dependências de longo prazo
  • Ainda assim, graças à simplicidade do design e à clareza da implementação,
    eles têm valor como modelo introdutório para aprender os princípios da geração de linguagem
  • O autor descreve este modelo como o “Hello, world” dos modelos de linguagem

1 comentários

 
GN⁺ 2025-12-15
Comentários do Hacker News
  • Um Markov Model é a versão estatística de uma máquina de estados que gera probabilisticamente o próximo token apenas com base no estado atual
    É preciso definir com clareza a relação entre estados e tokens para que a discussão faça sentido
    Por exemplo, se o estado for uma função dos últimos k valores observados, isso é chamado de Markov Chain de ordem k
    Um RNN pode ser visto como uma extensão em que o estado é definido como uma função dos estados anteriores e dos tokens mais recentes
    As probabilidades de transição de estado podem ser determinísticas ou probabilísticas, e o comprimento do contexto também pode ser definido de forma variável
    Mas nem todo Markov Model é aprendível

    • Fiquei curioso sobre o que significa exatamente “aprendível”
  • Lembro que comprei um programa desse tipo por 3 dólares na Egghead Software em 1992
    Coloquei uns textos parecidos com meus diários de 5 anos e dei risada vendo o resultado
    Como exemplo antigo, dá para ver o Babble 1.0.20 e o post de fórum relacionado Software Spotlight: Babble

  • Depois de ler o post, também fui experimentar com modelos de Markov
    Comecei no nível de caractere, mas mesmo mudando para um modelo de ordem 2 não vi muita diferença
    Em ordem 3 (trigram), ficou um pouco mais natural
    Depois, apliquei um modelo de Markov de ordem 1 a um texto tokenizado com BPE (Byte Pair Encoding), e o resultado ficou um pouco mais consistente
    Mas quando subi para ordem 2, ele passou a copiar o texto original — porque o BPE removeu tokens repetidos e a transição se tornou determinística
    Quando limitei o número de tokens (por exemplo, 894 → 800), ele voltou a ficar não determinístico, e o texto pareceu um pouco mais natural
    Se a ordem fica alta demais (por exemplo, ordem 5), o texto passa uma sensação seca, só listando fatos
    No fim, Markov Models são simples, mas bem divertidos de experimentar

    • Também tentei algo parecido, e o resultado foi metade bobagem engraçada, metade cópia e cola do original
      Remover cadeias que só têm um token seguinte talvez ajude, mas há o risco de apagar também a estrutura gramatical
      Estou procurando um jeito melhor de evitar cadeias longas e únicas
    • Para evitar resultados “secos”, o truque é ajustar com flexibilidade o limite de 5 palavras
      Se só houver um caminho possível, você reduz para 4 palavras, por exemplo
    • Ver resultados assim dá uma sensação estranha, como se algo estivesse tentando se comunicar
      Ou talvez sejamos nós sozinhos, com a mente tentando encontrar ordem no caos
  • Eu também fiz um experimento parecido no passado
    Coloquei num modelo de Markov cerca de 500 mil palavras de textos de fantasia e ficção científica escritos ao longo de 20 anos, ajustando com um controle deslizante de 2 a 5 gramas
    Era uma ferramenta parecida com um “poço dos sonhos” que eu abria sempre que precisava de inspiração
    Parecia uma continuação do hábito que eu tinha quando criança de abrir uma página aleatória do dicionário para buscar ideias para escrever

    • Fiquei curioso se você já participou do NaNoGenMo
      Experimentar com um corpus desses parece que daria um projeto bem divertido
    • Em 2015, eu também treinei um modelo de Markov com 20 mil dos meus tweets e fiz um bot de Twitter
      Tem até vídeo da apresentação
    • Eu também tenho 30 anos de rascunhos inacabados de romances, e parece que seria interessante rodar isso desse jeito
    • Lembro que o Terry Davis também fez uma tentativa parecida
    • Fico pensando como daria para fazer isso com um LLM
      Será que eu poderia treinar um modelo só meu com tudo o que escrevi?
      Quais modelos e ferramentas eu deveria usar, e se daria para ele escrever no meu estilo mesmo sem system prompt
      Mais adiante, também queria saber se ele conseguiria responder naturalmente a chamadas telefônicas ou mensagens no Discord
  • Existe uma fanfic de Harry Potter feita com Markov Chain
    O título é Harry Potter and the Portrait of What Looked Like a Large Pile of Ash
    Dá para ler no link da botnik.org

    • Não sei por que alguém iria querer ler isso
      Só de ver a primeira frase, já me pareceu um texto vazio
      Acho que tem menos emoção e significado do que o pior livro já escrito por um humano
  • Tentativas como “I Fed 24 Years of My Blog Posts to a Markov Model” são algo que vários LLMs já vêm repetindo há algum tempo

  • Um autor como Barbara Cartwright, que escreveu mais de 700 romances parecidos, parece alguém que poderia ser recriado com um modelo de Markov

    • Mas não sei se na prática daria para distinguir
      Minha esposa às vezes compra e lê de novo romances que ela já tinha lido
  • Lembro de ver bots de Markov chain no IRC em meados dos anos 2000
    Até o GPT aparecer, não havia nada melhor do que aquilo

    • Acho que você deve estar falando do MegaHAL ou, um pouco depois, do Cobe
    • Eu também fiz um por conta própria com bitlbee nos anos 2000, eram tempos realmente divertidos
  • Na verdade, isso está mais próximo de um modelo trigram do que propriamente de um modelo de Markov
    Se for expandido para 4-gramas ou mais, as frases provavelmente vão soar muito mais naturais
    Houve um estudo antigo sobre um modelo n-grama gigantesco chamado “infini-gram”, e ouvi dizer que em alguns domínios ele mostrou desempenho próximo ao de LLMs

  • Acho bacana você compartilhar 24 anos de experiências e pensamentos
    Numa época como a de hoje, cheia só de consumo e estímulo, esse tipo de compartilhamento sincero é algo especial