- 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
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
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
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
Se só houver um caminho possível, você reduz para 4 palavras, por exemplo
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
Experimentar com um corpus desses parece que daria um projeto bem divertido
Tem até vídeo da apresentação
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
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
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
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