"Um Markov meio burrinho, mas inteligente?."
Este projeto nasceu como uma brincadeira para gerar textos em uma comunidade digital da qual participo — mas acabou crescendo, ganhando corpo, e agora virou também um experimento acadêmico (e talvez até um TCC 🧪). A ideia aqui é simples: combinar a simplicidade das cadeias de Markov com a inteligência dos embeddings para gerar frases com um toque mais natural e coerente.
🚧 Este projeto está em desenvolvimento.
- Este projeto foi criado ao longo de cinco dias, com o intuito de desenvolver um modelo de geração textual baseado em Markov para uma comunidade digital da qual faço parte — puramente por diversão.
- O código definitivamente não está otimizado, pode conter erros conceituais gravíssimos ou bugs silenciosos que eu não percebi ainda.
- Provavelmente contém escolhas questionáveis, fruto da minha inexperiência com IA / ML / NLP.
- Use por sua conta e risco — e se encontrar algo quebrado, abre uma issue ou só manda um salve.
Esse modelo tenta gerar frases de forma mais "inteligente" do que uma Markov tradicional: ele combina a estatística da cadeia de transições com similaridade semântica baseada em embeddings (word2vec).
A geração acontece palavra por palavra, priorizando tokens que:
- Têm alta probabilidade na cadeia de Markov, e
- Estão semanticamente próximos do vetor acumulado da frase até o momento.
Em outras palavras: ele escolhe palavras que fazem sentido estatisticamente, mas também soam certas de acordo com o contexto construído.
- Cadeia de Markov com controle de n-gramas
- Vetorização de tokens via
pgvector+ modelo de embeddings - Algoritmo de geração híbrido: frequência + semântica
- Visualização passo a passo (debug log estilo
test.py) - Banco de dados via SQLAlchemy + Alembic
- Estrutura pronta pra extensões e benchmarks
# Clone o repositório
git clone https://github.com/BruRdgz/llm.git
cd llm
# Instale as dependências
pdm installVocê pode usar Docker ou configurar localmente.
Usando Docker:
docker-compose up -dBanco local (PostgreSQL + pgvector):
Crie um banco com a extensão pgvector e atualize o .env (ou hardcode se preferir).
Depois:
alembic upgrade headPara treinar com seu próprio dataset:
python train.pyPara gerar uma frase:
python test.pyA geração vai printar o processo passo a passo, mostrando scores e decisões do modelo. Útil pra entender como ele pensa.
.
├── model/ # Lógica principal do modelo
│ ├── tokenization.py
│ ├── vectorization.py
│ ├── interface/ # Geração e inserção
│ └── database/ # ORM e sessão
├── train.py # Script para treinar o modelo
├── test.py # Script para gerar texto (com debug)
├── alembic/ # Migrações de banco
├── docker-compose.yml # Banco local via Docker
├── Makefile
├── pyproject.toml # Config do projeto (via PDM)
└── README.md
- Protótipo funcional
- Geração com logs interpretáveis
- Banco estruturado com ORM
- Interface web / API (futuramente?)
- Testes unitários formais
- Benchmarking com datasets maiores
Porque eu queria ver até onde dava pra ir com um modelo simples, interpretável, e que ainda assim gerasse linguagem natural com um toque de "sentido".
E porque é divertido ver um Markov começar a fazer frases tipo:
"10 centímetros de espessura fabricado e polido nos Estados Unidos o percentual de investimentos em inovação variam segundo o porte da empresa e setor de atividade"
Sim. Isso saiu do modelo. Do jeitinho que tá. 😄